0.5.0 • Published 5 months ago

@cubux/storage-driver v0.5.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

@cubux/storage-driver

NPM latest

Simple storage driver abstraction for @cubux/effector-persistent. Persist you effector Store with localStorage/sessionStorage, indexedDB, or implement a custom driver.

Install

npm i @cubux/storage-driver

API

interface StoreDriverSingle<K, V, VOut = V>

Driver interface to read/write data by single item.

Methods

getItem(key: K): Promise<VOut | undefined>

Get value of specific item with the given key.

removeItem(key: K): Promise<void>

Remove item with the given key.

setItem(key: K, value: V): Promise<void>

Store the given value in item with the given key.

interface StoreDriverMapped<K, V, VOut = V>

Driver interface to read/write all items at once.

Methods

getAll(): Promise<ReadonlyMap<K, VOut>>

Get all items.

setAll(items: ReadonlyMap<K, V>): Promise<void>

Replace all stored items with the given new items. That is keys became missing will be removed from storage.

interface StoreDriver<K, V, VOut = V>

Generalized interface covering all specific interfaces above.

createLocalStorageDriver()

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:

OptionTypeDefaultDescription
storageStoragewindow.localStorageActual data storage.
prefixstring"persistent"Key prefix in storage to distinguish only related keys.
serialize(value: V) => stringJSON.stringifyCustom function to serialize input value to string before putting it into storage.
unserialize(data: string) => VJSON.parseCustom function to unserialize data read from storage.

createIndexedDBDriver()

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:

OptionTypeDefaultDescription
dbNamestringRequiredDatabase name.
dbVersionnumber1Database version. Probably, this option should internal.
tablestringRequiredObject store name (aka table name).
indexedDBIDBFactorywindow.indexedDBActual 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) => vCustom function to serialize input value before putting it into DB.
unserialize(data: S, key: K) => V(v) => vCustom function to unserialize data read from DB.

createNullDriver()

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>