UNPKG

theatre-events

Version:

A full implementation of a standard event dispatcher for javascript

77 lines 2.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const event_listener_1 = require("./../event-listener"); /** * Dispatch events synchronously through your application. */ class SynchronousEventDispatcher { constructor() { this.eventListeners = new Map(); } /** * {@inheritdoc} */ dispatch(name, payload) { if (!this.eventListeners.has(name)) { return payload; } let priorities = []; this.eventListeners.get(name).forEach((l, priority) => { priorities.push(priority); }); priorities.sort().map((priority) => { this.eventListeners.get(name).get(priority).map(l => l(payload)); }); return payload; } /** * {@inheritdoc} */ addEventListener(name, listener) { listener.priority = listener.priority || event_listener_1.NORMAL_PRIORITY; if (!this.eventListeners.has(name)) { this.eventListeners.set(name, new Map()); } if (!this.eventListeners.get(name).has(listener.priority)) { this.eventListeners.get(name).set(listener.priority, []); } this.eventListeners.get(name).get(listener.priority).push(listener); } /** * {@inheritdoc} */ removeEventListener(name, listener) { if (!this.eventListeners.has(name)) { return; } this.eventListeners.get(name).forEach((listeners, index) => { listeners.map((registeredListener, i) => { if (registeredListener !== listener) { return; } listeners.splice(i, 1); }); if (!listeners.length) { this.eventListeners.get(name).delete(index); } }); if (!this.eventListeners.get(name).size) { this.eventListeners.delete(name); } } /** * {@inheritdoc} */ clearEventListeners(name) { if (!name) { this.eventListeners.clear(); return; } if (!this.eventListeners.has(name)) { return; } this.eventListeners.get(name).clear(); } } exports.default = SynchronousEventDispatcher; //# sourceMappingURL=synchronous-event-dispatcher.js.map