import { Observable } from 'rxjs'; import { PersistentWorkItemState } from './persistent-work-item-state'; import { PersistentWorkflowContext } from './persistent-workflow-context'; declare type PersistentDataType = any; declare type TransitDataType = any; /** * Abstract class of work item to build a work flow. The sequence of handlers called within * the work item. * * [Standard sequence] * The workflow has been completed within single worker instance. If there is an error the * sequence stops at the error. * * 1) init() => void. * 2) preValidate() => Observable. (state === PersistentWorkItemState.PreValidating) * 3) apply() => Observable. * 4) postValidate() => Observable. * 5) finalize() => void. * * [Restore the work item] * When user closed the browser but completion of apply() was not undetermined, restoration of * work item will be processed. * * If preValidate() updates applyState to 'PersistentWorkItemApplyState.Required', call apply() again. * 1) preValidate() => Observable. (state === PersistentWorkItemState.PreValidating) * 2) apply() => Observable. * 3) postValidate() => Observable. * 4) finalize() => void. * * If preValidate() updates applyState to 'PersistentWorkItemApplyState.Skip', skip apply(). * 1) preValidate() => Observable. (state === PersistentWorkItemState.PreValidating) * 2) postValidate() => Observable. * 3) finalize() => void. * * When apply() was already succeeded state, it starts from postValidate() call. * * 1) postValidate() => Observable. * 2) finalize() => void. * */ export declare abstract class PersistentWorkItem> { name: string; /** * The identification of work item in the workflow. */ id: number; /** * The next identification of work item. This value can be update dynamically to switch the work item * instead of single sequence. */ nextId: number; /** * The state of work item. This value is maintained by the workflow runner, so don't modify it. */ state: PersistentWorkItemState; /** * Initializes a new instance of the PersistentWorkItem class. * * @param name the name of work item. */ constructor(name: string); /** * Initializes the transit data in the context before processing apply() call. * Update the persistent data just before calling apply(). * * @param context the workflow context. */ abstract init(context: TContext): void; /** * The function is called after init() call and before apply() call. * * Pre-validation can determine to skip 'apply()' call if not required, set context.applyState to 'Skip'. * * Two states of work item are possible: * - PersistentWorkItemState.PreValidatingByRestore * pre-validation is called by restore operation. * - PersistentWorkItemState.PreValidating * pre-validation is called in normal sequence. * * @param context the workflow context. * @returns Observable the observable to execute. */ abstract preValidate(context: TContext): Observable; /** * Apply the change. * * @param context the workflow context. * @returns Observable the observable to execute. */ abstract apply(context: TContext): Observable; /** * Verify the change if it was completely done. * * @param context the workflow context. * @returns Observable the observable to execute. */ abstract postValidate(context: TContext): Observable; /** * Finalize the work item * * Within this call, it can update property nextId to switch to non-predefined work item. * * @param context the workflow context. */ abstract finalize(context: TContext): void; } export {};