easy-idb
A lightweight and straightforward library for storing data in browser IndexedDB. It offers a simple promise-based API for all CRUD operations in the database.
Installation
npm i @cloudparker/easy-idb --save
Simple Usage
Open Todo database
import { Database, Store, IdbWhere } from '@cloudparker/easy-idb';
import type { StoreDefinitionType } from '@cloudparker/easy-idb';
let dbName = 'todo-db';
let version = 1;
let db: Database | null = null;
let storeDefinitions: StoreDefinitionType[] = [
{ name: 'todos', primaryKey: '_id', autoIncrement: true },
];
export let todosStore: Store | undefined;
export async function openDatabase() {
db = new Database({ name: dbName, version, stores: storeDefinitions });
let results = await db.openDatabase();
todosStore = results.todos;
console.log('Db opened');
}
Other Usage
import { Database, Store, type StoreDefinitionType, IdbWhere } from '@cloudparker/easy-idb';
let todosStore: Store;
let usersStore: Store;
let db: Database | null = null;
let dbName = 'test-db';
let version = 1;
let storeDefinitions: StoreDefinitionType[] = [
{ name: 'todos', primaryKey: '_id', autoIncrement: true },
{ name: 'users', primaryKey: '_id', autoIncrement: true, indexes: ['updatedAt'] }
];
db = new Database({ name: dbName, version, storeDefinitions });
let results = await db.openDatabase(({ db, oldVersion, newVersion }) => {
switch(newVersion) {
case 1:
break;
case 2:
break;
}
console.log({ db, oldVersion, newVersion });
});
todosStore = results.todos;
usersStore = results.users;
console.log('Db opened');
await todosStore.insert({ task: 'Task1' });
await todosStore.insert([{ task: 'Task1' }, { task: 'Task2' }]);
await todosStore.count();
await todosStore.get({ where: IdbWhere('_id', '==', 1) });
await todosStore.getAll();
await todosStore.find({ where: IdbWhere('_id', '>=', 1));
await todosStore.find({ desc: true });
await todosStore.find({ unique: true });
await todosStore.find({ where: IdbWhere('_id', '>=', 1), skip, limit, desc, unique, filter, map });
await todosStore.update({ _id: 1, task: 'Task First' });
await todosStore.update({ _id: 1, date : new Date()}, { merge: true });
await todosStore.update([{ _id: 1, task: 'Task First' }, { _id: 2, task: 'Task Second' }]);
await todosStore.upsert({ _id: 1, task: 'Task First' });
await todosStore.remove(1);
await todosStore.remove([1, 2]);
await todosStore.remove({data: 1});
await todosStore.remove({ data: [1, 2], where: IdbWhere('_id', '==', 3) });