UNPKG

@5minds/processcube_engine

Version:

The ProcessCube Engine. Stores and executes BPMNs.

99 lines 6.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.initialize = initialize; exports.registerEventMiddleware = registerEventMiddleware; exports.registerMessageEventMiddleware = registerMessageEventMiddleware; exports.registerSignalEventMiddleware = registerSignalEventMiddleware; exports.removeEventMiddleware = removeEventMiddleware; const processcube_engine_sdk_1 = require("@5minds/processcube_engine_sdk"); const index_1 = require("../../Contracts/InternalDataModels/index"); let container; const logger = new processcube_engine_sdk_1.Logger('engine:event_middleware_handler'); function initialize(iocContainer) { container = iocContainer; } function registerEventMiddleware(callback) { logger.debug(`Registering new Event Middleware Handler`); container.bind(index_1.middlewareEventTag).toConstantValue(callback); } /** * Registers the given callback as an Event Middleware for BPMN Message Events. * * @param messageName Optional: The name of the message to listen for. * If set, the callback will only be executed when messages with the given name are received. * @param callback The callback to execute, when a MessageEvent was received. * @param eventType Optional: The EventType to listen for. * Either 'OnFlowNodeEntered', 'OnFlowNodeExited' or 'OnMessageTriggered' (default). * The callback will only be executed when events with the given EventType are received. */ function registerMessageEventMiddleware(...args) { logger.debug(`Registering new Message Event middleware handler with args: ${JSON.stringify(args)}`); const eventTypeIsSet = args[args.length - 1] === processcube_engine_sdk_1.EngineEventType.OnFlowNodeEntered || args[args.length - 1] === processcube_engine_sdk_1.EngineEventType.OnFlowNodeExited || args[args.length - 1] === processcube_engine_sdk_1.EngineEventType.OnMessageTriggered; const eventType = eventTypeIsSet ? args[args.length - 1] : processcube_engine_sdk_1.EngineEventType.OnMessageTriggered; const callback = eventTypeIsSet ? args[args.length - 2] : args[args.length - 1]; const messageName = (eventTypeIsSet && args.length === 3) || (!eventTypeIsSet && args.length === 2) ? args[0] : undefined; registerEventMiddleware(async (event) => { const isThrowingEvent = event.flowNodeType === processcube_engine_sdk_1.BpmnType.intermediateThrowEvent || event.flowNodeType === processcube_engine_sdk_1.BpmnType.endEvent; const isMessageEvent = event.currentFlowNode?.messageName?.length > 0; const isExpectedEventType = event.eventType === eventType; const isNotExpectedOnMessageFlowNodeEvent = !isThrowingEvent || !isMessageEvent || !isExpectedEventType; if (isNotExpectedOnMessageFlowNodeEvent) { return; } const messageNameMatchesSubscription = !messageName || messageName === event.currentFlowNode.messageName; if (messageNameMatchesSubscription) { callback(event); } }); } /** * Registers the given callback as an Event Middleware for BPMN Signal Events. * * @param signalName Optional: The name of the signal to listen for. * If set, the callback will only be executed when signals with the given name are received. * @param callback The callback to execute, when a SignalEvent was received. * @param eventType Optional: The EventType to listen for. * Either 'OnFlowNodeEntered', 'OnFlowNodeExited' or 'OnSignalTriggered' (default). * The callback will only be executed when events with the given EventType are received. */ function registerSignalEventMiddleware(...args) { logger.debug(`Registering new Signal Event middleware handler with args: ${JSON.stringify(args)}`); const eventTypeIsSet = args[args.length - 1] === processcube_engine_sdk_1.EngineEventType.OnFlowNodeEntered || args[args.length - 1] === processcube_engine_sdk_1.EngineEventType.OnFlowNodeExited || args[args.length - 1] === processcube_engine_sdk_1.EngineEventType.OnSignalTriggered; const eventType = eventTypeIsSet ? args[args.length - 1] : processcube_engine_sdk_1.EngineEventType.OnSignalTriggered; const callback = eventTypeIsSet ? args[args.length - 2] : args[args.length - 1]; const signalName = (eventTypeIsSet && args.length === 3) || (!eventTypeIsSet && args.length === 2) ? args[0] : undefined; registerEventMiddleware(async (event) => { const isThrowingEvent = event.flowNodeType === processcube_engine_sdk_1.BpmnType.intermediateThrowEvent || event.flowNodeType === processcube_engine_sdk_1.BpmnType.endEvent; const isSignalEvent = event.currentFlowNode?.signalName?.length > 0; const isExpectedEventType = event.eventType === eventType; const isNotExpectedOnSignalFlowNodeEvent = !isThrowingEvent || !isSignalEvent || !isExpectedEventType; if (isNotExpectedOnSignalFlowNodeEvent) { return; } const signalNameMatchesSubscription = !signalName || signalName === event.currentFlowNode.signalName; if (signalNameMatchesSubscription) { callback(event); } }); } async function removeEventMiddleware(callbackToRemove) { logger.debug(`Removing event middleware handler...`); const registeredMiddlewares = container.getAll(index_1.middlewareEventTag); const middlewareNotFound = !registeredMiddlewares.some((middleware) => middleware === callbackToRemove); if (middlewareNotFound) { logger.debug(`Middleware to remove was not found.`); return; } logger.debug(`Number of middlewares before remove: ${registeredMiddlewares.length}`); const middlewaresToKeep = registeredMiddlewares.filter((middleware) => middleware !== callbackToRemove); await container.unbind(index_1.middlewareEventTag); logger.debug(`Number of middlewares after remove: ${middlewaresToKeep.length}`); for (const middleware of middlewaresToKeep) { container.bind(index_1.middlewareEventTag).toConstantValue(middleware); } } //# sourceMappingURL=EventMiddlewares.js.map