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); 
 |    }; 
 |  } 
 |  
  |