UNPKG

bpmn-elements

Version:

Executable workflow elements based on BPMN 2.0

94 lines (93 loc) 2.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ActivityApi = ActivityApi; exports.Api = Api; exports.DefinitionApi = DefinitionApi; exports.FlowApi = FlowApi; exports.ProcessApi = ProcessApi; var _messageHelper = require("./messageHelper.js"); var _shared = require("./shared.js"); function ActivityApi(broker, apiMessage, environment) { return new Api('activity', broker, apiMessage, environment); } function DefinitionApi(broker, apiMessage, environment) { return new Api('definition', broker, apiMessage, environment); } function ProcessApi(broker, apiMessage, environment) { return new Api('process', broker, apiMessage, environment); } function FlowApi(broker, apiMessage, environment) { return new Api('flow', broker, apiMessage, environment); } function Api(pfx, broker, sourceMessage, environment) { if (!sourceMessage) throw new Error('Api requires message'); const apiMessage = (0, _messageHelper.cloneMessage)(sourceMessage); const { id, type, name, executionId } = apiMessage.content; this.id = id; this.type = type; this.name = name; this.executionId = executionId; this.environment = environment || broker.owner.environment; this.content = apiMessage.content; this.fields = apiMessage.fields; this.messageProperties = apiMessage.properties; this.broker = broker; this.owner = broker.owner; this.messagePrefix = pfx; } Api.prototype.cancel = function cancel(message, options) { this.sendApiMessage('cancel', { message }, options); }; Api.prototype.discard = function discard() { this.sendApiMessage('discard'); }; Api.prototype.fail = function fail(error) { this.sendApiMessage('error', { error }); }; Api.prototype.signal = function signal(message, options) { this.sendApiMessage('signal', { message }, options); }; Api.prototype.stop = function stop() { this.sendApiMessage('stop'); }; Api.prototype.resolveExpression = function resolveExpression(expression) { return this.environment.resolveExpression(expression, { fields: this.fields, content: this.content, properties: this.messageProperties }, this.owner); }; Api.prototype.sendApiMessage = function sendApiMessage(action, content, options) { const correlationId = options?.correlationId || (0, _shared.getUniqueId)(`${this.id || this.messagePrefix}_signal`); let key = `${this.messagePrefix}.${action}`; if (this.executionId) key += `.${this.executionId}`; this.broker.publish('api', key, this.createMessage(content), { ...options, correlationId, type: action }); }; Api.prototype.getPostponed = function getPostponed(...args) { if (this.owner.getPostponed) return this.owner.getPostponed(...args); if (this.owner.isSubProcess && this.owner.execution) return this.owner.execution.getPostponed(...args); return []; }; Api.prototype.createMessage = function createMessage(content) { return { ...this.content, ...content }; };