function Pipe
Pipe(): identity

Combine functions, passing return value of each step as first argument to next step.

When there's an async step in the pipeline, the pipeline transparently becomes asynchronous.

Example: const param = "hello" const op = Pipe(f1, f2, f3);

equal(await op(p), f3(await f2(f1(p))));

function f1 (p) { ... } async function f2 (p) { ... } function f3 (p) { ... }

TODO: Use conditional typing to support passing non-function as first argument, resulting in immediate evaluation.

Return Type

Pipe<Z>(z: Z): Z

Type Parameters

Parameters

z: Z

Return Type

Pipe<
Y,
Z,
>
(
y: Y,
z: Z,
): Z extends (_: infer B) => infer C ? Y extends (_: infer A) => B ? Fn<[A], C> : C : never

Type Parameters

Parameters

y: Y
z: Z

Return Type

Z extends (_: infer B) => infer C ? Y extends (_: infer A) => B ? Fn<[A], C> : C : never
Pipe<
X,
Y,
Z,
>
(
x: X,
y: Y,
z: Z,
): Z extends (_: infer C) => infer D ? Y extends (_: infer B) => C ? X extends (_: infer A) => B ? Fn<[A], D> : D : never : never

Type Parameters

Parameters

x: X
y: Y
z: Z

Return Type

Z extends (_: infer C) => infer D ? Y extends (_: infer B) => C ? X extends (_: infer A) => B ? Fn<[A], D> : D : never : never
Pipe<
W,
X,
Y,
Z,
>
(
w: W,
x: X,
y: Y,
z: Z,
): Z extends (_: infer D) => infer E ? Y extends (_: infer C) => D ? X extends (_: infer B) => C ? W extends (_: infer A) => B ? Fn<[A], E> : E : never : never : never

Type Parameters

Parameters

w: W
x: X
y: Y
z: Z

Return Type

Z extends (_: infer D) => infer E ? Y extends (_: infer C) => D ? X extends (_: infer B) => C ? W extends (_: infer A) => B ? Fn<[A], E> : E : never : never : never
Pipe(...steps: Fn[]): Fn

Parameters

...steps: Fn[]

Return Type