tseep
Version:
Fastest event emitter in the world
302 lines • 11.1 kB
JavaScript
"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 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 (arguments.length < 6) {
for (var i = 0, len = ev.length; i < len; ++i) {
ev[i](a, b, c, d, e);
}
}
else {
var arr = new Array(arguments.length - 1);
for (var i = 0, len = arr.length; i < len; ++i) {
arr[i] = arguments[i + 1];
}
for (var i = 0, len = ev.length; i < len; ++i) {
ev[i].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 (arguments.length < 6) {
for (var i = 0, len = ev.length; i < len; ++i) {
ev[i](a, b, c, d, e);
}
}
else {
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, len = ev.length; i < len; ++i) {
ev[i].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, len = oev.length; i < len; ++i) {
oev[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 (typeof listener !== 'function')
throw new TypeError('The listener must be a function');
var evtmap = this.events[event];
if (!evtmap) {
this.events[event] = [listener];
if (typeof event === 'symbol')
this._symbolKeys.add(event);
}
else {
evtmap.push(listener);
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) {
(0, utils_1._fast_remove_single)(evt, evt.indexOf(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 (typeof listener !== 'function')
throw new TypeError('The listener must be a function');
var evtmap = this.events[event];
if (evtmap === undefined) {
evtmap = this.events[event] = [listener];
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), "\" 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].slice() : [];
else {
if (this.events[event] && this.onceEvents[event]) {
return __spreadArray(__spreadArray([], this.events[event], true), (typeof this.onceEvents[event] === 'function' ? [this.onceEvents[event]] : this.onceEvents[event].slice()), true);
}
else if (this.events[event])
return this.events[event].slice();
else if (this.onceEvents[event])
return (typeof this.onceEvents[event] === 'function' ? [this.onceEvents[event]] : this.onceEvents[event].slice());
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-safe.js.map