Package Exports
- localstorage-idb-keyval
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (localstorage-idb-keyval) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
localstorage-IDB-Keyval
This is Jake Archibald's implementation slightly altered to adhere to the localStorage API. This way it can easily be used with projects like redux-persist.
This is a super-simple-small promise-based keyval store implemented with IndexedDB, largely based on async-storage by Mozilla.
localForage offers similar functionality, but supports older browsers with broken/absent IDB implementations. Because of that, it's 7.4k, whereas localstorage-idb-keyval is ~550 bytes. Also, it's tree-shaking friendly, so you'll probably end up using fewer than 450 bytes. Pick whichever works best for you!
This is only a keyval store. If you need to do more complex things like iteration & indexing, check out IDB on NPM (a little heavier at 1.7k). The first example in its README is how to recreate this library.
Usage
setItem:
import { setItem } from 'localstorage-idb-keyval';
setItem('hello', 'world');
setItem('foo', 'bar');
Since this is IDB-backed, you can store anything structured-clonable (numbers, arrays, objects, dates, blobs etc).
All methods return promises:
import { setItem } from 'localstorage-idb-keyval';
setItem('hello', 'world')
.then(() => console.log('It worked!'))
.catch(err => console.log('It failed!', err));
getItem:
import { getItem } from 'localstorage-idb-keyval';
// logs: "world"
getItem('hello').then(val => console.log(val));
If there is no 'hello' key, then val
will be undefined
.
keys:
import { keys } from 'localstorage-idb-keyval';
// logs: ["hello", "foo"]
keys().then(keys => console.log(keys));
removeItem:
import { removeItem } from 'localstorage-idb-keyval';
removeItem('hello');
clear:
import { clear } from 'localstorage-idb-keyval';
clear();
Custom stores:
By default, the methods above use an IndexedDB database named keyval-store
and an object store named keyval
. You can create your own store, and pass it as an additional parameter to any of the above methods:
import { Store, setItem } from 'localstorage-idb-keyval';
const customStore = new Store('custom-db-name', 'custom-store-name');
setItem('foo', 'bar', customStore);
That's it!
Installing
Via npm + webpack/rollup
npm install localstorage-idb-keyval
Now you can require/import localstorage-idb-keyval
:
import { getItem, setItem } from 'localstorage-idb-keyval';
Via <script>
dist/localstorage-idb-keyval.mjs
is a valid JS module.dist/localstorage-idb-keyval-iife.js
can be used in browsers that don't support modules.idbKeyval
is created as a global.