import { EventEmitter } from './EventEmitter';

type ProgressManagerEventMap<Task> = {
    complete: (opts: {
        completed: Set<Task>;
    }) => void;
    progress: (opts: {
        pending: number;
        completed: number;
    }) => void;
};
/** Keeps track of pending tasks, resolves when all tasks are completed. */
export declare class ProgressManager<Task> {
    /** Tasks that are not completed - once completed, task is removed from this set */
    private pendingTasks;
    private completedTasks;
    emitter: EventEmitter<ProgressManagerEventMap<Task>>;
    constructor(
    /** Tasks that are not completed - once completed, task is removed from this set */
    pendingTasks: Set<Task>);
    get finished(): boolean;
    hasTask(task: Task): boolean;
    /** Returns true if task was added; false if task is already pending */
    add(task: Task, timeoutMs?: number): boolean;
    /** Returns false if task was not pending. This method should be used for any
     * completion of the task, including erroring. */
    complete(task: Task): boolean;
    private updateProgress;
}
export {};
//# sourceMappingURL=ProgressManager.d.ts.map