import { JsonCompatible, JsonValue } from '@croct/json';
import { CacheLoader, CacheProvider } from './cacheProvider';
export type Transformer<D, S> = (value: D) => Promise<S> | S;
export type HashAlgorithm = 'passthrough' | 'md5' | 'sha1';
type Configuration<K, V, IK, IV> = {
    cache: CacheProvider<IK, IV>;
    keyTransformer: Transformer<K, IK>;
    valueInputTransformer: Transformer<V, IV>;
    valueOutputTransformer: Transformer<IV, V>;
};
/**
 * A cache provider to transform keys and values between composition layers.
 */
export declare class AdaptedCache<K, V, IK = K, IV = V> implements CacheProvider<K, V> {
    private readonly cache;
    private readonly keyTransformer;
    private readonly valueInputTransformer;
    private readonly valueOutputTransformer;
    constructor(config: Configuration<K, V, IK, IV>);
    static transformKeys<K, IK, V>(cache: CacheProvider<IK, V>, keyTransformer: Transformer<K, IK>): AdaptedCache<K, V, IK, V>;
    static transformValues<K, V, IV>(cache: CacheProvider<K, IV>, inputTransformer: Transformer<V, IV>, outputTransformer: Transformer<IV, V>): AdaptedCache<K, V, K, IV>;
    get(key: K, loader: CacheLoader<K, V>): Promise<V>;
    set(key: K, value: V): Promise<void>;
    delete(key: K): Promise<void>;
    static createHashSerializer(algorithm?: HashAlgorithm): Transformer<any, string>;
    /**
     * Serializes a JSON compatible value to a string using JSON.stringify.
     *
     * This is a helper function for type safety.
      */
    static jsonSerializer<T extends JsonCompatible>(): Transformer<T, string>;
    /**
     * Deserializes a string into a JSON value using JSON.parse.
     *
     * This is a helper function for type safety.
      */
    static jsonDeserializer<T extends JsonValue>(): Transformer<string, T>;
}
export {};
