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