1import { sourceT as Source } from '../wonka_types.gen';
2
3/* pipe definitions for source + operators composition */
4
5function pipe<T, A>(source: Source<T>, op1: (source: Source<T>) => Source<A>): Source<A>;
6
7function pipe<T, A, B>(
8 source: Source<T>,
9 op1: (source: Source<T>) => Source<A>,
10 op2: (source: Source<A>) => Source<B>
11): Source<B>;
12
13function pipe<T, A, B, C>(
14 source: Source<T>,
15 op1: (source: Source<T>) => Source<A>,
16 op2: (source: Source<A>) => Source<B>,
17 op3: (source: Source<B>) => Source<C>
18): Source<C>;
19
20function pipe<T, A, B, C, D>(
21 source: Source<T>,
22 op1: (source: Source<T>) => Source<A>,
23 op2: (source: Source<A>) => Source<B>,
24 op3: (source: Source<B>) => Source<C>,
25 op4: (source: Source<C>) => Source<D>
26): Source<D>;
27
28function pipe<T, A, B, C, D, E>(
29 source: Source<T>,
30 op1: (source: Source<T>) => Source<A>,
31 op2: (source: Source<A>) => Source<B>,
32 op3: (source: Source<B>) => Source<C>,
33 op4: (source: Source<C>) => Source<D>,
34 op5: (source: Source<D>) => Source<E>
35): Source<E>;
36
37function pipe<T, A, B, C, D, E, F>(
38 source: Source<T>,
39 op1: (source: Source<T>) => Source<A>,
40 op2: (source: Source<A>) => Source<B>,
41 op3: (source: Source<B>) => Source<C>,
42 op4: (source: Source<C>) => Source<D>,
43 op5: (source: Source<D>) => Source<E>,
44 op6: (source: Source<E>) => Source<F>
45): Source<F>;
46
47function pipe<T, A, B, C, D, E, F, G>(
48 source: Source<T>,
49 op1: (source: Source<T>) => Source<A>,
50 op2: (source: Source<A>) => Source<B>,
51 op3: (source: Source<B>) => Source<C>,
52 op4: (source: Source<C>) => Source<D>,
53 op5: (source: Source<D>) => Source<E>,
54 op6: (source: Source<E>) => Source<F>,
55 op7: (source: Source<F>) => Source<G>
56): Source<G>;
57
58function pipe<T, A, B, C, D, E, F, G, H>(
59 source: Source<T>,
60 op1: (source: Source<T>) => Source<A>,
61 op2: (source: Source<A>) => Source<B>,
62 op3: (source: Source<B>) => Source<C>,
63 op4: (source: Source<C>) => Source<D>,
64 op5: (source: Source<D>) => Source<E>,
65 op6: (source: Source<E>) => Source<F>,
66 op7: (source: Source<F>) => Source<G>,
67 op8: (source: Source<G>) => Source<H>
68): Source<H>;
69
70/* pipe definitions for source + operators + consumer composition */
71
72function pipe<T, R>(source: Source<T>, consumer: (source: Source<T>) => R): R;
73
74function pipe<T, A, R>(
75 source: Source<T>,
76 op1: (source: Source<T>) => Source<A>,
77 consumer: (source: Source<A>) => R
78): R;
79
80function pipe<T, A, B, R>(
81 source: Source<T>,
82 op1: (source: Source<T>) => Source<A>,
83 op2: (source: Source<A>) => Source<B>,
84 consumer: (source: Source<B>) => R
85): R;
86
87function pipe<T, A, B, C, R>(
88 source: Source<T>,
89 op1: (source: Source<T>) => Source<A>,
90 op2: (source: Source<A>) => Source<B>,
91 op3: (source: Source<B>) => Source<C>,
92 consumer: (source: Source<C>) => R
93): R;
94
95function pipe<T, A, B, C, D, R>(
96 source: Source<T>,
97 op1: (source: Source<T>) => Source<A>,
98 op2: (source: Source<A>) => Source<B>,
99 op3: (source: Source<B>) => Source<C>,
100 op4: (source: Source<C>) => Source<D>,
101 consumer: (source: Source<D>) => R
102): R;
103
104function pipe<T, A, B, C, D, E, R>(
105 source: Source<T>,
106 op1: (source: Source<T>) => Source<A>,
107 op2: (source: Source<A>) => Source<B>,
108 op3: (source: Source<B>) => Source<C>,
109 op4: (source: Source<C>) => Source<D>,
110 op5: (source: Source<D>) => Source<E>,
111 consumer: (source: Source<E>) => R
112): R;
113
114function pipe<T, A, B, C, D, E, F, R>(
115 source: Source<T>,
116 op1: (source: Source<T>) => Source<A>,
117 op2: (source: Source<A>) => Source<B>,
118 op3: (source: Source<B>) => Source<C>,
119 op4: (source: Source<C>) => Source<D>,
120 op5: (source: Source<D>) => Source<E>,
121 op6: (source: Source<E>) => Source<F>,
122 consumer: (source: Source<F>) => R
123): R;
124
125function pipe<T, A, B, C, D, E, F, G, R>(
126 source: Source<T>,
127 op1: (source: Source<T>) => Source<A>,
128 op2: (source: Source<A>) => Source<B>,
129 op3: (source: Source<B>) => Source<C>,
130 op4: (source: Source<C>) => Source<D>,
131 op5: (source: Source<D>) => Source<E>,
132 op6: (source: Source<E>) => Source<F>,
133 op7: (source: Source<F>) => Source<G>,
134 consumer: (source: Source<G>) => R
135): R;
136
137function pipe<T, A, B, C, D, E, F, G, H, R>(
138 source: Source<T>,
139 op1: (source: Source<T>) => Source<A>,
140 op2: (source: Source<A>) => Source<B>,
141 op3: (source: Source<B>) => Source<C>,
142 op4: (source: Source<C>) => Source<D>,
143 op5: (source: Source<D>) => Source<E>,
144 op6: (source: Source<E>) => Source<F>,
145 op7: (source: Source<F>) => Source<G>,
146 op8: (source: Source<G>) => Source<H>,
147 consumer: (source: Source<H>) => R
148): R;
149
150function pipe() {
151 let x = arguments[0];
152 for (let i = 1, l = arguments.length; i < l; i++)
153 x = arguments[i](x);
154 return x;
155}
156
157export { pipe };