UNPKG

@synet/patterns

Version:

Robust, battle-tested collection of stable patterns used in Synet packages

57 lines (56 loc) 1.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventEmitter = void 0; /** * EventEmitter that maintains a list of observers and notifies them of events */ class EventEmitter { constructor() { this.observers = new Map(); } /** * Subscribe to events of a specific type */ subscribe(eventType, observer) { const observers = this.observers.get(eventType) || []; if (!observers.includes(observer)) { observers.push(observer); this.observers.set(eventType, observers); } } /** * Unsubscribe from events of a specific type */ unsubscribe(eventType, observer) { const observers = this.observers.get(eventType); if (!observers) return; const index = observers.indexOf(observer); if (index !== -1) { observers.splice(index, 1); if (observers.length === 0) { this.observers.delete(eventType); } else { this.observers.set(eventType, observers); } } } /** * Emit an event to all subscribed observers */ emit(event) { const observers = this.observers.get(event.type) || []; for (const observer of observers) { observer.update(event); } } /** * Check if there are any subscribers for a specific event type */ hasObservers(eventType) { return (this.observers.has(eventType) && (this.observers.get(eventType)?.length ?? 0) > 0); } } exports.EventEmitter = EventEmitter;