/* @flow */ export type Task$Types = 'after' | 'every' | 'defer' | 'job'; type Task$PromiseOption = { promise(): Promise>, }; export type Task$Handler = {| get size(): number, has(...ids: Array): boolean, after, F: (...args: A) => any>( id: ID, delay: number, fn?: F, ...args: A ): Task$Ref, defer, F: (...args: A) => any>( id: ID, fn?: F, ...args: A ): Task$Ref, every, F: (...args: A) => any>( id: ID, interval: number, fn?: F, ...args: A ): Task$Ref, everyNow, F: (...args: A) => any>( id: ID, interval: number, fn?: F, ...args: A ): Task$Ref, everySequential, F: (...args: A) => any>( id: ID, interval: number, fn?: F, ...args: A ): Task$Ref, everyNowSequential, F: (...args: A) => any>( id: ID, interval: number, fn?: F, ...args: A ): Task$Ref, job, F: (...args: A) => Task$Job>( id: ID, getJob: F, ...args: A ): Task$Ref, cancel(...ids: Array): Task$PromiseOption, clear(): Task$PromiseOption, |}; type Task$Promise$Every = AsyncGenerator; type Task$Promise$Regular = Promise; export type Task$RefMap = Map void]>; export type Task$Ref = {| +id: any, +type: Task$Types, get result(): any, get promise(): () => Task$Promise$Regular, get promises(): () => Task$Promise$Every, +status: { resolving: boolean, complete: boolean, cancelled: boolean, error: boolean, }, cancel(): void, resolve(value: any): void, reject(reason: any): void, task: Task$Handler, |}; export type Task$Job = {| start: (ref: Task$Ref) => any, error?: (error: Error) => any, cancelled?: (ref: Task$Ref) => any, complete?: (ref: Task$Ref) => any, |};