UNPKG

nodejs-event-driven

Version:

NodeJS agnostic event driven with EventEmitter support

50 lines 1.93 kB
import { EventEmitter } from 'node:events'; import { BaseEventBusService } from '../../../base-event-bus.service.js'; export default class MemoryEventBusService extends BaseEventBusService { #logger; #emitDelay; #eventEmitter; constructor(config) { super(); this.#logger = config.logger; this.#emitDelay = config.eventBusMemoryEmitDelay; this.#eventEmitter = new EventEmitter(); } on(eventName, listener) { this.#logger?.debug(`register listener for event: ${eventName}`); this.#eventEmitter.on(eventName, listener); } once(eventName, listener) { this.#logger?.debug(`register once listener for event: ${eventName}`); this.#eventEmitter.once(eventName, listener); } off(eventName, listener) { this.#logger?.debug(`unregister listener for event: ${eventName}`); this.#eventEmitter.off(eventName, listener); } send(eventName, data) { if (this.#emitDelay) { this.#logger?.debug(`will send event later (${this.#emitDelay}ms): ${eventName} with ${String(data)}`); setTimeout(() => { this.#eventEmitter.emit(eventName, data); }, this.#emitDelay); return; } this.#logger?.debug(`sending event: ${eventName} with ${String(data)}`); process.nextTick(() => { this.#eventEmitter.emit(eventName, data); }); } sendAndWait(sendEventName, successEventName, errorEventName, data) { this.#logger?.debug(`sending event ${sendEventName} and waiting for event ${successEventName}…`); return super.sendAndWait(sendEventName, successEventName, errorEventName, data); } start() { return Promise.resolve(); } stop() { this.#eventEmitter.removeAllListeners(); return Promise.resolve(); } } //# sourceMappingURL=memory-event-bus.service.js.map