@dolittle/sdk.events.handling
Version:
Dolittle is a decentralized, distributed, event-driven microservice platform built to harness the power of events.
71 lines • 5.94 kB
JavaScript
;
// Copyright (c) Dolittle. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventHandlerMethodsBuilder = void 0;
const rudiments_1 = require("@dolittle/rudiments");
const sdk_artifacts_1 = require("@dolittle/sdk.artifacts");
const sdk_events_1 = require("@dolittle/sdk.events");
const IEventHandlerMethodsBuilder_1 = require("./IEventHandlerMethodsBuilder");
/**
* Represents an implementation of {@link IEventHandlerMethodsBuilder}.
*/
class EventHandlerMethodsBuilder extends IEventHandlerMethodsBuilder_1.IEventHandlerMethodsBuilder {
/**
* Initialises a new instance of the {@link EventHandlerMethodsBuilder} class.
* @param {EventHandlerId} _eventHandlerId - The event handler id to build methods for.
*/
constructor(_eventHandlerId) {
super();
this._eventHandlerId = _eventHandlerId;
this._typeToMethodPairs = [];
}
handle(typeOrEventTypeOrId, methodOrGeneration, maybeMethod) {
const method = maybeMethod || methodOrGeneration;
if (typeOrEventTypeOrId instanceof sdk_events_1.EventType) {
this._typeToMethodPairs.push([typeOrEventTypeOrId, method]);
}
else if (typeOrEventTypeOrId instanceof sdk_events_1.EventTypeId || typeOrEventTypeOrId instanceof rudiments_1.Guid || typeof typeOrEventTypeOrId === 'string') {
let generation = sdk_artifacts_1.Generation.first;
if (methodOrGeneration instanceof sdk_artifacts_1.Generation || typeof methodOrGeneration === 'number') {
generation = sdk_artifacts_1.Generation.from(methodOrGeneration);
}
this._typeToMethodPairs.push([new sdk_events_1.EventType(sdk_events_1.EventTypeId.from(typeOrEventTypeOrId), generation), method]);
}
else {
this._typeToMethodPairs.push([typeOrEventTypeOrId, method]);
}
return this;
}
/**
* Tries to add event handler methods to the builder.
* @param {IEventTypes} eventTypes - All registered event types.
* @param {EventTypeMap<EventHandlerSignature<any>>} eventTypeToMethods - The event handler methods to add by event type.
* @param {IClientBuildResults} results - For keeping track of build results.
* @returns {boolean} A value indicating whether all provided methods were added or not.
*/
tryAddEventHandlerMethods(eventTypes, eventTypeToMethods, results) {
let allMethodsValid = true;
for (const [typeOrEventTypeOrId, method] of this._typeToMethodPairs) {
const eventType = this.getEventType(typeOrEventTypeOrId, eventTypes);
if (eventTypeToMethods.has(eventType)) {
allMethodsValid = false;
results.addFailure(`Event handler ${this._eventHandlerId} already handles event with event type ${eventType}`);
}
eventTypeToMethods.set(eventType, method);
}
return allMethodsValid;
}
getEventType(typeOrEventTypeOrId, eventTypes) {
let eventType;
if (typeOrEventTypeOrId instanceof sdk_events_1.EventType) {
eventType = typeOrEventTypeOrId;
}
else {
eventType = eventTypes.getFor(typeOrEventTypeOrId);
}
return eventType;
}
}
exports.EventHandlerMethodsBuilder = EventHandlerMethodsBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRIYW5kbGVyTWV0aG9kc0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiLi4vIiwic291cmNlcyI6WyJCdWlsZGVycy9FdmVudEhhbmRsZXJNZXRob2RzQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHFHQUFxRzs7O0FBRXJHLG1EQUEyQztBQUkzQywyREFBcUU7QUFDckUscURBQTBHO0FBSTFHLCtFQUE0RTtBQUs1RTs7R0FFRztBQUNILE1BQWEsMEJBQTJCLFNBQVEseURBQTJCO0lBR3ZFOzs7T0FHRztJQUNILFlBQTZCLGVBQStCO1FBQ3hELEtBQUssRUFBRSxDQUFDO1FBRGlCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUV4RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFPRCxNQUFNLENBQVUsbUJBQWlFLEVBQUUsa0JBQTZELEVBQUUsV0FBc0M7UUFDcEwsTUFBTSxNQUFNLEdBQUcsV0FBVyxJQUFJLGtCQUE4QyxDQUFDO1FBRTdFLElBQUksbUJBQW1CLFlBQVksc0JBQVMsRUFBRTtZQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMvRDthQUFNLElBQUksbUJBQW1CLFlBQVksd0JBQVcsSUFBSSxtQkFBbUIsWUFBWSxnQkFBSSxJQUFJLE9BQU8sbUJBQW1CLEtBQUssUUFBUSxFQUFFO1lBQ3JJLElBQUksVUFBVSxHQUFHLDBCQUFVLENBQUMsS0FBSyxDQUFDO1lBQ2xDLElBQUksa0JBQWtCLFlBQVksMEJBQVUsSUFBSSxPQUFPLGtCQUFrQixLQUFLLFFBQVEsRUFBRTtnQkFDcEYsVUFBVSxHQUFHLDBCQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDcEQ7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxzQkFBUyxDQUFDLHdCQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM1RzthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDL0Q7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gseUJBQXlCLENBQUMsVUFBdUIsRUFBRSxrQkFBNEQsRUFBRSxPQUE0QjtRQUN6SSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDM0IsS0FBSyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFDO1lBQ2hFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDckUsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ25DLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLElBQUksQ0FBQyxlQUFlLDBDQUEwQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2FBQ2xIO1lBQ0Qsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM3QztRQUNELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFTyxZQUFZLENBQUMsbUJBQW9DLEVBQUUsVUFBdUI7UUFDOUUsSUFBSSxTQUFvQixDQUFDO1FBQ3pCLElBQUksbUJBQW1CLFlBQVksc0JBQVMsRUFBRTtZQUMxQyxTQUFTLEdBQUcsbUJBQW1CLENBQUM7U0FDbkM7YUFBTTtZQUNILFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDdEQ7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0NBQ0o7QUFoRUQsZ0VBZ0VDIn0=