A resilient, Future-based key-value store for IndexedDB.
$ yarn add @swan-io/indexed-db
# --- or ---
$ npm install --save @swan-io/indexed-db
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("✅");
});
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)
});
Get many values at once. Resolves with a record.
store
.getMany(["firstName", "lastName"])
.map(({ firstName, lastName }) => console.log({ firstName, lastName }));
Set many key-value pairs at once.
store
.setMany({ firstName: "Mathieu", lastName: "Breton" })
.tap(() => console.log("✅"));
Clear all values in the store.
store.clear().tap(() => console.log("✅"));