import type { IPersistOptions, IStorage, IStorePersisted } from '../types.js'; interface ICombinedStorage { [name: string]: IStorage; } /** * Persisted data of one storage: store id => store attributes */ type TStorageData = Record>; /** * Store and the state to save */ export type TStoreStateEntry = [IStorePersisted, Record | undefined]; /** * Combined storage for mobx store manager */ declare class CombinedStorage implements IStorage { /** * @protected */ protected storages: ICombinedStorage; /** * Restored persist storage data * @protected */ protected persistData: Record; /** * Serialized persist data: storage id => store id => store state JSON * @protected */ protected persistJSON: Record>; /** * Default storage id * @protected */ protected defaultId: string; /** * @constructor * * First storage will be used as default */ constructor(storages: ICombinedStorage); /** * @inheritDoc */ get(): Promise | undefined>; /** * @inheritDoc */ flush(): Promise; /** * @inheritDoc */ set(value: Record | undefined, storageId?: string): ReturnType; /** * Return store storage options */ protected getStoreOptions(store: IStorePersisted): IPersistOptions; /** * Return store attributes saved in any storage * undefined - all attributes */ getStoreAttributes(store: IStorePersisted): string[] | undefined; /** * Return store persist data */ getStoreData(store: IStorePersisted): Record | undefined; /** * Save store data in storage */ saveStoreData(store: IStorePersisted, data: Record | undefined): Promise; /** * Save data of many stores: every changed storage is written once * * NOTE: storages are called synchronously, before the returned promise settles */ saveStoresData(entries: TStoreStateEntry[]): Promise; /** * Serialized stores of storage */ protected getStorageJSON(storageId: string): Map; /** * Serialized store data which is saved in storage */ protected getSavedJSON(storageId: string, storeId: string): string; /** * Pick store attributes of storage * Picked attributes are removed from dataKeys for 'exclude' behaviour. */ protected pickStorageData(attr: string[], data: Record | undefined, dataKeys: Set, behaviour: IPersistOptions['behaviour']): Record; /** * Split store data by storages and remember changed stores */ protected applyStoreData(store: IStorePersisted, data: Record | undefined, changed: Map>): void; /** * Write storage changes */ protected write(storageId: string, changes: Map): ReturnType; /** * Storage data JSON assembled from cached stores JSON. * Equal to JSON.stringify(value). */ protected toJSON(storageId: string, value: TStorageData): string; } export default CombinedStorage;