UNPKG

react-form-with-constraints

Version:
45 lines (44 loc) 1.64 kB
import { assert } from './assert'; export class EventEmitter { constructor() { this.listeners = new Map(); } emitSync(eventName, ...args) { const listeners = this.getListeners(eventName); const ret = new Array(); listeners.forEach(listener => ret.push(listener(...args))); return ret; } async emitAsync(eventName, ...args) { const listeners = this.getListeners(eventName); const ret = new Array(); for (let i = 0; i < listeners.length; i++) { ret.push(await listeners[i](...args)); } return ret; } getListeners(eventName) { const listeners = this.listeners.get(eventName); if (listeners !== undefined) { assert(listeners.length > 0, `No listener for event '${eventName}'`); return listeners; } return []; } addListener(eventName, listener) { if (!this.listeners.has(eventName)) this.listeners.set(eventName, []); const listeners = this.listeners.get(eventName); assert(!listeners.includes(listener), `Listener already added for event '${eventName}'`); listeners.push(listener); } removeListener(eventName, listener) { const listeners = this.listeners.get(eventName); assert(listeners !== undefined, `Unknown event '${eventName}'`); const index = listeners.lastIndexOf(listener); assert(index > -1, `Listener not found for event '${eventName}'`); listeners.splice(index, 1); if (listeners.length === 0) this.listeners.delete(eventName); } }