UNPKG

js-uploader

Version:
59 lines 2.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventEmitter = void 0; var tslib_1 = require("tslib"); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var EventEmitter = /** @class */ (function () { function EventEmitter() { this.eventSubject = new rxjs_1.Subject(); this.listenerMap = new Map(); } EventEmitter.prototype.on = function (type, listener) { this.addListener(type, listener); }; EventEmitter.prototype.once = function (type, listener) { this.addListener(type, listener, true); }; EventEmitter.prototype.off = function (type, listener) { this.removeListener(type, listener); }; EventEmitter.prototype.emit = function (type) { var data = []; for (var _i = 1; _i < arguments.length; _i++) { data[_i - 1] = arguments[_i]; } type && this.eventSubject.next({ type: type, data: data }); }; EventEmitter.prototype.addListener = function (type, listener, once) { var _this = this; var list = this.getSubscriptionList(type); list.some(function (i) { return i.listener === listener; }) && this.off(type, listener); var subscription = this.eventSubject.pipe(operators_1.filter(function (e) { return e.type === type; })).subscribe({ next: function (e) { once && _this.off(type, listener); listener.apply(void 0, tslib_1.__spread((e.data || []))); }, }); list.push({ listener: listener, subscription: subscription }); }; EventEmitter.prototype.removeListener = function (type, listener) { var _a; var list = this.getSubscriptionList(type); if (listener) { var index = list.findIndex(function (i) { return i.listener === listener; }); index > -1 && ((_a = list.splice(index, 1)[0].subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe()); } else { list.splice(0, list.length).forEach(function (i) { var _a; return (_a = i.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); }); } }; EventEmitter.prototype.getSubscriptionList = function (evtType) { var list = this.listenerMap.get(evtType) || []; !this.listenerMap.has(evtType) && this.listenerMap.set(evtType, list); return list; }; return EventEmitter; }()); exports.EventEmitter = EventEmitter; //# sourceMappingURL=EventEmitter.js.map