declare class ReqoalInstance {
    private _pruneIntervalMs;
    private _ttlMs;
    private _maxConcurrency;
    private _console;
    private _interval;
    private _resultCache;
    private _inFlightRequests;
    private _currentConcurrency;
    private _customKeyGen?;
    constructor(intervalMs?: number, ttlMs?: number, consoler?: Console, maxConcurrency?: number);
    coalesce<T, Args extends unknown[]>(fn: (...args: Args) => T | Promise<T>, ...args: Args): Promise<T>;
    isCoalesced<Args extends unknown[]>(fn: (...args: Args) => Promise<unknown>, ...args: Args): boolean;
    setKeyGenerator(keyGen: (functionName: string, ...args: unknown[]) => string): void;
    prune(): void;
    invalidate<Args extends unknown[]>(fn: (...args: Args) => Promise<unknown>, ...args: Args): void;
    clear(): void;
    private _createKey;
}

declare const coalesce: <T, Args extends unknown[]>(fn: (...args: Args) => T | Promise<T>, ...args: Args) => Promise<T>;
declare const isCoalesced: <Args extends unknown[]>(fn: (...args: Args) => Promise<unknown>, ...args: Args) => boolean;
declare const invalidate: <Args extends unknown[]>(fn: (...args: Args) => Promise<unknown>, ...args: Args) => void;
declare const clear: () => void;
declare const prune: () => void;
declare const setKeyGenerator: (keyGen: (functionName: string, ...args: unknown[]) => string) => void;

export { ReqoalInstance, clear, coalesce, invalidate, isCoalesced, prune, setKeyGenerator };
