js-uploader
Version:
A JavaScript library for file upload
59 lines • 2.54 kB
JavaScript
;
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