source: node_modules/node-abort-controller/index.js@ d24f17c

main
Last change on this file since d24f17c was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 1.6 KB
RevLine 
[d24f17c]1const { EventEmitter } = require("events");
2
3class AbortSignal {
4 constructor() {
5 this.eventEmitter = new EventEmitter();
6 this.onabort = null;
7 this.aborted = false;
8 this.reason = undefined;
9 }
10 toString() {
11 return "[object AbortSignal]";
12 }
13 get [Symbol.toStringTag]() {
14 return "AbortSignal";
15 }
16 removeEventListener(name, handler) {
17 this.eventEmitter.removeListener(name, handler);
18 }
19 addEventListener(name, handler) {
20 this.eventEmitter.on(name, handler);
21 }
22 dispatchEvent(type) {
23 const event = { type, target: this };
24 const handlerName = `on${type}`;
25
26 if (typeof this[handlerName] === "function") this[handlerName](event);
27
28 this.eventEmitter.emit(type, event);
29 }
30 throwIfAborted() {
31 if (this.aborted) {
32 throw this.reason;
33 }
34 }
35 static abort(reason) {
36 const controller = new AbortController();
37 controller.abort();
38 return controller.signal;
39 }
40 static timeout(time) {
41 const controller = new AbortController();
42 setTimeout(() => controller.abort(new Error("TimeoutError")), time);
43 return controller.signal;
44 }
45}
46class AbortController {
47 constructor() {
48 this.signal = new AbortSignal();
49 }
50 abort(reason) {
51 if (this.signal.aborted) return;
52
53 this.signal.aborted = true;
54
55 if (reason) this.signal.reason = reason;
56 else this.signal.reason = new Error("AbortError");
57
58 this.signal.dispatchEvent("abort");
59 }
60 toString() {
61 return "[object AbortController]";
62 }
63 get [Symbol.toStringTag]() {
64 return "AbortController";
65 }
66}
67
68module.exports = { AbortController, AbortSignal };
Note: See TracBrowser for help on using the repository browser.