import { AsyncDefaultMiddlewares, AsyncStorageConfig, IAsyncStorage, IEventEmitter, ILogger, StorageType } from '../storage.interface';
import { StorageKeyType } from '../utils/storage-key';
import { PathSelector, StorageCore } from './storage-core';
/**
 * Базовый класс для асинхронных хранилищ (IndexedDB).
 *
 * Все CRUD-операции возвращают Promise.
 * Совместим с текущим API (переименован из BaseStorage).
 */
export declare abstract class AsyncBaseStorage<T extends Record<string, any>> extends StorageCore<T> implements IAsyncStorage<T> {
    protected readonly config: AsyncStorageConfig<T>;
    abstract readonly type: StorageType;
    /** Async-хранилище: синхронное чтение кэша недоступно. */
    readonly isSync = false;
    private middlewareModule;
    private initializedMiddlewares;
    private selectorPathCache;
    /** Версии ключей для защиты от race condition в subscribeByKey (async get). */
    private keyVersions;
    /** Инкремент версии ключа при каждом изменении — читается в subscribeByKey. */
    protected trackKeyVersion(keyStr: string): void;
    constructor(config: AsyncStorageConfig<T>, eventEmitter?: IEventEmitter, logger?: ILogger);
    protected abstract doGet(key: StorageKeyType): Promise<any>;
    protected abstract doSet(key: StorageKeyType, value: any): Promise<void>;
    protected abstract doUpdate(updates: Array<{
        key: StorageKeyType;
        value: any;
    }>): Promise<void>;
    protected abstract doDelete(key: StorageKeyType): Promise<boolean>;
    protected abstract doClear(): Promise<void>;
    protected abstract doKeys(): Promise<string[]>;
    protected abstract doHas(key: StorageKeyType): Promise<boolean>;
    protected abstract doInitialize(): Promise<this>;
    protected abstract doDestroy(): Promise<void>;
    protected performInitialize(): Promise<void>;
    protected performCleanup(): Promise<void>;
    /**
     * Прогоняет `cleanup()` по всем инициализированным мидлварам (закрывает их каналы/
     * таймеры) и сбрасывает список. Вынесено отдельно, чтобы переопределения
     * performCleanup, СОЗНАТЕЛЬНО пропускающие doClear() (WorkerCacheStorage,
     * IndexedDBStorage — персистентные/разделяемые данные), всё равно освобождали
     * ресурсы мидлвар и не текли после destroy() (R8).
     */
    protected cleanupMiddlewares(): Promise<void>;
    protected initializeMiddlewares(): void;
    protected getDefaultMiddleware(): AsyncDefaultMiddlewares;
    protected initializeWithMiddlewares(): Promise<void>;
    /** Читает сохранённую версию схемы. По умолчанию `undefined` (нет персистентности). */
    protected readPersistedVersion(): Promise<number | undefined>;
    /** Сохраняет версию схемы рядом с данными. По умолчанию no-op. */
    protected writePersistedVersion(_version: number): Promise<void>;
    protected getRawState(): Promise<T>;
    get<R>(key: StorageKeyType): Promise<R | undefined>;
    set<R>(key: StorageKeyType, value: R): Promise<void>;
    update(updater: (state: T) => void): Promise<void>;
    remove(key: StorageKeyType): Promise<void>;
    clear(): Promise<void>;
    reset(): Promise<void>;
    /**
     * SSR-гидрация: заменяет всё состояние переданным снапшотом. Намеренно НЕ требует
     * `ready()` — типичный сценарий вызвать её до `initialize()`, чтобы инициализация
     * не перезатёрла серверное состояние `initialState`-ом (см. `initializeWithMiddlewares`).
     */
    hydrate(state: T): Promise<void>;
    keys(): Promise<string[]>;
    has(key: StorageKeyType): Promise<boolean>;
    getState(): Promise<T>;
    protected subscribeByKey(key: string, callback: (value: any) => void): VoidFunction;
    protected subscribeBySelector<R>(pathSelector: PathSelector<T, R>, callback: (value: R) => void): VoidFunction;
}
