1- import { EventEmitter as EE } from 'eventemitter3' ;
1+ import { EventEmitter } from 'dedot/utils'
22import type { FrameSystemEventRecord } from 'dedot/chaintypes' ;
33
44export type SystemEventsListener = ( events : FrameSystemEventRecord [ ] ) => void ;
@@ -8,76 +8,6 @@ export enum InternalEvent {
88 SystemEvents = 'SYSTEM_EVENTS' ,
99}
1010
11- export interface IEventEmitter < EventTypes extends string = string > {
12- on ( event : EventTypes , handler : HandlerFn ) : Unsub ;
13- once ( event : EventTypes , handler : HandlerFn ) : Unsub ;
14- off ( event : EventTypes , handler ?: HandlerFn ) : this;
15- }
16-
17- const handlerWrapper = ( handler : HandlerFn ) : HandlerFn => {
18- return ( ...args : any [ ] ) => {
19- try {
20- handler ( ...args ) ;
21- } catch {
22- // ignore this!
23- }
24- } ;
25- } ;
26-
27- export class EventEmitter < EventTypes extends string = string > implements IEventEmitter < EventTypes > {
28- #emitter: EE ;
29- #mapper: Map < HandlerFn , HandlerFn > ;
30-
31- constructor ( ) {
32- this . #emitter = new EE ( ) ;
33- this . #mapper = new Map ( ) ;
34- }
35-
36- emit ( event : EventTypes , ...args : any [ ] ) : boolean {
37- return this . #emitter. emit ( event , ...args ) ;
38- }
39-
40- protected clearEvents ( ) {
41- this . #emitter. removeAllListeners ( ) ;
42- this . #mapper. clear ( ) ;
43- }
44-
45- public on ( event : EventTypes , handler : HandlerFn ) : Unsub {
46- const wrapper = handlerWrapper ( handler ) ;
47- this . #mapper. set ( handler , wrapper ) ;
48- this . #emitter. on ( event , wrapper ) ;
49-
50- return ( ) => {
51- this . off ( event , handler ) ;
52- } ;
53- }
54-
55- public once ( event : EventTypes , handler : HandlerFn ) : Unsub {
56- const wrapper = handlerWrapper ( handler ) ;
57- this . #mapper. set ( handler , wrapper ) ;
58-
59- this . #emitter. once ( event , wrapper ) ;
60-
61- return ( ) => {
62- this . off ( event , handler ) ;
63- } ;
64- }
65-
66- public off ( event : EventTypes , handler ?: HandlerFn ) : this {
67- if ( handler ) {
68- const wrapper = this . #mapper. get ( handler ) ;
69- if ( ! wrapper ) return this ;
70-
71- this . #emitter. off ( event , wrapper ) ;
72- this . #mapper. delete ( handler ) ;
73- } else {
74- this . #emitter. off ( event ) ;
75- }
76-
77- return this ;
78- }
79- }
80-
8111export default new EventEmitter ( ) ;
8212
8313
0 commit comments