event-emission 0.2.1 → 0.3.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/README.md +78 -1
- package/dist/event-emission.d.ts +50 -0
- package/dist/event-emission.d.ts.map +1 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/index.cjs +142 -8
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +142 -8
- package/dist/index.js.map +4 -4
- package/dist/interoperability.cjs +120 -6
- package/dist/interoperability.cjs.map +4 -4
- package/dist/interoperability.d.ts.map +1 -1
- package/dist/interoperability.js +120 -6
- package/dist/interoperability.js.map +4 -4
- package/dist/types.d.ts +14 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/event-emission.ts +115 -2
- package/src/factory.ts +149 -13
- package/src/interoperability.ts +10 -0
- package/src/types.ts +41 -4
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@ A lightweight, zero-dependency, type-safe event system with DOM EventTarget ergo
|
|
|
9
9
|
- **Typed events** - Event maps keep payloads and event names in sync
|
|
10
10
|
- **DOM compatible** - `EmissionEvent` is a superset of the built-in `Event`
|
|
11
11
|
- **Familiar API** - `addEventListener`, `removeEventListener`, `dispatchEvent`
|
|
12
|
+
- **Node.js compatible** - `emit`, `on`, `off`, `addListener`, `removeListener`, `prependListener`, and more
|
|
12
13
|
- **TC39 Observable** - Fully compliant `Observable` implementation (passes all `es-observable-tests`)
|
|
13
14
|
- **Async iteration** - `for await...of` over events with backpressure options
|
|
14
15
|
- **Wildcard listeners** - Listen to `*` or namespaced `user:*` patterns
|
|
@@ -169,9 +170,21 @@ const state = createEventTarget(
|
|
|
169
170
|
|
|
170
171
|
## Event listeners
|
|
171
172
|
|
|
173
|
+
### `on(type, listener)`
|
|
174
|
+
|
|
175
|
+
When called with a listener function (or `EventListenerObject`), `on` behaves like Node.js `addListener`—it registers the listener and returns an unsubscribe function.
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
const unsubscribe = events.on('message', (event) => {
|
|
179
|
+
console.log(event.detail.text);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
unsubscribe(); // Remove the listener
|
|
183
|
+
```
|
|
184
|
+
|
|
172
185
|
### `on(type, options?)`
|
|
173
186
|
|
|
174
|
-
|
|
187
|
+
When called without a listener (or with an options object / boolean), `on` creates an `Observable` for a specific event type. This follows the `ObservableEventTarget` proposal, allowing for powerful composition.
|
|
175
188
|
|
|
176
189
|
```typescript
|
|
177
190
|
const clicks = button.on('click', { passive: true });
|
|
@@ -241,6 +254,70 @@ events.addWildcardListener('user:*', (event) => {
|
|
|
241
254
|
|
|
242
255
|
Wildcard events include `{ type: pattern, originalType, detail }`.
|
|
243
256
|
|
|
257
|
+
## Node.js EventEmitter compatibility
|
|
258
|
+
|
|
259
|
+
Every event target also exposes the familiar Node.js `EventEmitter` interface, so you can use whichever style fits your codebase.
|
|
260
|
+
|
|
261
|
+
### `emit(type, detail)`
|
|
262
|
+
|
|
263
|
+
Dispatches an event and returns `true` if listeners were registered for that type, `false` otherwise.
|
|
264
|
+
|
|
265
|
+
```typescript
|
|
266
|
+
events.on('message', (event) => {
|
|
267
|
+
console.log(event.detail.text);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
events.emit('message', { text: 'hello' }); // true
|
|
271
|
+
events.emit('unknown', undefined); // false
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### `off(type, listener)`
|
|
275
|
+
|
|
276
|
+
Removes a listener. Alias for `removeEventListener(type, listener)`.
|
|
277
|
+
|
|
278
|
+
### `addListener(type, listener)` / `removeListener(type, listener)`
|
|
279
|
+
|
|
280
|
+
Aliases for `addEventListener` and `removeEventListener`.
|
|
281
|
+
|
|
282
|
+
### `prependListener(type, listener)`
|
|
283
|
+
|
|
284
|
+
Adds a listener at the **beginning** of the listener list. Returns an unsubscribe function.
|
|
285
|
+
|
|
286
|
+
```typescript
|
|
287
|
+
events.addEventListener('data', () => console.log('second'));
|
|
288
|
+
events.prependListener('data', () => console.log('first'));
|
|
289
|
+
|
|
290
|
+
events.emit('data', value); // logs "first", then "second"
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### `prependOnceListener(type, listener)`
|
|
294
|
+
|
|
295
|
+
Like `prependListener`, but the listener is removed after its first invocation.
|
|
296
|
+
|
|
297
|
+
### `listeners(type)`
|
|
298
|
+
|
|
299
|
+
Returns an array of the listener functions registered for the given type.
|
|
300
|
+
|
|
301
|
+
### `rawListeners(type)`
|
|
302
|
+
|
|
303
|
+
Like `listeners`, but once-listeners return a wrapper function with a `.listener` property pointing to the original callback.
|
|
304
|
+
|
|
305
|
+
### `listenerCount(type)`
|
|
306
|
+
|
|
307
|
+
Returns the number of listeners registered for the given type.
|
|
308
|
+
|
|
309
|
+
### `eventNames()`
|
|
310
|
+
|
|
311
|
+
Returns an array of event type strings that currently have registered listeners.
|
|
312
|
+
|
|
313
|
+
```typescript
|
|
314
|
+
events.on('foo', () => {});
|
|
315
|
+
events.on('bar', () => {});
|
|
316
|
+
|
|
317
|
+
events.eventNames(); // ['foo', 'bar']
|
|
318
|
+
events.listenerCount('foo'); // 1
|
|
319
|
+
```
|
|
320
|
+
|
|
244
321
|
## Async iteration
|
|
245
322
|
|
|
246
323
|
You can use `for await...of` to consume events. This is great for stream-processing events with backpressure.
|
package/dist/event-emission.d.ts
CHANGED
|
@@ -85,6 +85,11 @@ export declare abstract class EventEmission<E extends Record<string, any>> {
|
|
|
85
85
|
* Returns false if the emitter has been completed, true otherwise.
|
|
86
86
|
*/
|
|
87
87
|
dispatchEvent<K extends keyof E & string>(event: DispatchEventInput<E[K], K> | DOMEventLike): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Adds a listener for the specified event type (Node.js-style).
|
|
90
|
+
* Returns an unsubscribe function.
|
|
91
|
+
*/
|
|
92
|
+
on<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): () => void;
|
|
88
93
|
/**
|
|
89
94
|
* Returns an observable for the specified event type.
|
|
90
95
|
*/
|
|
@@ -107,6 +112,51 @@ export declare abstract class EventEmission<E extends Record<string, any>> {
|
|
|
107
112
|
* Forwards all events. If mapFn returns null, the event is skipped.
|
|
108
113
|
*/
|
|
109
114
|
pipe<T extends Record<string, any>>(target: EventTargetLike<T>, mapFn?: <K extends keyof E & string>(event: EmissionEvent<E[K], K>) => DispatchEventInput<T[keyof T & string], keyof T & string> | null): () => void;
|
|
115
|
+
/**
|
|
116
|
+
* Emits an event with the given type and detail.
|
|
117
|
+
* Returns true if the event type had registered listeners, false otherwise.
|
|
118
|
+
*/
|
|
119
|
+
emit<K extends keyof E & string>(type: K, detail: E[K]): boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Removes a listener for the specified event type.
|
|
122
|
+
*/
|
|
123
|
+
off<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): void;
|
|
124
|
+
/**
|
|
125
|
+
* Adds a listener for the specified event type.
|
|
126
|
+
* Returns an unsubscribe function.
|
|
127
|
+
*/
|
|
128
|
+
addListener<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): () => void;
|
|
129
|
+
/**
|
|
130
|
+
* Removes a listener for the specified event type.
|
|
131
|
+
*/
|
|
132
|
+
removeListener<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): void;
|
|
133
|
+
/**
|
|
134
|
+
* Adds a listener at the beginning of the listener list for the specified type.
|
|
135
|
+
* Returns an unsubscribe function.
|
|
136
|
+
*/
|
|
137
|
+
prependListener<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): () => void;
|
|
138
|
+
/**
|
|
139
|
+
* Adds a one-time listener at the beginning of the listener list.
|
|
140
|
+
* Returns an unsubscribe function.
|
|
141
|
+
*/
|
|
142
|
+
prependOnceListener<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): () => void;
|
|
143
|
+
/**
|
|
144
|
+
* Returns an array of listener functions for the specified event type.
|
|
145
|
+
*/
|
|
146
|
+
listeners<K extends keyof E & string>(type: K): Array<EventListenerLike<EmissionEvent<E[K], K>>>;
|
|
147
|
+
/**
|
|
148
|
+
* Returns an array of listener functions for the specified event type.
|
|
149
|
+
* Once-listeners return a wrapper with a `.listener` property pointing to the original.
|
|
150
|
+
*/
|
|
151
|
+
rawListeners<K extends keyof E & string>(type: K): Array<EventListenerLike<EmissionEvent<E[K], K>>>;
|
|
152
|
+
/**
|
|
153
|
+
* Returns the number of listeners for the specified event type.
|
|
154
|
+
*/
|
|
155
|
+
listenerCount<K extends keyof E & string>(type: K): number;
|
|
156
|
+
/**
|
|
157
|
+
* Returns an array of event type names that have registered listeners.
|
|
158
|
+
*/
|
|
159
|
+
eventNames(): Array<string>;
|
|
110
160
|
/**
|
|
111
161
|
* Adds a wildcard listener that receives events matching the pattern.
|
|
112
162
|
* Use '*' for all events, or 'namespace:*' for namespaced events.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-emission.d.ts","sourceRoot":"","sources":["../src/event-emission.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EACV,2BAA2B,EAC3B,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAEH,8BAAsB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;
|
|
1
|
+
{"version":3,"file":"event-emission.d.ts","sourceRoot":"","sources":["../src/event-emission.ts"],"names":[],"mappings":"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"}
|
package/dist/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAKV,eAAe,EAOhB,MAAM,SAAS,CAAC;AAyCjB;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,+EAA+E;IAC/E,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,+BACf,SAAQ,wBAAwB,EAAE,cAAc;IAChD,+CAA+C;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,IAAI,CAAC,EAAE,wBAAwB,GAC9B,eAAe,CAAC,CAAC,CAAC,CAAC;AAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAChD,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,+BAA+B,GACpC,CAAC,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -644,7 +644,17 @@ function createEventTarget(targetOrOpts, opts) {
|
|
|
644
644
|
"complete",
|
|
645
645
|
"subscribe",
|
|
646
646
|
"toObservable",
|
|
647
|
-
"events"
|
|
647
|
+
"events",
|
|
648
|
+
"emit",
|
|
649
|
+
"off",
|
|
650
|
+
"addListener",
|
|
651
|
+
"removeListener",
|
|
652
|
+
"prependListener",
|
|
653
|
+
"prependOnceListener",
|
|
654
|
+
"listeners",
|
|
655
|
+
"rawListeners",
|
|
656
|
+
"listenerCount",
|
|
657
|
+
"eventNames"
|
|
648
658
|
];
|
|
649
659
|
for (const name of methodNames) {
|
|
650
660
|
Object.defineProperty(proxy, name, {
|
|
@@ -922,7 +932,7 @@ function createEventTargetInternal(opts) {
|
|
|
922
932
|
}
|
|
923
933
|
}
|
|
924
934
|
};
|
|
925
|
-
const
|
|
935
|
+
const addListenerInternal = (type, listener, options, position) => {
|
|
926
936
|
if (isCompleted || !listener) {
|
|
927
937
|
return () => {};
|
|
928
938
|
}
|
|
@@ -949,7 +959,11 @@ function createEventTargetInternal(opts) {
|
|
|
949
959
|
signal,
|
|
950
960
|
removed: false
|
|
951
961
|
};
|
|
952
|
-
|
|
962
|
+
if (position === "prepend") {
|
|
963
|
+
list.unshift(record);
|
|
964
|
+
} else {
|
|
965
|
+
list.push(record);
|
|
966
|
+
}
|
|
953
967
|
const unsubscribe2 = () => removeListenerRecord(type, record);
|
|
954
968
|
if (signal) {
|
|
955
969
|
const onAbort = () => removeListenerRecord(type, record);
|
|
@@ -960,6 +974,9 @@ function createEventTargetInternal(opts) {
|
|
|
960
974
|
}
|
|
961
975
|
return unsubscribe2;
|
|
962
976
|
};
|
|
977
|
+
const addEventListener = (type, listener, options) => {
|
|
978
|
+
return addListenerInternal(type, listener, options, "append");
|
|
979
|
+
};
|
|
963
980
|
const addWildcardListener = (pattern, listener, options) => {
|
|
964
981
|
if (isCompleted)
|
|
965
982
|
return () => {};
|
|
@@ -1130,7 +1147,18 @@ function createEventTargetInternal(opts) {
|
|
|
1130
1147
|
}
|
|
1131
1148
|
wildcardListeners.clear();
|
|
1132
1149
|
};
|
|
1133
|
-
const
|
|
1150
|
+
const isListenerArg = (arg) => {
|
|
1151
|
+
if (typeof arg === "function")
|
|
1152
|
+
return true;
|
|
1153
|
+
if (arg && typeof arg === "object" && typeof arg.handleEvent === "function")
|
|
1154
|
+
return true;
|
|
1155
|
+
return false;
|
|
1156
|
+
};
|
|
1157
|
+
const on = (type, optionsOrListener) => {
|
|
1158
|
+
if (isListenerArg(optionsOrListener)) {
|
|
1159
|
+
return addEventListener(type, optionsOrListener);
|
|
1160
|
+
}
|
|
1161
|
+
const options = optionsOrListener;
|
|
1134
1162
|
return new Observable((observer) => {
|
|
1135
1163
|
let opts2;
|
|
1136
1164
|
if (typeof options === "boolean") {
|
|
@@ -1486,6 +1514,72 @@ function createEventTargetInternal(opts) {
|
|
|
1486
1514
|
};
|
|
1487
1515
|
return iterator;
|
|
1488
1516
|
}
|
|
1517
|
+
const emit = (type, detail) => {
|
|
1518
|
+
if (isCompleted)
|
|
1519
|
+
return false;
|
|
1520
|
+
const list = listeners.get(type);
|
|
1521
|
+
const hasListeners = list !== undefined && list.length > 0;
|
|
1522
|
+
let hasWildcard = false;
|
|
1523
|
+
if (wildcardListeners.size > 0) {
|
|
1524
|
+
for (const rec of wildcardListeners) {
|
|
1525
|
+
if (matchesWildcard(type, rec.pattern)) {
|
|
1526
|
+
hasWildcard = true;
|
|
1527
|
+
break;
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1531
|
+
dispatchEvent({ type, detail });
|
|
1532
|
+
return hasListeners || hasWildcard;
|
|
1533
|
+
};
|
|
1534
|
+
const off = (type, listener) => {
|
|
1535
|
+
removeEventListener(type, listener);
|
|
1536
|
+
};
|
|
1537
|
+
const addListener = (type, listener) => {
|
|
1538
|
+
return addEventListener(type, listener);
|
|
1539
|
+
};
|
|
1540
|
+
const removeListener = (type, listener) => {
|
|
1541
|
+
removeEventListener(type, listener);
|
|
1542
|
+
};
|
|
1543
|
+
const prependListener = (type, listener) => {
|
|
1544
|
+
return addListenerInternal(type, listener, undefined, "prepend");
|
|
1545
|
+
};
|
|
1546
|
+
const prependOnceListener = (type, listener) => {
|
|
1547
|
+
return addListenerInternal(type, listener, { once: true }, "prepend");
|
|
1548
|
+
};
|
|
1549
|
+
const getListeners = (type) => {
|
|
1550
|
+
const list = listeners.get(type);
|
|
1551
|
+
if (!list)
|
|
1552
|
+
return [];
|
|
1553
|
+
return list.filter((r) => !r.removed).map((r) => r.original);
|
|
1554
|
+
};
|
|
1555
|
+
const rawListenersMethod = (type) => {
|
|
1556
|
+
const list = listeners.get(type);
|
|
1557
|
+
if (!list)
|
|
1558
|
+
return [];
|
|
1559
|
+
return list.filter((r) => !r.removed).map((r) => {
|
|
1560
|
+
if (r.once) {
|
|
1561
|
+
const wrapper = (...args) => r.callback(...args);
|
|
1562
|
+
wrapper.listener = r.original;
|
|
1563
|
+
return wrapper;
|
|
1564
|
+
}
|
|
1565
|
+
return r.original;
|
|
1566
|
+
});
|
|
1567
|
+
};
|
|
1568
|
+
const listenerCount = (type) => {
|
|
1569
|
+
const list = listeners.get(type);
|
|
1570
|
+
if (!list)
|
|
1571
|
+
return 0;
|
|
1572
|
+
return list.filter((r) => !r.removed).length;
|
|
1573
|
+
};
|
|
1574
|
+
const eventNamesMethod = () => {
|
|
1575
|
+
const names = [];
|
|
1576
|
+
for (const [type, list] of listeners) {
|
|
1577
|
+
if (list.some((r) => !r.removed)) {
|
|
1578
|
+
names.push(type);
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
1581
|
+
return names;
|
|
1582
|
+
};
|
|
1489
1583
|
const target = {
|
|
1490
1584
|
addEventListener,
|
|
1491
1585
|
removeEventListener,
|
|
@@ -1503,7 +1597,17 @@ function createEventTargetInternal(opts) {
|
|
|
1503
1597
|
},
|
|
1504
1598
|
subscribe,
|
|
1505
1599
|
toObservable,
|
|
1506
|
-
events
|
|
1600
|
+
events,
|
|
1601
|
+
emit,
|
|
1602
|
+
off,
|
|
1603
|
+
addListener,
|
|
1604
|
+
removeListener,
|
|
1605
|
+
prependListener,
|
|
1606
|
+
prependOnceListener,
|
|
1607
|
+
listeners: getListeners,
|
|
1608
|
+
rawListeners: rawListenersMethod,
|
|
1609
|
+
listenerCount,
|
|
1610
|
+
eventNames: eventNamesMethod
|
|
1507
1611
|
};
|
|
1508
1612
|
target[SymbolObservable] = () => {
|
|
1509
1613
|
return toObservable();
|
|
@@ -1525,8 +1629,8 @@ class EventEmission {
|
|
|
1525
1629
|
dispatchEvent(event) {
|
|
1526
1630
|
return this.#target.dispatchEvent(event);
|
|
1527
1631
|
}
|
|
1528
|
-
on(type,
|
|
1529
|
-
return this.#target.on(type,
|
|
1632
|
+
on(type, optionsOrListener) {
|
|
1633
|
+
return this.#target.on(type, optionsOrListener);
|
|
1530
1634
|
}
|
|
1531
1635
|
once(type, listener, options) {
|
|
1532
1636
|
return this.#target.once(type, listener, options);
|
|
@@ -1540,6 +1644,36 @@ class EventEmission {
|
|
|
1540
1644
|
pipe(target, mapFn) {
|
|
1541
1645
|
return this.#target.pipe(target, mapFn);
|
|
1542
1646
|
}
|
|
1647
|
+
emit(type, detail) {
|
|
1648
|
+
return this.#target.emit(type, detail);
|
|
1649
|
+
}
|
|
1650
|
+
off(type, listener) {
|
|
1651
|
+
this.#target.off(type, listener);
|
|
1652
|
+
}
|
|
1653
|
+
addListener(type, listener) {
|
|
1654
|
+
return this.#target.addListener(type, listener);
|
|
1655
|
+
}
|
|
1656
|
+
removeListener(type, listener) {
|
|
1657
|
+
this.#target.removeListener(type, listener);
|
|
1658
|
+
}
|
|
1659
|
+
prependListener(type, listener) {
|
|
1660
|
+
return this.#target.prependListener(type, listener);
|
|
1661
|
+
}
|
|
1662
|
+
prependOnceListener(type, listener) {
|
|
1663
|
+
return this.#target.prependOnceListener(type, listener);
|
|
1664
|
+
}
|
|
1665
|
+
listeners(type) {
|
|
1666
|
+
return this.#target.listeners(type);
|
|
1667
|
+
}
|
|
1668
|
+
rawListeners(type) {
|
|
1669
|
+
return this.#target.rawListeners(type);
|
|
1670
|
+
}
|
|
1671
|
+
listenerCount(type) {
|
|
1672
|
+
return this.#target.listenerCount(type);
|
|
1673
|
+
}
|
|
1674
|
+
eventNames() {
|
|
1675
|
+
return this.#target.eventNames();
|
|
1676
|
+
}
|
|
1543
1677
|
addWildcardListener(pattern, listener, options) {
|
|
1544
1678
|
return this.#target.addWildcardListener(pattern, listener, options);
|
|
1545
1679
|
}
|
|
@@ -1580,4 +1714,4 @@ class EventEmission {
|
|
|
1580
1714
|
}
|
|
1581
1715
|
})
|
|
1582
1716
|
|
|
1583
|
-
//# debugId=
|
|
1717
|
+
//# debugId=FAADC5AA76187FDD64756E2164756E21
|