redis-smq-common
Version:
Provides essential components and utilities shared across RedisSMQ packages.
59 lines • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventBus = void 0;
const index_js_1 = require("./errors/index.js");
const index_js_2 = require("../runnable/index.js");
const index_js_3 = require("../logger/index.js");
class EventBus extends index_js_2.Runnable {
constructor(config = {}, namespace = '') {
super();
this.namespace = namespace ? `${namespace}:` : '';
this.logger = (0, index_js_3.createLogger)(config === null || config === void 0 ? void 0 : config.logger, `${this.constructor.name}${namespace ? `-${namespace}` : ''}-${this.id}`);
}
toNamespacedEvent(event) {
return event === 'error' ? 'error' : `${this.namespace}${event}`;
}
emit(event, ...args) {
if (event === 'error') {
return super.emit(event, ...args);
}
if (!this.isOperational()) {
this.eventEmitter.emit('error', new index_js_1.EventBusNotConnectedError());
return false;
}
const namespacedEvent = this.toNamespacedEvent(String(event));
this.eventEmitter.emit(namespacedEvent, ...args);
return true;
}
on(event, listener) {
const namespacedEvent = this.toNamespacedEvent(String(event));
this.eventEmitter.on(namespacedEvent, listener);
return this;
}
once(event, listener) {
const namespacedEvent = this.toNamespacedEvent(String(event));
this.eventEmitter.once(namespacedEvent, listener);
return this;
}
removeListener(event, listener) {
const namespacedEvent = this.toNamespacedEvent(String(event));
this.eventEmitter.removeListener(namespacedEvent, listener);
return this;
}
removeAllListeners(event) {
const namespacedEvent = event
? this.toNamespacedEvent(String(event))
: undefined;
return super.removeAllListeners(namespacedEvent);
}
goingDown() {
return [
(cb) => {
super.removeAllListeners();
cb();
},
].concat(super.goingDown());
}
}
exports.EventBus = EventBus;
//# sourceMappingURL=event-bus.js.map