import StoreRecordsStorage, { type IStoreRecordsStorageOptions } from './store-records-storage.js'; /** * Key-value storage adapter: localStorage, sessionStorage, AsyncStorage, MMKV wrapper etc. */ export interface IKeyValueAdapter { getItem: (key: string) => string | null | undefined | Promise; setItem: (key: string, value: string) => unknown; removeItem: (key: string) => unknown; } export interface IKeyValueStorageOptions extends IStoreRecordsStorageOptions { storage: IKeyValueAdapter; /** * Keys prefix: store state is saved under `${prefix}:${storeId}`, * list of saved stores under `${prefix}-keys`. * Default: 'stores' */ prefix?: string; } /** * Key-value storage for mobx store manager * * Every store is saved under its own key: a change writes only the changed stores * instead of all persisted stores. */ declare class KeyValueStorage extends StoreRecordsStorage { /** * @protected */ protected storage: IKeyValueAdapter; /** * Keys prefix */ protected prefix: string; /** * Saved stores ids */ protected storeIds: Set; /** * Saved stores list is read: it's safe to overwrite it */ protected isIndexLoaded: boolean; /** * @constructor */ constructor({ storage, prefix, ...options }: IKeyValueStorageOptions); /** * Store state key */ protected getKey(storeId: string): string; /** * Saved stores list key */ protected getIndexKey(): string; /** * Read saved stores ids. undefined - there is no list yet. * Throws when the storage can't be read. */ protected getIndex(): Promise; /** * Read saved stores ids into storeIds * Returns false when the list can't be read: it must not be overwritten then. */ protected loadIndex(): Promise; /** * Read store state */ protected getStore(storeId: string): Promise; /** * @inheritDoc */ get(): Promise | undefined>; /** * Write stores, then update saved stores list */ protected write(changes: Map, removed?: string[]): Promise; /** * @inheritDoc */ set(value: Record | undefined): Promise; /** * @inheritDoc */ flush(): Promise; } export default KeyValueStorage;