export class EventEmitter { private events: Record = {} on(event: string, listener: Function) { if (!this.events[event]) { this.events[event] = [] } this.events[event]?.push(listener) } emit(event: string, ...args: any[]) { if (this.events[event]) { this.events[event]?.forEach((listener) => listener(...args)) } } off(event: string, listener: Function) { if (this.events[event]) { // @ts-ignore this.events[event] = this.events[event]?.filter((l) => l !== listener) } } }