@synet/patterns
Version:
Robust, battle-tested collection of stable patterns used in Synet packages
57 lines (56 loc) • 1.65 kB
JavaScript
;
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;