UNPKG

lincd

Version:

LINCD is a JavaScript library for building user interfaces with linked data (also known as 'structured data', or RDF)

93 lines 4.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventEmitter = void 0; /* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ const eventemitter3_1 = require("eventemitter3"); var prefix = eventemitter3_1.EventEmitter['prefixed']; class EventEmitter extends eventemitter3_1.EventEmitter { emitPromise(evt, a1, a2, a3, a4, a5) { //BASED ON eventemitter3 implementation of emit //But I removed prefix functionality and listeners.fn //And then added support for promises if (!this._events[evt]) return Promise.resolve(); var listeners = this._events[evt], len = arguments.length, args, i; if (listeners.fn) { listeners = [listeners]; } //ignored listeners.fn var length = listeners.length, j; let listenerPromises = []; for (i = 0; i < length; i++) { if (listeners[i].once) this.removeListener(evt, listeners[i].fn, undefined, true); switch (len) { case 1: listenerPromises.push(listeners[i].fn.call(listeners[i].context)); break; case 2: listenerPromises.push(listeners[i].fn.call(listeners[i].context, a1)); break; case 3: listenerPromises.push(listeners[i].fn.call(listeners[i].context, a1, a2)); break; case 4: listenerPromises.push(listeners[i].fn.call(listeners[i].context, a1, a2, a3)); break; default: if (!args) for (j = 1, args = new Array(len - 1); j < len; j++) { args[j - 1] = arguments[j]; } listenerPromises.push(listeners[i].fn.apply(listeners[i].context, args)); } } return Promise.all(listenerPromises).catch((err) => { console.log('Error during emitPromise of event ' + evt.toString() + ' with args ' + JSON.stringify(arguments), err.toString()); }); } removeListenerByContext(event, context, once) { //copied from source and adjusted var evt = prefix && typeof event === 'string' ? prefix + event : event; if (!this._events[evt]) return this; var listeners = this._events[evt]; //make a list of events to keep: //if a single listener is registered let eventsToKeep; if (listeners.fn) { //check if 'once' and 'context' match if ((once && !listeners.fn.once) || (context && listeners.fn.context !== context)) { //if not we keep it 'as is' eventsToKeep = listeners; } } else if (listeners) { eventsToKeep = []; //if there's an array of listeners, go over each for (var i = 0, length = listeners.length; i < length; i++) { //check if 'once' and 'context' match if ((once && !listeners[i].once) || (context && listeners[i].context !== context)) { //if not, keep this single listener eventsToKeep.push(listeners[i]); } } } // update events and events count if (eventsToKeep) { //take the one event, or, if its an array, take the array, unless theres only one element left, then just use that directly this._events[evt] = eventsToKeep.fn ? eventsToKeep : eventsToKeep.length === 1 ? eventsToKeep[0] : eventsToKeep; } else { --this._eventsCount; delete this._events[evt]; } return this; } } exports.EventEmitter = EventEmitter; //# sourceMappingURL=EventEmitter.js.map