@effector-storage/idb-keyval
v2.0.0
Published
Module for Effector to sync stores with IndexedDB
Downloads
352
Maintainers
Readme
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-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` 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 }): Subscription
persist({ source, target, ...options }): Subscription
Options
- ... all the common options from
effector-storage
'spersist
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 defaultidb-keyval
database will be used —'keyval-store'
)storeName
?: (string): IndexedDB store name. Default =undefined
(in that case defaultidb-keyval
store will be used —'keyval'
)keyvalStore
?: (UseStore): Customidb-keyval
store. Default =undefined
(in that case defaultidb-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 defaultidb-keyval
database will be used —'keyval-store'
)storeName
?: (string): IndexedDB store name. Default =undefined
(in that case defaultidb-keyval
store will be used —'keyval'
)keyvalStore
?: (UseStore): Customidb-keyval
store. Default =undefined
(in that case defaultidb-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.