export interface CacheProps {
    filePath?: string;
    fileFlushMillis?: number;
    saveOnExit?: boolean;
}
/**
 * A cache of a fixed size that ejects the oldest inserted key.
 */
export default class Cache<V> {
    private static readonly BUFFER_ENCODING;
    private keyValues;
    private readonly keyedMutex;
    private hasChanged;
    private saveToFileTimeout?;
    readonly filePath?: string;
    readonly fileFlushMillis?: number;
    private readonly saveMutex;
    constructor(props?: CacheProps);
    /**
     * Return if a key exists in the cache, waiting for any existing operations to complete first.
     */
    has(key: string): Promise<boolean>;
    /**
     * Return all the keys that exist in the cache.
     */
    keys(): Set<string>;
    /**
     * Return the count of keys in the cache.
     */
    size(): number;
    /**
     * Get the value of a key in the cache, waiting for any existing operations to complete first.
     */
    get(key: string): Promise<V | undefined>;
    /**
     * Get the value of a key in the cache if it exists, or compute a value and set it in the cache
     * otherwise.
     */
    getOrCompute(key: string, runnable: (key: string) => V | Promise<V>, shouldRecompute?: (value: V) => boolean | Promise<boolean>): Promise<V>;
    /**
     * Set the value of a key in the cache.
     */
    set(key: string, val: V): Promise<void>;
    private setUnsafe;
    /**
     * Delete a key in the cache.
     */
    delete(key: string | RegExp): Promise<void>;
    private deleteUnsafe;
    /**
     * Load the cache from a file.
     */
    load(): Promise<Cache<V>>;
    private saveWithTimeout;
    /**
     * Save the cache to a file.
     */
    save(): Promise<void>;
}
