UNPKG

event-emitters

Version:
41 lines 1.27 kB
import { EventEmitterAsyncIterator } from './EventEmitterAsyncIterator'; /** * The same as node's EventEmitter but: * Only emits a single "event". * Throw an exception when a client registers the same listener more than once. * Throw an exception when a client tries to remove a listener that is not listening. */ export class EventEmitter { constructor() { this.listeners = []; } emit(newMessage) { this.listeners.forEach((listener) => { listener(newMessage); }); } subscribe(listener) { if (this.listeners.includes(listener)) { throw new Error('You have already subscribed with this listener'); } this.listeners.push(listener); return listener; } unsubscribe(listener) { const index = this.listeners.indexOf(listener); if (index === -1) { throw new Error('Tried to remove listener that is not listening'); } this.listeners.splice(index, 1); } hasListeners() { return this.listeners.length !== 0; } [Symbol.asyncIterator]() { return this.asyncIterator(); } asyncIterator() { return new EventEmitterAsyncIterator(this); } } //# sourceMappingURL=EventEmitter.js.map