acelga-bus
Version:
An extensible typescript message bus with support for middlewares
50 lines • 2.02 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../index");
class EventStoreBus {
constructor(client, errorLogger, eventRepository) {
this.dispatcher = new index_1.Dispatcher();
this.eventRepository = eventRepository;
this.logError = errorLogger;
this.client = client;
this.client.setHandler((event) => this.processEvents(event));
}
on(eventType, callback) {
return this.dispatcher.on(eventType, callback);
}
onAny(callback) {
this.dispatcher.onAny(callback);
}
publish(event) {
return __awaiter(this, void 0, void 0, function* () {
const eventType = event.constructor.name;
return this.client.publish(eventType, event);
});
}
addEventType(event, factory) {
const eventType = event.constructor.name;
this.eventRepository.set(eventType, factory);
}
processEvents(event) {
return __awaiter(this, void 0, void 0, function* () {
let eventObject = null;
try {
eventObject = this.eventRepository.execute(event);
}
catch (error) {
return this.logError(error);
}
this.dispatcher.trigger(eventObject);
});
}
}
exports.EventStoreBus = EventStoreBus;
//# sourceMappingURL=eventstoreBus.js.map