@vrowser/node-polyfill 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +121 -0
- package/dist/crypto.d.ts +48 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +232 -0
- package/dist/crypto.js.map +1 -0
- package/dist/dns.d.ts +74 -0
- package/dist/dns.d.ts.map +1 -0
- package/dist/dns.js +172 -0
- package/dist/dns.js.map +1 -0
- package/dist/dns_promises.d.ts +2 -0
- package/dist/dns_promises.js +3 -0
- package/dist/events.d.ts +99 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +480 -0
- package/dist/events.js.map +1 -0
- package/dist/module.d.ts +40 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +72 -0
- package/dist/module.js.map +1 -0
- package/dist/net.d.ts +38 -0
- package/dist/net.d.ts.map +1 -0
- package/dist/net.js +53 -0
- package/dist/net.js.map +1 -0
- package/dist/os.d.ts +96 -0
- package/dist/os.d.ts.map +1 -0
- package/dist/os.js +140 -0
- package/dist/os.js.map +1 -0
- package/dist/perf_hooks.d.ts +124 -0
- package/dist/perf_hooks.d.ts.map +1 -0
- package/dist/perf_hooks.js +105 -0
- package/dist/perf_hooks.js.map +1 -0
- package/dist/process.d.ts +147 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +209 -0
- package/dist/process.js.map +1 -0
- package/dist/readline.d.ts +93 -0
- package/dist/readline.d.ts.map +1 -0
- package/dist/readline.js +268 -0
- package/dist/readline.js.map +1 -0
- package/dist/timers.d.ts +36 -0
- package/dist/timers.d.ts.map +1 -0
- package/dist/timers.js +54 -0
- package/dist/timers.js.map +1 -0
- package/dist/timers_promises.d.ts +22 -0
- package/dist/timers_promises.d.ts.map +1 -0
- package/dist/timers_promises.js +102 -0
- package/dist/timers_promises.js.map +1 -0
- package/dist/tty.d.ts +48 -0
- package/dist/tty.d.ts.map +1 -0
- package/dist/tty.js +67 -0
- package/dist/tty.js.map +1 -0
- package/dist/url.d.ts +39 -0
- package/dist/url.d.ts.map +1 -0
- package/dist/url.js +41 -0
- package/dist/url.js.map +1 -0
- package/dist/util.d.ts +66 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +117 -0
- package/dist/util.js.map +1 -0
- package/package.json +125 -0
package/dist/events.js
ADDED
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
//#region src/events.ts
|
|
2
|
+
/**
|
|
3
|
+
* `node:events` compatible entry point
|
|
4
|
+
*
|
|
5
|
+
* Based on npm `events@3.3.0` polyfill with class, enhanced with Node.js v23+ features:
|
|
6
|
+
* - captureRejections / errorMonitor
|
|
7
|
+
* - listenerCount with listener argument
|
|
8
|
+
* - static setMaxListeners for multiple targets
|
|
9
|
+
* - module functions: once (with AbortSignal), on (async iterator),
|
|
10
|
+
* getEventListeners, getMaxListeners, addAbortListener
|
|
11
|
+
*
|
|
12
|
+
* @module events
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Froked from:
|
|
16
|
+
* - events@3.3.0 (https://github.com/browserify/events)
|
|
17
|
+
* - node:events (https://github.com/nodejs/node/tree/main/lib/events.js)
|
|
18
|
+
* @author kazuya kawaguchi (a.k.a. kazupon)
|
|
19
|
+
* @license MIT
|
|
20
|
+
*/
|
|
21
|
+
const kCapture = Symbol("kCapture");
|
|
22
|
+
const kErrorMonitor = Symbol("events.errorMonitor");
|
|
23
|
+
const kRejection = Symbol.for("nodejs.rejection");
|
|
24
|
+
function checkListener(listener) {
|
|
25
|
+
if (typeof listener !== "function") throw new TypeError(`The "listener" argument must be of type Function. Received type ${typeof listener}`);
|
|
26
|
+
}
|
|
27
|
+
function emitWarning(warning) {
|
|
28
|
+
if (typeof console !== "undefined" && console.warn) console.warn(warning);
|
|
29
|
+
}
|
|
30
|
+
function onceWrapper(...args) {
|
|
31
|
+
if (!this.fired) {
|
|
32
|
+
this.target.removeListener(this.type, this.wrapFn);
|
|
33
|
+
this.fired = true;
|
|
34
|
+
if (args.length === 0) return this.listener.call(this.target);
|
|
35
|
+
return this.listener.apply(this.target, args);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function onceWrap(target, type, listener) {
|
|
39
|
+
const state = {
|
|
40
|
+
fired: false,
|
|
41
|
+
wrapFn: void 0,
|
|
42
|
+
target,
|
|
43
|
+
type,
|
|
44
|
+
listener
|
|
45
|
+
};
|
|
46
|
+
const wrapped = onceWrapper.bind(state);
|
|
47
|
+
wrapped.listener = listener;
|
|
48
|
+
state.wrapFn = wrapped;
|
|
49
|
+
return wrapped;
|
|
50
|
+
}
|
|
51
|
+
function arrayClone(arr) {
|
|
52
|
+
return arr.slice();
|
|
53
|
+
}
|
|
54
|
+
function spliceOne(list, index) {
|
|
55
|
+
for (; index + 1 < list.length; index++) list[index] = list[index + 1];
|
|
56
|
+
list.pop();
|
|
57
|
+
}
|
|
58
|
+
function addCatch(that, promise, type, args) {
|
|
59
|
+
if (!that[kCapture]) return;
|
|
60
|
+
try {
|
|
61
|
+
const then = promise.then;
|
|
62
|
+
if (typeof then === "function") then.call(promise, void 0, (err) => {
|
|
63
|
+
queueMicrotask(() => emitUnhandledRejectionOrErr(that, err, type, args));
|
|
64
|
+
});
|
|
65
|
+
} catch (err) {
|
|
66
|
+
that.emit("error", err);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function emitUnhandledRejectionOrErr(ee, err, type, args) {
|
|
70
|
+
const eeRecord = ee;
|
|
71
|
+
const rejectionHandler = eeRecord[kRejection];
|
|
72
|
+
if (typeof rejectionHandler === "function") rejectionHandler.call(ee, err, type, ...args);
|
|
73
|
+
else {
|
|
74
|
+
const prev = eeRecord[kCapture] ?? false;
|
|
75
|
+
eeRecord[kCapture] = false;
|
|
76
|
+
try {
|
|
77
|
+
ee.emit("error", err);
|
|
78
|
+
} finally {
|
|
79
|
+
eeRecord[kCapture] = prev;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
let defaultMaxListeners = 10;
|
|
84
|
+
var EventEmitter = class EventEmitter {
|
|
85
|
+
static EventEmitter = EventEmitter;
|
|
86
|
+
static captureRejectionSymbol = kRejection;
|
|
87
|
+
static errorMonitor = kErrorMonitor;
|
|
88
|
+
static once = once;
|
|
89
|
+
static on = on;
|
|
90
|
+
static getEventListeners = getEventListeners;
|
|
91
|
+
static getMaxListeners = getMaxListeners;
|
|
92
|
+
static addAbortListener = addAbortListener;
|
|
93
|
+
static get defaultMaxListeners() {
|
|
94
|
+
return defaultMaxListeners;
|
|
95
|
+
}
|
|
96
|
+
static set defaultMaxListeners(arg) {
|
|
97
|
+
if (typeof arg !== "number" || arg < 0 || Number.isNaN(arg)) throw new RangeError(`The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ${arg}.`);
|
|
98
|
+
defaultMaxListeners = arg;
|
|
99
|
+
}
|
|
100
|
+
static get captureRejections() {
|
|
101
|
+
return EventEmitter.prototype[kCapture];
|
|
102
|
+
}
|
|
103
|
+
static set captureRejections(value) {
|
|
104
|
+
if (typeof value !== "boolean") throw new TypeError(`The "EventEmitter.captureRejections" property must be of type boolean. Received type ${typeof value}`);
|
|
105
|
+
EventEmitter.prototype[kCapture] = value;
|
|
106
|
+
}
|
|
107
|
+
static listenerCount(emitter, type) {
|
|
108
|
+
if (typeof emitter.listenerCount === "function") return emitter.listenerCount(type);
|
|
109
|
+
return EventEmitter.prototype.listenerCount.call(emitter, type);
|
|
110
|
+
}
|
|
111
|
+
static setMaxListeners(n = defaultMaxListeners, ...eventTargets) {
|
|
112
|
+
if (typeof n !== "number" || n < 0 || Number.isNaN(n)) throw new RangeError(`The value of "n" is out of range. It must be a non-negative number. Received ${n}.`);
|
|
113
|
+
if (eventTargets.length === 0) defaultMaxListeners = n;
|
|
114
|
+
else for (const target of eventTargets) if (typeof target.setMaxListeners === "function") target.setMaxListeners(n);
|
|
115
|
+
else if (target != null && typeof target.addEventListener === "function") {} else throw new TypeError(`The "eventTargets" argument must be an instance of EventEmitter or EventTarget. Received ${typeof target}`);
|
|
116
|
+
}
|
|
117
|
+
constructor(opts) {
|
|
118
|
+
EventEmitter.init.call(this, opts);
|
|
119
|
+
}
|
|
120
|
+
static init(opts) {
|
|
121
|
+
if (this._events === void 0 || this._events === Object.getPrototypeOf(this)?._events) {
|
|
122
|
+
this._events = Object.create(null);
|
|
123
|
+
this._eventsCount = 0;
|
|
124
|
+
}
|
|
125
|
+
this._maxListeners ??= void 0;
|
|
126
|
+
const selfRecord = this;
|
|
127
|
+
if (opts?.captureRejections) selfRecord[kCapture] = Boolean(opts.captureRejections);
|
|
128
|
+
else selfRecord[kCapture] = EventEmitter.prototype[kCapture] ?? false;
|
|
129
|
+
}
|
|
130
|
+
setMaxListeners(n) {
|
|
131
|
+
if (typeof n !== "number" || n < 0 || Number.isNaN(n)) throw new RangeError(`The value of "n" is out of range. It must be a non-negative number. Received ${n}.`);
|
|
132
|
+
this._maxListeners = n;
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
getMaxListeners() {
|
|
136
|
+
return this._maxListeners === void 0 ? EventEmitter.defaultMaxListeners : this._maxListeners;
|
|
137
|
+
}
|
|
138
|
+
emit(type, ...args) {
|
|
139
|
+
let doError = type === "error";
|
|
140
|
+
const events = this._events;
|
|
141
|
+
if (events !== void 0) {
|
|
142
|
+
if (doError && events[kErrorMonitor] !== void 0) this.emit(kErrorMonitor, ...args);
|
|
143
|
+
doError = doError && events.error === void 0;
|
|
144
|
+
} else if (!doError) return false;
|
|
145
|
+
if (doError) {
|
|
146
|
+
const er = args.length > 0 ? args[0] : void 0;
|
|
147
|
+
if (er instanceof Error) throw er;
|
|
148
|
+
const err = /* @__PURE__ */ new Error("Unhandled error." + (er ? ` (${er.message})` : ""));
|
|
149
|
+
err.context = er;
|
|
150
|
+
throw err;
|
|
151
|
+
}
|
|
152
|
+
const handler = events[type];
|
|
153
|
+
if (handler === void 0) return false;
|
|
154
|
+
if (typeof handler === "function") {
|
|
155
|
+
const result = Reflect.apply(handler, this, args);
|
|
156
|
+
if (result !== void 0 && result !== null) addCatch(this, result, type, args);
|
|
157
|
+
} else {
|
|
158
|
+
const listeners = arrayClone(handler);
|
|
159
|
+
for (const listener of listeners) {
|
|
160
|
+
const result = Reflect.apply(listener, this, args);
|
|
161
|
+
if (result !== void 0 && result !== null) addCatch(this, result, type, args);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
addListener(type, listener) {
|
|
167
|
+
return this.#addListener(type, listener, false);
|
|
168
|
+
}
|
|
169
|
+
on(type, listener) {
|
|
170
|
+
return this.addListener(type, listener);
|
|
171
|
+
}
|
|
172
|
+
prependListener(type, listener) {
|
|
173
|
+
return this.#addListener(type, listener, true);
|
|
174
|
+
}
|
|
175
|
+
once(type, listener) {
|
|
176
|
+
checkListener(listener);
|
|
177
|
+
this.on(type, onceWrap(this, type, listener));
|
|
178
|
+
return this;
|
|
179
|
+
}
|
|
180
|
+
prependOnceListener(type, listener) {
|
|
181
|
+
checkListener(listener);
|
|
182
|
+
this.prependListener(type, onceWrap(this, type, listener));
|
|
183
|
+
return this;
|
|
184
|
+
}
|
|
185
|
+
removeListener(type, listener) {
|
|
186
|
+
checkListener(listener);
|
|
187
|
+
const events = this._events;
|
|
188
|
+
if (events === void 0) return this;
|
|
189
|
+
const list = events[type];
|
|
190
|
+
if (list === void 0) return this;
|
|
191
|
+
if (list === listener || list.listener === listener) if (--this._eventsCount === 0) this._events = Object.create(null);
|
|
192
|
+
else {
|
|
193
|
+
delete events[type];
|
|
194
|
+
if (events.removeListener) this.emit("removeListener", type, list.listener || listener);
|
|
195
|
+
}
|
|
196
|
+
else if (typeof list !== "function") {
|
|
197
|
+
const arr = list;
|
|
198
|
+
let position = -1;
|
|
199
|
+
let originalListener;
|
|
200
|
+
for (let i = arr.length - 1; i >= 0; i--) {
|
|
201
|
+
const item = arr[i];
|
|
202
|
+
if (item === listener || item.listener === listener) {
|
|
203
|
+
originalListener = item.listener;
|
|
204
|
+
position = i;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (position < 0) return this;
|
|
209
|
+
if (position === 0) arr.shift();
|
|
210
|
+
else spliceOne(arr, position);
|
|
211
|
+
if (arr.length === 1) events[type] = arr[0];
|
|
212
|
+
if (events.removeListener !== void 0) this.emit("removeListener", type, originalListener || listener);
|
|
213
|
+
}
|
|
214
|
+
return this;
|
|
215
|
+
}
|
|
216
|
+
off(type, listener) {
|
|
217
|
+
return this.removeListener(type, listener);
|
|
218
|
+
}
|
|
219
|
+
removeAllListeners(type) {
|
|
220
|
+
const events = this._events;
|
|
221
|
+
if (events === void 0) return this;
|
|
222
|
+
if (events.removeListener === void 0) {
|
|
223
|
+
if (type === void 0) {
|
|
224
|
+
this._events = Object.create(null);
|
|
225
|
+
this._eventsCount = 0;
|
|
226
|
+
} else if (events[type] !== void 0) if (--this._eventsCount === 0) this._events = Object.create(null);
|
|
227
|
+
else delete events[type];
|
|
228
|
+
return this;
|
|
229
|
+
}
|
|
230
|
+
if (type === void 0) {
|
|
231
|
+
const keys = Reflect.ownKeys(events);
|
|
232
|
+
for (const key of keys) {
|
|
233
|
+
if (key === "removeListener") continue;
|
|
234
|
+
this.removeAllListeners(key);
|
|
235
|
+
}
|
|
236
|
+
this.removeAllListeners("removeListener");
|
|
237
|
+
this._events = Object.create(null);
|
|
238
|
+
this._eventsCount = 0;
|
|
239
|
+
return this;
|
|
240
|
+
}
|
|
241
|
+
const listeners = events[type];
|
|
242
|
+
if (typeof listeners === "function") this.removeListener(type, listeners);
|
|
243
|
+
else if (listeners !== void 0) {
|
|
244
|
+
const arr = listeners;
|
|
245
|
+
for (let i = arr.length - 1; i >= 0; i--) this.removeListener(type, arr[i]);
|
|
246
|
+
}
|
|
247
|
+
return this;
|
|
248
|
+
}
|
|
249
|
+
listeners(type) {
|
|
250
|
+
return this.#listeners(type, true);
|
|
251
|
+
}
|
|
252
|
+
rawListeners(type) {
|
|
253
|
+
return this.#listeners(type, false);
|
|
254
|
+
}
|
|
255
|
+
listenerCount(type, listener) {
|
|
256
|
+
const events = this._events;
|
|
257
|
+
if (events !== void 0) {
|
|
258
|
+
const evlistener = events[type];
|
|
259
|
+
if (typeof evlistener === "function") {
|
|
260
|
+
if (listener != null) return evlistener === listener || evlistener.listener === listener ? 1 : 0;
|
|
261
|
+
return 1;
|
|
262
|
+
} else if (evlistener !== void 0) {
|
|
263
|
+
if (listener != null) {
|
|
264
|
+
let matching = 0;
|
|
265
|
+
const arr = evlistener;
|
|
266
|
+
for (const l of arr) if (l === listener || l.listener === listener) matching++;
|
|
267
|
+
return matching;
|
|
268
|
+
}
|
|
269
|
+
return evlistener.length;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return 0;
|
|
273
|
+
}
|
|
274
|
+
eventNames() {
|
|
275
|
+
return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
|
|
276
|
+
}
|
|
277
|
+
#addListener(type, listener, prepend) {
|
|
278
|
+
checkListener(listener);
|
|
279
|
+
let events = this._events;
|
|
280
|
+
if (events === void 0) {
|
|
281
|
+
events = this._events = Object.create(null);
|
|
282
|
+
this._eventsCount = 0;
|
|
283
|
+
} else if (events.newListener !== void 0) {
|
|
284
|
+
this.emit("newListener", type, listener.listener || listener);
|
|
285
|
+
events = this._events;
|
|
286
|
+
}
|
|
287
|
+
const existing = events[type];
|
|
288
|
+
if (existing === void 0) {
|
|
289
|
+
events[type] = listener;
|
|
290
|
+
++this._eventsCount;
|
|
291
|
+
} else {
|
|
292
|
+
if (typeof existing === "function") events[type] = prepend ? [listener, existing] : [existing, listener];
|
|
293
|
+
else if (prepend) existing.unshift(listener);
|
|
294
|
+
else existing.push(listener);
|
|
295
|
+
const m = this.getMaxListeners();
|
|
296
|
+
const arr = events[type];
|
|
297
|
+
if (m > 0 && Array.isArray(arr) && arr.length > m && !arr.warned) {
|
|
298
|
+
arr.warned = true;
|
|
299
|
+
const w = /* @__PURE__ */ new Error(`Possible EventEmitter memory leak detected. ${arr.length} ${String(type)} listeners added. Use emitter.setMaxListeners() to increase limit`);
|
|
300
|
+
w.name = "MaxListenersExceededWarning";
|
|
301
|
+
w.emitter = this;
|
|
302
|
+
w.type = type;
|
|
303
|
+
w.count = arr.length;
|
|
304
|
+
emitWarning(w);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return this;
|
|
308
|
+
}
|
|
309
|
+
#listeners(type, unwrap) {
|
|
310
|
+
const events = this._events;
|
|
311
|
+
if (events === void 0) return [];
|
|
312
|
+
const evlistener = events[type];
|
|
313
|
+
if (evlistener === void 0) return [];
|
|
314
|
+
if (typeof evlistener === "function") return unwrap ? [evlistener.listener || evlistener] : [evlistener];
|
|
315
|
+
const arr = evlistener;
|
|
316
|
+
if (unwrap) return arr.map((l) => l.listener || l);
|
|
317
|
+
return arrayClone(arr);
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
EventEmitter.prototype[kCapture] = false;
|
|
321
|
+
/**
|
|
322
|
+
* EventTarget-agnostic add listener utility
|
|
323
|
+
*/
|
|
324
|
+
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
|
325
|
+
if (typeof emitter.on === "function") if (flags?.once) emitter.once(name, listener);
|
|
326
|
+
else emitter.on(name, listener);
|
|
327
|
+
else if (typeof emitter.addEventListener === "function") emitter.addEventListener(name, listener, { once: flags?.once ?? false });
|
|
328
|
+
else throw new TypeError(`The "emitter" argument must be of type EventEmitter or EventTarget. Received type ${typeof emitter}`);
|
|
329
|
+
}
|
|
330
|
+
function eventTargetAgnosticRemoveListener(emitter, name, listener) {
|
|
331
|
+
if (typeof emitter.removeListener === "function") emitter.removeListener(name, listener);
|
|
332
|
+
else if (typeof emitter.removeEventListener === "function") emitter.removeEventListener(name, listener);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Returns a Promise that resolves when the emitter emits the given event,
|
|
336
|
+
* or rejects if the emitter emits 'error'.
|
|
337
|
+
* Supports AbortSignal for cancellation.
|
|
338
|
+
*/
|
|
339
|
+
async function once(emitter, name, options) {
|
|
340
|
+
const signal = options?.signal;
|
|
341
|
+
if (signal?.aborted) throw new DOMException("The operation was aborted", "AbortError");
|
|
342
|
+
return new Promise((resolve, reject) => {
|
|
343
|
+
const errorListener = (err) => {
|
|
344
|
+
emitter.removeListener(name, resolver);
|
|
345
|
+
if (signal != null) eventTargetAgnosticRemoveListener(signal, "abort", abortListener);
|
|
346
|
+
reject(err);
|
|
347
|
+
};
|
|
348
|
+
const resolver = (...args) => {
|
|
349
|
+
if (typeof emitter.removeListener === "function") emitter.removeListener("error", errorListener);
|
|
350
|
+
if (signal != null) eventTargetAgnosticRemoveListener(signal, "abort", abortListener);
|
|
351
|
+
resolve(args);
|
|
352
|
+
};
|
|
353
|
+
eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
|
|
354
|
+
if (name !== "error" && typeof emitter.once === "function") emitter.once("error", errorListener);
|
|
355
|
+
function abortListener() {
|
|
356
|
+
eventTargetAgnosticRemoveListener(emitter, name, resolver);
|
|
357
|
+
eventTargetAgnosticRemoveListener(emitter, "error", errorListener);
|
|
358
|
+
reject(new DOMException("The operation was aborted", "AbortError"));
|
|
359
|
+
}
|
|
360
|
+
if (signal != null) eventTargetAgnosticAddListener(signal, "abort", abortListener, { once: true });
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
function createIterResult(value, done) {
|
|
364
|
+
return {
|
|
365
|
+
value,
|
|
366
|
+
done
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Returns an AsyncIterableIterator that yields events from the emitter.
|
|
371
|
+
* Supports AbortSignal for cancellation.
|
|
372
|
+
*/
|
|
373
|
+
function on(emitter, event, options) {
|
|
374
|
+
const signal = options?.signal;
|
|
375
|
+
if (signal?.aborted) throw new DOMException("The operation was aborted", "AbortError");
|
|
376
|
+
const unconsumedEvents = [];
|
|
377
|
+
const unconsumedPromises = [];
|
|
378
|
+
let error = null;
|
|
379
|
+
let finished = false;
|
|
380
|
+
const iterator = {
|
|
381
|
+
next() {
|
|
382
|
+
if (unconsumedEvents.length > 0) return Promise.resolve(createIterResult(unconsumedEvents.shift(), false));
|
|
383
|
+
if (error) {
|
|
384
|
+
const p = Promise.reject(error);
|
|
385
|
+
error = null;
|
|
386
|
+
return p;
|
|
387
|
+
}
|
|
388
|
+
if (finished) return closeHandler();
|
|
389
|
+
return new Promise((resolve, reject) => {
|
|
390
|
+
unconsumedPromises.push({
|
|
391
|
+
resolve,
|
|
392
|
+
reject
|
|
393
|
+
});
|
|
394
|
+
});
|
|
395
|
+
},
|
|
396
|
+
return() {
|
|
397
|
+
return closeHandler();
|
|
398
|
+
},
|
|
399
|
+
throw(err) {
|
|
400
|
+
errorHandler(err);
|
|
401
|
+
return Promise.resolve(createIterResult(void 0, true));
|
|
402
|
+
},
|
|
403
|
+
[Symbol.asyncIterator]() {
|
|
404
|
+
return this;
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
const listeners = [];
|
|
408
|
+
function addEventListener(target, evt, handler) {
|
|
409
|
+
eventTargetAgnosticAddListener(target, evt, handler);
|
|
410
|
+
listeners.push([
|
|
411
|
+
target,
|
|
412
|
+
evt,
|
|
413
|
+
handler
|
|
414
|
+
]);
|
|
415
|
+
}
|
|
416
|
+
function removeAll() {
|
|
417
|
+
while (listeners.length > 0) {
|
|
418
|
+
const [target, evt, handler] = listeners.pop();
|
|
419
|
+
eventTargetAgnosticRemoveListener(target, evt, handler);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
addEventListener(emitter, event, (...args) => {
|
|
423
|
+
eventHandler(args);
|
|
424
|
+
});
|
|
425
|
+
if (event !== "error" && typeof emitter.on === "function") addEventListener(emitter, "error", errorHandler);
|
|
426
|
+
let abortDisposable = null;
|
|
427
|
+
if (signal) abortDisposable = addAbortListener(signal, () => {
|
|
428
|
+
errorHandler(new DOMException("The operation was aborted", "AbortError"));
|
|
429
|
+
});
|
|
430
|
+
return iterator;
|
|
431
|
+
function eventHandler(value) {
|
|
432
|
+
if (unconsumedPromises.length > 0) unconsumedPromises.shift().resolve(createIterResult(value, false));
|
|
433
|
+
else unconsumedEvents.push(value);
|
|
434
|
+
}
|
|
435
|
+
function errorHandler(err) {
|
|
436
|
+
if (unconsumedPromises.length > 0) unconsumedPromises.shift().reject(err);
|
|
437
|
+
else error = err;
|
|
438
|
+
closeHandler();
|
|
439
|
+
}
|
|
440
|
+
function closeHandler() {
|
|
441
|
+
abortDisposable?.[Symbol.dispose]();
|
|
442
|
+
removeAll();
|
|
443
|
+
finished = true;
|
|
444
|
+
const doneResult = createIterResult(void 0, true);
|
|
445
|
+
while (unconsumedPromises.length > 0) unconsumedPromises.shift().resolve(doneResult);
|
|
446
|
+
return Promise.resolve(doneResult);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Returns a copy of the array of listeners for the event named `type`.
|
|
451
|
+
* Works with both EventEmitter and EventTarget.
|
|
452
|
+
*/
|
|
453
|
+
function getEventListeners(emitterOrTarget, type) {
|
|
454
|
+
if (typeof emitterOrTarget.listeners === "function") return emitterOrTarget.listeners(type);
|
|
455
|
+
return [];
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Returns the current max listener value for the emitter.
|
|
459
|
+
* Works with both EventEmitter and EventTarget.
|
|
460
|
+
*/
|
|
461
|
+
function getMaxListeners(emitterOrTarget) {
|
|
462
|
+
if (typeof emitterOrTarget.getMaxListeners === "function") return emitterOrTarget.getMaxListeners();
|
|
463
|
+
throw new TypeError(`The "emitter" argument must be of type EventEmitter. Received type ${typeof emitterOrTarget}`);
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Listens to the abort event on the provided signal.
|
|
467
|
+
* Returns a Disposable that removes the listener when disposed.
|
|
468
|
+
*/
|
|
469
|
+
function addAbortListener(signal, listener) {
|
|
470
|
+
if (typeof signal?.addEventListener !== "function") throw new TypeError(`The "signal" argument must be an instance of AbortSignal. Received type ${typeof signal}`);
|
|
471
|
+
signal.addEventListener("abort", listener, { once: true });
|
|
472
|
+
return { [Symbol.dispose]() {
|
|
473
|
+
signal.removeEventListener("abort", listener);
|
|
474
|
+
} };
|
|
475
|
+
}
|
|
476
|
+
var events_default = EventEmitter;
|
|
477
|
+
|
|
478
|
+
//#endregion
|
|
479
|
+
export { EventEmitter, addAbortListener, events_default as default, getEventListeners, getMaxListeners, on, once };
|
|
480
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","names":["state: OnceState","prev: boolean","#addListener","originalListener: Function | undefined","#listeners","unconsumedEvents: unknown[][]","unconsumedPromises: { resolve: Function; reject: Function }[]","error: unknown","iterator: AsyncIterableIterator<unknown[]>","listeners: [EventEmitter | EventTarget, string | symbol, Function][]","abortDisposable: { [Symbol.dispose](): void } | null"],"sources":["../src/events.ts"],"sourcesContent":["/**\n * `node:events` compatible entry point\n *\n * Based on npm `events@3.3.0` polyfill with class, enhanced with Node.js v23+ features:\n * - captureRejections / errorMonitor\n * - listenerCount with listener argument\n * - static setMaxListeners for multiple targets\n * - module functions: once (with AbortSignal), on (async iterator),\n * getEventListeners, getMaxListeners, addAbortListener\n *\n * @module events\n */\n\n/**\n * Froked from:\n * - events@3.3.0 (https://github.com/browserify/events)\n * - node:events (https://github.com/nodejs/node/tree/main/lib/events.js)\n * @author kazuya kawaguchi (a.k.a. kazupon)\n * @license MIT\n */\n\nconst kCapture = Symbol('kCapture')\nconst kErrorMonitor = Symbol('events.errorMonitor')\nconst kRejection = Symbol.for('nodejs.rejection')\n\nfunction checkListener(listener: unknown): asserts listener is Function {\n if (typeof listener !== 'function') {\n throw new TypeError(\n `The \"listener\" argument must be of type Function. Received type ${typeof listener}`\n )\n }\n}\n\nfunction emitWarning(warning: Error): void {\n if (typeof console !== 'undefined' && console.warn) {\n console.warn(warning)\n }\n}\n\ninterface OnceState {\n fired: boolean\n wrapFn: (((...args: unknown[]) => void) & { listener?: Function }) | undefined\n target: EventEmitter\n type: string | symbol\n listener: Function\n}\n\nfunction onceWrapper(this: OnceState, ...args: unknown[]): unknown {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn!)\n this.fired = true\n if (args.length === 0) {\n return this.listener.call(this.target)\n }\n return this.listener.apply(this.target, args)\n }\n}\n\nfunction onceWrap(\n target: EventEmitter,\n type: string | symbol,\n listener: Function\n): ((...args: unknown[]) => void) & { listener: Function } {\n const state: OnceState = {\n fired: false,\n wrapFn: undefined,\n target,\n type,\n listener\n }\n const wrapped = onceWrapper.bind(state) as ((...args: unknown[]) => void) & {\n listener: Function\n }\n wrapped.listener = listener\n state.wrapFn = wrapped\n return wrapped\n}\n\nfunction arrayClone<T>(arr: T[]): T[] {\n return arr.slice()\n}\n\nfunction spliceOne(list: unknown[], index: number): void {\n for (; index + 1 < list.length; index++) {\n list[index] = list[index + 1]\n }\n list.pop()\n}\n\nfunction addCatch(\n that: EventEmitter,\n promise: unknown,\n type: string | symbol,\n args: unknown[]\n): void {\n if (!(that as unknown as Record<symbol, boolean>)[kCapture]) {\n return\n }\n\n try {\n const then = (promise as { then?: Function }).then\n if (typeof then === 'function') {\n then.call(promise, undefined, (err: unknown) => {\n queueMicrotask(() => emitUnhandledRejectionOrErr(that, err, type, args))\n })\n }\n } catch (err) {\n that.emit('error', err)\n }\n}\n\nfunction emitUnhandledRejectionOrErr(\n ee: EventEmitter,\n err: unknown,\n type: string | symbol,\n args: unknown[]\n): void {\n const eeRecord = ee as unknown as Record<symbol, Function | boolean | undefined>\n const rejectionHandler = eeRecord[kRejection]\n if (typeof rejectionHandler === 'function') {\n rejectionHandler.call(ee, err, type, ...args)\n } else {\n // Temporarily disable capture to prevent infinite recursion\n const prev: boolean = (eeRecord[kCapture] as boolean | undefined) ?? false\n eeRecord[kCapture] = false\n try {\n ee.emit('error', err)\n } finally {\n eeRecord[kCapture] = prev\n }\n }\n}\n\ntype EventMap = Record<string | symbol, Function | Function[]>\n\nlet defaultMaxListeners = 10\n\nexport class EventEmitter {\n static EventEmitter = EventEmitter\n\n static captureRejectionSymbol = kRejection\n static errorMonitor = kErrorMonitor\n\n static once = once\n static on = on\n static getEventListeners = getEventListeners\n static getMaxListeners = getMaxListeners\n static addAbortListener = addAbortListener\n\n static get defaultMaxListeners(): number {\n return defaultMaxListeners\n }\n\n static set defaultMaxListeners(arg: number) {\n if (typeof arg !== 'number' || arg < 0 || Number.isNaN(arg)) {\n throw new RangeError(\n `The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ${arg}.`\n )\n }\n defaultMaxListeners = arg\n }\n\n static get captureRejections(): boolean {\n return EventEmitter.prototype[kCapture] as unknown as boolean\n }\n\n static set captureRejections(value: boolean) {\n if (typeof value !== 'boolean') {\n throw new TypeError(\n `The \"EventEmitter.captureRejections\" property must be of type boolean. Received type ${typeof value}`\n )\n }\n ;(EventEmitter.prototype as unknown as Record<symbol, boolean>)[kCapture] = value\n }\n\n static listenerCount(emitter: EventEmitter, type: string | symbol): number {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type)\n }\n return EventEmitter.prototype.listenerCount.call(emitter, type)\n }\n\n static setMaxListeners(n = defaultMaxListeners, ...eventTargets: unknown[]): void {\n if (typeof n !== 'number' || n < 0 || Number.isNaN(n)) {\n throw new RangeError(\n `The value of \"n\" is out of range. It must be a non-negative number. Received ${n}.`\n )\n }\n if (eventTargets.length === 0) {\n defaultMaxListeners = n\n } else {\n for (const target of eventTargets) {\n if (typeof (target as EventEmitter).setMaxListeners === 'function') {\n ;(target as EventEmitter).setMaxListeners(n)\n } else if (\n target != null &&\n typeof (target as EventTarget).addEventListener === 'function'\n ) {\n // EventTarget — no direct API, ignore silently\n } else {\n throw new TypeError(\n `The \"eventTargets\" argument must be an instance of EventEmitter or EventTarget. Received ${typeof target}`\n )\n }\n }\n }\n }\n\n declare _events: EventMap | undefined\n declare _eventsCount: number\n declare _maxListeners: number | undefined\n\n // kCapture is managed on prototype\n declare [kCapture]: boolean\n\n constructor(opts?: { captureRejections?: boolean }) {\n EventEmitter.init.call(this, opts)\n }\n\n static init(this: EventEmitter, opts?: { captureRejections?: boolean }): void {\n if (\n this._events === undefined ||\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- checking if _events is the prototype's own property\n this._events === Object.getPrototypeOf(this)?._events\n ) {\n this._events = Object.create(null) as EventMap\n this._eventsCount = 0\n }\n\n this._maxListeners ??= undefined\n\n const selfRecord = this as unknown as Record<symbol, boolean>\n if (opts?.captureRejections) {\n selfRecord[kCapture] = Boolean(opts.captureRejections)\n } else {\n selfRecord[kCapture] =\n (EventEmitter.prototype as unknown as Record<symbol, boolean | undefined>)[kCapture] ??\n false\n }\n }\n\n setMaxListeners(n: number): this {\n if (typeof n !== 'number' || n < 0 || Number.isNaN(n)) {\n throw new RangeError(\n `The value of \"n\" is out of range. It must be a non-negative number. Received ${n}.`\n )\n }\n this._maxListeners = n\n return this\n }\n\n getMaxListeners(): number {\n return this._maxListeners === undefined ? EventEmitter.defaultMaxListeners : this._maxListeners\n }\n\n emit(type: string | symbol, ...args: unknown[]): boolean {\n let doError = type === 'error'\n\n const events = this._events\n if (events !== undefined) {\n // Emit errorMonitor before handling error\n if (doError && events[kErrorMonitor] !== undefined) {\n this.emit(kErrorMonitor, ...args)\n }\n doError = doError && events.error === undefined\n } else if (!doError) {\n return false\n }\n\n if (doError) {\n const er = args.length > 0 ? args[0] : undefined\n if (er instanceof Error) {\n throw er\n }\n const err = new Error('Unhandled error.' + (er ? ` (${(er as Error).message})` : ''))\n ;(err as Error & { context: unknown }).context = er\n throw err\n }\n\n const handler = events![type]\n if (handler === undefined) {\n return false\n }\n\n if (typeof handler === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- handler is guaranteed to be a Function by the type guard above\n const result = Reflect.apply(handler, this, args)\n if (result !== undefined && result !== null) {\n addCatch(this, result, type, args)\n }\n } else {\n const listeners = arrayClone(handler)\n for (const listener of listeners) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- handler is guaranteed to be a Function by the type guard above\n const result = Reflect.apply(listener, this, args)\n if (result !== undefined && result !== null) {\n addCatch(this, result, type, args)\n }\n }\n }\n\n return true\n }\n\n addListener(type: string | symbol, listener: Function): this {\n return this.#addListener(type, listener, false)\n }\n\n on(type: string | symbol, listener: Function): this {\n return this.addListener(type, listener)\n }\n\n prependListener(type: string | symbol, listener: Function): this {\n return this.#addListener(type, listener, true)\n }\n\n once(type: string | symbol, listener: Function): this {\n checkListener(listener)\n this.on(type, onceWrap(this, type, listener))\n return this\n }\n\n prependOnceListener(type: string | symbol, listener: Function): this {\n checkListener(listener)\n this.prependListener(type, onceWrap(this, type, listener))\n return this\n }\n\n removeListener(type: string | symbol, listener: Function): this {\n checkListener(listener)\n\n const events = this._events\n if (events === undefined) {\n return this\n }\n\n const list = events[type]\n if (list === undefined) {\n return this\n }\n\n if (list === listener || (list as Function & { listener?: Function }).listener === listener) {\n if (--this._eventsCount === 0) {\n this._events = Object.create(null) as EventMap\n } else {\n delete events[type]\n if (events.removeListener) {\n this.emit(\n 'removeListener',\n type,\n (list as Function & { listener?: Function }).listener || listener\n )\n }\n }\n } else if (typeof list !== 'function') {\n const arr = list as (Function & { listener?: Function })[]\n let position = -1\n let originalListener: Function | undefined\n\n for (let i = arr.length - 1; i >= 0; i--) {\n const item = arr[i]!\n if (item === listener || item.listener === listener) {\n originalListener = item.listener\n position = i\n break\n }\n }\n\n if (position < 0) {\n return this\n }\n\n if (position === 0) {\n arr.shift()\n } else {\n spliceOne(arr, position)\n }\n\n if (arr.length === 1) {\n events[type] = arr[0]!\n }\n\n if (events.removeListener !== undefined) {\n this.emit('removeListener', type, originalListener || listener)\n }\n }\n\n return this\n }\n\n off(type: string | symbol, listener: Function): this {\n return this.removeListener(type, listener)\n }\n\n removeAllListeners(type?: string | symbol): this {\n const events = this._events\n if (events === undefined) {\n return this\n }\n\n if (events.removeListener === undefined) {\n if (type === undefined) {\n this._events = Object.create(null) as EventMap\n this._eventsCount = 0\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0) {\n this._events = Object.create(null) as EventMap\n } else {\n delete events[type]\n }\n }\n return this\n }\n\n if (type === undefined) {\n const keys = Reflect.ownKeys(events)\n for (const key of keys) {\n if (key === 'removeListener') {\n continue\n }\n this.removeAllListeners(key)\n }\n this.removeAllListeners('removeListener')\n this._events = Object.create(null) as EventMap\n this._eventsCount = 0\n return this\n }\n\n const listeners = events[type]\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners)\n } else if (listeners !== undefined) {\n const arr = listeners\n for (let i = arr.length - 1; i >= 0; i--) {\n this.removeListener(type, arr[i]!)\n }\n }\n\n return this\n }\n\n listeners(type: string | symbol): Function[] {\n return this.#listeners(type, true)\n }\n\n rawListeners(type: string | symbol): Function[] {\n return this.#listeners(type, false)\n }\n\n listenerCount(type: string | symbol, listener?: Function): number {\n const events = this._events\n\n if (events !== undefined) {\n const evlistener = events[type]\n\n if (typeof evlistener === 'function') {\n if (listener != null) {\n return evlistener === listener ||\n (evlistener as Function & { listener?: Function }).listener === listener\n ? 1\n : 0\n }\n return 1\n } else if (evlistener !== undefined) {\n if (listener != null) {\n let matching = 0\n const arr = evlistener as (Function & { listener?: Function })[]\n for (const l of arr) {\n if (l === listener || l.listener === listener) {\n matching++\n }\n }\n return matching\n }\n return evlistener.length\n }\n }\n\n return 0\n }\n\n eventNames(): (string | symbol)[] {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events!) : []\n }\n\n #addListener(type: string | symbol, listener: Function, prepend: boolean): this {\n checkListener(listener)\n\n let events = this._events\n if (events === undefined) {\n events = this._events = Object.create(null) as EventMap\n this._eventsCount = 0\n } else {\n if (events.newListener !== undefined) {\n this.emit(\n 'newListener',\n type,\n (listener as Function & { listener?: Function }).listener || listener\n )\n events = this._events!\n }\n }\n\n const existing = events[type]\n\n if (existing === undefined) {\n events[type] = listener\n ++this._eventsCount\n } else {\n if (typeof existing === 'function') {\n events[type] = prepend ? [listener, existing] : [existing, listener]\n } else if (prepend) {\n existing.unshift(listener)\n } else {\n existing.push(listener)\n }\n\n const m = this.getMaxListeners()\n const arr = events[type] as Function[] & { warned?: boolean }\n if (m > 0 && Array.isArray(arr) && arr.length > m && !arr.warned) {\n arr.warned = true\n const w = new Error(\n `Possible EventEmitter memory leak detected. ${arr.length} ${String(type)} listeners added. Use emitter.setMaxListeners() to increase limit`\n )\n w.name = 'MaxListenersExceededWarning'\n ;(w as Error & { emitter: EventEmitter; type: string | symbol; count: number }).emitter =\n this\n ;(w as Error & { emitter: EventEmitter; type: string | symbol; count: number }).type = type\n ;(w as Error & { emitter: EventEmitter; type: string | symbol; count: number }).count =\n arr.length\n emitWarning(w)\n }\n }\n\n return this\n }\n\n #listeners(type: string | symbol, unwrap: boolean): Function[] {\n const events = this._events\n if (events === undefined) {\n return []\n }\n\n const evlistener = events[type]\n if (evlistener === undefined) {\n return []\n }\n\n if (typeof evlistener === 'function') {\n return unwrap\n ? [(evlistener as Function & { listener?: Function }).listener || evlistener]\n : [evlistener]\n }\n\n const arr = evlistener as (Function & { listener?: Function })[]\n if (unwrap) {\n return arr.map(l => l.listener || l)\n }\n return arrayClone(arr)\n }\n}\n\n// Set default captureRejections on prototype\n;(EventEmitter.prototype as unknown as Record<symbol, boolean>)[kCapture] = false\n\n/**\n * EventTarget-agnostic add listener utility\n */\nfunction eventTargetAgnosticAddListener(\n emitter: EventEmitter | EventTarget,\n name: string | symbol,\n listener: Function,\n flags?: { once?: boolean }\n): void {\n if (typeof (emitter as EventEmitter).on === 'function') {\n if (flags?.once) {\n ;(emitter as EventEmitter).once(name, listener)\n } else {\n ;(emitter as EventEmitter).on(name, listener)\n }\n } else if (typeof (emitter as EventTarget).addEventListener === 'function') {\n ;(emitter as EventTarget).addEventListener(name as string, listener as EventListener, {\n once: flags?.once ?? false\n })\n } else {\n throw new TypeError(\n `The \"emitter\" argument must be of type EventEmitter or EventTarget. Received type ${typeof emitter}`\n )\n }\n}\n\nfunction eventTargetAgnosticRemoveListener(\n emitter: EventEmitter | EventTarget,\n name: string | symbol,\n listener: Function\n): void {\n if (typeof (emitter as EventEmitter).removeListener === 'function') {\n ;(emitter as EventEmitter).removeListener(name, listener)\n } else if (typeof (emitter as EventTarget).removeEventListener === 'function') {\n ;(emitter as EventTarget).removeEventListener(name as string, listener as EventListener)\n }\n}\n\n/**\n * Returns a Promise that resolves when the emitter emits the given event,\n * or rejects if the emitter emits 'error'.\n * Supports AbortSignal for cancellation.\n */\nexport async function once(\n emitter: EventEmitter | EventTarget,\n name: string | symbol,\n options?: { signal?: AbortSignal }\n): Promise<unknown[]> {\n const signal = options?.signal\n if (signal?.aborted) {\n throw new DOMException('The operation was aborted', 'AbortError')\n }\n\n return new Promise((resolve, reject) => {\n const errorListener = (err: unknown) => {\n ;(emitter as EventEmitter).removeListener(name, resolver)\n if (signal != null) {\n eventTargetAgnosticRemoveListener(signal, 'abort', abortListener)\n }\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors -- we want to allow rejecting with non-Error values for compatibility with Node.js callback conventions\n reject(err)\n }\n\n const resolver = (...args: unknown[]) => {\n if (typeof (emitter as EventEmitter).removeListener === 'function') {\n ;(emitter as EventEmitter).removeListener('error', errorListener)\n }\n if (signal != null) {\n eventTargetAgnosticRemoveListener(signal, 'abort', abortListener)\n }\n resolve(args)\n }\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true })\n if (name !== 'error' && typeof (emitter as EventEmitter).once === 'function') {\n ;(emitter as EventEmitter).once('error', errorListener)\n }\n\n function abortListener() {\n eventTargetAgnosticRemoveListener(emitter, name, resolver)\n eventTargetAgnosticRemoveListener(emitter, 'error', errorListener)\n reject(new DOMException('The operation was aborted', 'AbortError'))\n }\n\n if (signal != null) {\n eventTargetAgnosticAddListener(signal, 'abort', abortListener, { once: true })\n }\n })\n}\n\ninterface IterResult<T> {\n value: T\n done: boolean\n}\n\nfunction createIterResult<T>(value: T, done: boolean): IterResult<T> {\n return { value, done }\n}\n\n/**\n * Returns an AsyncIterableIterator that yields events from the emitter.\n * Supports AbortSignal for cancellation.\n */\nexport function on(\n emitter: EventEmitter | EventTarget,\n event: string | symbol,\n options?: { signal?: AbortSignal }\n): AsyncIterableIterator<unknown[]> {\n const signal = options?.signal\n if (signal?.aborted) {\n throw new DOMException('The operation was aborted', 'AbortError')\n }\n\n const unconsumedEvents: unknown[][] = []\n const unconsumedPromises: { resolve: Function; reject: Function }[] = []\n let error: unknown = null\n let finished = false\n\n const iterator: AsyncIterableIterator<unknown[]> = {\n next(): Promise<IteratorResult<unknown[]>> {\n if (unconsumedEvents.length > 0) {\n return Promise.resolve(createIterResult(unconsumedEvents.shift()!, false))\n }\n\n if (error) {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors -- we want to allow rejecting with non-Error values for compatibility with Node.js callback conventions\n const p = Promise.reject(error)\n error = null\n return p\n }\n\n if (finished) {\n return closeHandler()\n }\n\n return new Promise((resolve, reject) => {\n unconsumedPromises.push({ resolve, reject })\n })\n },\n\n return(): Promise<IteratorResult<unknown[]>> {\n return closeHandler()\n },\n\n throw(err: Error): Promise<IteratorResult<unknown[]>> {\n errorHandler(err)\n return Promise.resolve(createIterResult(undefined as unknown as unknown[], true))\n },\n\n [Symbol.asyncIterator]() {\n return this\n }\n }\n\n const listeners: [EventEmitter | EventTarget, string | symbol, Function][] = []\n\n function addEventListener(\n target: EventEmitter | EventTarget,\n evt: string | symbol,\n handler: Function\n ): void {\n eventTargetAgnosticAddListener(target, evt, handler)\n listeners.push([target, evt, handler])\n }\n\n function removeAll(): void {\n while (listeners.length > 0) {\n const [target, evt, handler] = listeners.pop()!\n eventTargetAgnosticRemoveListener(target, evt, handler)\n }\n }\n\n addEventListener(emitter, event, (...args: unknown[]) => {\n eventHandler(args)\n })\n\n if (event !== 'error' && typeof (emitter as EventEmitter).on === 'function') {\n addEventListener(emitter, 'error', errorHandler)\n }\n\n let abortDisposable: { [Symbol.dispose](): void } | null = null\n if (signal) {\n abortDisposable = addAbortListener(signal, () => {\n errorHandler(new DOMException('The operation was aborted', 'AbortError'))\n })\n }\n\n return iterator\n\n function eventHandler(value: unknown[]): void {\n if (unconsumedPromises.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- we know resolve is a function\n unconsumedPromises.shift()!.resolve(createIterResult(value, false))\n } else {\n unconsumedEvents.push(value)\n }\n }\n\n function errorHandler(err: unknown): void {\n if (unconsumedPromises.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- we know resolve is a function\n unconsumedPromises.shift()!.reject(err)\n } else {\n error = err\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- we want to trigger unhandled rejection if the error is not consumed\n closeHandler()\n }\n\n function closeHandler(): Promise<IteratorResult<unknown[]>> {\n abortDisposable?.[Symbol.dispose]()\n removeAll()\n finished = true\n const doneResult = createIterResult(undefined as unknown as unknown[], true)\n while (unconsumedPromises.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- we know resolve is a function\n unconsumedPromises.shift()!.resolve(doneResult)\n }\n return Promise.resolve(doneResult)\n }\n}\n\n/**\n * Returns a copy of the array of listeners for the event named `type`.\n * Works with both EventEmitter and EventTarget.\n */\nexport function getEventListeners(\n emitterOrTarget: EventEmitter | EventTarget,\n type: string | symbol\n): Function[] {\n if (typeof (emitterOrTarget as EventEmitter).listeners === 'function') {\n return (emitterOrTarget as EventEmitter).listeners(type)\n }\n\n // EventTarget — no public API to enumerate listeners\n return []\n}\n\n/**\n * Returns the current max listener value for the emitter.\n * Works with both EventEmitter and EventTarget.\n */\nexport function getMaxListeners(emitterOrTarget: EventEmitter | EventTarget): number {\n if (typeof (emitterOrTarget as EventEmitter).getMaxListeners === 'function') {\n return (emitterOrTarget as EventEmitter).getMaxListeners()\n }\n\n throw new TypeError(\n `The \"emitter\" argument must be of type EventEmitter. Received type ${typeof emitterOrTarget}`\n )\n}\n\n/**\n * Listens to the abort event on the provided signal.\n * Returns a Disposable that removes the listener when disposed.\n */\nexport function addAbortListener(\n signal: AbortSignal,\n listener: () => void\n): { [Symbol.dispose](): void } {\n if (typeof signal?.addEventListener !== 'function') {\n throw new TypeError(\n `The \"signal\" argument must be an instance of AbortSignal. Received type ${typeof signal}`\n )\n }\n\n signal.addEventListener('abort', listener, { once: true })\n\n return {\n [Symbol.dispose]() {\n signal.removeEventListener('abort', listener)\n }\n }\n}\n\nexport default EventEmitter\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqBA,MAAM,WAAW,OAAO,WAAW;AACnC,MAAM,gBAAgB,OAAO,sBAAsB;AACnD,MAAM,aAAa,OAAO,IAAI,mBAAmB;AAEjD,SAAS,cAAc,UAAiD;AACtE,KAAI,OAAO,aAAa,WACtB,OAAM,IAAI,UACR,mEAAmE,OAAO,WAC3E;;AAIL,SAAS,YAAY,SAAsB;AACzC,KAAI,OAAO,YAAY,eAAe,QAAQ,KAC5C,SAAQ,KAAK,QAAQ;;AAYzB,SAAS,YAA6B,GAAG,MAA0B;AACjE,KAAI,CAAC,KAAK,OAAO;AACf,OAAK,OAAO,eAAe,KAAK,MAAM,KAAK,OAAQ;AACnD,OAAK,QAAQ;AACb,MAAI,KAAK,WAAW,EAClB,QAAO,KAAK,SAAS,KAAK,KAAK,OAAO;AAExC,SAAO,KAAK,SAAS,MAAM,KAAK,QAAQ,KAAK;;;AAIjD,SAAS,SACP,QACA,MACA,UACyD;CACzD,MAAMA,QAAmB;EACvB,OAAO;EACP,QAAQ;EACR;EACA;EACA;EACD;CACD,MAAM,UAAU,YAAY,KAAK,MAAM;AAGvC,SAAQ,WAAW;AACnB,OAAM,SAAS;AACf,QAAO;;AAGT,SAAS,WAAc,KAAe;AACpC,QAAO,IAAI,OAAO;;AAGpB,SAAS,UAAU,MAAiB,OAAqB;AACvD,QAAO,QAAQ,IAAI,KAAK,QAAQ,QAC9B,MAAK,SAAS,KAAK,QAAQ;AAE7B,MAAK,KAAK;;AAGZ,SAAS,SACP,MACA,SACA,MACA,MACM;AACN,KAAI,CAAE,KAA4C,UAChD;AAGF,KAAI;EACF,MAAM,OAAQ,QAAgC;AAC9C,MAAI,OAAO,SAAS,WAClB,MAAK,KAAK,SAAS,SAAY,QAAiB;AAC9C,wBAAqB,4BAA4B,MAAM,KAAK,MAAM,KAAK,CAAC;IACxE;UAEG,KAAK;AACZ,OAAK,KAAK,SAAS,IAAI;;;AAI3B,SAAS,4BACP,IACA,KACA,MACA,MACM;CACN,MAAM,WAAW;CACjB,MAAM,mBAAmB,SAAS;AAClC,KAAI,OAAO,qBAAqB,WAC9B,kBAAiB,KAAK,IAAI,KAAK,MAAM,GAAG,KAAK;MACxC;EAEL,MAAMC,OAAiB,SAAS,aAAqC;AACrE,WAAS,YAAY;AACrB,MAAI;AACF,MAAG,KAAK,SAAS,IAAI;YACb;AACR,YAAS,YAAY;;;;AAO3B,IAAI,sBAAsB;AAE1B,IAAa,eAAb,MAAa,aAAa;CACxB,OAAO,eAAe;CAEtB,OAAO,yBAAyB;CAChC,OAAO,eAAe;CAEtB,OAAO,OAAO;CACd,OAAO,KAAK;CACZ,OAAO,oBAAoB;CAC3B,OAAO,kBAAkB;CACzB,OAAO,mBAAmB;CAE1B,WAAW,sBAA8B;AACvC,SAAO;;CAGT,WAAW,oBAAoB,KAAa;AAC1C,MAAI,OAAO,QAAQ,YAAY,MAAM,KAAK,OAAO,MAAM,IAAI,CACzD,OAAM,IAAI,WACR,kGAAkG,IAAI,GACvG;AAEH,wBAAsB;;CAGxB,WAAW,oBAA6B;AACtC,SAAO,aAAa,UAAU;;CAGhC,WAAW,kBAAkB,OAAgB;AAC3C,MAAI,OAAO,UAAU,UACnB,OAAM,IAAI,UACR,wFAAwF,OAAO,QAChG;AAEF,EAAC,aAAa,UAAiD,YAAY;;CAG9E,OAAO,cAAc,SAAuB,MAA+B;AACzE,MAAI,OAAO,QAAQ,kBAAkB,WACnC,QAAO,QAAQ,cAAc,KAAK;AAEpC,SAAO,aAAa,UAAU,cAAc,KAAK,SAAS,KAAK;;CAGjE,OAAO,gBAAgB,IAAI,qBAAqB,GAAG,cAA+B;AAChF,MAAI,OAAO,MAAM,YAAY,IAAI,KAAK,OAAO,MAAM,EAAE,CACnD,OAAM,IAAI,WACR,gFAAgF,EAAE,GACnF;AAEH,MAAI,aAAa,WAAW,EAC1B,uBAAsB;MAEtB,MAAK,MAAM,UAAU,aACnB,KAAI,OAAQ,OAAwB,oBAAoB,WACrD,CAAC,OAAwB,gBAAgB,EAAE;WAE5C,UAAU,QACV,OAAQ,OAAuB,qBAAqB,YACpD,OAGA,OAAM,IAAI,UACR,4FAA4F,OAAO,SACpG;;CAaT,YAAY,MAAwC;AAClD,eAAa,KAAK,KAAK,MAAM,KAAK;;CAGpC,OAAO,KAAyB,MAA8C;AAC5E,MACE,KAAK,YAAY,UAEjB,KAAK,YAAY,OAAO,eAAe,KAAK,EAAE,SAC9C;AACA,QAAK,UAAU,OAAO,OAAO,KAAK;AAClC,QAAK,eAAe;;AAGtB,OAAK,kBAAkB;EAEvB,MAAM,aAAa;AACnB,MAAI,MAAM,kBACR,YAAW,YAAY,QAAQ,KAAK,kBAAkB;MAEtD,YAAW,YACR,aAAa,UAA6D,aAC3E;;CAIN,gBAAgB,GAAiB;AAC/B,MAAI,OAAO,MAAM,YAAY,IAAI,KAAK,OAAO,MAAM,EAAE,CACnD,OAAM,IAAI,WACR,gFAAgF,EAAE,GACnF;AAEH,OAAK,gBAAgB;AACrB,SAAO;;CAGT,kBAA0B;AACxB,SAAO,KAAK,kBAAkB,SAAY,aAAa,sBAAsB,KAAK;;CAGpF,KAAK,MAAuB,GAAG,MAA0B;EACvD,IAAI,UAAU,SAAS;EAEvB,MAAM,SAAS,KAAK;AACpB,MAAI,WAAW,QAAW;AAExB,OAAI,WAAW,OAAO,mBAAmB,OACvC,MAAK,KAAK,eAAe,GAAG,KAAK;AAEnC,aAAU,WAAW,OAAO,UAAU;aAC7B,CAAC,QACV,QAAO;AAGT,MAAI,SAAS;GACX,MAAM,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK;AACvC,OAAI,cAAc,MAChB,OAAM;GAER,MAAM,sBAAM,IAAI,MAAM,sBAAsB,KAAK,KAAM,GAAa,QAAQ,KAAK,IAAI;AACpF,GAAC,IAAqC,UAAU;AACjD,SAAM;;EAGR,MAAM,UAAU,OAAQ;AACxB,MAAI,YAAY,OACd,QAAO;AAGT,MAAI,OAAO,YAAY,YAAY;GAEjC,MAAM,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAK;AACjD,OAAI,WAAW,UAAa,WAAW,KACrC,UAAS,MAAM,QAAQ,MAAM,KAAK;SAE/B;GACL,MAAM,YAAY,WAAW,QAAQ;AACrC,QAAK,MAAM,YAAY,WAAW;IAEhC,MAAM,SAAS,QAAQ,MAAM,UAAU,MAAM,KAAK;AAClD,QAAI,WAAW,UAAa,WAAW,KACrC,UAAS,MAAM,QAAQ,MAAM,KAAK;;;AAKxC,SAAO;;CAGT,YAAY,MAAuB,UAA0B;AAC3D,SAAO,MAAKC,YAAa,MAAM,UAAU,MAAM;;CAGjD,GAAG,MAAuB,UAA0B;AAClD,SAAO,KAAK,YAAY,MAAM,SAAS;;CAGzC,gBAAgB,MAAuB,UAA0B;AAC/D,SAAO,MAAKA,YAAa,MAAM,UAAU,KAAK;;CAGhD,KAAK,MAAuB,UAA0B;AACpD,gBAAc,SAAS;AACvB,OAAK,GAAG,MAAM,SAAS,MAAM,MAAM,SAAS,CAAC;AAC7C,SAAO;;CAGT,oBAAoB,MAAuB,UAA0B;AACnE,gBAAc,SAAS;AACvB,OAAK,gBAAgB,MAAM,SAAS,MAAM,MAAM,SAAS,CAAC;AAC1D,SAAO;;CAGT,eAAe,MAAuB,UAA0B;AAC9D,gBAAc,SAAS;EAEvB,MAAM,SAAS,KAAK;AACpB,MAAI,WAAW,OACb,QAAO;EAGT,MAAM,OAAO,OAAO;AACpB,MAAI,SAAS,OACX,QAAO;AAGT,MAAI,SAAS,YAAa,KAA4C,aAAa,SACjF,KAAI,EAAE,KAAK,iBAAiB,EAC1B,MAAK,UAAU,OAAO,OAAO,KAAK;OAC7B;AACL,UAAO,OAAO;AACd,OAAI,OAAO,eACT,MAAK,KACH,kBACA,MACC,KAA4C,YAAY,SAC1D;;WAGI,OAAO,SAAS,YAAY;GACrC,MAAM,MAAM;GACZ,IAAI,WAAW;GACf,IAAIC;AAEJ,QAAK,IAAI,IAAI,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK;IACxC,MAAM,OAAO,IAAI;AACjB,QAAI,SAAS,YAAY,KAAK,aAAa,UAAU;AACnD,wBAAmB,KAAK;AACxB,gBAAW;AACX;;;AAIJ,OAAI,WAAW,EACb,QAAO;AAGT,OAAI,aAAa,EACf,KAAI,OAAO;OAEX,WAAU,KAAK,SAAS;AAG1B,OAAI,IAAI,WAAW,EACjB,QAAO,QAAQ,IAAI;AAGrB,OAAI,OAAO,mBAAmB,OAC5B,MAAK,KAAK,kBAAkB,MAAM,oBAAoB,SAAS;;AAInE,SAAO;;CAGT,IAAI,MAAuB,UAA0B;AACnD,SAAO,KAAK,eAAe,MAAM,SAAS;;CAG5C,mBAAmB,MAA8B;EAC/C,MAAM,SAAS,KAAK;AACpB,MAAI,WAAW,OACb,QAAO;AAGT,MAAI,OAAO,mBAAmB,QAAW;AACvC,OAAI,SAAS,QAAW;AACtB,SAAK,UAAU,OAAO,OAAO,KAAK;AAClC,SAAK,eAAe;cACX,OAAO,UAAU,OAC1B,KAAI,EAAE,KAAK,iBAAiB,EAC1B,MAAK,UAAU,OAAO,OAAO,KAAK;OAElC,QAAO,OAAO;AAGlB,UAAO;;AAGT,MAAI,SAAS,QAAW;GACtB,MAAM,OAAO,QAAQ,QAAQ,OAAO;AACpC,QAAK,MAAM,OAAO,MAAM;AACtB,QAAI,QAAQ,iBACV;AAEF,SAAK,mBAAmB,IAAI;;AAE9B,QAAK,mBAAmB,iBAAiB;AACzC,QAAK,UAAU,OAAO,OAAO,KAAK;AAClC,QAAK,eAAe;AACpB,UAAO;;EAGT,MAAM,YAAY,OAAO;AAEzB,MAAI,OAAO,cAAc,WACvB,MAAK,eAAe,MAAM,UAAU;WAC3B,cAAc,QAAW;GAClC,MAAM,MAAM;AACZ,QAAK,IAAI,IAAI,IAAI,SAAS,GAAG,KAAK,GAAG,IACnC,MAAK,eAAe,MAAM,IAAI,GAAI;;AAItC,SAAO;;CAGT,UAAU,MAAmC;AAC3C,SAAO,MAAKC,UAAW,MAAM,KAAK;;CAGpC,aAAa,MAAmC;AAC9C,SAAO,MAAKA,UAAW,MAAM,MAAM;;CAGrC,cAAc,MAAuB,UAA6B;EAChE,MAAM,SAAS,KAAK;AAEpB,MAAI,WAAW,QAAW;GACxB,MAAM,aAAa,OAAO;AAE1B,OAAI,OAAO,eAAe,YAAY;AACpC,QAAI,YAAY,KACd,QAAO,eAAe,YACnB,WAAkD,aAAa,WAC9D,IACA;AAEN,WAAO;cACE,eAAe,QAAW;AACnC,QAAI,YAAY,MAAM;KACpB,IAAI,WAAW;KACf,MAAM,MAAM;AACZ,UAAK,MAAM,KAAK,IACd,KAAI,MAAM,YAAY,EAAE,aAAa,SACnC;AAGJ,YAAO;;AAET,WAAO,WAAW;;;AAItB,SAAO;;CAGT,aAAkC;AAChC,SAAO,KAAK,eAAe,IAAI,QAAQ,QAAQ,KAAK,QAAS,GAAG,EAAE;;CAGpE,aAAa,MAAuB,UAAoB,SAAwB;AAC9E,gBAAc,SAAS;EAEvB,IAAI,SAAS,KAAK;AAClB,MAAI,WAAW,QAAW;AACxB,YAAS,KAAK,UAAU,OAAO,OAAO,KAAK;AAC3C,QAAK,eAAe;aAEhB,OAAO,gBAAgB,QAAW;AACpC,QAAK,KACH,eACA,MACC,SAAgD,YAAY,SAC9D;AACD,YAAS,KAAK;;EAIlB,MAAM,WAAW,OAAO;AAExB,MAAI,aAAa,QAAW;AAC1B,UAAO,QAAQ;AACf,KAAE,KAAK;SACF;AACL,OAAI,OAAO,aAAa,WACtB,QAAO,QAAQ,UAAU,CAAC,UAAU,SAAS,GAAG,CAAC,UAAU,SAAS;YAC3D,QACT,UAAS,QAAQ,SAAS;OAE1B,UAAS,KAAK,SAAS;GAGzB,MAAM,IAAI,KAAK,iBAAiB;GAChC,MAAM,MAAM,OAAO;AACnB,OAAI,IAAI,KAAK,MAAM,QAAQ,IAAI,IAAI,IAAI,SAAS,KAAK,CAAC,IAAI,QAAQ;AAChE,QAAI,SAAS;IACb,MAAM,oBAAI,IAAI,MACZ,+CAA+C,IAAI,OAAO,GAAG,OAAO,KAAK,CAAC,mEAC3E;AACD,MAAE,OAAO;AACR,IAAC,EAA8E,UAC9E;AACD,IAAC,EAA8E,OAAO;AACtF,IAAC,EAA8E,QAC9E,IAAI;AACN,gBAAY,EAAE;;;AAIlB,SAAO;;CAGT,WAAW,MAAuB,QAA6B;EAC7D,MAAM,SAAS,KAAK;AACpB,MAAI,WAAW,OACb,QAAO,EAAE;EAGX,MAAM,aAAa,OAAO;AAC1B,MAAI,eAAe,OACjB,QAAO,EAAE;AAGX,MAAI,OAAO,eAAe,WACxB,QAAO,SACH,CAAE,WAAkD,YAAY,WAAW,GAC3E,CAAC,WAAW;EAGlB,MAAM,MAAM;AACZ,MAAI,OACF,QAAO,IAAI,KAAI,MAAK,EAAE,YAAY,EAAE;AAEtC,SAAO,WAAW,IAAI;;;AAKzB,AAAC,aAAa,UAAiD,YAAY;;;;AAK5E,SAAS,+BACP,SACA,MACA,UACA,OACM;AACN,KAAI,OAAQ,QAAyB,OAAO,WAC1C,KAAI,OAAO,KACR,CAAC,QAAyB,KAAK,MAAM,SAAS;KAE9C,CAAC,QAAyB,GAAG,MAAM,SAAS;UAEtC,OAAQ,QAAwB,qBAAqB,WAC7D,CAAC,QAAwB,iBAAiB,MAAgB,UAA2B,EACpF,MAAM,OAAO,QAAQ,OACtB,CAAC;KAEF,OAAM,IAAI,UACR,qFAAqF,OAAO,UAC7F;;AAIL,SAAS,kCACP,SACA,MACA,UACM;AACN,KAAI,OAAQ,QAAyB,mBAAmB,WACrD,CAAC,QAAyB,eAAe,MAAM,SAAS;UAChD,OAAQ,QAAwB,wBAAwB,WAChE,CAAC,QAAwB,oBAAoB,MAAgB,SAA0B;;;;;;;AAS5F,eAAsB,KACpB,SACA,MACA,SACoB;CACpB,MAAM,SAAS,SAAS;AACxB,KAAI,QAAQ,QACV,OAAM,IAAI,aAAa,6BAA6B,aAAa;AAGnE,QAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,iBAAiB,QAAiB;AACrC,GAAC,QAAyB,eAAe,MAAM,SAAS;AACzD,OAAI,UAAU,KACZ,mCAAkC,QAAQ,SAAS,cAAc;AAGnE,UAAO,IAAI;;EAGb,MAAM,YAAY,GAAG,SAAoB;AACvC,OAAI,OAAQ,QAAyB,mBAAmB,WACrD,CAAC,QAAyB,eAAe,SAAS,cAAc;AAEnE,OAAI,UAAU,KACZ,mCAAkC,QAAQ,SAAS,cAAc;AAEnE,WAAQ,KAAK;;AAGf,iCAA+B,SAAS,MAAM,UAAU,EAAE,MAAM,MAAM,CAAC;AACvE,MAAI,SAAS,WAAW,OAAQ,QAAyB,SAAS,WAC/D,CAAC,QAAyB,KAAK,SAAS,cAAc;EAGzD,SAAS,gBAAgB;AACvB,qCAAkC,SAAS,MAAM,SAAS;AAC1D,qCAAkC,SAAS,SAAS,cAAc;AAClE,UAAO,IAAI,aAAa,6BAA6B,aAAa,CAAC;;AAGrE,MAAI,UAAU,KACZ,gCAA+B,QAAQ,SAAS,eAAe,EAAE,MAAM,MAAM,CAAC;GAEhF;;AAQJ,SAAS,iBAAoB,OAAU,MAA8B;AACnE,QAAO;EAAE;EAAO;EAAM;;;;;;AAOxB,SAAgB,GACd,SACA,OACA,SACkC;CAClC,MAAM,SAAS,SAAS;AACxB,KAAI,QAAQ,QACV,OAAM,IAAI,aAAa,6BAA6B,aAAa;CAGnE,MAAMC,mBAAgC,EAAE;CACxC,MAAMC,qBAAgE,EAAE;CACxE,IAAIC,QAAiB;CACrB,IAAI,WAAW;CAEf,MAAMC,WAA6C;EACjD,OAA2C;AACzC,OAAI,iBAAiB,SAAS,EAC5B,QAAO,QAAQ,QAAQ,iBAAiB,iBAAiB,OAAO,EAAG,MAAM,CAAC;AAG5E,OAAI,OAAO;IAET,MAAM,IAAI,QAAQ,OAAO,MAAM;AAC/B,YAAQ;AACR,WAAO;;AAGT,OAAI,SACF,QAAO,cAAc;AAGvB,UAAO,IAAI,SAAS,SAAS,WAAW;AACtC,uBAAmB,KAAK;KAAE;KAAS;KAAQ,CAAC;KAC5C;;EAGJ,SAA6C;AAC3C,UAAO,cAAc;;EAGvB,MAAM,KAAgD;AACpD,gBAAa,IAAI;AACjB,UAAO,QAAQ,QAAQ,iBAAiB,QAAmC,KAAK,CAAC;;EAGnF,CAAC,OAAO,iBAAiB;AACvB,UAAO;;EAEV;CAED,MAAMC,YAAuE,EAAE;CAE/E,SAAS,iBACP,QACA,KACA,SACM;AACN,iCAA+B,QAAQ,KAAK,QAAQ;AACpD,YAAU,KAAK;GAAC;GAAQ;GAAK;GAAQ,CAAC;;CAGxC,SAAS,YAAkB;AACzB,SAAO,UAAU,SAAS,GAAG;GAC3B,MAAM,CAAC,QAAQ,KAAK,WAAW,UAAU,KAAK;AAC9C,qCAAkC,QAAQ,KAAK,QAAQ;;;AAI3D,kBAAiB,SAAS,QAAQ,GAAG,SAAoB;AACvD,eAAa,KAAK;GAClB;AAEF,KAAI,UAAU,WAAW,OAAQ,QAAyB,OAAO,WAC/D,kBAAiB,SAAS,SAAS,aAAa;CAGlD,IAAIC,kBAAuD;AAC3D,KAAI,OACF,mBAAkB,iBAAiB,cAAc;AAC/C,eAAa,IAAI,aAAa,6BAA6B,aAAa,CAAC;GACzE;AAGJ,QAAO;CAEP,SAAS,aAAa,OAAwB;AAC5C,MAAI,mBAAmB,SAAS,EAE9B,oBAAmB,OAAO,CAAE,QAAQ,iBAAiB,OAAO,MAAM,CAAC;MAEnE,kBAAiB,KAAK,MAAM;;CAIhC,SAAS,aAAa,KAAoB;AACxC,MAAI,mBAAmB,SAAS,EAE9B,oBAAmB,OAAO,CAAE,OAAO,IAAI;MAEvC,SAAQ;AAGV,gBAAc;;CAGhB,SAAS,eAAmD;AAC1D,oBAAkB,OAAO,UAAU;AACnC,aAAW;AACX,aAAW;EACX,MAAM,aAAa,iBAAiB,QAAmC,KAAK;AAC5E,SAAO,mBAAmB,SAAS,EAEjC,oBAAmB,OAAO,CAAE,QAAQ,WAAW;AAEjD,SAAO,QAAQ,QAAQ,WAAW;;;;;;;AAQtC,SAAgB,kBACd,iBACA,MACY;AACZ,KAAI,OAAQ,gBAAiC,cAAc,WACzD,QAAQ,gBAAiC,UAAU,KAAK;AAI1D,QAAO,EAAE;;;;;;AAOX,SAAgB,gBAAgB,iBAAqD;AACnF,KAAI,OAAQ,gBAAiC,oBAAoB,WAC/D,QAAQ,gBAAiC,iBAAiB;AAG5D,OAAM,IAAI,UACR,sEAAsE,OAAO,kBAC9E;;;;;;AAOH,SAAgB,iBACd,QACA,UAC8B;AAC9B,KAAI,OAAO,QAAQ,qBAAqB,WACtC,OAAM,IAAI,UACR,2EAA2E,OAAO,SACnF;AAGH,QAAO,iBAAiB,SAAS,UAAU,EAAE,MAAM,MAAM,CAAC;AAE1D,QAAO,EACL,CAAC,OAAO,WAAW;AACjB,SAAO,oBAAoB,SAAS,SAAS;IAEhD;;AAGH,qBAAe"}
|
package/dist/module.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//#region src/module.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* `node:module` compatible entry point
|
|
4
|
+
*
|
|
5
|
+
* Browser/Worker environments cannot use `require()`.
|
|
6
|
+
* `createRequire()` returns a stub that throws on invocation.
|
|
7
|
+
*
|
|
8
|
+
* @module module
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @author kazuya kawaguchi (a.k.a. kazupon)
|
|
12
|
+
* @license MIT
|
|
13
|
+
*/
|
|
14
|
+
interface RequireFunction {
|
|
15
|
+
(id: string): never;
|
|
16
|
+
resolve: (id: string) => string;
|
|
17
|
+
cache: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create a require function bound to the given URL.
|
|
21
|
+
* In browser/Worker environments, the returned `require()` throws on invocation
|
|
22
|
+
* since CommonJS modules cannot be loaded.
|
|
23
|
+
*/
|
|
24
|
+
declare function createRequire(_url: string | URL): RequireFunction;
|
|
25
|
+
/**
|
|
26
|
+
* List of Node.js builtin module names (without `node:` prefix).
|
|
27
|
+
*/
|
|
28
|
+
declare const builtinModules: string[];
|
|
29
|
+
/**
|
|
30
|
+
* Check if a module name is a Node.js builtin module.
|
|
31
|
+
*/
|
|
32
|
+
declare function isBuiltin(moduleName: string): boolean;
|
|
33
|
+
declare const _default: {
|
|
34
|
+
createRequire: typeof createRequire;
|
|
35
|
+
builtinModules: string[];
|
|
36
|
+
isBuiltin: typeof isBuiltin;
|
|
37
|
+
};
|
|
38
|
+
//#endregion
|
|
39
|
+
export { builtinModules, createRequire, _default as default, isBuiltin };
|
|
40
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","names":[],"sources":["../src/module.ts"],"sourcesContent":[],"mappings":";;;AAyBA;AAYA;AA4CA;AAGC;;;;;;;UAtES,eAAA;;;SAGD;;;;;;;iBAQO,aAAA,gBAA6B,MAAM;;;;cAYtC;;;;iBA4CG,SAAA;cAGf;wBAAA;;oBAAA"}
|
package/dist/module.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
//#region src/module.ts
|
|
2
|
+
/**
|
|
3
|
+
* Create a require function bound to the given URL.
|
|
4
|
+
* In browser/Worker environments, the returned `require()` throws on invocation
|
|
5
|
+
* since CommonJS modules cannot be loaded.
|
|
6
|
+
*/
|
|
7
|
+
function createRequire(_url) {
|
|
8
|
+
function require(_id) {
|
|
9
|
+
throw new Error(`[vrowser] require() is not supported in browser/Worker environment`);
|
|
10
|
+
}
|
|
11
|
+
require.resolve = (id) => id;
|
|
12
|
+
require.cache = {};
|
|
13
|
+
return require;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* List of Node.js builtin module names (without `node:` prefix).
|
|
17
|
+
*/
|
|
18
|
+
const builtinModules = [
|
|
19
|
+
"assert",
|
|
20
|
+
"buffer",
|
|
21
|
+
"child_process",
|
|
22
|
+
"cluster",
|
|
23
|
+
"console",
|
|
24
|
+
"constants",
|
|
25
|
+
"crypto",
|
|
26
|
+
"dgram",
|
|
27
|
+
"dns",
|
|
28
|
+
"domain",
|
|
29
|
+
"events",
|
|
30
|
+
"fs",
|
|
31
|
+
"http",
|
|
32
|
+
"https",
|
|
33
|
+
"module",
|
|
34
|
+
"net",
|
|
35
|
+
"os",
|
|
36
|
+
"path",
|
|
37
|
+
"perf_hooks",
|
|
38
|
+
"process",
|
|
39
|
+
"punycode",
|
|
40
|
+
"querystring",
|
|
41
|
+
"readline",
|
|
42
|
+
"repl",
|
|
43
|
+
"stream",
|
|
44
|
+
"string_decoder",
|
|
45
|
+
"sys",
|
|
46
|
+
"timers",
|
|
47
|
+
"tls",
|
|
48
|
+
"tty",
|
|
49
|
+
"url",
|
|
50
|
+
"util",
|
|
51
|
+
"v8",
|
|
52
|
+
"vm",
|
|
53
|
+
"worker_threads",
|
|
54
|
+
"zlib"
|
|
55
|
+
];
|
|
56
|
+
const _builtinSet = new Set(builtinModules);
|
|
57
|
+
/**
|
|
58
|
+
* Check if a module name is a Node.js builtin module.
|
|
59
|
+
*/
|
|
60
|
+
function isBuiltin(moduleName) {
|
|
61
|
+
const name = moduleName.startsWith("node:") ? moduleName.slice(5) : moduleName;
|
|
62
|
+
return _builtinSet.has(name);
|
|
63
|
+
}
|
|
64
|
+
var module_default = {
|
|
65
|
+
createRequire,
|
|
66
|
+
builtinModules,
|
|
67
|
+
isBuiltin
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
//#endregion
|
|
71
|
+
export { builtinModules, createRequire, module_default as default, isBuiltin };
|
|
72
|
+
//# sourceMappingURL=module.js.map
|