react-form-with-constraints
Version:
Simple form validation for React
49 lines (48 loc) • 1.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventEmitter = void 0;
const assert_1 = require("./assert");
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) {
(0, assert_1.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);
(0, assert_1.assert)(!listeners.includes(listener), `Listener already added for event '${eventName}'`);
listeners.push(listener);
}
removeListener(eventName, listener) {
const listeners = this.listeners.get(eventName);
(0, assert_1.assert)(listeners !== undefined, `Unknown event '${eventName}'`);
const index = listeners.lastIndexOf(listener);
(0, assert_1.assert)(index > -1, `Listener not found for event '${eventName}'`);
listeners.splice(index, 1);
if (listeners.length === 0)
this.listeners.delete(eventName);
}
}
exports.EventEmitter = EventEmitter;