Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 49x 363x 230x 230x 12x 9x 3x 3x 3x | type Listener<D = undefined> = (data?: D) => void type AbstractEventMap = Record<string, Listener> export class EventEmitter<EventMap extends AbstractEventMap> { private listeners: Partial<Record<keyof EventMap, Listener[]>> = {} on<EventType extends keyof EventMap>(event: EventType, callback: EventMap[EventType]) { this.listeners[event] ??= [] this.listeners[event].push(callback) } emit<EventType extends keyof EventMap>(event: EventType, data?: Parameters<EventMap[EventType]>[0]) { // biome-ignore lint/style/useExplicitLengthCheck: <explanation> if (!this.listeners[event]?.length) { return false } for (const listener of this.listeners[event]) { listener(data) } return true } } |