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> extends StorageCore implements IAsyncStorage { protected readonly config: AsyncStorageConfig; 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, eventEmitter?: IEventEmitter, logger?: ILogger); protected abstract doGet(key: StorageKeyType): Promise; protected abstract doSet(key: StorageKeyType, value: any): Promise; protected abstract doUpdate(updates: Array<{ key: StorageKeyType; value: any; }>): Promise; protected abstract doDelete(key: StorageKeyType): Promise; protected abstract doClear(): Promise; protected abstract doKeys(): Promise; protected abstract doHas(key: StorageKeyType): Promise; protected abstract doInitialize(): Promise; protected abstract doDestroy(): Promise; protected performInitialize(): Promise; protected performCleanup(): Promise; /** * Прогоняет `cleanup()` по всем инициализированным мидлварам (закрывает их каналы/ * таймеры) и сбрасывает список. Вынесено отдельно, чтобы переопределения * performCleanup, СОЗНАТЕЛЬНО пропускающие doClear() (WorkerCacheStorage, * IndexedDBStorage — персистентные/разделяемые данные), всё равно освобождали * ресурсы мидлвар и не текли после destroy() (R8). */ protected cleanupMiddlewares(): Promise; protected initializeMiddlewares(): void; protected getDefaultMiddleware(): AsyncDefaultMiddlewares; protected initializeWithMiddlewares(): Promise; /** Читает сохранённую версию схемы. По умолчанию `undefined` (нет персистентности). */ protected readPersistedVersion(): Promise; /** Сохраняет версию схемы рядом с данными. По умолчанию no-op. */ protected writePersistedVersion(_version: number): Promise; protected getRawState(): Promise; get(key: StorageKeyType): Promise; set(key: StorageKeyType, value: R): Promise; update(updater: (state: T) => void): Promise; remove(key: StorageKeyType): Promise; clear(): Promise; reset(): Promise; /** * SSR-гидрация: заменяет всё состояние переданным снапшотом. Намеренно НЕ требует * `ready()` — типичный сценарий вызвать её до `initialize()`, чтобы инициализация * не перезатёрла серверное состояние `initialState`-ом (см. `initializeWithMiddlewares`). */ hydrate(state: T): Promise; keys(): Promise; has(key: StorageKeyType): Promise; getState(): Promise; protected subscribeByKey(key: string, callback: (value: any) => void): VoidFunction; protected subscribeBySelector(pathSelector: PathSelector, callback: (value: R) => void): VoidFunction; }