event-emitters
Version:
46 lines • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventEmitter = void 0;
var EventEmitterAsyncIterator_1 = require("./EventEmitterAsyncIterator");
/**
* The same as node's EventEmitter but:
* Only emits a single "event".
* Throw an exception when a client registers the same listener more than once.
* Throw an exception when a client tries to remove a listener that is not listening.
*/
var EventEmitter = /** @class */ (function () {
function EventEmitter() {
this.listeners = [];
}
EventEmitter.prototype.emit = function (newMessage) {
this.listeners.forEach(function (listener) {
listener(newMessage);
});
};
EventEmitter.prototype.subscribe = function (listener) {
if (this.listeners.includes(listener)) {
throw new Error('You have already subscribed with this listener');
}
this.listeners.push(listener);
return listener;
};
EventEmitter.prototype.unsubscribe = function (listener) {
var index = this.listeners.indexOf(listener);
if (index === -1) {
throw new Error('Tried to remove listener that is not listening');
}
this.listeners.splice(index, 1);
};
EventEmitter.prototype.hasListeners = function () {
return this.listeners.length !== 0;
};
EventEmitter.prototype[Symbol.asyncIterator] = function () {
return this.asyncIterator();
};
EventEmitter.prototype.asyncIterator = function () {
return new EventEmitterAsyncIterator_1.EventEmitterAsyncIterator(this);
};
return EventEmitter;
}());
exports.EventEmitter = EventEmitter;
//# sourceMappingURL=EventEmitter.js.map