acelga-bus
Version:
An extensible typescript message bus with support for middlewares
56 lines • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class EventFactoryRespository {
constructor() {
this.factories = new Map();
}
set(name, factory) {
if (this.factories.get(name)) {
throw new EventNameCollision();
}
this.factories.set(name, factory);
}
get(name) {
this.factories.get(name);
}
execute(event) {
if (!this.isIDecodedSerializedEventstoreEvent(event)) {
throw new NotADecodedSerializedEventstoreEvent(event);
}
const eventFactory = this.factories.get(event.eventType);
if (!eventFactory) {
throw new FactoryNotFoundError();
}
return eventFactory.build(event);
}
isIDecodedSerializedEventstoreEvent(item) {
if (!!item && typeof item === 'object' && 'eventType' in item) {
true;
}
return false;
}
}
exports.EventFactoryRespository = EventFactoryRespository;
class FactoryNotFoundError extends Error {
constructor() {
super();
this.message = 'Event Factory not found';
}
}
exports.FactoryNotFoundError = FactoryNotFoundError;
class NotADecodedSerializedEventstoreEvent extends Error {
constructor(givenEvent) {
super();
this.givenEvent = givenEvent;
this.message = 'The middleware for passing from a raw eventstore JSON object to a Event class has found that the data given is not an event. The original data is in the attribute "givenEvent" of this Error object';
}
}
exports.NotADecodedSerializedEventstoreEvent = NotADecodedSerializedEventstoreEvent;
class EventNameCollision extends Error {
constructor() {
super();
this.message = 'The event you are trying to register seem to be registered previously. Maybe you are registerint it 2 times or you have 2 classes with the same name.';
}
}
exports.EventNameCollision = EventNameCollision;
//# sourceMappingURL=factoryRepository.js.map