UNPKG

5.88 kBTypeScriptView Raw
1/* eslint-disable import/export */
2export type Task<ValueType, ReturnType> = (
3 previousValue: ValueType
4) => ReturnType | PromiseLike<ReturnType>;
5
6export type InitialTask<ReturnType> = () => ReturnType | PromiseLike<ReturnType>;
7
8/**
9Run promise-returning & async functions in series, each passing its result to the next.
10
11@param tasks - Functions are expected to return a value. If a `Promise` is returned, it's awaited before continuing with the next task.
12@param initialValue - Value to use as `previousValue` in the first task.
13@returns Resolves when all promises returned from calling the functions in `tasks` are fulfilled, or rejects if any of the promises reject. The fulfilled value is the value returned from the last task.
14
15@example
16```
17import pWaterfall from 'p-waterfall';
18
19const tasks = [
20 initialValue => getEmoji(initialValue),
21 previousValue => `I ❤️ ${previousValue}`
22];
23
24console.log(await pWaterfall(tasks, 'unicorn'));
25//=> 'I ❤️ 🦄'
26```
27*/
28export default function pWaterfall<ReturnType>(
29 tasks: readonly [
30 InitialTask<ReturnType>
31 ]
32): Promise<ReturnType>;
33export default function pWaterfall<ValueType1, ReturnType>(
34 tasks: readonly [
35 InitialTask<ValueType1>,
36 Task<ValueType1, ReturnType>
37 ]
38): Promise<ReturnType>;
39export default function pWaterfall<ValueType1, ValueType2, ReturnType>(
40 tasks: readonly [
41 InitialTask<ValueType1>,
42 Task<ValueType1, ValueType2>,
43 Task<ValueType2, ReturnType>
44 ]
45): Promise<ReturnType>;
46export default function pWaterfall<ValueType1, ValueType2, ValueType3, ReturnType>(
47 tasks: readonly [
48 InitialTask<ValueType1>,
49 Task<ValueType1, ValueType2>,
50 Task<ValueType2, ValueType3>,
51 Task<ValueType3, ReturnType>
52 ]
53): Promise<ReturnType>;
54export default function pWaterfall<ValueType1, ValueType2, ValueType3, ValueType4, ReturnType>(
55 tasks: readonly [
56 InitialTask<ValueType1>,
57 Task<ValueType1, ValueType2>,
58 Task<ValueType2, ValueType3>,
59 Task<ValueType3, ValueType4>,
60 Task<ValueType4, ReturnType>
61 ]
62): Promise<ReturnType>;
63export default function pWaterfall<ValueType1, ValueType2, ValueType3, ValueType4, ValueType5, ReturnType>(
64 tasks: readonly [
65 InitialTask<ValueType1>,
66 Task<ValueType1, ValueType2>,
67 Task<ValueType2, ValueType3>,
68 Task<ValueType3, ValueType4>,
69 Task<ValueType4, ValueType5>,
70 Task<ValueType5, ReturnType>
71 ]
72): Promise<ReturnType>;
73export default function pWaterfall<
74 ValueType1,
75 ValueType2,
76 ValueType3,
77 ValueType4,
78 ValueType5,
79 ValueType6,
80 ReturnType
81>(
82 tasks: readonly [
83 InitialTask<ValueType1>,
84 Task<ValueType1, ValueType2>,
85 Task<ValueType2, ValueType3>,
86 Task<ValueType3, ValueType4>,
87 Task<ValueType4, ValueType5>,
88 Task<ValueType5, ValueType6>,
89 Task<ValueType6, ReturnType>
90 ]
91): Promise<ReturnType>;
92export default function pWaterfall<
93 ValueType1,
94 ValueType2,
95 ValueType3,
96 ValueType4,
97 ValueType5,
98 ValueType6,
99 ValueType7,
100 ReturnType
101>(
102 tasks: readonly [
103 InitialTask<ValueType1>,
104 Task<ValueType1, ValueType2>,
105 Task<ValueType2, ValueType3>,
106 Task<ValueType3, ValueType4>,
107 Task<ValueType4, ValueType5>,
108 Task<ValueType5, ValueType6>,
109 Task<ValueType6, ValueType7>,
110 Task<ValueType7, ReturnType>
111 ]
112): Promise<ReturnType>;
113export default function pWaterfall<ValueType1, ReturnType>(
114 tasks: readonly [
115 Task<ValueType1, ReturnType>
116 ],
117 initialValue: ValueType1
118): Promise<ReturnType>;
119export default function pWaterfall<ValueType1, ValueType2, ReturnType>(
120 tasks: readonly [
121 Task<ValueType1, ValueType2>,
122 Task<ValueType2, ReturnType>
123 ],
124 initialValue: ValueType1
125): Promise<ReturnType>;
126export default function pWaterfall<ValueType1, ValueType2, ValueType3, ReturnType>(
127 tasks: readonly [
128 Task<ValueType1, ValueType2>,
129 Task<ValueType2, ValueType3>,
130 Task<ValueType3, ReturnType>
131 ],
132 initialValue: ValueType1
133): Promise<ReturnType>;
134export default function pWaterfall<ValueType1, ValueType2, ValueType3, ValueType4, ReturnType>(
135 tasks: readonly [
136 Task<ValueType1, ValueType2>,
137 Task<ValueType2, ValueType3>,
138 Task<ValueType3, ValueType4>,
139 Task<ValueType4, ReturnType>
140 ],
141 initialValue: ValueType1
142): Promise<ReturnType>;
143export default function pWaterfall<ValueType1, ValueType2, ValueType3, ValueType4, ValueType5, ReturnType>(
144 tasks: readonly [
145 Task<ValueType1, ValueType2>,
146 Task<ValueType2, ValueType3>,
147 Task<ValueType3, ValueType4>,
148 Task<ValueType4, ValueType5>,
149 Task<ValueType5, ReturnType>
150 ],
151 initialValue: ValueType1
152): Promise<ReturnType>;
153export default function pWaterfall<
154 ValueType1,
155 ValueType2,
156 ValueType3,
157 ValueType4,
158 ValueType5,
159 ValueType6,
160 ReturnType
161>(
162 tasks: readonly [
163 Task<ValueType1, ValueType2>,
164 Task<ValueType2, ValueType3>,
165 Task<ValueType3, ValueType4>,
166 Task<ValueType4, ValueType5>,
167 Task<ValueType5, ValueType6>,
168 Task<ValueType6, ReturnType>
169 ],
170 initialValue: ValueType1
171): Promise<ReturnType>;
172export default function pWaterfall<
173 ValueType1,
174 ValueType2,
175 ValueType3,
176 ValueType4,
177 ValueType5,
178 ValueType6,
179 ValueType7,
180 ReturnType
181>(
182 tasks: readonly [
183 Task<ValueType1, ValueType2>,
184 Task<ValueType2, ValueType3>,
185 Task<ValueType3, ValueType4>,
186 Task<ValueType4, ValueType5>,
187 Task<ValueType5, ValueType6>,
188 Task<ValueType6, ValueType7>,
189 Task<ValueType7, ReturnType>
190 ],
191 initialValue: ValueType1
192): Promise<ReturnType>;
193export default function pWaterfall<
194 ValueType1,
195 ValueType2,
196 ValueType3,
197 ValueType4,
198 ValueType5,
199 ValueType6,
200 ValueType7,
201 ValueType8,
202 ReturnType
203>(
204 tasks: readonly [
205 Task<ValueType1, ValueType2>,
206 Task<ValueType2, ValueType3>,
207 Task<ValueType3, ValueType4>,
208 Task<ValueType4, ValueType5>,
209 Task<ValueType5, ValueType6>,
210 Task<ValueType6, ValueType7>,
211 Task<ValueType7, ValueType8>,
212 Task<ValueType8, ReturnType>
213 ],
214 initialValue: ValueType1
215): Promise<ReturnType>;
216export default function pWaterfall(
217 tasks: Iterable<Task<unknown, unknown>>,
218 initialValue?: unknown
219): Promise<unknown>;