Simple storage driver abstraction for @cubux/effector-persistent
.
Persist you effector
Store with localStorage
/sessionStorage
, indexedDB
,
or implement a custom driver.
npm i @cubux/storage-driver
Driver interface to read/write data by single item.
Get value of specific item with the given key.
Remove item with the given key.
Store the given value in item with the given key.
Driver interface to read/write all items at once.
Get all items.
Replace all stored items with the given new items. That is keys became missing will be removed from storage.
Generalized interface covering all specific interfaces above.
Create driver to interact with localStorage
-like storage. Actual storage
can be set in options
, so it could be sessionStorage
for example or
another compatible alternative.
function createLocalStorageDriver<V>(
options?: LocalStorageOptions<V>,
): StoreDriver<string, V>
Options LocalStorageOptions<V>
to customize driver:
Option | Type | Default | Description |
---|---|---|---|
storage |
Storage |
window.localStorage |
Actual data storage. |
prefix |
string |
"persistent" |
Key prefix in storage to distinguish only related keys. |
serialize |
(value: V) => string |
JSON.stringify |
Custom function to serialize input value to string before putting it into storage . |
unserialize |
(data: string) => V |
JSON.parse |
Custom function to unserialize data read from storage . |
Create driver to interact with indexedDB
-like storage. Actual storage can be
overridden in options
.
function createIndexedDBDriver<K, V, S = V>(
options: IndexedDBOptions<K, V, S>
): Promise<StoreDriver<K, V>>
Options IndexedDBOptions<K, V, S>
to customize driver:
Option | Type | Default | Description |
---|---|---|---|
dbName |
string |
Required | Database name. |
dbVersion |
number |
1 |
Database version. Probably, this option should internal. |
table |
string |
Required | Object store name (aka table name). |
indexedDB |
IDBFactory |
window.indexedDB |
Actual indexedDB factory. Default is window.indexedDB . Can be used in tests to mock implementation or to use custom polyfill implementation. |
serialize |
(value: V, key: K) => S |
(v) => v |
Custom function to serialize input value before putting it into DB. |
unserialize |
(data: S, key: K) => V |
(v) => v |
Custom function to unserialize data read from DB. |
Create dummy no-op driver. Can be used for example in test environment to omit actual driver. This driver always contains nothing in reads and does nothing on writes.
function createNullDriver<K = any, V = any>(): StoreDriver<K, V, never>