event-emission 0.2.0 → 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 +158 -25
- package/dist/event-emission.d.ts +63 -14
- package/dist/event-emission.d.ts.map +1 -1
- package/dist/factory.d.ts +1 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/index.cjs +614 -291
- package/dist/index.cjs.map +8 -9
- package/dist/index.d.ts +1 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +589 -284
- package/dist/index.js.map +8 -9
- package/dist/interoperability.cjs +1719 -0
- package/dist/interoperability.cjs.map +15 -0
- package/dist/{interop.d.ts → interoperability.d.ts} +2 -1
- package/dist/interoperability.d.ts.map +1 -0
- package/dist/interoperability.js +1669 -0
- package/dist/interoperability.js.map +15 -0
- package/dist/observable.cjs +286 -0
- package/dist/observable.cjs.map +11 -0
- package/dist/observable.js +253 -0
- package/dist/observable.js.map +11 -0
- package/dist/observe.cjs +344 -0
- package/dist/observe.cjs.map +10 -0
- package/dist/observe.d.ts +6 -1
- package/dist/observe.d.ts.map +1 -1
- package/dist/observe.js +313 -0
- package/dist/observe.js.map +10 -0
- package/dist/symbols.d.ts +1 -1
- package/dist/types.cjs +35 -0
- package/dist/types.cjs.map +9 -0
- package/dist/types.d.ts +73 -25
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +9 -0
- package/package.json +25 -1
- package/src/event-emission.ts +140 -21
- package/src/factory.ts +686 -230
- package/src/index.ts +4 -33
- package/src/{interop.ts → interoperability.ts} +34 -6
- package/src/observe.ts +54 -17
- package/src/symbols.ts +1 -1
- package/src/types.ts +115 -33
- package/dist/interop.d.ts.map +0 -1
package/dist/types.d.ts
CHANGED
|
@@ -5,15 +5,17 @@ declare global {
|
|
|
5
5
|
* Event structure passed to listeners.
|
|
6
6
|
* Matches the shape of a DOM CustomEvent to ensure compatibility.
|
|
7
7
|
*/
|
|
8
|
-
export interface EmissionEvent<Detail> {
|
|
8
|
+
export interface EmissionEvent<Detail, Type extends string = string> {
|
|
9
9
|
/** The event type identifier. */
|
|
10
|
-
readonly type:
|
|
10
|
+
readonly type: Type;
|
|
11
11
|
/** The event payload data. */
|
|
12
12
|
readonly detail: Detail;
|
|
13
13
|
/** DOM Event compatibility: true if the event bubbles. */
|
|
14
14
|
readonly bubbles: boolean;
|
|
15
15
|
/** DOM Event compatibility: true if the event can be cancelled. */
|
|
16
16
|
readonly cancelable: boolean;
|
|
17
|
+
/** DOM Event compatibility: legacy alias for stopPropagation(). */
|
|
18
|
+
cancelBubble: boolean;
|
|
17
19
|
/** DOM Event compatibility: true if the event can cross Shadow DOM boundaries. */
|
|
18
20
|
readonly composed: boolean;
|
|
19
21
|
/** DOM Event compatibility: the object currently processing the event. */
|
|
@@ -24,12 +26,18 @@ export interface EmissionEvent<Detail> {
|
|
|
24
26
|
readonly eventPhase: number;
|
|
25
27
|
/** DOM Event compatibility: true if the event was dispatched by the user agent. */
|
|
26
28
|
readonly isTrusted: boolean;
|
|
29
|
+
/** DOM Event compatibility: legacy alias for defaultPrevented. */
|
|
30
|
+
returnValue: boolean;
|
|
31
|
+
/** DOM Event compatibility: legacy alias for target. */
|
|
32
|
+
readonly srcElement: unknown;
|
|
27
33
|
/** DOM Event compatibility: the object that originally dispatched the event. */
|
|
28
34
|
readonly target: unknown;
|
|
29
35
|
/** DOM Event compatibility: the time at which the event was created. */
|
|
30
36
|
readonly timeStamp: number;
|
|
31
37
|
/** DOM Event compatibility: returns the path of nodes the event will travel through. */
|
|
32
38
|
composedPath(): unknown[];
|
|
39
|
+
/** DOM Event compatibility: legacy initializer. */
|
|
40
|
+
initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
|
|
33
41
|
/** DOM Event compatibility: cancels the event if it is cancelable. */
|
|
34
42
|
preventDefault(): void;
|
|
35
43
|
/** DOM Event compatibility: prevents other listeners from being called. */
|
|
@@ -44,10 +52,9 @@ export interface EmissionEvent<Detail> {
|
|
|
44
52
|
/**
|
|
45
53
|
* Event passed to wildcard listeners, includes the original event type.
|
|
46
54
|
*/
|
|
47
|
-
export interface WildcardEvent<E extends Record<string, unknown>> extends EmissionEvent<E[keyof E]
|
|
55
|
+
export interface WildcardEvent<E extends Record<string, unknown>> extends EmissionEvent<E[keyof E], '*' | `${string}:*`> {
|
|
48
56
|
readonly type: '*' | `${string}:*`;
|
|
49
57
|
readonly originalType: keyof E & string;
|
|
50
|
-
readonly detail: E[keyof E];
|
|
51
58
|
}
|
|
52
59
|
/**
|
|
53
60
|
* Minimal AbortSignal lookalike so consumers do not need DOM libs.
|
|
@@ -61,10 +68,34 @@ export interface MinimalAbortSignal {
|
|
|
61
68
|
/**
|
|
62
69
|
* Options for addEventListener.
|
|
63
70
|
*/
|
|
64
|
-
export
|
|
71
|
+
export interface EventListenerOptionsLike {
|
|
72
|
+
capture?: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Options for addEventListener.
|
|
76
|
+
*/
|
|
77
|
+
export type AddEventListenerOptionsLike = EventListenerOptionsLike & {
|
|
65
78
|
once?: boolean;
|
|
79
|
+
passive?: boolean;
|
|
66
80
|
signal?: MinimalAbortSignal;
|
|
67
81
|
};
|
|
82
|
+
/**
|
|
83
|
+
* EventListener-like callback (function or object with handleEvent).
|
|
84
|
+
*/
|
|
85
|
+
export type EventListenerObject<T> = {
|
|
86
|
+
handleEvent: (event: T) => void | Promise<void>;
|
|
87
|
+
};
|
|
88
|
+
export type EventListenerLike<T> = ((event: T) => void | Promise<void>) | EventListenerObject<T>;
|
|
89
|
+
/**
|
|
90
|
+
* Minimal event input accepted by dispatchEvent.
|
|
91
|
+
*/
|
|
92
|
+
export type DispatchEventInput<Detail, Type extends string = string> = {
|
|
93
|
+
type: Type;
|
|
94
|
+
detail: Detail;
|
|
95
|
+
bubbles?: boolean;
|
|
96
|
+
cancelable?: boolean;
|
|
97
|
+
composed?: boolean;
|
|
98
|
+
};
|
|
68
99
|
/**
|
|
69
100
|
* TC39 Observable observer interface.
|
|
70
101
|
*/
|
|
@@ -104,20 +135,24 @@ export interface AsyncIteratorOptions {
|
|
|
104
135
|
*/
|
|
105
136
|
export type EventsIteratorOptions = AsyncIteratorOptions;
|
|
106
137
|
/**
|
|
107
|
-
* Options for
|
|
138
|
+
* Options for interoperability helpers.
|
|
108
139
|
*/
|
|
109
140
|
export interface InteropOptions {
|
|
110
141
|
signal?: MinimalAbortSignal;
|
|
111
142
|
}
|
|
112
143
|
/**
|
|
113
|
-
* Minimal DOM Event interface for
|
|
144
|
+
* Minimal DOM Event interface for interoperability.
|
|
114
145
|
*/
|
|
115
146
|
export interface DOMEventLike {
|
|
116
147
|
type: string;
|
|
117
148
|
detail?: unknown;
|
|
149
|
+
bubbles?: boolean;
|
|
150
|
+
cancelable?: boolean;
|
|
151
|
+
composed?: boolean;
|
|
152
|
+
defaultPrevented?: boolean;
|
|
118
153
|
}
|
|
119
154
|
/**
|
|
120
|
-
* Minimal DOM EventTarget interface for
|
|
155
|
+
* Minimal DOM EventTarget interface for interoperability.
|
|
121
156
|
*/
|
|
122
157
|
export interface DOMEventTargetLike {
|
|
123
158
|
addEventListener(type: string, listener: (event: DOMEventLike) => void): void;
|
|
@@ -128,9 +163,14 @@ export interface DOMEventTargetLike {
|
|
|
128
163
|
* Internal listener record type.
|
|
129
164
|
*/
|
|
130
165
|
export type Listener<E> = {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
166
|
+
type: string;
|
|
167
|
+
original: EventListenerLike<EmissionEvent<E>>;
|
|
168
|
+
callback: (event: EmissionEvent<E>) => void | Promise<void>;
|
|
169
|
+
capture: boolean;
|
|
170
|
+
passive: boolean;
|
|
171
|
+
once: boolean;
|
|
172
|
+
signal?: MinimalAbortSignal | null;
|
|
173
|
+
removed: boolean;
|
|
134
174
|
abortHandler?: () => void;
|
|
135
175
|
};
|
|
136
176
|
/**
|
|
@@ -149,37 +189,45 @@ export type WildcardListener<E extends Record<string, unknown>> = {
|
|
|
149
189
|
export interface OnOptions extends AddEventListenerOptionsLike {
|
|
150
190
|
/** Listen for an "error" event and send it to the observer's error method. */
|
|
151
191
|
receiveError?: boolean;
|
|
152
|
-
/** Member indicates that the callback will not cancel the event. */
|
|
153
|
-
passive?: boolean;
|
|
154
192
|
/** Handler function called before the event is dispatched to observers. */
|
|
155
193
|
handler?: (event: EmissionEvent<unknown>) => void;
|
|
156
|
-
/** Member indicates that the Observable will complete after one event. */
|
|
157
|
-
once?: boolean;
|
|
158
194
|
}
|
|
159
195
|
/**
|
|
160
196
|
* Type-safe event target interface compatible with DOM EventTarget
|
|
161
197
|
* and TC39 Observable patterns.
|
|
162
198
|
*/
|
|
163
199
|
export interface EventTargetLike<E extends Record<string, any>> {
|
|
164
|
-
addEventListener: <K extends keyof E & string>(type: K, listener:
|
|
165
|
-
removeEventListener: <K extends keyof E & string>(type: K, listener:
|
|
166
|
-
dispatchEvent: <K extends keyof E & string>(event:
|
|
200
|
+
addEventListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>> | null, options?: AddEventListenerOptionsLike | boolean) => () => void;
|
|
201
|
+
removeEventListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>> | null, options?: EventListenerOptionsLike | boolean) => void;
|
|
202
|
+
dispatchEvent: <K extends keyof E & string>(event: DispatchEventInput<E[K], K> | DOMEventLike) => boolean;
|
|
167
203
|
clear: () => void;
|
|
168
|
-
on:
|
|
169
|
-
|
|
204
|
+
on: {
|
|
205
|
+
<K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): () => void;
|
|
206
|
+
<K extends keyof E & string>(type: K, options?: OnOptions | boolean): ObservableLike<EmissionEvent<E[K], K>>;
|
|
207
|
+
};
|
|
208
|
+
once: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>> | null, options?: Omit<AddEventListenerOptionsLike, 'once'> | boolean) => () => void;
|
|
170
209
|
removeAllListeners: <K extends keyof E & string>(type?: K) => void;
|
|
210
|
+
emit: <K extends keyof E & string>(type: K, detail: E[K]) => boolean;
|
|
211
|
+
off: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>) => void;
|
|
212
|
+
addListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>) => () => void;
|
|
213
|
+
removeListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>) => void;
|
|
214
|
+
prependListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>) => () => void;
|
|
215
|
+
prependOnceListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>) => () => void;
|
|
216
|
+
listeners: <K extends keyof E & string>(type: K) => Array<EventListenerLike<EmissionEvent<E[K], K>>>;
|
|
217
|
+
rawListeners: <K extends keyof E & string>(type: K) => Array<EventListenerLike<EmissionEvent<E[K], K>>>;
|
|
218
|
+
listenerCount: <K extends keyof E & string>(type: K) => number;
|
|
219
|
+
eventNames: () => Array<string>;
|
|
171
220
|
/**
|
|
172
221
|
* Pipe events from this emitter to another target.
|
|
173
|
-
*
|
|
174
|
-
* Events for types registered after piping won't be forwarded automatically.
|
|
222
|
+
* Forwards all events. If mapFn returns null, the event is skipped.
|
|
175
223
|
*/
|
|
176
|
-
pipe: <T extends Record<string, any>>(target: EventTargetLike<T>, mapFn?: <K extends keyof E & string>(event: EmissionEvent<E[K]>) =>
|
|
224
|
+
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;
|
|
177
225
|
complete: () => void;
|
|
178
226
|
readonly completed: boolean;
|
|
179
227
|
addWildcardListener: (pattern: '*' | `${string}:*`, listener: (event: WildcardEvent<E>) => void | Promise<void>, options?: AddEventListenerOptionsLike) => () => void;
|
|
180
228
|
removeWildcardListener: (pattern: '*' | `${string}:*`, listener: (event: WildcardEvent<E>) => void | Promise<void>) => void;
|
|
181
|
-
subscribe: <K extends keyof E & string>(type: K, observerOrNext?: Observer<EmissionEvent<E[K]>> | ((value: EmissionEvent<E[K]>) => void), error?: (err: unknown) => void, complete?: () => void) => Subscription;
|
|
229
|
+
subscribe: <K extends keyof E & string>(type: K, observerOrNext?: Observer<EmissionEvent<E[K], K>> | ((value: EmissionEvent<E[K], K>) => void), error?: (err: unknown) => void, complete?: () => void) => Subscription;
|
|
182
230
|
toObservable: () => ObservableLike<EmissionEvent<E[keyof E]>>;
|
|
183
|
-
events: <K extends keyof E & string>(type: K, options?: AsyncIteratorOptions) => AsyncIterableIterator<EmissionEvent<E[K]>>;
|
|
231
|
+
events: <K extends keyof E & string>(type: K, options?: AsyncIteratorOptions) => AsyncIterableIterator<EmissionEvent<E[K], K>>;
|
|
184
232
|
}
|
|
185
233
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,CAAC,MAAM,CAAC;IACb,SAAS,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "event-emission",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Lightweight typed event emitter with DOM EventTarget and TC39 Observable compatibility",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"event",
|
|
@@ -30,6 +30,30 @@
|
|
|
30
30
|
"import": "./dist/index.js",
|
|
31
31
|
"require": "./dist/index.cjs",
|
|
32
32
|
"default": "./dist/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./observe": {
|
|
35
|
+
"types": "./dist/observe.d.ts",
|
|
36
|
+
"import": "./dist/observe.js",
|
|
37
|
+
"require": "./dist/observe.cjs",
|
|
38
|
+
"default": "./dist/observe.js"
|
|
39
|
+
},
|
|
40
|
+
"./observable": {
|
|
41
|
+
"types": "./dist/observable.d.ts",
|
|
42
|
+
"import": "./dist/observable.js",
|
|
43
|
+
"require": "./dist/observable.cjs",
|
|
44
|
+
"default": "./dist/observable.js"
|
|
45
|
+
},
|
|
46
|
+
"./interoperability": {
|
|
47
|
+
"types": "./dist/interoperability.d.ts",
|
|
48
|
+
"import": "./dist/interoperability.js",
|
|
49
|
+
"require": "./dist/interoperability.cjs",
|
|
50
|
+
"default": "./dist/interoperability.js"
|
|
51
|
+
},
|
|
52
|
+
"./types": {
|
|
53
|
+
"types": "./dist/types.d.ts",
|
|
54
|
+
"import": "./dist/types.js",
|
|
55
|
+
"require": "./dist/types.cjs",
|
|
56
|
+
"default": "./dist/types.js"
|
|
33
57
|
}
|
|
34
58
|
},
|
|
35
59
|
"main": "./dist/index.js",
|
package/src/event-emission.ts
CHANGED
|
@@ -2,7 +2,11 @@ import { createEventTarget } from './factory';
|
|
|
2
2
|
import { SymbolObservable } from './symbols';
|
|
3
3
|
import type {
|
|
4
4
|
AddEventListenerOptionsLike,
|
|
5
|
+
DispatchEventInput,
|
|
6
|
+
DOMEventLike,
|
|
5
7
|
EmissionEvent,
|
|
8
|
+
EventListenerLike,
|
|
9
|
+
EventListenerOptionsLike,
|
|
6
10
|
EventsIteratorOptions,
|
|
7
11
|
EventTargetLike,
|
|
8
12
|
ObservableLike,
|
|
@@ -19,7 +23,7 @@ import type {
|
|
|
19
23
|
* Extend this class to create custom event emitters with typed events.
|
|
20
24
|
* The class provides:
|
|
21
25
|
* - DOM EventTarget compatible API (addEventListener, removeEventListener, dispatchEvent)
|
|
22
|
-
* - TC39 Observable
|
|
26
|
+
* - TC39 Observable interoperability (subscribe, Symbol.observable)
|
|
23
27
|
* - Async iteration support (events() method)
|
|
24
28
|
* - Wildcard listeners for namespaced events
|
|
25
29
|
* - Lifecycle management (complete(), completed)
|
|
@@ -51,7 +55,7 @@ import type {
|
|
|
51
55
|
* });
|
|
52
56
|
* ```
|
|
53
57
|
*
|
|
54
|
-
* @example TC39 Observable
|
|
58
|
+
* @example TC39 Observable interoperability
|
|
55
59
|
* ```typescript
|
|
56
60
|
* const service = new UserService();
|
|
57
61
|
*
|
|
@@ -94,8 +98,8 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
94
98
|
*/
|
|
95
99
|
addEventListener<K extends keyof E & string>(
|
|
96
100
|
type: K,
|
|
97
|
-
listener:
|
|
98
|
-
options?: AddEventListenerOptionsLike,
|
|
101
|
+
listener: EventListenerLike<EmissionEvent<E[K], K>> | null,
|
|
102
|
+
options?: AddEventListenerOptionsLike | boolean,
|
|
99
103
|
): () => void {
|
|
100
104
|
return this.#target.addEventListener(type, listener, options);
|
|
101
105
|
}
|
|
@@ -105,16 +109,19 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
105
109
|
*/
|
|
106
110
|
removeEventListener<K extends keyof E & string>(
|
|
107
111
|
type: K,
|
|
108
|
-
listener:
|
|
112
|
+
listener: EventListenerLike<EmissionEvent<E[K], K>> | null,
|
|
113
|
+
options?: EventListenerOptionsLike | boolean,
|
|
109
114
|
): void {
|
|
110
|
-
this.#target.removeEventListener(type, listener);
|
|
115
|
+
this.#target.removeEventListener(type, listener, options);
|
|
111
116
|
}
|
|
112
117
|
|
|
113
118
|
/**
|
|
114
119
|
* Dispatches an event to all registered listeners.
|
|
115
120
|
* Returns false if the emitter has been completed, true otherwise.
|
|
116
121
|
*/
|
|
117
|
-
dispatchEvent<K extends keyof E & string>(
|
|
122
|
+
dispatchEvent<K extends keyof E & string>(
|
|
123
|
+
event: DispatchEventInput<E[K], K> | DOMEventLike,
|
|
124
|
+
): boolean {
|
|
118
125
|
return this.#target.dispatchEvent(event);
|
|
119
126
|
}
|
|
120
127
|
|
|
@@ -122,14 +129,29 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
122
129
|
// Convenience Methods
|
|
123
130
|
// ==========================================================================
|
|
124
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Adds a listener for the specified event type (Node.js-style).
|
|
134
|
+
* Returns an unsubscribe function.
|
|
135
|
+
*/
|
|
136
|
+
on<K extends keyof E & string>(
|
|
137
|
+
type: K,
|
|
138
|
+
listener: EventListenerLike<EmissionEvent<E[K], K>>,
|
|
139
|
+
): () => void;
|
|
140
|
+
|
|
125
141
|
/**
|
|
126
142
|
* Returns an observable for the specified event type.
|
|
127
143
|
*/
|
|
128
144
|
on<K extends keyof E & string>(
|
|
129
145
|
type: K,
|
|
130
146
|
options?: OnOptions | boolean,
|
|
131
|
-
): ObservableLike<EmissionEvent<E[K]
|
|
132
|
-
|
|
147
|
+
): ObservableLike<EmissionEvent<E[K], K>>;
|
|
148
|
+
|
|
149
|
+
on<K extends keyof E & string>(
|
|
150
|
+
type: K,
|
|
151
|
+
optionsOrListener?: OnOptions | boolean | EventListenerLike<EmissionEvent<E[K], K>>,
|
|
152
|
+
): ObservableLike<EmissionEvent<E[K], K>> | (() => void) {
|
|
153
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
|
|
154
|
+
return this.#target.on(type, optionsOrListener as any);
|
|
133
155
|
}
|
|
134
156
|
|
|
135
157
|
/**
|
|
@@ -138,8 +160,8 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
138
160
|
*/
|
|
139
161
|
once<K extends keyof E & string>(
|
|
140
162
|
type: K,
|
|
141
|
-
listener:
|
|
142
|
-
options?: Omit<AddEventListenerOptionsLike, 'once'
|
|
163
|
+
listener: EventListenerLike<EmissionEvent<E[K], K>> | null,
|
|
164
|
+
options?: Omit<AddEventListenerOptionsLike, 'once'> | boolean,
|
|
143
165
|
): () => void {
|
|
144
166
|
return this.#target.once(type, listener, options);
|
|
145
167
|
}
|
|
@@ -160,19 +182,116 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
160
182
|
|
|
161
183
|
/**
|
|
162
184
|
* Pipe events from this emitter to another target.
|
|
163
|
-
*
|
|
164
|
-
* Events for types registered after piping won't be forwarded automatically.
|
|
185
|
+
* Forwards all events. If mapFn returns null, the event is skipped.
|
|
165
186
|
*/
|
|
166
187
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Generic constraint requires any
|
|
167
188
|
pipe<T extends Record<string, any>>(
|
|
168
189
|
target: EventTargetLike<T>,
|
|
169
190
|
mapFn?: <K extends keyof E & string>(
|
|
170
|
-
event: EmissionEvent<E[K]>,
|
|
171
|
-
) =>
|
|
191
|
+
event: EmissionEvent<E[K], K>,
|
|
192
|
+
) => DispatchEventInput<T[keyof T & string], keyof T & string> | null,
|
|
172
193
|
): () => void {
|
|
173
194
|
return this.#target.pipe(target, mapFn);
|
|
174
195
|
}
|
|
175
196
|
|
|
197
|
+
// ==========================================================================
|
|
198
|
+
// Node.js EventEmitter Compatibility
|
|
199
|
+
// ==========================================================================
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Emits an event with the given type and detail.
|
|
203
|
+
* Returns true if the event type had registered listeners, false otherwise.
|
|
204
|
+
*/
|
|
205
|
+
emit<K extends keyof E & string>(type: K, detail: E[K]): boolean {
|
|
206
|
+
return this.#target.emit(type, detail);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Removes a listener for the specified event type.
|
|
211
|
+
*/
|
|
212
|
+
off<K extends keyof E & string>(
|
|
213
|
+
type: K,
|
|
214
|
+
listener: EventListenerLike<EmissionEvent<E[K], K>>,
|
|
215
|
+
): void {
|
|
216
|
+
this.#target.off(type, listener);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Adds a listener for the specified event type.
|
|
221
|
+
* Returns an unsubscribe function.
|
|
222
|
+
*/
|
|
223
|
+
addListener<K extends keyof E & string>(
|
|
224
|
+
type: K,
|
|
225
|
+
listener: EventListenerLike<EmissionEvent<E[K], K>>,
|
|
226
|
+
): () => void {
|
|
227
|
+
return this.#target.addListener(type, listener);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Removes a listener for the specified event type.
|
|
232
|
+
*/
|
|
233
|
+
removeListener<K extends keyof E & string>(
|
|
234
|
+
type: K,
|
|
235
|
+
listener: EventListenerLike<EmissionEvent<E[K], K>>,
|
|
236
|
+
): void {
|
|
237
|
+
this.#target.removeListener(type, listener);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Adds a listener at the beginning of the listener list for the specified type.
|
|
242
|
+
* Returns an unsubscribe function.
|
|
243
|
+
*/
|
|
244
|
+
prependListener<K extends keyof E & string>(
|
|
245
|
+
type: K,
|
|
246
|
+
listener: EventListenerLike<EmissionEvent<E[K], K>>,
|
|
247
|
+
): () => void {
|
|
248
|
+
return this.#target.prependListener(type, listener);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Adds a one-time listener at the beginning of the listener list.
|
|
253
|
+
* Returns an unsubscribe function.
|
|
254
|
+
*/
|
|
255
|
+
prependOnceListener<K extends keyof E & string>(
|
|
256
|
+
type: K,
|
|
257
|
+
listener: EventListenerLike<EmissionEvent<E[K], K>>,
|
|
258
|
+
): () => void {
|
|
259
|
+
return this.#target.prependOnceListener(type, listener);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Returns an array of listener functions for the specified event type.
|
|
264
|
+
*/
|
|
265
|
+
listeners<K extends keyof E & string>(
|
|
266
|
+
type: K,
|
|
267
|
+
): Array<EventListenerLike<EmissionEvent<E[K], K>>> {
|
|
268
|
+
return this.#target.listeners(type);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Returns an array of listener functions for the specified event type.
|
|
273
|
+
* Once-listeners return a wrapper with a `.listener` property pointing to the original.
|
|
274
|
+
*/
|
|
275
|
+
rawListeners<K extends keyof E & string>(
|
|
276
|
+
type: K,
|
|
277
|
+
): Array<EventListenerLike<EmissionEvent<E[K], K>>> {
|
|
278
|
+
return this.#target.rawListeners(type);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Returns the number of listeners for the specified event type.
|
|
283
|
+
*/
|
|
284
|
+
listenerCount<K extends keyof E & string>(type: K): number {
|
|
285
|
+
return this.#target.listenerCount(type);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Returns an array of event type names that have registered listeners.
|
|
290
|
+
*/
|
|
291
|
+
eventNames(): Array<string> {
|
|
292
|
+
return this.#target.eventNames();
|
|
293
|
+
}
|
|
294
|
+
|
|
176
295
|
// ==========================================================================
|
|
177
296
|
// Wildcard Support
|
|
178
297
|
// ==========================================================================
|
|
@@ -218,8 +337,8 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
218
337
|
subscribe<K extends keyof E & string>(
|
|
219
338
|
type: K,
|
|
220
339
|
observerOrNext?:
|
|
221
|
-
| Observer<EmissionEvent<E[K]>>
|
|
222
|
-
| ((value: EmissionEvent<E[K]>) => void),
|
|
340
|
+
| Observer<EmissionEvent<E[K], K>>
|
|
341
|
+
| ((value: EmissionEvent<E[K], K>) => void),
|
|
223
342
|
error?: (err: unknown) => void,
|
|
224
343
|
completeHandler?: () => void,
|
|
225
344
|
): Subscription;
|
|
@@ -233,8 +352,8 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
233
352
|
| Observer<EmissionEvent<E[keyof E]>>
|
|
234
353
|
| ((value: EmissionEvent<E[keyof E]>) => void),
|
|
235
354
|
observerOrNext?:
|
|
236
|
-
| Observer<EmissionEvent<E[K]>>
|
|
237
|
-
| ((value: EmissionEvent<E[K]>) => void),
|
|
355
|
+
| Observer<EmissionEvent<E[K], K>>
|
|
356
|
+
| ((value: EmissionEvent<E[K], K>) => void),
|
|
238
357
|
error?: (err: unknown) => void,
|
|
239
358
|
completeHandler?: () => void,
|
|
240
359
|
): Subscription {
|
|
@@ -282,7 +401,7 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
282
401
|
}
|
|
283
402
|
|
|
284
403
|
/**
|
|
285
|
-
* Returns this observable for Symbol.observable
|
|
404
|
+
* Returns this observable for Symbol.observable interoperability.
|
|
286
405
|
*/
|
|
287
406
|
[SymbolObservable](): ObservableLike<EmissionEvent<E[keyof E]>> {
|
|
288
407
|
return this.toObservable();
|
|
@@ -328,7 +447,7 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
328
447
|
events<K extends keyof E & string>(
|
|
329
448
|
type: K,
|
|
330
449
|
options?: EventsIteratorOptions,
|
|
331
|
-
): AsyncIterableIterator<EmissionEvent<E[K]>> {
|
|
450
|
+
): AsyncIterableIterator<EmissionEvent<E[K], K>> {
|
|
332
451
|
return this.#target.events(type, options);
|
|
333
452
|
}
|
|
334
453
|
}
|