import { ReadonlyDeep } from 'type-fest';
import { PromiseStore } from '../promise/PromiseStore.js';
import { OrPromise } from '../types.js';
export interface DisposableResource {
    dispose?: () => OrPromise<void>;
}
export declare class DisposablesStore {
    protected promises: PromiseStore;
    protected disposablesMap: Map<unknown, DisposableResource>;
    constructor(promises: PromiseStore);
    add(disposable: DisposableResource | DisposableResource[]): void;
    add(key: unknown, disposable: DisposableResource): void;
    get: (key: unknown) => DisposableResource | undefined;
    has: (key: unknown) => boolean;
    getMap: () => ReadonlyDeep<Map<unknown, DisposableResource>>;
    getList: () => ReadonlyDeep<DisposableResource[]>;
    forgetDisposeAll: () => void;
    awaitDisposeAll: () => Promise<void>;
    /**
     * if an individual key is an array, i.e. you called `add` with an array as
     * the key, e.g. `add([1, 2, 3], disposable)`, then use `removeOne` instead of
     * `remove`
     */
    remove: (key: unknown | unknown[]) => void;
    removeOne: (key: unknown) => void;
    awaitDisposeOne: (key: unknown) => Promise<void>;
    forgetDisposeOne: (key: unknown) => void;
    awaitDisposeMany: (keys: unknown[]) => Promise<void>;
    forgetDisposeMany: (keys: unknown[]) => void;
}
