UNPKG

17.4 kBTypeScriptView Raw
1/**
2 * Represents the completion of an asynchronous operation
3 */
4interface ThenPromise<T> extends Promise<T> {
5 /**
6 * Attaches callbacks for the resolution and/or rejection of the ThenPromise.
7 * @param onfulfilled The callback to execute when the ThenPromise is resolved.
8 * @param onrejected The callback to execute when the ThenPromise is rejected.
9 * @returns A ThenPromise for the completion of which ever callback is executed.
10 */
11 then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): ThenPromise<TResult1 | TResult2>;
12
13 /**
14 * Attaches a callback for only the rejection of the ThenPromise.
15 * @param onrejected The callback to execute when the ThenPromise is rejected.
16 * @returns A ThenPromise for the completion of the callback.
17 */
18 catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): ThenPromise<T | TResult>;
19
20 // Extensions specific to then/promise
21
22 /**
23 * Attaches callbacks for the resolution and/or rejection of the ThenPromise, without returning a new promise.
24 * @param onfulfilled The callback to execute when the ThenPromise is resolved.
25 * @param onrejected The callback to execute when the ThenPromise is rejected.
26 */
27 done(onfulfilled?: ((value: T) => any) | undefined | null, onrejected?: ((reason: any) => any) | undefined | null): void;
28
29
30 /**
31 * Calls a node.js style callback. If none is provided, the promise is returned.
32 */
33 nodeify(callback: void | null): ThenPromise<T>;
34 nodeify(callback: (err: Error, value: T) => void): void;
35}
36
37interface PromiseFulfilledResult<T> {
38 status: "fulfilled";
39 value: T;
40}
41
42interface PromiseRejectedResult {
43 status: "rejected";
44 reason: any;
45}
46
47type PromiseSettledResult<T> = PromiseFulfilledResult<T> | PromiseRejectedResult;
48
49interface ThenPromiseConstructor {
50 /**
51 * A reference to the prototype.
52 */
53 readonly prototype: ThenPromise<any>;
54
55 /**
56 * Creates a new ThenPromise.
57 * @param executor A callback used to initialize the promise. This callback is passed two arguments:
58 * a resolve callback used resolve the promise with a value or the result of another promise,
59 * and a reject callback used to reject the promise with a provided reason or error.
60 */
61 new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => any): ThenPromise<T>;
62
63 /**
64 * Creates a Promise that is resolved with an array of results when all
65 * of the provided Promises resolve or reject.
66 * @param values An array of Promises.
67 * @returns A new Promise.
68 */
69 allSettled<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>, PromiseSettledResult<T6>, PromiseSettledResult<T7>, PromiseSettledResult<T8>, PromiseSettledResult<T9>, PromiseSettledResult<T10>]>;
70
71 /**
72 * Creates a Promise that is resolved with an array of results when all
73 * of the provided Promises resolve or reject.
74 * @param values An array of Promises.
75 * @returns A new Promise.
76 */
77 allSettled<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>, PromiseSettledResult<T6>, PromiseSettledResult<T7>, PromiseSettledResult<T8>, PromiseSettledResult<T9>]>;
78
79 /**
80 * Creates a Promise that is resolved with an array of results when all
81 * of the provided Promises resolve or reject.
82 * @param values An array of Promises.
83 * @returns A new Promise.
84 */
85 allSettled<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>, PromiseSettledResult<T6>, PromiseSettledResult<T7>, PromiseSettledResult<T8>]>;
86
87 /**
88 * Creates a Promise that is resolved with an array of results when all
89 * of the provided Promises resolve or reject.
90 * @param values An array of Promises.
91 * @returns A new Promise.
92 */
93 allSettled<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>, PromiseSettledResult<T6>, PromiseSettledResult<T7>]>;
94
95 /**
96 * Creates a Promise that is resolved with an array of results when all
97 * of the provided Promises resolve or reject.
98 * @param values An array of Promises.
99 * @returns A new Promise.
100 */
101 allSettled<T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>, PromiseSettledResult<T6>]>;
102
103 /**
104 * Creates a Promise that is resolved with an array of results when all
105 * of the provided Promises resolve or reject.
106 * @param values An array of Promises.
107 * @returns A new Promise.
108 */
109 allSettled<T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>]>;
110
111 /**
112 * Creates a Promise that is resolved with an array of results when all
113 * of the provided Promises resolve or reject.
114 * @param values An array of Promises.
115 * @returns A new Promise.
116 */
117 allSettled<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>]>;
118
119 /**
120 * Creates a Promise that is resolved with an array of results when all
121 * of the provided Promises resolve or reject.
122 * @param values An array of Promises.
123 * @returns A new Promise.
124 */
125 allSettled<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>]>;
126
127 /**
128 * Creates a Promise that is resolved with an array of results when all
129 * of the provided Promises resolve or reject.
130 * @param values An array of Promises.
131 * @returns A new Promise.
132 */
133 allSettled<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>]>;
134
135 /**
136 * Creates a Promise that is resolved with an array of results when all
137 * of the provided Promises resolve or reject.
138 * @param values An array of Promises.
139 * @returns A new Promise.
140 */
141 allSettled<T>(values: (T | PromiseLike<T>)[]): ThenPromise<PromiseSettledResult<T>[]>;
142
143 /**
144 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
145 * resolve, or rejected when any ThenPromise is rejected.
146 * @param values An array of Promises.
147 * @returns A new ThenPromise.
148 */
149 all<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>;
150
151 /**
152 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
153 * resolve, or rejected when any ThenPromise is rejected.
154 * @param values An array of Promises.
155 * @returns A new ThenPromise.
156 */
157 all<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>;
158
159 /**
160 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
161 * resolve, or rejected when any ThenPromise is rejected.
162 * @param values An array of Promises.
163 * @returns A new ThenPromise.
164 */
165 all<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8]>;
166
167 /**
168 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
169 * resolve, or rejected when any ThenPromise is rejected.
170 * @param values An array of Promises.
171 * @returns A new ThenPromise.
172 */
173 all<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7]>;
174
175 /**
176 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
177 * resolve, or rejected when any ThenPromise is rejected.
178 * @param values An array of Promises.
179 * @returns A new ThenPromise.
180 */
181 all<T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): ThenPromise<[T1, T2, T3, T4, T5, T6]>;
182
183 /**
184 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
185 * resolve, or rejected when any ThenPromise is rejected.
186 * @param values An array of Promises.
187 * @returns A new ThenPromise.
188 */
189 all<T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>]): ThenPromise<[T1, T2, T3, T4, T5]>;
190
191 /**
192 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
193 * resolve, or rejected when any ThenPromise is rejected.
194 * @param values An array of Promises.
195 * @returns A new ThenPromise.
196 */
197 all<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>]): ThenPromise<[T1, T2, T3, T4]>;
198
199 /**
200 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
201 * resolve, or rejected when any ThenPromise is rejected.
202 * @param values An array of Promises.
203 * @returns A new ThenPromise.
204 */
205 all<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): ThenPromise<[T1, T2, T3]>;
206
207 /**
208 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
209 * resolve, or rejected when any ThenPromise is rejected.
210 * @param values An array of Promises.
211 * @returns A new ThenPromise.
212 */
213 all<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): ThenPromise<[T1, T2]>;
214
215 /**
216 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
217 * resolve, or rejected when any ThenPromise is rejected.
218 * @param values An array of Promises.
219 * @returns A new ThenPromise.
220 */
221 all<T>(values: (T | PromiseLike<T>)[]): ThenPromise<T[]>;
222
223 /**
224 * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
225 * or rejected.
226 * @param values An array of Promises.
227 * @returns A new ThenPromise.
228 */
229 race<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10>;
230
231 /**
232 * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
233 * or rejected.
234 * @param values An array of Promises.
235 * @returns A new ThenPromise.
236 */
237 race<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9>;
238
239 /**
240 * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
241 * or rejected.
242 * @param values An array of Promises.
243 * @returns A new ThenPromise.
244 */
245 race<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8>;
246
247 /**
248 * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
249 * or rejected.
250 * @param values An array of Promises.
251 * @returns A new ThenPromise.
252 */
253 race<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7>;
254
255 /**
256 * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
257 * or rejected.
258 * @param values An array of Promises.
259 * @returns A new ThenPromise.
260 */
261 race<T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6>;
262
263 /**
264 * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
265 * or rejected.
266 * @param values An array of Promises.
267 * @returns A new ThenPromise.
268 */
269 race<T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>]): ThenPromise<T1 | T2 | T3 | T4 | T5>;
270
271 /**
272 * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
273 * or rejected.
274 * @param values An array of Promises.
275 * @returns A new ThenPromise.
276 */
277 race<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>]): ThenPromise<T1 | T2 | T3 | T4>;
278
279 /**
280 * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
281 * or rejected.
282 * @param values An array of Promises.
283 * @returns A new ThenPromise.
284 */
285 race<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): ThenPromise<T1 | T2 | T3>;
286
287 /**
288 * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
289 * or rejected.
290 * @param values An array of Promises.
291 * @returns A new ThenPromise.
292 */
293 race<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): ThenPromise<T1 | T2>;
294
295 /**
296 * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
297 * or rejected.
298 * @param values An array of Promises.
299 * @returns A new ThenPromise.
300 */
301 race<T>(values: (T | PromiseLike<T>)[]): ThenPromise<T>;
302
303 /**
304 * Creates a new rejected promise for the provided reason.
305 * @param reason The reason the promise was rejected.
306 * @returns A new rejected ThenPromise.
307 */
308 reject(reason: any): ThenPromise<never>;
309
310 /**
311 * Creates a new rejected promise for the provided reason.
312 * @param reason The reason the promise was rejected.
313 * @returns A new rejected ThenPromise.
314 */
315 reject<T>(reason: any): ThenPromise<T>;
316
317 /**
318 * Creates a new resolved promise for the provided value.
319 * @param value A promise.
320 * @returns A promise whose internal state matches the provided promise.
321 */
322 resolve<T>(value: T | PromiseLike<T>): ThenPromise<T>;
323
324 /**
325 * Creates a new resolved promise .
326 * @returns A resolved promise.
327 */
328 resolve(): ThenPromise<void>;
329
330 // Extensions specific to then/promise
331
332 denodeify: (fn: Function) => (...args: any[]) => ThenPromise<any>;
333 nodeify: (fn: Function) => Function;
334}
335
336declare var ThenPromise: ThenPromiseConstructor;
337
338export = ThenPromise;