@@ -5,58 +5,6 @@ import { IBoundLog } from '@secret-agent/interfaces/ILog';
55import { createPromise } from './utils' ;
66import IPendingWaitEvent , { CanceledPromiseError } from './interfaces/IPendingWaitEvent' ;
77
8- export function addEventListener (
9- emitter : EventEmitter ,
10- eventName : string | symbol ,
11- handler : ( ...args : any [ ] ) => void ,
12- ) : IRegisteredEventListener {
13- emitter . on ( eventName , handler ) ;
14- return { emitter, eventName, handler } ;
15- }
16-
17- export function addEventListeners (
18- emitter : EventEmitter ,
19- registrations : [ string | symbol , ( ...args : any [ ] ) => void , boolean ?] [ ] ,
20- ) : IRegisteredEventListener [ ] {
21- return registrations . map ( ( [ eventName , handler ] ) => {
22- emitter . on ( eventName , handler ) ;
23- return { emitter, eventName, handler } ;
24- } ) ;
25- }
26-
27- export function removeEventListeners (
28- listeners : Array < {
29- emitter : EventEmitter | ITypedEventEmitter < any > ;
30- eventName : string | symbol ;
31- handler : ( ...args : any [ ] ) => void ;
32- } > ,
33- ) : void {
34- for ( const listener of listeners ) {
35- listener . emitter . removeListener ( listener . eventName , listener . handler ) ;
36- }
37- listeners . length = 0 ;
38- }
39-
40- export function addTypedEventListener < T , K extends keyof T & ( string | symbol ) > (
41- emitter : TypedEventEmitter < T > ,
42- eventName : K ,
43- handler : ( this : TypedEventEmitter < T > , event ?: T [ K ] , initiator ?: any ) => any ,
44- includeUnhandledEvents ?: boolean ,
45- ) : IRegisteredEventListener {
46- emitter . on ( eventName , handler , includeUnhandledEvents ) ;
47- return { emitter, eventName, handler } ;
48- }
49-
50- export function addTypedEventListeners < T , K extends keyof T & ( string | symbol ) > (
51- emitter : TypedEventEmitter < T > ,
52- registrations : [ K , ( this : TypedEventEmitter < T > , event ?: T [ K ] ) => any , boolean ?] [ ] ,
53- ) : IRegisteredEventListener [ ] {
54- return registrations . map ( ( [ eventName , handler , includeUnhandled ] ) => {
55- emitter . on ( eventName , handler , includeUnhandled ) ;
56- return { emitter, eventName, handler } ;
57- } ) ;
58- }
59-
608export class TypedEventEmitter < T > extends EventEmitter implements ITypedEventEmitter < T > {
619 public storeEventsWithoutListeners = false ;
6210
@@ -110,18 +58,20 @@ export class TypedEventEmitter<T> extends EventEmitter implements ITypedEventEmi
11058 timeoutMillis,
11159 } ) ;
11260
113- const listener = addTypedEventListener ( this , eventType , ( result : T [ K ] ) => {
61+ const callbackFn = ( result : T [ K ] ) : void => {
11462 // give the listeners a second to register
11563 if ( ! listenerFn || listenerFn . call ( this , result ) ) {
11664 this . logger ?. stats ( `waitOn.resolve:${ eventType } ` , {
11765 parentLogId : messageId ,
11866 } ) ;
11967 promise . resolve ( result ) ;
12068 }
121- } ) ;
69+ } ;
70+
71+ this . on ( eventType , callbackFn ) ;
12272
12373 return promise . promise . finally ( ( ) => {
124- removeEventListeners ( [ listener ] ) ;
74+ this . off ( eventType , callbackFn ) ;
12575 const idx = this . pendingWaitEvents . findIndex ( x => x . id === id ) ;
12676 if ( idx >= 0 ) this . pendingWaitEvents . splice ( idx , 1 ) ;
12777 } ) ;
0 commit comments