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