// @flow | |
opaque type Next = Function | void; | |
opaque type Yield = mixed; | |
export type Gensync<Args, Return> = { | |
(...args: Args): Handler<Return>, | |
sync(...args: Args): Return, | |
async(...args: Args): Promise<Return>, | |
// ...args: [...Args, Callback] | |
errback(...args: any[]): void, | |
}; | |
export type Handler<Return> = Generator<Yield, Return, Next>; | |
export type Options<Args, Return> = { | |
sync(...args: Args): Return, | |
arity?: number, | |
name?: string, | |
} & ( | |
| { async?: (...args: Args) => Promise<Return> } | |
// ...args: [...Args, Callback] | |
| { errback(...args: any[]): void } | |
); | |
declare module.exports: { | |
<Args, Return>( | |
Options<Args, Return> | ((...args: Args) => Handler<Return>) | |
): Gensync<Args, Return>, | |
all<Return>(Array<Handler<Return>>): Handler<Return[]>, | |
race<Return>(Array<Handler<Return>>): Handler<Return>, | |
}; | |