UNPKG

ab-event-emitter

Version:
132 lines (131 loc) 4.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ABEventEmitter = void 0; var MutableList = /** @class */ (function () { function MutableList() { this.list = null; this.len = 0; } MutableList.prototype.prepend = function (value) { this.list = { value: value, next: this.list }; this.len += 1; }; MutableList.prototype.remove = function (item) { if (!this.list) return; if (this.list.value === item) { this.list = this.list.next; this.len -= 1; return; } var current = this.list; while (current.next && current.next.value !== item) current = current.next; if (!current.next) return; current.next = current.next.next; this.len -= 1; }; MutableList.prototype.length = function () { return this.len; }; MutableList.prototype.iterate = function (callback) { var current = this.list; while (current) { callback(current.value); current = current.next; } }; MutableList.prototype.toArray = function () { var res = []; this.iterate(function (d) { res.push(d); }); return res; }; return MutableList; }()); var EVENT_EXCLUDED = "ee-event-excluded"; var EVENT_INCLUDED = "ee-event-included"; var ABEventEmitter = /** @class */ (function () { function ABEventEmitter() { this.listenersDict = {}; this.listenedEvents = new MutableList(); } ABEventEmitter.prototype.on = function (event, listener) { var _this = this; if (this.listenersDict[event]) { var listeners = this.listenersDict[event]; listeners.prepend(listener); if (listeners.length() === 1) { this.listenedEvents.prepend(event); } return function () { _this.off(event, listener); }; } var listenersList = new MutableList(); listenersList.prepend(listener); this.listenersDict[event] = listenersList; this.listenedEvents.prepend(event); this.emit(ABEventEmitter.EventIncluded, event); return function () { _this.off(event, listener); }; }; ABEventEmitter.prototype.off = function (event, listener) { if (!listener) { return this.offEvent(event); } var listeners = this.listenersDict[event]; if (listeners) { listeners.remove(listener); if (listeners.length() === 0) { this.listenedEvents.remove(event); delete this.listenersDict[event]; this.emit(ABEventEmitter.EventExcluded, event); } return this; } return this; }; ABEventEmitter.prototype.emit = function (event, data) { var listeners = this.listenersDict[event]; if (listeners) { listeners.iterate(function (callback) { return callback(data); }); } return this; }; ABEventEmitter.prototype.offAll = function () { var _this = this; this.listenersDict = {}; this.listenedEvents.iterate(function (event) { _this.emit(ABEventEmitter.EventExcluded, event); }); this.listenedEvents = new MutableList(); return this; }; ABEventEmitter.prototype.offEvent = function (event) { if (!this.listenersDict[event]) return this; this.listenedEvents.remove(event); delete this.listenersDict[event]; this.emit(ABEventEmitter.EventExcluded, event); return this; }; ABEventEmitter.prototype.listenersNumber = function (event) { var listenersList = this.listenersDict[event]; return listenersList ? listenersList.length() : 0; }; ABEventEmitter.prototype.getListenedEvents = function () { return this.listenedEvents.toArray(); }; ABEventEmitter.prototype.getListeners = function (event) { var listeners = this.listenersDict[event]; return listeners ? listeners.toArray() : []; }; ABEventEmitter.EventExcluded = EVENT_EXCLUDED; ABEventEmitter.EventIncluded = EVENT_INCLUDED; return ABEventEmitter; }()); exports.ABEventEmitter = ABEventEmitter;