torotask
Version:
Task queue processing in NodeJS based on BullMQ and Redis
68 lines • 7.44 kB
TypeScript
import { type StringValue } from 'ms';
import { TaskJob } from './job.js';
import { Task } from './task.js';
import type { StepTaskJobOptions, TaskFlowRun, TaskFlowRunNode, TaskGroupDefinitionRegistry, TaskGroupRegistry } from './types/index.js';
export declare class StepExecutor<JobType extends TaskJob = TaskJob, TAllTaskGroupsDefs extends TaskGroupDefinitionRegistry = TaskGroupDefinitionRegistry, TCurrentJobGroup extends keyof TAllTaskGroupsDefs = never, TGroups extends TaskGroupRegistry<TAllTaskGroupsDefs> = TaskGroupRegistry<TAllTaskGroupsDefs>, TJobPayload = JobType extends TaskJob<infer P, any, any> ? P : unknown, TJobResult = JobType extends TaskJob<any, infer R, any> ? R : unknown> {
private job;
private parentTask;
private logger;
private stepCounts;
private client;
constructor(job: JobType, parentTask: Task<TJobPayload, TJobResult, any>);
private persistState;
/**
* Process step result before storing it in the job state.
* This method automatically prepares TaskJob instances ready for serialization.
* Recursively processes arrays and objects to find and serialize any TaskJob instances.
*
* @param result The result from a step's core logic
* @param stepKind The kind of step that produced this result
* @returns A processed version of the result suitable for storage
*/
protected memoizeStepResult<T>(result: T, stepKind: string): Promise<any>;
/**
* Checks if the memoized data is a job that needs to be reconstructed.
* Recursively processes arrays and objects to find and reconstruct any serialized jobs.
*
* @param memoizedData The data from the memoized result
* @param userStepId The ID of the step for logging purposes
* @returns The original data or a reconstructed job
*/
protected reconstructJobIfNeeded<T>(memoizedData: any, userStepId: string): Promise<T>;
/**
* Centralized method to execute a step, handling memoization, state persistence, and errors.
* @param userStepId User-defined ID for the step.
* @param stepKind A string identifier for the kind of step (e.g., 'do', 'sleep').
* @param coreLogic The async function that performs the actual work of the step.
* If it initiates a pending state (e.g., sleep, wait), it should:
* 1. Update \`this.job.state.stepState\` with the new status (e.g., 'sleeping').
* 2. Call \`await this.persistState()\`.
* 3. Throw a \`WorkflowPendingError\` (e.g., \`DelayedError\`).
* If it completes successfully, it returns the result.
* If it fails with an unexpected error, it throws that error.
* @param handleMemoizedState Optional handler for memoized states that are not 'completed' or 'errored'.
* Used for re-evaluating pending states (e.g., checking if sleep duration has passed).
* If it handles the state, it should return \`{ processed: true, ... }\`.
* If the step completes, it must update state and persist.
* @param memoizeStepResult Optional function to customize how the step result is serialized before storage.
* If not provided, the default memoizeStepResult method will be used.
*/
private _executeStep;
do<T>(userStepId: string, handler: () => Promise<T>): Promise<T>;
sleep(userStepId: string, duration: number | StringValue): Promise<void>;
sleepUntil(userStepId: string, datetime: Date | string | number): Promise<void>;
runGroupTask<TargetGroup extends TGroups[TCurrentJobGroup] = TGroups[TCurrentJobGroup], TaskName extends keyof TargetGroup['tasks'] = keyof TargetGroup['tasks'], ActualTask extends TargetGroup['tasks'][TaskName] = TargetGroup['tasks'][TaskName], Payload = ActualTask extends Task<any, any, any, infer P> ? P : unknown, Result = ActualTask extends Task<any, infer R, any, any> ? R : unknown, ActualPayload extends Payload = Payload, TJob extends TaskJob<ActualPayload, Result> = TaskJob<ActualPayload, Result>>(userStepId: string, taskName: TaskName, payload: ActualPayload, options?: StepTaskJobOptions): Promise<TJob>;
runGroupTaskAndWait<TargetGroup extends TGroups[TCurrentJobGroup] = TGroups[TCurrentJobGroup], TaskName extends keyof TargetGroup['tasks'] = keyof TargetGroup['tasks'], ActualTask extends TargetGroup['tasks'][TaskName] = TargetGroup['tasks'][TaskName], Payload = ActualTask extends Task<any, any, any, infer P> ? P : unknown, Result = ActualTask extends Task<any, infer R, any, any> ? R : unknown, ActualPayload extends Payload = Payload>(userStepId: string, taskName: TaskName, payload: ActualPayload, options?: StepTaskJobOptions): Promise<Result>;
runTask<GroupName extends keyof TGroups, TargetGroup extends TGroups[GroupName] = TGroups[GroupName], TaskName extends keyof TargetGroup['tasks'] = keyof TargetGroup['tasks'], ActualTask extends TargetGroup['tasks'][TaskName] = TargetGroup['tasks'][TaskName], Payload = ActualTask extends Task<any, any, any, infer P> ? P : unknown, Result = ActualTask extends Task<any, infer R, any, any> ? R : unknown, ActualPayload extends Payload = Payload, TJob extends TaskJob<ActualPayload, Result> = TaskJob<ActualPayload, Result>>(userStepId: string, groupName: GroupName, taskName: TaskName, payload: ActualPayload, options?: StepTaskJobOptions): Promise<TJob>;
runTaskAndWait<GroupName extends keyof TGroups, TargetGroup extends TGroups[GroupName] = TGroups[GroupName], TaskName extends keyof TargetGroup['tasks'] = keyof TargetGroup['tasks'], ActualTask extends TargetGroup['tasks'][TaskName] = TargetGroup['tasks'][TaskName], Payload = ActualTask extends Task<any, any, any, infer P> ? P : unknown, Result = ActualTask extends Task<any, infer R, any, any> ? R : unknown, ActualPayload extends Payload = Payload>(userStepId: string, groupName: GroupName, taskName: TaskName, payload: ActualPayload, options?: StepTaskJobOptions): Promise<Result>;
runTasks<GroupName extends keyof TGroups, TargetGroup extends TGroups[GroupName] = TGroups[GroupName], TaskName extends keyof TargetGroup['tasks'] = keyof TargetGroup['tasks'], ActualTask extends TargetGroup['tasks'][TaskName] = TargetGroup['tasks'][TaskName], Payload = ActualTask extends Task<any, any, any, infer P> ? P : unknown, Result = ActualTask extends Task<any, infer R, any, any> ? R : unknown, ActualPayload extends Payload = Payload, TJob extends TaskJob<ActualPayload, Result> = TaskJob<ActualPayload, Result>>(userStepId: string, groupName: GroupName, taskName: TaskName, tasks: Array<{
name?: string;
payload?: ActualPayload;
options?: StepTaskJobOptions;
}>, options?: StepTaskJobOptions): Promise<TJob[]>;
runFlow<TFlowRun extends TaskFlowRun<TAllTaskGroupsDefs> = TaskFlowRun<TAllTaskGroupsDefs>>(userStepId: string, task: TFlowRun, options?: StepTaskJobOptions): Promise<TaskFlowRunNode>;
runFlows<TFlowRun extends TaskFlowRun<TAllTaskGroupsDefs> = TaskFlowRun<TAllTaskGroupsDefs>>(userStepId: string, tasks: TFlowRun[], options?: StepTaskJobOptions): Promise<TaskFlowRunNode[]>;
waitForChildTasks(userStepId: string): Promise<any[]>;
sendEvent(userStepId: string, eventName: string, eventData: any): Promise<void>;
}
//# sourceMappingURL=step-executor.d.ts.map