declare module 'ember-concurrency' { import RSVP from 'rsvp'; import EmberObject from '@ember/object'; import { UnwrapComputedPropertyGetter, UnwrapComputedPropertyGetters } from '@ember/object/-private/types'; // Lifted from @types/ember__object/observable.d.ts interface Getter { /** * Retrieves the value of a property from the object. */ get(key: K): UnwrapComputedPropertyGetter; /** * To get the values of multiple properties at once, call `getProperties` * with a list of strings or an array: */ getProperties( list: K[] ): Pick, K>; getProperties( ...list: K[] ): Pick, K>; } type GeneratorFn = ( ...args: Args ) => IterableIterator; export const all: typeof Promise.all; export const allSettled: typeof RSVP.allSettled; export const hash: typeof RSVP.hash; export const race: typeof Promise.race; export function timeout(ms: number): Promise; export function waitForEvent( object: EmberObject | EventTarget, eventName: string ): Promise; export function waitForProperty( object: T, key: K, callbackOrValue: (value: T[K]) => boolean ): Promise; export function waitForQueue(queueName: string): Promise; export function task( task: GeneratorFn ): Task>>; export function taskGroup(): TaskGroupProperty; interface CommonTaskProperty { restartable: () => TaskProperty; drop: () => TaskProperty; keepLatest: () => TaskProperty; enqueue: () => TaskProperty; maxConcurrency: (n: number) => TaskProperty; cancelOn: (eventName: string) => TaskProperty; group: (groupName: string) => TaskProperty; } export interface TaskProperty extends CommonTaskProperty { evented: () => TaskProperty; debug: () => TaskProperty; on: (eventName: string) => TaskProperty; } // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface TaskGroupProperty extends CommonTaskProperty {} // Based on https://github.com/CenterForOpenScience/ember-osf-web/blob/7933316efae805e00723789809bdeb58a96a286a/types/ember-concurrency/index.d.ts export enum TaskInstanceState { Dropped = 'dropped', Canceled = 'canceled', Finished = 'finished', Running = 'running', Waiting = 'waiting' } export interface TaskInstance extends PromiseLike, Getter { readonly error?: unknown; readonly hasStarted: boolean; readonly isCanceled: boolean; readonly isDropped: boolean; readonly isError: boolean; readonly isFinished: boolean; readonly isRunning: boolean; readonly isSuccessful: boolean; readonly state: TaskInstanceState; readonly value?: T; cancel(): void; catch(): RSVP.Promise; finally(): RSVP.Promise; then( onfulfilled?: | ((value: T) => TResult1 | RSVP.Promise) | undefined | null, onrejected?: | ((reason: any) => TResult2 | PromiseLike) | undefined | null ): RSVP.Promise; } export enum TaskState { Running = 'running', Queued = 'queued', Idle = 'idle' } export interface Task extends Getter { readonly isIdle: boolean; readonly isQueued: boolean; readonly isRunning: boolean; readonly last?: TaskInstance; readonly lastCanceled?: TaskInstance; readonly lastComplete?: TaskInstance; readonly lastErrored?: TaskInstance; readonly lastIncomplete?: TaskInstance; readonly lastPerformed?: TaskInstance; readonly lastRunning?: TaskInstance; readonly lastSuccessful?: TaskInstance; readonly performCount: number; readonly state: TaskState; perform(...args: Args): TaskInstance; cancelAll(): void; } }