UNPKG

js-uploader

Version:
56 lines 2.4 kB
import { __read, __spread } from "tslib"; import { Subject } from 'rxjs'; import { filter } from 'rxjs/operators'; var EventEmitter = /** @class */ (function () { function EventEmitter() { this.eventSubject = new 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(filter(function (e) { return e.type === type; })).subscribe({ next: function (e) { once && _this.off(type, listener); listener.apply(void 0, __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; }()); export { EventEmitter }; //# sourceMappingURL=EventEmitter.js.map