@5minds/processcube_engine
Version:
The ProcessCube Engine. Stores and executes BPMNs.
159 lines • 10.5 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFlowNodeInstanceFromModel = createFlowNodeInstanceFromModel;
const dayjs_1 = __importDefault(require("dayjs"));
const processcube_engine_sdk_1 = require("@5minds/processcube_engine_sdk");
const Compression_1 = require("./Compression");
async function createFlowNodeInstanceFromModel(dataModel) {
if (!dataModel) {
return;
}
const runtimeFlowNodeInstance = await createTypedFlowNodeInstance(dataModel);
runtimeFlowNodeInstance.multiInstanceMetadataId = dataModel.multiInstanceMetadataId;
runtimeFlowNodeInstance.multiInstanceStartToken = await deserializeTokenPayload(dataModel.multiInstanceMetadata?.startToken);
runtimeFlowNodeInstance.multiInstanceEndToken = await deserializeTokenPayload(dataModel.multiInstanceMetadata?.endToken);
runtimeFlowNodeInstance.flowNodeInstanceId = dataModel.flowNodeInstanceId;
runtimeFlowNodeInstance.flowNodeId = dataModel.flowNodeId;
runtimeFlowNodeInstance.flowNodeName = dataModel.flowNodeName;
runtimeFlowNodeInstance.flowNodeLane = dataModel.flowNodeLane;
runtimeFlowNodeInstance.flowNodeType = dataModel.flowNodeType;
runtimeFlowNodeInstance.eventType = dataModel.eventType;
runtimeFlowNodeInstance.state = dataModel.state;
runtimeFlowNodeInstance.previousFlowNodeInstanceId = dataModel.previousFlowNodeInstanceId;
runtimeFlowNodeInstance.parentProcessInstanceId = dataModel.parentProcessInstanceId;
runtimeFlowNodeInstance.processDefinitionId = dataModel.processDefinitionId;
runtimeFlowNodeInstance.processModelId = dataModel.processModelId;
runtimeFlowNodeInstance.embeddedProcessModelId = dataModel.embeddedProcessModelId;
runtimeFlowNodeInstance.processModelName = dataModel.processInstance?.processModelName;
runtimeFlowNodeInstance.processInstanceId = dataModel.processInstanceId;
runtimeFlowNodeInstance.correlationId = dataModel.correlationId;
runtimeFlowNodeInstance.ownerId = dataModel.ownerId;
runtimeFlowNodeInstance.startToken = await deserializeTokenPayload(dataModel.startToken, dataModel.startTokenCompressed);
runtimeFlowNodeInstance.endToken = await deserializeTokenPayload(dataModel.endToken, dataModel.endTokenCompressed);
runtimeFlowNodeInstance.error = (0, processcube_engine_sdk_1.deserializeJson)(dataModel.error);
runtimeFlowNodeInstance.startedAt = dataModel.createdAt;
runtimeFlowNodeInstance.finishedAt = dataModel.finishedAt;
runtimeFlowNodeInstance.triggeredByFlowNodeInstance = dataModel.triggeredByFlowNodeInstance
? await createFlowNodeInstanceFromModel(dataModel.triggeredByFlowNodeInstance)
: undefined;
return runtimeFlowNodeInstance;
}
async function createTypedFlowNodeInstance(dataModel) {
switch (dataModel.flowNodeType) {
case processcube_engine_sdk_1.BpmnType.callActivity:
const callActivityInstance = {
childProcessInstanceId: dataModel.callActivityInstanceMetaInfo?.childProcessInstanceId,
targetProcessModelId: dataModel.callActivityInstanceMetaInfo?.targetProcessModelId,
startEventId: dataModel.callActivityInstanceMetaInfo?.startEventId,
};
return callActivityInstance;
case processcube_engine_sdk_1.BpmnType.subProcess:
const subprocessInstance = {
childProcessInstanceId: dataModel.subprocessInstanceMetaInfo?.childProcessInstanceId,
startEventId: dataModel.subprocessInstanceMetaInfo?.startEventId,
};
return subprocessInstance;
case processcube_engine_sdk_1.BpmnType.manualTask:
const manualTaskInstance = {
finishedByUserId: dataModel.manualTaskMetaInfo?.finishedByUserId,
};
return manualTaskInstance;
case processcube_engine_sdk_1.BpmnType.businessRuleTask:
const businessRuleTaskInstance = {};
if (dataModel.externalTaskData) {
const lockExpirationTime = new Date(dataModel.externalTaskData.lockExpirationTime);
const locKExpirationTimeIsNull = (0, dayjs_1.default)(lockExpirationTime).unix() != (0, dayjs_1.default)(new Date(null)).unix();
businessRuleTaskInstance.businessRuleTaskData = {
externalTaskId: dataModel.externalTaskData.externalTaskId,
workerId: dataModel.externalTaskData.workerId,
topic: dataModel.externalTaskData.topic,
isSingleTry: dataModel.externalTaskData.isSingleTry ?? false,
payload: await deserializeTokenPayload(dataModel.startToken, dataModel.startTokenCompressed),
state: dataModel.state === processcube_engine_sdk_1.FlowNodeInstanceState.suspended ? processcube_engine_sdk_1.ExternalTaskState.pending : processcube_engine_sdk_1.ExternalTaskState.finished,
lockExpirationTime: locKExpirationTimeIsNull ? lockExpirationTime : undefined,
result: dataModel.state === processcube_engine_sdk_1.FlowNodeInstanceState.finished ? await deserializeTokenPayload(dataModel.endToken, dataModel.endTokenCompressed) : undefined,
error: dataModel.error ? (0, processcube_engine_sdk_1.deserializeJson)(dataModel.error) : undefined,
finishedAt: dataModel.externalTaskData.finishedAt ? new Date(dataModel.externalTaskData.finishedAt) : undefined,
};
}
return businessRuleTaskInstance;
case processcube_engine_sdk_1.BpmnType.serviceTask:
const serviceTaskInstance = {};
if (dataModel.externalTaskData) {
const lockExpirationTime = new Date(dataModel.externalTaskData.lockExpirationTime);
const locKExpirationTimeIsNull = (0, dayjs_1.default)(lockExpirationTime).unix() != (0, dayjs_1.default)(new Date(null)).unix();
serviceTaskInstance.externalTaskData = {
externalTaskId: dataModel.externalTaskData.externalTaskId,
workerId: dataModel.externalTaskData.workerId,
topic: dataModel.externalTaskData.topic,
isSingleTry: dataModel.externalTaskData.isSingleTry ?? false,
payload: await deserializeTokenPayload(dataModel.startToken, dataModel.startTokenCompressed),
state: dataModel.state === processcube_engine_sdk_1.FlowNodeInstanceState.suspended ? processcube_engine_sdk_1.ExternalTaskState.pending : processcube_engine_sdk_1.ExternalTaskState.finished,
lockExpirationTime: locKExpirationTimeIsNull ? lockExpirationTime : undefined,
result: dataModel.state === processcube_engine_sdk_1.FlowNodeInstanceState.finished ? await deserializeTokenPayload(dataModel.endToken, dataModel.endTokenCompressed) : undefined,
error: dataModel.error ? (0, processcube_engine_sdk_1.deserializeJson)(dataModel.error) : undefined,
finishedAt: dataModel.externalTaskData.finishedAt ? new Date(dataModel.externalTaskData.finishedAt) : undefined,
};
}
if (dataModel.httpServiceTaskData) {
serviceTaskInstance.httpServiceTaskData = {
method: dataModel.httpServiceTaskData.method,
url: dataModel.httpServiceTaskData.url,
body: (0, processcube_engine_sdk_1.deserializeJson)(dataModel.httpServiceTaskData.body) ?? undefined,
headers: (0, processcube_engine_sdk_1.deserializeJson)(dataModel.httpServiceTaskData.headers) ?? undefined,
};
}
return serviceTaskInstance;
case processcube_engine_sdk_1.BpmnType.userTask:
const userTaskInstance = {
actualOwnerId: dataModel.userTaskMetaInfo?.actualOwnerId,
finishedByUserId: dataModel.userTaskMetaInfo?.finishedByUserId,
userTaskConfig: (0, processcube_engine_sdk_1.deserializeJson)(dataModel.userTaskMetaInfo?.userTaskConfig ?? '{}'),
userTaskConfigModel: (0, processcube_engine_sdk_1.deserializeJson)(dataModel.userTaskMetaInfo?.userTaskConfigModel ?? '{}'),
assignedUserIds: (0, processcube_engine_sdk_1.deserializeJson)(dataModel.userTaskMetaInfo?.assignedUserIds),
};
return userTaskInstance;
case processcube_engine_sdk_1.BpmnType.startEvent:
case processcube_engine_sdk_1.BpmnType.intermediateCatchEvent:
case processcube_engine_sdk_1.BpmnType.boundaryEvent:
const catchingEventInstance = {
eventName: dataModel.catchEventInstanceMetaInfo?.eventName,
triggerValue: dataModel.catchEventInstanceMetaInfo?.triggerValue,
};
return catchingEventInstance;
case processcube_engine_sdk_1.BpmnType.intermediateThrowEvent:
case processcube_engine_sdk_1.BpmnType.endEvent:
const throwingEventInstance = {
eventName: dataModel.throwEventInstanceMetaInfo?.eventName,
customCorrelationId: dataModel.throwEventInstanceMetaInfo?.customCorrelationId,
};
return throwingEventInstance;
case processcube_engine_sdk_1.BpmnType.receiveTask:
const receiveTaskInstance = {
messageName: dataModel.catchEventInstanceMetaInfo?.eventName,
triggerValue: dataModel.catchEventInstanceMetaInfo?.triggerValue,
};
return receiveTaskInstance;
case processcube_engine_sdk_1.BpmnType.sendTask:
const sendTaskInstance = {
messageName: dataModel.throwEventInstanceMetaInfo?.eventName,
customCorrelationId: dataModel.throwEventInstanceMetaInfo?.customCorrelationId,
};
return sendTaskInstance;
default:
return {};
}
}
async function deserializeTokenPayload(uncompressedToken, compressedToken) {
if (uncompressedToken) {
return (0, processcube_engine_sdk_1.deserializeJson)(uncompressedToken);
}
if (compressedToken) {
return (0, Compression_1.decompressToken)(compressedToken);
}
return {};
}
//# sourceMappingURL=FlowNodeInstanceFactory.js.map