1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| import { identity } from './identity';
| import { UnaryFunction } from '../types';
|
| export function pipe(): typeof identity;
| export function pipe<T, A>(fn1: UnaryFunction<T, A>): UnaryFunction<T, A>;
| export function pipe<T, A, B>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>): UnaryFunction<T, B>;
| export function pipe<T, A, B, C>(fn1: UnaryFunction<T, A>, fn2: UnaryFunction<A, B>, fn3: UnaryFunction<B, C>): UnaryFunction<T, C>;
| export function pipe<T, A, B, C, D>(
| fn1: UnaryFunction<T, A>,
| fn2: UnaryFunction<A, B>,
| fn3: UnaryFunction<B, C>,
| fn4: UnaryFunction<C, D>
| ): UnaryFunction<T, D>;
| export function pipe<T, A, B, C, D, E>(
| fn1: UnaryFunction<T, A>,
| fn2: UnaryFunction<A, B>,
| fn3: UnaryFunction<B, C>,
| fn4: UnaryFunction<C, D>,
| fn5: UnaryFunction<D, E>
| ): UnaryFunction<T, E>;
| export function pipe<T, A, B, C, D, E, F>(
| fn1: UnaryFunction<T, A>,
| fn2: UnaryFunction<A, B>,
| fn3: UnaryFunction<B, C>,
| fn4: UnaryFunction<C, D>,
| fn5: UnaryFunction<D, E>,
| fn6: UnaryFunction<E, F>
| ): UnaryFunction<T, F>;
| export function pipe<T, A, B, C, D, E, F, G>(
| fn1: UnaryFunction<T, A>,
| fn2: UnaryFunction<A, B>,
| fn3: UnaryFunction<B, C>,
| fn4: UnaryFunction<C, D>,
| fn5: UnaryFunction<D, E>,
| fn6: UnaryFunction<E, F>,
| fn7: UnaryFunction<F, G>
| ): UnaryFunction<T, G>;
| export function pipe<T, A, B, C, D, E, F, G, H>(
| fn1: UnaryFunction<T, A>,
| fn2: UnaryFunction<A, B>,
| fn3: UnaryFunction<B, C>,
| fn4: UnaryFunction<C, D>,
| fn5: UnaryFunction<D, E>,
| fn6: UnaryFunction<E, F>,
| fn7: UnaryFunction<F, G>,
| fn8: UnaryFunction<G, H>
| ): UnaryFunction<T, H>;
| export function pipe<T, A, B, C, D, E, F, G, H, I>(
| fn1: UnaryFunction<T, A>,
| fn2: UnaryFunction<A, B>,
| fn3: UnaryFunction<B, C>,
| fn4: UnaryFunction<C, D>,
| fn5: UnaryFunction<D, E>,
| fn6: UnaryFunction<E, F>,
| fn7: UnaryFunction<F, G>,
| fn8: UnaryFunction<G, H>,
| fn9: UnaryFunction<H, I>
| ): UnaryFunction<T, I>;
| export function pipe<T, A, B, C, D, E, F, G, H, I>(
| fn1: UnaryFunction<T, A>,
| fn2: UnaryFunction<A, B>,
| fn3: UnaryFunction<B, C>,
| fn4: UnaryFunction<C, D>,
| fn5: UnaryFunction<D, E>,
| fn6: UnaryFunction<E, F>,
| fn7: UnaryFunction<F, G>,
| fn8: UnaryFunction<G, H>,
| fn9: UnaryFunction<H, I>,
| ...fns: UnaryFunction<any, any>[]
| ): UnaryFunction<T, unknown>;
|
| /**
| * pipe() can be called on one or more functions, each of which can take one argument ("UnaryFunction")
| * and uses it to return a value.
| * It returns a function that takes one argument, passes it to the first UnaryFunction, and then
| * passes the result to the next one, passes that result to the next one, and so on.
| */
| export function pipe(...fns: Array<UnaryFunction<any, any>>): UnaryFunction<any, any> {
| return pipeFromArray(fns);
| }
|
| /** @internal */
| export function pipeFromArray<T, R>(fns: Array<UnaryFunction<T, R>>): UnaryFunction<T, R> {
| if (fns.length === 0) {
| return identity as UnaryFunction<any, any>;
| }
|
| if (fns.length === 1) {
| return fns[0];
| }
|
| return function piped(input: T): R {
| return fns.reduce((prev: any, fn: UnaryFunction<T, R>) => fn(prev), input as any);
| };
| }
|
|