declare type Task = (...args: any) => any; declare type Accepts = T extends (...args: any) => any ? Parameters : DEFAULT; declare type ACC = Accepts; declare type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never; declare type IfEquals = (() => G extends T ? 1 : 2) extends (() => G extends U ? 1 : 2) ? Y : N; declare type OrderArg = T extends Task ? ACC extends [infer U] ? [IfEquals] : ACC extends [] ? unknown[] : any : unknown[]; declare type BoxedOrderArgs = { [P in keyof T]: { _box: OrderArg; }; }[Exclude]; declare type UnboxIntersection = T extends { _box: infer U; } ? U : never; declare type OrderTask = Task; declare type OrderArgs = T extends [...infer U] ? UnboxIntersection>> : T extends (infer U)[] ? OrderArg : unknown; declare type OrderResult = OrderArgs[0]; /** * ```javascript * * let InOrder = require('async-patterns/InOrder'); * * const task = InOrder( * async (i) => i + 1, * async (i) => i + 1, * async (i) => i + 1 * ); * * await task(0); // returns 3 * * ``` * * @name InOrder * @param {...function} tasks - any number of async tasks. * @returns {function} an async wrapper function that runs all of the tasks in order, calling each one with original request * @memberof async-patterns */ declare const InOrder: (...tasks: T) => (...args: OrderArgs) => Promise>; export = InOrder;