UNPKG

torotask

Version:

Task queue processing in NodeJS based on BullMQ and Redis

68 lines 7.44 kB
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