export type PromiseResolve<T> = (value: PromiseLike<T> | T) => void;
export type PromiseReject = (reason?: any) => void;
export type Task<T> = () => Promise<T>;
export type Record<T> = [Task<T>, PromiseResolve<T>, PromiseReject];
export declare class Mutex<T> {
    private busy;
    private readonly queue;
    dequeue(): Promise<void> | undefined;
    execute(record: Record<T>): Promise<void>;
    synchronize(task: Task<T>): Promise<T>;
}
