import type { AsyncMapLike } from 'async-map-like';
import { StorageBackend, StorageBackendOptions } from './storage/mod.js';
import type { MemoryCardPayload } from './types.js';
export declare const NAMESPACE_MULTIPLEX_SEPRATOR = "\r";
export declare const NAMESPACE_KEY_SEPRATOR = "\n";
export interface MemoryCardOptions {
    name?: string;
    storageOptions?: StorageBackendOptions;
    multiplex?: {
        parent: MemoryCard;
        name: string;
    };
}
export interface MemoryCardJsonObject {
    payload: MemoryCardPayload;
    options: MemoryCardOptions;
}
export declare class MemoryCard implements AsyncMapLike<any, any> {
    /**
     *
     *
     * Static
     *
     *
     */
    static VERSION: string;
    static fromJSON(textOrObj: string | MemoryCardJsonObject): AsyncMapLike<any, any>;
    protected static multiplex<T extends typeof MemoryCard>(this: T, memory: MemoryCard, name: string): T['prototype'];
    /**
     *
     *
     * Instance
     *
     *
     */
    name?: string;
    protected parent?: MemoryCard;
    protected payload?: MemoryCardPayload;
    protected storage?: StorageBackend;
    protected multiplexNameList: string[];
    private options?;
    constructor(options?: string | MemoryCardOptions);
    toString(): string;
    version(): string;
    private getStorage;
    load(): Promise<void>;
    save(): Promise<void>;
    /**
     *
     * Multiplexing related functions START
     *
     */
    protected isMultiplexKey(key: string): boolean;
    protected multiplexNamespace(): string;
    protected resolveKey(name: string): string;
    isMultiplex(): boolean;
    protected multiplexPath(): string;
    multiplex(name: string): this;
    /**
     *
     * Multiplexing related functions END
     *
     */
    destroy(): Promise<void>;
    /**
     *
     * ES6 Map API (Async Version)
     *
     * BEGIN
     *
     */
    /**
     * size
     */
    get size(): Promise<number>;
    get<T = any>(name: string): Promise<undefined | T>;
    set<T = any>(name: string, data: T): Promise<this>;
    [Symbol.asyncIterator]<T = any>(): AsyncIterableIterator<[string, T]>;
    entries<T = any>(): AsyncIterableIterator<[string, T]>;
    clear(): Promise<void>;
    delete(name: string): Promise<boolean>;
    has(key: string): Promise<boolean>;
    keys(): AsyncIterableIterator<string>;
    values<T = any>(): AsyncIterableIterator<T>;
    forEach<T>(callbackfn: (value: T, key: string, map: any) => void, thisArg?: any): Promise<void>;
    /**
     * Huan(202108): FIXME
     *  I totally forget what are the following two methods are...
     */
    [Symbol.iterator](): AsyncIterableIterator<[string, number]>;
    get [Symbol.toStringTag](): Promise<string>;
}
export default MemoryCard;
//# sourceMappingURL=memory-card.d.ts.map