// @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>, };