2.0.0 • Published 1 year ago
@effector-storage/idb-keyval v2.0.0
IndexedDB adapter
Adapter to persist store in IndexedDB, using idb-keyval library.
Install
Depending on your package manager
# using `pnpm` ↓
$ pnpm add effector-storage @effector-storage/idb-keyval
# using `yarn` ↓
$ yarn add effector-storage @effector-storage/idb-keyval
# using `npm` ↓
$ npm install --save effector-storage @effector-storage/idb-keyvalUsage
Import persist function from '@effector-storage/idb-keyval' module, and it will just work:
import { persist } from '@effector-storage/idb-keyval'
// persist store `$counter` with key 'counter'
persist({ store: $counter, key: 'counter' })
// if your storage has a name, you can omit `key` field
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 }): Subscriptionpersist({ source, target, ...options }): Subscription
Options
- ... all the common options from
effector-storage'spersistfunction. 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 defaultidb-keyvaldatabase will be used —'keyval-store')storeName?: (string): IndexedDB store name. Default =undefined(in that case defaultidb-keyvalstore will be used —'keyval')keyvalStore?: (UseStore): Customidb-keyvalstore. Default =undefined(in that case defaultidb-keyvalstore 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 defaultidb-keyvaldatabase will be used —'keyval-store')storeName?: (string): IndexedDB store name. Default =undefined(in that case defaultidb-keyvalstore will be used —'keyval')keyvalStore?: (UseStore): Customidb-keyvalstore. Default =undefined(in that case defaultidb-keyvalstore 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.