import { WorkflowVirtualMachine } from '../WorkflowVirtualMachine'; import { Activity, ActivityElement } from './Activity.js'; import { NativeActivity } from './NativeActivity.js'; export abstract class DataContextFactory { public abstract initDataContext(vmContext: WorkflowVirtualMachine.Context, dataContext: TDataContext): void; public abstract createDataContext(vmContext: WorkflowVirtualMachine.Context): TDataContext; } export abstract class DataContextActivity extends NativeActivity { private readonly _dataContextFactory: DataContextFactory; public constructor(dataContextFactory: DataContextFactory, ...children: ReadonlyArray) { super(...children); this._dataContextFactory = dataContextFactory; } public get dataContextFactory(): DataContextFactory { return this._dataContextFactory; } } export class DataContextActivityElement< TDataContext, TActivity extends DataContextActivity, > extends ActivityElement { private readonly _dataContextFactory: DataContextFactory; private _dataContext: TDataContext | null; public constructor(stackFrame: WorkflowVirtualMachine.StackFrame) { super(stackFrame); this._dataContextFactory = stackFrame.activity.dataContextFactory; this._dataContext = null; } public get dataContext(): TDataContext { if (this._dataContext === null) { this._dataContext = this._dataContextFactory.createDataContext(this.vmContext); } return this._dataContext; } }