@grubou/bussy
Version:
Command & query bus implementations
36 lines • 1.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.InternalEventBus = void 0;
class InternalEventBus {
constructor(logger, eventMiddlewares, eventHandlers) {
this.logger = logger;
this.eventMiddlewares = eventMiddlewares;
this.eventHandlers = eventHandlers;
}
publish(events) {
events.reduce((domainEvents, event) => {
const correspondingEventHandlers = this.eventHandlers[event.label()];
this.eventMiddlewares.forEach((middleware) => middleware.handle(event));
Promise.allSettled(correspondingEventHandlers.map((eventHandler) => {
eventHandler
.reactTo(event)
.then(() => this.logOnSuccess(event, eventHandler))
.catch((error) => this.logOnError(event, eventHandler, error));
}));
return domainEvents.slice(events.indexOf(event));
}, events);
}
logOnSuccess(event, eventHandler) {
this.logger.info(`Event: ${event.label()} successfully processed by ${eventHandler.name()}`, {
event: event.serialize()
});
}
logOnError(event, eventHandler, error) {
this.logger.error(`Event: ${event.label()} unsuccessfully processed by ${eventHandler.name()}`, {
error,
event: event.serialize()
});
}
}
exports.InternalEventBus = InternalEventBus;
//# sourceMappingURL=InternalEventBus.js.map