UNPKG

@5minds/processcube_engine

Version:

The ProcessCube Engine. Stores and executes BPMNs.

91 lines (90 loc) 4.61 kB
import { BaseElementViewModel, FlowNodeInstance, Model } from '@5minds/processcube_engine_sdk'; import { CreateFlowNodeInstanceRequest, DataObjectValueCollection } from '../../../Contracts'; import { FlowNodeInstanceDatabaseAdapter } from '../../../Tools/DatabaseAdaptersSequelize/FlowNodeInstanceAdapter'; import { Subscription } from '../../../Tools/EventAggregator'; import { ProcessInstance } from '../../ProcessInstance'; import { FlowNodeHandlerFactory } from '../FlowNodeHandlerFactory'; /** * This is the base handler for all Activities and Tasks. */ export declare class ActivityHandler<TActivity extends Model.Activities.Activity> { private readonly flowNodeInstanceDatabaseAdapter; private readonly flowNodeHandlerFactory; private attachedBoundaryEventHandlers; private readonly processInstance; private readonly _flowNode; private _previousFlowNodeInstanceId; private _multiInstanceMetadataId; private startToken; private endToken; protected batchPersistOnEnterRequests: CreateFlowNodeInstanceRequest<Record<string, any>>[]; protected batchPersistOnEnterResolves: Function[]; private processEventSubscriptions; private allBoundaryEventExecutionPromises; private errorBoundaryEventExecutionPromises; private activityExecutionStrategy; private logger; private loggingMetaData; private loggerNamespace; private abortController; private waitForResumption; constructor(flowNodeInstanceDatabaseAdapter: FlowNodeInstanceDatabaseAdapter, flowNodeHandlerFactory: FlowNodeHandlerFactory, processInstance: ProcessInstance, flowNode: TActivity); get viewModel(): BaseElementViewModel; get flowNode(): TActivity; get multiInstanceMetadataId(): string; get previousFlowNodeInstanceId(): string; private get flowNodeInstanceId(); get abortSignal(): AbortSignal; getInstanceId(): string; abort(): Promise<void>; cancel(): Promise<void>; execute(previousFlowNodeInstanceId?: string, previousResult?: any, executionCanceledCallback?: Function): Promise<void>; resume(flowNodeInstancesForHandler: FlowNodeInstance | Array<FlowNodeInstance>, allFlowNodeInstances: Array<FlowNodeInstance>, resumptionCanceledCallback?: Function): Promise<void>; isMultiInstanceType(): boolean; batchPersistOnEnterRequest(request: CreateFlowNodeInstanceRequest<Record<string, any>>, limit: number, resolve: Function): Promise<void>; runOutgoingDataObjectExpressions(token: Record<string, any> | Array<any>): Promise<DataObjectValueCollection>; private beforeExecution; private runExecution; private afterExecution; private beforeResuming; private loadMultiInstanceDataFromResumableFlowNodeInstances; private runResuming; private getNextFlowNode; private subscribeToProcessInstanceEvents; private subscribeToProcessKilledEvent; private subscribeToProcessError; protected subscribeToTerminateEndEventReached(): Subscription; private disposeEventSubscriptions; private handleSubsequentError; private handleBeforeExecutionError; private handleExecutionError; private handleAfterExecutionError; private runErrorBoundaryEventsForError; private isAbortedOrTerminatedError; private saveMultiInstanceData; private persistDataObjectValues; private handleNextFlowNode; private findNextFlowNodeInstance; private parseDataObjectExpression; private runPreScript; runPostScript(token: Record<string, any> | Array<Record<string, any>>): Promise<Record<string, any> | Array<Record<string, any>>>; private executeByStrategy; private attachBoundaryEvents; private createAndRunBoundaryEventHandler; /** * Used for interactive tasks, to prevent interrupting a task, which has already produced a result and is effectively finished. * ErrorBoundaryEvents must be kept alive, until "persistOnExit" has completed, so that errors in post scripts, or data associations can be handled. * All other Boundary Event Types must be canceled before that. See also https://github.com/atlas-engine/Engine/issues/1223 */ private detachNonErrorBoundaryEvents; private detachAllBoundaryEvents; private cancelExecution; private throwMultipleSubsequentFlowNodesError; private ensureIsNotMultiInstanceAtEventBasedGateway; private ensureMultiInstanceInputIsValid; private getActivityExecutionStrategy; private parseAdditionalActivityProperties; private parseTimeoutBetweenLoopIterations; private parseMaxLoopIterations; private parseNumberValueFromExpression; }