@@ -17,51 +17,6 @@ type InferEventMap<Target extends Emitter<any>> = Target extends Emitter<
17
17
? T
18
18
: never
19
19
20
- /**
21
- * Infers the listener type for the given event type.
22
- *
23
- * @example
24
- * const emitter = new Emitter<{ getTotalPrice: [Cart, number] }>()
25
- * type Listener = InferListenerType<typeof emitter, 'getTotalPrice'>
26
- * // (event: MessageEvent<Cart>) => number
27
- */
28
- export type InferListenerType <
29
- Target extends Emitter < any > ,
30
- Type extends keyof EventMap & string ,
31
- EventMap extends DefaultEventMap = InferEventMap < Target > ,
32
- > = StrictEventListener <
33
- InferEventType < Target , Type , EventMap > ,
34
- InferListenerReturnType < Target , Type , EventMap >
35
- >
36
-
37
- /**
38
- * Infers the return type of the listener for the given event type.
39
- *
40
- * @example
41
- * const emitter = new Emitter<{ getTotalPrice: [Cart, number] }>()
42
- * type ListenerReturnType = InferListenerReturnType<typeof emitter, 'getTotalPrice'>
43
- * // number
44
- */
45
- export type InferListenerReturnType <
46
- Target extends Emitter < any > ,
47
- Type extends keyof EventMap & string ,
48
- EventMap extends DefaultEventMap = InferEventMap < Target > ,
49
- > = EventMap [ Type ] [ 1 ]
50
-
51
- /**
52
- * Infers an appropriate `Event` type for the given event type.
53
- *
54
- * @example
55
- * const emitter = new Emitter<{ greeting: [string] }>()
56
- * type GreetingEvent = InferEventType<typeof emitter, 'greeting'>
57
- * // MessageEvent<string>
58
- */
59
- export type InferEventType <
60
- Target extends Emitter < any > ,
61
- Type extends keyof EventMap & string ,
62
- EventMap extends DefaultEventMap = InferEventMap < Target > ,
63
- > = DataToEvent < Type , EventMap [ Type ] [ 0 ] >
64
-
65
20
type DataToEvent < Type extends string , Data extends unknown > = [ Data ] extends [
66
21
never ,
67
22
]
@@ -75,8 +30,8 @@ type InternalListenersMap<
75
30
keyof EventMap ,
76
31
Array <
77
32
StrictEventListener <
78
- InferEventType < Target , keyof EventMap & string , EventMap > ,
79
- InferListenerReturnType < Target , keyof EventMap & string , EventMap >
33
+ Emitter . InferEventType < Target , keyof EventMap & string , EventMap > ,
34
+ Emitter . InferListenerReturnType < Target , keyof EventMap & string , EventMap >
80
35
>
81
36
>
82
37
>
@@ -87,6 +42,53 @@ type EmmiterListenerOptions = {
87
42
88
43
const kPropagationStopped = Symbol ( 'kPropagationStopped' )
89
44
45
+ export namespace Emitter {
46
+ /**
47
+ * Infers the listener type for the given event type.
48
+ *
49
+ * @example
50
+ * const emitter = new Emitter<{ getTotalPrice: [Cart, number] }>()
51
+ * type Listener = InferListenerType<typeof emitter, 'getTotalPrice'>
52
+ * // (event: MessageEvent<Cart>) => number
53
+ */
54
+ export type InferListenerType <
55
+ Target extends Emitter < any > ,
56
+ Type extends keyof EventMap & string ,
57
+ EventMap extends DefaultEventMap = InferEventMap < Target > ,
58
+ > = StrictEventListener <
59
+ InferEventType < Target , Type , EventMap > ,
60
+ InferListenerReturnType < Target , Type , EventMap >
61
+ >
62
+
63
+ /**
64
+ * Infers the return type of the listener for the given event type.
65
+ *
66
+ * @example
67
+ * const emitter = new Emitter<{ getTotalPrice: [Cart, number] }>()
68
+ * type ListenerReturnType = InferListenerReturnType<typeof emitter, 'getTotalPrice'>
69
+ * // number
70
+ */
71
+ export type InferListenerReturnType <
72
+ Target extends Emitter < any > ,
73
+ Type extends keyof EventMap & string ,
74
+ EventMap extends DefaultEventMap = InferEventMap < Target > ,
75
+ > = EventMap [ Type ] [ 1 ]
76
+
77
+ /**
78
+ * Infers an appropriate `Event` type for the given event type.
79
+ *
80
+ * @example
81
+ * const emitter = new Emitter<{ greeting: [string] }>()
82
+ * type GreetingEvent = InferEventType<typeof emitter, 'greeting'>
83
+ * // MessageEvent<string>
84
+ */
85
+ export type InferEventType <
86
+ Target extends Emitter < any > ,
87
+ Type extends keyof EventMap & string ,
88
+ EventMap extends DefaultEventMap = InferEventMap < Target > ,
89
+ > = DataToEvent < Type , EventMap [ Type ] [ 0 ] >
90
+ }
91
+
90
92
export class Emitter < EventMap extends DefaultEventMap > {
91
93
#listeners: InternalListenersMap < typeof this , EventMap >
92
94
#listenerOptions: WeakMap < Function , AddEventListenerOptions >
@@ -105,7 +107,7 @@ export class Emitter<EventMap extends DefaultEventMap> {
105
107
*/
106
108
public on < Type extends keyof EventMap & string > (
107
109
type : Type ,
108
- listener : InferListenerType < typeof this , Type , EventMap > ,
110
+ listener : Emitter . InferListenerType < typeof this , Type , EventMap > ,
109
111
options ?: EmmiterListenerOptions ,
110
112
) : AbortController {
111
113
this . #addListener( type , listener )
@@ -125,7 +127,7 @@ export class Emitter<EventMap extends DefaultEventMap> {
125
127
*/
126
128
public once < Type extends keyof EventMap & string > (
127
129
type : Type ,
128
- listener : InferListenerType < typeof this , Type , EventMap > ,
130
+ listener : Emitter . InferListenerType < typeof this , Type , EventMap > ,
129
131
options ?: EmmiterListenerOptions ,
130
132
) : AbortController {
131
133
this . #addListener( type , listener )
@@ -146,7 +148,7 @@ export class Emitter<EventMap extends DefaultEventMap> {
146
148
*/
147
149
public earlyOn < Type extends keyof EventMap & string > (
148
150
type : Type ,
149
- listener : InferListenerType < typeof this , Type , EventMap > ,
151
+ listener : Emitter . InferListenerType < typeof this , Type , EventMap > ,
150
152
options ?: EmmiterListenerOptions ,
151
153
) : AbortController {
152
154
if ( ! this . #listeners[ type ] ) {
@@ -170,7 +172,7 @@ export class Emitter<EventMap extends DefaultEventMap> {
170
172
*/
171
173
public earlyOnce < Type extends keyof EventMap & string > (
172
174
type : Type ,
173
- listener : InferListenerType < typeof this , Type , EventMap > ,
175
+ listener : Emitter . InferListenerType < typeof this , Type , EventMap > ,
174
176
) : AbortController {
175
177
this . earlyOn ( type , listener )
176
178
@@ -294,7 +296,7 @@ export class Emitter<EventMap extends DefaultEventMap> {
294
296
*/
295
297
public removeListener < Type extends keyof EventMap & string > (
296
298
type : Type ,
297
- listener : InferListenerType < typeof this , Type , EventMap > ,
299
+ listener : Emitter . InferListenerType < typeof this , Type , EventMap > ,
298
300
) : void {
299
301
this . #listenerOptions. delete ( listener )
300
302
@@ -342,7 +344,7 @@ export class Emitter<EventMap extends DefaultEventMap> {
342
344
*/
343
345
public listeners < Type extends keyof EventMap & string > (
344
346
type ?: Type ,
345
- ) : Array < InferListenerType < typeof this , Type , EventMap > > {
347
+ ) : Array < Emitter . InferListenerType < typeof this , Type , EventMap > > {
346
348
if ( type == null ) {
347
349
return Object . values ( this . #listeners) . flat ( )
348
350
}
@@ -362,7 +364,7 @@ export class Emitter<EventMap extends DefaultEventMap> {
362
364
363
365
#addListener< Type extends keyof EventMap & string > (
364
366
type : Type ,
365
- listener : InferListenerType < typeof this , Type , EventMap > ,
367
+ listener : Emitter . InferListenerType < typeof this , Type , EventMap > ,
366
368
) {
367
369
if ( ! this . #listeners[ type ] ) {
368
370
this . #listeners[ type ] = [ ]
@@ -428,7 +430,7 @@ export class Emitter<EventMap extends DefaultEventMap> {
428
430
429
431
#createAbortController< Type extends keyof EventMap & string > (
430
432
type : Type ,
431
- listener : InferListenerType < typeof this , Type , EventMap > ,
433
+ listener : Emitter . InferListenerType < typeof this , Type , EventMap > ,
432
434
) : AbortController {
433
435
const abortController = new AbortController ( )
434
436
0 commit comments