1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | type ExtractType<T> =
|
8 | T extends { [Symbol.iterator](): { next(): { done: true, value: infer U } } } ? U :
|
9 | T extends { [Symbol.iterator](): { next(): { done: false } } } ? never :
|
10 | T extends { [Symbol.iterator](): { next(): { value: infer U } } } ? U :
|
11 | T extends { [Symbol.iterator](): any } ? unknown :
|
12 | never;
|
13 |
|
14 | interface Co {
|
15 | <F extends (...args: any[]) => Iterator<any>>(fn: F, ...args: Parameters<F>): Promise<ExtractType<ReturnType<F>>>;
|
16 | default: Co;
|
17 | co: Co;
|
18 | wrap: <F extends (...args: any[]) => Iterator<any>>(fn: F) => (...args: Parameters<F>) => Promise<ExtractType<ReturnType<F>>>;
|
19 | }
|
20 |
|
21 | declare const co: Co;
|
22 |
|
23 | export = co;
|