JSPM

localstorage-idb-keyval

1.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 73
  • Score
    100M100P100Q79089F
  • License Apache-2.0

A super-simple-small keyval store built on top of IndexedDB with localStorage API

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.

npm size

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.