/**
 * Wrapper for `async-mutex` {@link Mutex}es to run code exclusively for a key.
 */
export default class KeyedMutex {
    private readonly keyMutexes;
    private readonly keyMutexesMutex;
    private keyMutexesLru;
    private readonly maxSize?;
    constructor(maxSize?: number);
    /**
     * Run a {@link runnable} exclusively across all keys.
     */
    runExclusiveGlobally<V>(runnable: () => V | Promise<V>): Promise<V>;
    /**
     * Run a {@link runnable} exclusively for the given {@link key}.
     */
    runExclusiveForKey<V>(key: string, runnable: () => V | Promise<V>): Promise<V>;
}
