/// <reference types="node" />
import type { Config, Store } from 'cache-manager';
declare type WithRequired<T, K extends keyof T> = Required<Pick<T, K>> & Exclude<T, K>;
declare type KeyExpiredTuple = [string, number];
declare type BufferString = Buffer | string;
export declare type FsBinaryValuePlain<T extends BufferString = BufferString> = {
    binary: T;
};
export declare type FsBinaryValueObject<T extends BufferString = BufferString> = {
    binary: Record<string, T>;
};
export declare type FsBinaryValue<T extends BufferString = BufferString, V extends FsBinaryValuePlain<T> | FsBinaryValueObject<T> = FsBinaryValuePlain<T> | FsBinaryValueObject<T>, M extends {
    [K: string]: any;
} = {
    [K: string]: any;
}> = V & M;
export declare type FsBinaryMetaData = {
    key: string;
    size: number;
    filename: string;
    expires: number;
};
export declare type FsBinaryMetaDataWithValue = FsBinaryMetaData & {
    value: FsBinaryValue<string>;
};
export declare type FsBinaryConfig = {
    maxsize?: number;
    path?: string;
    preventfill?: boolean;
    zip?: boolean;
    fillcallback?: (err?: any) => void;
} & Config;
export interface FsBinaryStore extends Store {
    get: <T = FsBinaryValue<string>>(key: string) => Promise<T | undefined>;
    set: <T = FsBinaryValue>(key: string, data: T, ttl?: number) => Promise<void>;
    collection: Record<string, FsBinaryMetaData>;
    currentsize: number;
    options: WithRequired<FsBinaryConfig, 'ttl' | 'path' | 'isCacheable'>;
    isCacheableValue: (value: unknown) => boolean;
    cleancache: () => Promise<void>;
    zipIfNeeded: (data: Buffer) => Promise<Buffer>;
    unzipIfNeeded: (data: Buffer) => Promise<Buffer>;
    cleanExpired: () => Promise<void>;
    freeupspace: () => Promise<void>;
    freeupspacehelper: (tuples: KeyExpiredTuple[]) => Promise<void>;
    intializefill: () => Promise<void>;
}
export declare function fsBinaryStore(args?: FsBinaryConfig): FsBinaryStore;
export {};
