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
}
}
|