UNPKG

synapse-storage

Version:

Набор инструментов для управления состоянием и апи-запросами

71 lines (70 loc) 4.42 kB
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; }