Skip to content

A resilient, Future-based key-value store for IndexedDB

License

Notifications You must be signed in to change notification settings

swan-io/indexed-db

Repository files navigation

@swan-io/indexed-db

Tests mit licence npm version bundlephobia

A resilient, Future-based key-value store for IndexedDB.

Installation

$ yarn add @swan-io/indexed-db
# --- or ---
$ npm install --save @swan-io/indexed-db

Quickstart

const store = openStore("myDatabaseName", "myStoreName");

store
  .setMany({
    firstName: "Mathieu",
    lastName: "Breton",
  })
  .flatMap(() => store.getMany(["firstName", "lastName"]))
  .flatMap(({ firstName, lastName }) => {
    console.log({
      firstName,
      lastName,
    });

    return store.clear();
  })
  .tap(() => {
    console.log("✅");
  });

API

Open a database, create a store if needed and returns methods to manipulate it.
Note that you can open multiple databases / stores, with different names.

const store = await openStore("myDatabaseName", "myStoreName", {
  transactionRetries: 2, // retry failed transactions (default: 2)
  transactionTimeout: 500, // timeout a transaction when it takes too long (default: 500ms)
  onDatabaseError: (error: Error) => console.error(error), // called with idb errors (default: noop)
});

store.getMany

Get many values at once. Resolves with a record.

store
  .getMany(["firstName", "lastName"])
  .map(({ firstName, lastName }) => console.log({ firstName, lastName }));

store.setMany

Set many key-value pairs at once.

store
  .setMany({ firstName: "Mathieu", lastName: "Breton" })
  .tap(() => console.log("✅"));

store.clear

Clear all values in the store.

store.clear().tap(() => console.log("✅"));

🙌 Acknowledgements