react-form-with-constraints
Version:
Simple form validation for React
45 lines (44 loc) • 1.64 kB
JavaScript
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);
}
}