UNPKG

tseep

Version:

Fastest event emitter in the world

299 lines 11.1 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventEmitter = void 0; var task_collection_1 = require("./task-collection"); var utils_1 = require("./task-collection/utils"); var utils_2 = require("./utils"); function emit(event, a, b, c, d, e) { var ev = this.events[event]; if (ev) { if (ev.length === 0) return false; if (ev.argsNum < 6) { ev.call(a, b, c, d, e); } else { var arr = new Array(ev.argsNum); for (var i = 0, len = arr.length; i < len; ++i) { arr[i] = arguments[i + 1]; } ev.call.apply(undefined, arr); } return true; } return false; } function emitHasOnce(event, a, b, c, d, e) { var ev = this.events[event]; var argsArr; if (ev !== undefined) { if (ev.length === 0) return false; if (ev.argsNum < 6) { ev.call(a, b, c, d, e); } else { argsArr = new Array(ev.argsNum); for (var i = 0, len = argsArr.length; i < len; ++i) { argsArr[i] = arguments[i + 1]; } ev.call.apply(undefined, argsArr); } } var oev = this.onceEvents[event]; if (oev) { if (typeof oev === 'function') { this.onceEvents[event] = undefined; if (arguments.length < 6) { oev(a, b, c, d, e); } else { if (argsArr === undefined) { argsArr = new Array(arguments.length - 1); for (var i = 0, len = argsArr.length; i < len; ++i) { argsArr[i] = arguments[i + 1]; } } oev.apply(undefined, argsArr); } } else { var fncs = oev; this.onceEvents[event] = undefined; if (arguments.length < 6) { for (var i = 0; i < fncs.length; ++i) { fncs[i](a, b, c, d, e); } } else { if (argsArr === undefined) { argsArr = new Array(arguments.length - 1); for (var i = 0, len = argsArr.length; i < len; ++i) { argsArr[i] = arguments[i + 1]; } } for (var i = 0; i < fncs.length; ++i) { fncs[i].apply(undefined, argsArr); } } } return true; } return ev !== undefined; } /** Implemented event emitter */ var EventEmitter = /** @class */ (function () { function EventEmitter() { this.events = (0, utils_2.nullObj)(); this.onceEvents = (0, utils_2.nullObj)(); this._symbolKeys = new Set; this.maxListeners = Infinity; } Object.defineProperty(EventEmitter.prototype, "_eventsCount", { get: function () { return this.eventNames().length; }, enumerable: false, configurable: true }); return EventEmitter; }()); exports.EventEmitter = EventEmitter; function once(event, listener) { if (this.emit === emit) { this.emit = emitHasOnce; } switch (typeof this.onceEvents[event]) { case 'undefined': this.onceEvents[event] = listener; if (typeof event === 'symbol') this._symbolKeys.add(event); break; case 'function': this.onceEvents[event] = [this.onceEvents[event], listener]; break; case 'object': this.onceEvents[event].push(listener); } return this; } function addListener(event, listener, argsNum) { if (argsNum === void 0) { argsNum = listener.length; } if (typeof listener !== 'function') throw new TypeError('The listener must be a function'); var evtmap = this.events[event]; if (!evtmap) { this.events[event] = new task_collection_1.TaskCollection(argsNum, true, listener, false); if (typeof event === 'symbol') this._symbolKeys.add(event); } else { evtmap.push(listener); evtmap.growArgsNum(argsNum); if (this.maxListeners !== Infinity && this.maxListeners <= evtmap.length) console.warn("Maximum event listeners for \"".concat(String(event), "\" event!")); } return this; } function removeListener(event, listener) { var evt = this.events[event]; if (evt) { evt.removeLast(listener); } var evto = this.onceEvents[event]; if (evto) { if (typeof evto === 'function') { this.onceEvents[event] = undefined; } else if (typeof evto === 'object') { if (evto.length === 1 && evto[0] === listener) { this.onceEvents[event] = undefined; } else { (0, utils_1._fast_remove_single)(evto, evto.lastIndexOf(listener)); } } } return this; } function addListenerBound(event, listener, bindTo, argsNum) { if (bindTo === void 0) { bindTo = this; } if (argsNum === void 0) { argsNum = listener.length; } if (!this.boundFuncs) this.boundFuncs = new Map; var bound = listener.bind(bindTo); this.boundFuncs.set(listener, bound); return this.addListener(event, bound, argsNum); } function removeListenerBound(event, listener) { var _a, _b; var bound = (_a = this.boundFuncs) === null || _a === void 0 ? void 0 : _a.get(listener); (_b = this.boundFuncs) === null || _b === void 0 ? void 0 : _b.delete(listener); return this.removeListener(event, bound); } function hasListeners(event) { return this.events[event] && !!this.events[event].length; } function prependListener(event, listener, argsNum) { if (argsNum === void 0) { argsNum = listener.length; } if (typeof listener !== 'function') throw new TypeError('The listener must be a function'); var evtmap = this.events[event]; if (!evtmap || !(evtmap instanceof task_collection_1.TaskCollection)) { evtmap = this.events[event] = new task_collection_1.TaskCollection(argsNum, true, listener, false); if (typeof event === 'symbol') this._symbolKeys.add(event); } else { evtmap.insert(0, listener); evtmap.growArgsNum(argsNum); if (this.maxListeners !== Infinity && this.maxListeners <= evtmap.length) console.warn("Maximum event listeners for \"".concat(String(event), "\" event!")); } return this; } function prependOnceListener(event, listener) { if (this.emit === emit) { this.emit = emitHasOnce; } var evtmap = this.onceEvents[event]; if (!evtmap) { this.onceEvents[event] = [listener]; if (typeof event === 'symbol') this._symbolKeys.add(event); } else if (typeof evtmap !== 'object') { this.onceEvents[event] = [listener, evtmap]; if (typeof event === 'symbol') this._symbolKeys.add(event); } else { evtmap.unshift(listener); if (this.maxListeners !== Infinity && this.maxListeners <= evtmap.length) { console.warn("Maximum event listeners for \"".concat(String(event), "\" once event!")); } } return this; } function removeAllListeners(event) { if (event === undefined) { this.events = (0, utils_2.nullObj)(); this.onceEvents = (0, utils_2.nullObj)(); this._symbolKeys = new Set; } else { this.events[event] = undefined; this.onceEvents[event] = undefined; if (typeof event === 'symbol') this._symbolKeys.delete(event); } return this; } function setMaxListeners(n) { this.maxListeners = n; return this; } function getMaxListeners() { return this.maxListeners; } function listeners(event) { if (this.emit === emit) return this.events[event] ? this.events[event].tasksAsArray().slice() : []; else { if (this.events[event] && this.onceEvents[event]) { return __spreadArray(__spreadArray([], this.events[event].tasksAsArray(), true), (typeof this.onceEvents[event] === 'function' ? [this.onceEvents[event]] : this.onceEvents[event]), true); } else if (this.events[event]) return this.events[event].tasksAsArray(); else if (this.onceEvents[event]) return (typeof this.onceEvents[event] === 'function' ? [this.onceEvents[event]] : this.onceEvents[event]); else return []; } } function eventNames() { var _this = this; if (this.emit === emit) { var keys = Object.keys(this.events); return __spreadArray(__spreadArray([], keys, true), Array.from(this._symbolKeys), true).filter(function (x) { return (x in _this.events) && _this.events[x] && _this.events[x].length; }); } else { var keys = Object.keys(this.events).filter(function (x) { return _this.events[x] && _this.events[x].length; }); var keysO = Object.keys(this.onceEvents).filter(function (x) { return _this.onceEvents[x] && _this.onceEvents[x].length; }); return __spreadArray(__spreadArray(__spreadArray([], keys, true), keysO, true), Array.from(this._symbolKeys).filter(function (x) { return (((x in _this.events) && _this.events[x] && _this.events[x].length) || ((x in _this.onceEvents) && _this.onceEvents[x] && _this.onceEvents[x].length)); }), true); } } function listenerCount(type) { if (this.emit === emit) return this.events[type] && this.events[type].length || 0; else return (this.events[type] && this.events[type].length || 0) + (this.onceEvents[type] && this.onceEvents[type].length || 0); } EventEmitter.prototype.emit = emit; EventEmitter.prototype.on = addListener; EventEmitter.prototype.once = once; EventEmitter.prototype.addListener = addListener; EventEmitter.prototype.removeListener = removeListener; EventEmitter.prototype.addListenerBound = addListenerBound; EventEmitter.prototype.removeListenerBound = removeListenerBound; EventEmitter.prototype.hasListeners = hasListeners; EventEmitter.prototype.prependListener = prependListener; EventEmitter.prototype.prependOnceListener = prependOnceListener; EventEmitter.prototype.off = removeListener; EventEmitter.prototype.removeAllListeners = removeAllListeners; EventEmitter.prototype.setMaxListeners = setMaxListeners; EventEmitter.prototype.getMaxListeners = getMaxListeners; EventEmitter.prototype.listeners = listeners; EventEmitter.prototype.eventNames = eventNames; EventEmitter.prototype.listenerCount = listenerCount; //# sourceMappingURL=ee.js.map