1
1
import EventEmitter from 'node:events' ;
2
2
import type { CommandKit } from '../CommandKit' ;
3
3
import type { AsyncFunction , GenericFunction } from '../context/async-context' ;
4
+ import { runInEventWorkerContext } from '../app/events/EventWorkerContext' ;
4
5
5
6
export type ListenerFunction = GenericFunction | AsyncFunction ;
6
7
@@ -20,15 +21,24 @@ export class CommandKitEventsChannel {
20
21
}
21
22
22
23
public on ( namespace : string , event : string , listener : ListenerFunction ) {
23
- this . emitter . on ( `${ namespace } :${ event } ` , listener ) ;
24
+ this . emitter . on (
25
+ `${ namespace } :${ event } ` ,
26
+ this . prepareListener ( namespace , event , listener ) ,
27
+ ) ;
24
28
}
25
29
26
30
public off ( namespace : string , event : string , listener : ListenerFunction ) {
27
- this . emitter . off ( `${ namespace } :${ event } ` , listener ) ;
31
+ this . emitter . off (
32
+ `${ namespace } :${ event } ` ,
33
+ this . prepareListener ( namespace , event , listener ) ,
34
+ ) ;
28
35
}
29
36
30
37
public once ( namespace : string , event : string , listener : ListenerFunction ) {
31
- this . emitter . once ( `${ namespace } :${ event } ` , listener ) ;
38
+ this . emitter . once (
39
+ `${ namespace } :${ event } ` ,
40
+ this . prepareListener ( namespace , event , listener ) ,
41
+ ) ;
32
42
}
33
43
34
44
public emit ( namespace : string , event : string , ...args : any [ ] ) {
@@ -44,4 +54,28 @@ export class CommandKitEventsChannel {
44
54
this . emitter . removeAllListeners ( namespace ) ;
45
55
}
46
56
}
57
+
58
+ private prepareListener < L extends ListenerFunction > (
59
+ namespace : string ,
60
+ event : string ,
61
+ listener : L ,
62
+ ) : L {
63
+ return ( ( ...args ) => {
64
+ return runInEventWorkerContext (
65
+ {
66
+ arguments : args ,
67
+ commandkit : this . commandkit ,
68
+ data : {
69
+ event,
70
+ namespace,
71
+ listeners : [ ] ,
72
+ path : `virtual:${ namespace } /${ event } ` ,
73
+ } ,
74
+ event,
75
+ namespace,
76
+ } ,
77
+ listener ,
78
+ ) ;
79
+ } ) as L ;
80
+ }
47
81
}
0 commit comments