All files / app/codeCharta/util EventEmitter.ts

100% Statements 9/9
88.88% Branches 8/9
100% Functions 3/3
100% Lines 9/9

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