import type { IStorage, IStorageChanges } from '../types.js'; import StoreRecordsStorage, { type IStoreRecordsStorageOptions } from './store-records-storage.js'; export interface IIndexedDBStorageOptions extends IStoreRecordsStorageOptions { /** * Database name. Default: 'mobx-manager' */ dbName?: string; /** * IndexedDB factory. Default: globalThis.indexedDB */ indexedDB?: IDBFactory; /** * Storage with previously persisted stores (e.g. LocalStorage). * Its data is moved on the first start and removed on flush. * It is also used when IndexedDB is not available. */ migrateFrom?: IStorage; } /** * IndexedDB storage for mobx store manager * * Every store is saved as its own record: a change writes only the changed stores, * writes don't block the main thread and the quota is much bigger than localStorage. */ declare class IndexedDBStorage extends StoreRecordsStorage { /** * Database name */ protected dbName: string; /** * IndexedDB factory */ protected factory?: IDBFactory; /** * Opened database */ protected db?: IDBDatabase; /** * Opening database */ protected opening?: Promise; /** * @constructor */ constructor({ dbName, indexedDB, ...options }?: IIndexedDBStorageOptions); /** * Open database. Resolves undefined when IndexedDB is not available. */ protected open(): Promise; /** * @inheritDoc */ get(): Promise | undefined>; /** * Write stores in one transaction */ protected write(changes: Map, shouldClear?: boolean): Promise; /** * @inheritDoc */ saveChanges(changes: IStorageChanges): Promise; /** * Save to legacy storage when IndexedDB is not available */ protected saveFallback(changes: IStorageChanges): Promise; /** * @inheritDoc */ set(value: Record | undefined): Promise; /** * @inheritDoc */ flush(): Promise; } export default IndexedDBStorage;