synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
71 lines (70 loc) • 4.42 kB
TypeScript
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;
}