import type { JobNode } from 'bullmq';
import type { TaskJobOptions, TaskJobState } from './job.js';
import type { TaskDefForGroup, TaskGroupDefinitionRegistry, TaskKeysForGroup } from './task-group.js';
import type { TaskPayloadFromDef } from './task.js';
export type TaskFlowRunBaseOptions = Omit<TaskJobOptions, 'repeat' | 'parent'>;
export type TaskFlowRunOptions = TaskFlowRunBaseOptions & Pick<TaskJobOptions, 'parent'>;
export type TaskFlowRunChildOptions = TaskFlowRunBaseOptions;
interface SpecificFlowRunConfig<TAllTaskGroupsDefs extends TaskGroupDefinitionRegistry, GName extends keyof TAllTaskGroupsDefs, TName extends TaskKeysForGroup<TAllTaskGroupsDefs, GName>, TOptions = TaskFlowRunOptions, TDef extends TaskDefForGroup<TAllTaskGroupsDefs, GName, TName> = TaskDefForGroup<TAllTaskGroupsDefs, GName, TName>> {
    taskGroup: GName;
    taskName: TName;
    name?: string;
    payload?: TaskPayloadFromDef<TDef>;
    state?: TaskJobState;
    options?: TOptions;
    children?: TaskFlowRun<TAllTaskGroupsDefs, TaskFlowRunChildOptions>[];
}
export type TaskFlowRun<TAllTaskGroupsDefs extends TaskGroupDefinitionRegistry = TaskGroupDefinitionRegistry, TOptions extends TaskFlowRunBaseOptions = TaskFlowRunOptions> = {
    [GKey in keyof TAllTaskGroupsDefs]: {
        [TKey in TaskKeysForGroup<TAllTaskGroupsDefs, GKey>]: SpecificFlowRunConfig<TAllTaskGroupsDefs, GKey, TKey, TOptions>;
    }[TaskKeysForGroup<TAllTaskGroupsDefs, GKey>];
}[keyof TAllTaskGroupsDefs];
export type TaskFlowGroupRun = TaskFlowRun<any> & {
    taskGroup?: string;
};
export type TaskFlowRunNode = JobNode;
export {};
//# sourceMappingURL=flow.d.ts.map