UNPKG

synapse-storage

Version:

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

82 lines (81 loc) 4.73 kB
import { IEventEmitter, ILogger, ISyncStorage, StorageType, SyncDefaultMiddlewares, SyncStorageConfig } from '../storage.interface'; import { StorageKeyType } from '../utils/storage-key'; import { PathSelector, StorageCore } from './storage-core'; /** * Базовый класс для синхронных хранилищ (Memory, LocalStorage). * * Все CRUD-операции выполняются синхронно. * Lifecycle (initialize, destroy) остаётся async. * subscribeByKey упрощён — нет race condition без async get. */ export declare abstract class SyncBaseStorage<T extends Record<string, any>> extends StorageCore<T> implements ISyncStorage<T> { protected readonly config: SyncStorageConfig<T>; abstract readonly type: StorageType; /** Sync-хранилище: доступно синхронное чтение кэша (getStateSync). */ readonly isSync = true; private middlewareModule; private initializedMiddlewares; private selectorPathCache; constructor(config: SyncStorageConfig<T>, eventEmitter?: IEventEmitter, logger?: ILogger); protected abstract doGet(key: StorageKeyType): any; protected abstract doSet(key: StorageKeyType, value: any): void; protected abstract doUpdate(updates: Array<{ key: StorageKeyType; value: any; }>): void; protected abstract doRemove(key: StorageKeyType): boolean; protected abstract doClear(): void; protected abstract doKeys(): string[]; protected abstract doHas(key: StorageKeyType): boolean; /** Lifecycle — всегда async */ protected abstract doInitialize(): Promise<this>; /** Lifecycle — всегда async */ protected abstract doDestroy(): Promise<void>; protected performInitialize(): Promise<void>; /** * Синхронная инициализация sync-хранилища. Вся работа Memory/LocalStorage * (`initializeMiddlewares` + `initializeWithMiddlewares`) синхронна — здесь она * выполняется без `await`, чтобы {@link StorageCore.initializeSync} мог довести * хранилище до `READY` в пределах одного тика (SSR sync-shell). */ protected performInitializeSync(): void; /** * Дефолт для `config.clearOnDestroy`, если он не задан. * Memory: `true` (эфемерное). LocalStorage переопределяет на `false` (персистентное). */ protected get clearOnDestroyDefault(): boolean; protected performCleanup(): Promise<void>; protected initializeMiddlewares(): void; protected getDefaultMiddleware(): SyncDefaultMiddlewares; protected initializeWithMiddlewares(): void; /** Читает сохранённую версию схемы. По умолчанию `undefined` (эфемерные хранилища). */ protected readPersistedVersion(): number | undefined; /** Сохраняет версию схемы рядом с данными. По умолчанию no-op (эфемерные хранилища). */ protected writePersistedVersion(_version: number): void; /** Удаляет сохранённую версию схемы (вызывается при destroy с `clearOnDestroy`). */ protected clearPersistedVersion(): void; private getRawState; get<R>(key: StorageKeyType): R | undefined; set<R>(key: StorageKeyType, value: R): void; update(updater: (state: T) => void): void; remove(key: StorageKeyType): void; clear(): void; reset(): void; /** * SSR-гидрация: заменяет всё состояние переданным снапшотом. Намеренно НЕ требует * `ready()` — типичный сценарий вызвать её до `initialize()`, чтобы инициализация * не перезатёрла серверное состояние `initialState`-ом (см. `initializeWithMiddlewares`). */ hydrate(state: T): void; /** Уведомляет подписчиков о замене состояния гидрацией (no-op до initialize/без подписок). */ private notifyHydration; keys(): string[]; has(key: StorageKeyType): boolean; getState(): T; /** * Sync-версия subscribeByKey. * Нет race condition (get() синхронный) → не нужен keyVersions tracking. */ protected subscribeByKey(key: string, callback: (value: any) => void): VoidFunction; protected subscribeBySelector<R>(pathSelector: PathSelector<T, R>, callback: (value: R) => void): VoidFunction; }