UNPKG

@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
"use strict"; // 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=