import type { Abortable } from '../abortable/Abortable'; import type { AnyExecutionContext } from '../execution-context/ExecutionContext'; export type Task = (parameter: P, context: Context) => R | PromiseLike | Abortable; export type TaskParam = T extends NamedTask ? S extends Task ? P : never : never; export type TaskReturn = T extends NamedTask ? S extends Task ? Awaited : never : never; export type NamedTask = T & { _name: string; }; export type BoundTask> = (param: TaskParam) => Abortable>; export type AnyTask = Task; export type AnyContextTask = Task; export type AnyParameterTask

= Task; export type AnyNamedTask = NamedTask;