import type EventEmitter from 'eventemitter3'; import { DisposableScope } from './Disposable'; export type TaskStatus = 'pending' | 'running' | 'successful' | 'failed' | 'canceled'; export type TaskCallback = (scope: DisposableScope, ...inputs: I) => T | Promise; export type TaskOptions = { signal?: AbortSignal; force?: boolean; }; export declare class Task { protected callback: TaskCallback; protected children: Task[]; protected context: object; protected status: TaskStatus; protected result: T | undefined; protected error: unknown; protected eventEmitter: EventEmitter; constructor(callback: TaskCallback, children?: Task[], context?: object); run(options?: TaskOptions, ...inputs: I): Promise; protected forceRun(options?: TaskOptions, ...inputs: I): Promise; loadWith(preloadedResult: T): this; reset(): this; setChildren(children: Task[]): this; getChildren(): Task[]; getDescendants(): Task[]; setContext(context: object): this; getContext(): C; getStatus(): TaskStatus; getResult(): T | undefined; getError(): unknown; isPending(): boolean; isRunning(): boolean; isCompleted(): boolean; isSuccessful(): boolean; isFailed(): boolean; isCanceled(): boolean; onStatusChange(callback: (status: TaskStatus) => unknown): this; onStatusChangeTo(status: TaskStatus, callback: () => unknown): this; onSuccess(callback: () => unknown): this; onFailure(callback: () => unknown): this; onCancel(callback: () => unknown): this; protected setStatus(newStatus: TaskStatus): void; }