@5minds/processcube_engine
Version:
The ProcessCube Engine. Stores and executes BPMNs.
81 lines (80 loc) • 4.84 kB
TypeScript
import { BaseError, FlowNodeInstance, FlowNodeInstanceState, Identity, Logger, Model } from '@5minds/processcube_engine_sdk';
import { FlowNodeInstanceTypeSpecificData } from '../../../Contracts';
import { EventMiddlewareHandler, FlowNodeInstanceDatabaseAdapter } from '../../../Tools';
import { FlowNodeExpressionConfig, ProcessInstance } from '../../ProcessInstance';
import { InternalEngineEvent } from '../FlowNodeHandler';
import { ActivityHandler } from './ActivityHandler';
export declare abstract class ActivityInstanceHandler<TActivity extends Model.Activities.Activity> {
protected readonly flowNodeInstanceDatabaseAdapter: FlowNodeInstanceDatabaseAdapter;
protected readonly eventMiddlewareHandler: EventMiddlewareHandler;
protected instanceContext: {
[]: any;
};
protected readonly activityHandler: ActivityHandler<TActivity>;
protected readonly processInstance: ProcessInstance;
protected triggeredByFlowNodeInstanceId: string;
protected typeData: FlowNodeInstanceTypeSpecificData;
protected logger: Logger;
protected loggingMetaData: any;
protected loggerNamespace: string;
protected currentToken: Record<string, any> | Array<any>;
protected previousFlowNodeInstanceId: string;
private _state;
private _flowNodeInstanceId;
private startedAt;
private finishedAt;
private tokenChangedSubscription;
constructor(eventMiddlewareHandler: EventMiddlewareHandler, flowNodeInstanceDatabaseAdapter: FlowNodeInstanceDatabaseAdapter, activityHandler: ActivityHandler<TActivity>, processInstance: ProcessInstance, previousFlowNodeInstanceId?: string, instanceContext?: {
[]: any;
});
get flowNodeInstanceId(): string;
protected set flowNodeInstanceId(value: string);
get state(): string;
protected set state(value: FlowNodeInstanceState);
protected get flowNode(): TActivity;
protected get flowNodeLane(): Model.ProcessElements.Lane;
protected get owner(): Identity;
initFromFlowNodeInstance(fni: FlowNodeInstance): void;
execute(startToken: Record<string, any> | Array<any>, executionCanceledCallback?: Function): Promise<Record<string, any> | Array<any>>;
resume(flowNodeInstanceForHandler: FlowNodeInstance, resumptionCanceledCallback?: Function): Promise<Record<string, any> | Array<any>>;
private handleActivityError;
endWithError(error: BaseError, force?: boolean): Promise<void>;
terminate(): Promise<void>;
cancel(): Promise<void>;
persistOnEnter(): Promise<void>;
protected persistOnSuspend<TFlowNodeData extends FlowNodeInstanceTypeSpecificData>(updatedTokenPayload?: any, typeData?: TFlowNodeData): Promise<void>;
protected persistOnExit<TFlowNodeData extends FlowNodeInstanceTypeSpecificData>(dataObjectValues: Record<string, any>, typeData?: TFlowNodeData): Promise<void>;
protected persistOnError<TFlowNodeData extends FlowNodeInstanceTypeSpecificData>(error: BaseError, typeData?: TFlowNodeData, force?: boolean): Promise<void>;
protected persistOnCancel<TFlowNodeData extends FlowNodeInstanceTypeSpecificData>(typeData?: TFlowNodeData): Promise<void>;
protected persistOnTerminate<TFlowNodeData extends FlowNodeInstanceTypeSpecificData>(typeData?: TFlowNodeData): Promise<void>;
protected beforeExecute(): Promise<void>;
protected afterExecute(): Promise<void>;
protected runHandler(_executionCanceledCallback?: Function): Promise<void>;
private resumeFromState;
/**
* Hook for resuming a Flow Node Handler that is currently in a suspended state.
*/
protected resumeAfterSuspend(flowNodeInstance: FlowNodeInstance, resumptionCanceledCallback?: Function): Promise<void>;
protected finishActivity(): Promise<void>;
protected ensureHasClaim(): void;
protected executeRuntimeExpressionOnInstanceContext<TResult>(config: FlowNodeExpressionConfig): Promise<TResult>;
protected postEventToEventMiddlewares(payload: InternalEngineEvent): Promise<void>;
private subscribeToMiddlewareEvent;
/**
* Executes all expressions for updating some meta property on the containing ProcessInstance.
* For example "engine.setProcessInstanceMetadata.propertyName" or "engine.setCorrelationMetadata.propertyName".
*
* These expressions can be found within the FlowNode's extension properties.
*
* @async
*/
private executeRuntimePropertyExpressionsOnFlowNode;
private setCorrelationMetadata;
private setProcessInstanceMetadata;
private logFlowNodePersistenceEvent;
private publishActivityReachedNotification;
private publishActivityFinishedNotification;
private publishActivityCanceledNotification;
private publishProcessInstanceMetadataChangedNotification;
private publishCorrelationMetadataChangedNotification;
}