IndexedDB adapter
Adapter to persist store in IndexedDB, using idb-keyval library.
Install
Depending on your package manager
$ pnpm add effector-storage @effector-storage/idb-keyval
$ yarn add effector-storage @effector-storage/idb-keyval
$ npm install --save effector-storage @effector-storage/idb-keyval
Usage
Import persist
function from '@effector-storage/idb-keyval'
module, and it will just work:
import { persist } from '@effector-storage/idb-keyval'
persist({ store: $counter, key: 'counter' })
persist({ store: $counter })
⚠️ Note, that IndexedDB is asynchronous.
Two (or more) different stores, persisted with the same key, will be synchronized (synchronously!), even if not connected with each other directly — each store will receive updates from another one.
Formulae
import { persist } from '@effector-storage/idb-keyval'
persist({ store, ...options }): Subscription
persist({ source, target, ...options }): Subscription
Options
- ... all the common options from
effector-storage
's persist
function. timeout
?: (number): Timeout in milliseconds, which will be used to throttle and batch updates. Default = undefined
(meaning updates will be saved immediately)dbName
?: (string): IndexedDB database name. Default = undefined
(in that case default idb-keyval
database will be used — 'keyval-store'
)storeName
?: (string): IndexedDB store name. Default = undefined
(in that case default idb-keyval
store will be used — 'keyval'
)keyvalStore
?: (UseStore): Custom idb-keyval
store. Default = undefined
(in that case default idb-keyval
store will be used)
Adapter
import { adapter } from '@effector-storage/idb-keyval'
adapter(options?): StorageAdapter
Options
timeout
?: (number): Timeout in milliseconds, which will be used to throttle and batch updates. Default = undefined
(meaning updates will be saved immediately)dbName
?: (string): IndexedDB database name. Default = undefined
(in that case default idb-keyval
database will be used — 'keyval-store'
)storeName
?: (string): IndexedDB store name. Default = undefined
(in that case default idb-keyval
store will be used — 'keyval'
)keyvalStore
?: (UseStore): Custom idb-keyval
store. Default = undefined
(in that case default idb-keyval
store will be used)
Gotchas
Although you can specify custom name for IndexedDB database, and custom name for IndexedDB store, I wouldn't recommend that. Please, read this document from idb-keyval
library.
FAQ
How do I use custom serialization / deserialization?
You don't need to! IndexedDB can store any structured-clonable data.