redis-smq-common
Version:
Provides essential components and utilities shared across RedisSMQ packages.
57 lines • 2.02 kB
JavaScript
import { EventBusNotConnectedError } from './errors/index.js';
import { Runnable } from '../runnable/index.js';
import { createLogger } from '../logger/index.js';
export class EventBus extends Runnable {
namespace;
logger;
constructor(config = {}, namespace = '') {
super();
this.namespace = namespace ? `${namespace}:` : '';
this.logger = createLogger(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 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());
}
}
//# sourceMappingURL=event-bus.js.map