import type { IStorage, IStorageChanges } from '../types.js'; export interface IStoreRecordsStorageOptions { /** * Storage with previously persisted stores (e.g. LocalStorage or AsyncStorage). * Its data is moved on the first start and removed on flush. */ migrateFrom?: IStorage; /** * Remove data from `migrateFrom` right after migration. * Default: false - keep it (e.g. for app version rollback) */ shouldRemoveMigrated?: boolean; } /** * Serialize stores state: store id => store state JSON */ declare const serializeStores: (data: Record) => Map; /** * Base storage which saves every persisted store as a separate record */ declare abstract class StoreRecordsStorage implements IStorage { /** * Legacy storage */ protected migrateFrom?: IStorage; /** * Remove legacy data after migration */ protected shouldRemoveMigrated: boolean; /** * Stores moved from legacy storage are not saved yet: the next save writes all stores */ protected isMigrationPending: boolean; /** * @constructor */ protected constructor({ migrateFrom, shouldRemoveMigrated }: IStoreRecordsStorageOptions); /** * @inheritDoc */ abstract get(): Promise | undefined>; /** * @inheritDoc */ abstract set(value: Record | undefined): Promise; /** * @inheritDoc */ abstract flush(): Promise; /** * Write stores state JSON */ protected abstract write(changes: Map): Promise; /** * @inheritDoc */ saveChanges({ value, changes }: IStorageChanges): Promise; /** * Move stores from legacy storage * Legacy data is returned even if it can't be saved: saving is retried on the next change. */ protected migrate(): Promise>; /** * Save all stores, then remove legacy data if needed */ protected saveMigrated(data: Record): Promise; } export { serializeStores }; export default StoreRecordsStorage;