event-emission 0.2.0 → 0.2.1
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 +80 -24
- package/dist/event-emission.d.ts +13 -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 +474 -285
- 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 +449 -278
- package/dist/index.js.map +8 -9
- package/dist/interoperability.cjs +1605 -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 +1555 -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 +60 -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 +26 -20
- package/src/factory.ts +538 -218
- package/src/index.ts +4 -33
- package/src/{interop.ts → interoperability.ts} +24 -6
- package/src/observe.ts +54 -17
- package/src/symbols.ts +1 -1
- package/src/types.ts +75 -30
- 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,32 @@ 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: <K extends keyof E & string>(type: K, options?: OnOptions | boolean) => ObservableLike<EmissionEvent<E[K]>>;
|
|
169
|
-
once: <K extends keyof E & string>(type: K, listener:
|
|
204
|
+
on: <K extends keyof E & string>(type: K, options?: OnOptions | boolean) => ObservableLike<EmissionEvent<E[K], K>>;
|
|
205
|
+
once: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>> | null, options?: Omit<AddEventListenerOptionsLike, 'once'> | boolean) => () => void;
|
|
170
206
|
removeAllListeners: <K extends keyof E & string>(type?: K) => void;
|
|
171
207
|
/**
|
|
172
208
|
* Pipe events from this emitter to another target.
|
|
173
|
-
*
|
|
174
|
-
* Events for types registered after piping won't be forwarded automatically.
|
|
209
|
+
* Forwards all events. If mapFn returns null, the event is skipped.
|
|
175
210
|
*/
|
|
176
|
-
pipe: <T extends Record<string, any>>(target: EventTargetLike<T>, mapFn?: <K extends keyof E & string>(event: EmissionEvent<E[K]>) =>
|
|
211
|
+
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
212
|
complete: () => void;
|
|
178
213
|
readonly completed: boolean;
|
|
179
214
|
addWildcardListener: (pattern: '*' | `${string}:*`, listener: (event: WildcardEvent<E>) => void | Promise<void>, options?: AddEventListenerOptionsLike) => () => void;
|
|
180
215
|
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;
|
|
216
|
+
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
217
|
toObservable: () => ObservableLike<EmissionEvent<E[keyof E]>>;
|
|
183
|
-
events: <K extends keyof E & string>(type: K, options?: AsyncIteratorOptions) => AsyncIterableIterator<EmissionEvent<E[K]>>;
|
|
218
|
+
events: <K extends keyof E & string>(type: K, options?: AsyncIteratorOptions) => AsyncIterableIterator<EmissionEvent<E[K], K>>;
|
|
184
219
|
}
|
|
185
220
|
//# 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.2.
|
|
3
|
+
"version": "0.2.1",
|
|
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
|
|
|
@@ -128,7 +135,7 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
128
135
|
on<K extends keyof E & string>(
|
|
129
136
|
type: K,
|
|
130
137
|
options?: OnOptions | boolean,
|
|
131
|
-
): ObservableLike<EmissionEvent<E[K]>> {
|
|
138
|
+
): ObservableLike<EmissionEvent<E[K], K>> {
|
|
132
139
|
return this.#target.on(type, options);
|
|
133
140
|
}
|
|
134
141
|
|
|
@@ -138,8 +145,8 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
138
145
|
*/
|
|
139
146
|
once<K extends keyof E & string>(
|
|
140
147
|
type: K,
|
|
141
|
-
listener:
|
|
142
|
-
options?: Omit<AddEventListenerOptionsLike, 'once'
|
|
148
|
+
listener: EventListenerLike<EmissionEvent<E[K], K>> | null,
|
|
149
|
+
options?: Omit<AddEventListenerOptionsLike, 'once'> | boolean,
|
|
143
150
|
): () => void {
|
|
144
151
|
return this.#target.once(type, listener, options);
|
|
145
152
|
}
|
|
@@ -160,15 +167,14 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
160
167
|
|
|
161
168
|
/**
|
|
162
169
|
* Pipe events from this emitter to another target.
|
|
163
|
-
*
|
|
164
|
-
* Events for types registered after piping won't be forwarded automatically.
|
|
170
|
+
* Forwards all events. If mapFn returns null, the event is skipped.
|
|
165
171
|
*/
|
|
166
172
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Generic constraint requires any
|
|
167
173
|
pipe<T extends Record<string, any>>(
|
|
168
174
|
target: EventTargetLike<T>,
|
|
169
175
|
mapFn?: <K extends keyof E & string>(
|
|
170
|
-
event: EmissionEvent<E[K]>,
|
|
171
|
-
) =>
|
|
176
|
+
event: EmissionEvent<E[K], K>,
|
|
177
|
+
) => DispatchEventInput<T[keyof T & string], keyof T & string> | null,
|
|
172
178
|
): () => void {
|
|
173
179
|
return this.#target.pipe(target, mapFn);
|
|
174
180
|
}
|
|
@@ -218,8 +224,8 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
218
224
|
subscribe<K extends keyof E & string>(
|
|
219
225
|
type: K,
|
|
220
226
|
observerOrNext?:
|
|
221
|
-
| Observer<EmissionEvent<E[K]>>
|
|
222
|
-
| ((value: EmissionEvent<E[K]>) => void),
|
|
227
|
+
| Observer<EmissionEvent<E[K], K>>
|
|
228
|
+
| ((value: EmissionEvent<E[K], K>) => void),
|
|
223
229
|
error?: (err: unknown) => void,
|
|
224
230
|
completeHandler?: () => void,
|
|
225
231
|
): Subscription;
|
|
@@ -233,8 +239,8 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
233
239
|
| Observer<EmissionEvent<E[keyof E]>>
|
|
234
240
|
| ((value: EmissionEvent<E[keyof E]>) => void),
|
|
235
241
|
observerOrNext?:
|
|
236
|
-
| Observer<EmissionEvent<E[K]>>
|
|
237
|
-
| ((value: EmissionEvent<E[K]>) => void),
|
|
242
|
+
| Observer<EmissionEvent<E[K], K>>
|
|
243
|
+
| ((value: EmissionEvent<E[K], K>) => void),
|
|
238
244
|
error?: (err: unknown) => void,
|
|
239
245
|
completeHandler?: () => void,
|
|
240
246
|
): Subscription {
|
|
@@ -282,7 +288,7 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
282
288
|
}
|
|
283
289
|
|
|
284
290
|
/**
|
|
285
|
-
* Returns this observable for Symbol.observable
|
|
291
|
+
* Returns this observable for Symbol.observable interoperability.
|
|
286
292
|
*/
|
|
287
293
|
[SymbolObservable](): ObservableLike<EmissionEvent<E[keyof E]>> {
|
|
288
294
|
return this.toObservable();
|
|
@@ -328,7 +334,7 @@ export abstract class EventEmission<E extends Record<string, any>> {
|
|
|
328
334
|
events<K extends keyof E & string>(
|
|
329
335
|
type: K,
|
|
330
336
|
options?: EventsIteratorOptions,
|
|
331
|
-
): AsyncIterableIterator<EmissionEvent<E[K]>> {
|
|
337
|
+
): AsyncIterableIterator<EmissionEvent<E[K], K>> {
|
|
332
338
|
return this.#target.events(type, options);
|
|
333
339
|
}
|
|
334
340
|
}
|