IndexedDBP is a simple way to use IndexedDB in browsers, base on Promise, similiar to mongoDB api.
npm install indexeddbp
import IndexedDBP from 'indexeddbp';
(async () => {
const mydb = new IndexedDBP({
name: 'testDB',
});
await mydb.init();
// deleteIndex
// const isContainIndex = await mydb.$db.indexObjectStore.containIndex('time');
// if (mydb.containObjectStore('indexObjectStore') && isContainIndex) {
// await mydb.$db.indexObjectStore.deleteIndex('time');
// } else if (mydb.containObjectStore('indexObjectStore')) {
// await mydb.$db.indexObjectStore.createIndex('time', 'time', {unique: false, multiEntry: false});
// }
// create objectStore
await mydb.useObjectStore('testObjectStore');
if (!mydb.containObjectStore('indexObjectStore')) {
await mydb.createObjectStore('indexObjectStore', {keyPath: 'randomId'});
await mydb.$db.indexObjectStore.createIndex('time', 'time', {unique: false, multiEntry: false});
}
// delete ObjectStore
// if (mydb.containObjectStore('testObjectStore2')) {
// mydb.deleteObjectStore('testObjectStore2');
// }
// insert Data
const count = await mydb.$db.testObjectStore.count({$lte: 2});
console.log(count);
await mydb.$db.testObjectStore.insert({key1: 'hello', key2: 123, key3: true, key4: new Date()});
const rand1: number = Math.random();
const rand2: number = Math.random();
await mydb.$db.indexObjectStore.insert({randomId: rand1, time: new Date('2019/04/03')});
await mydb.$db.indexObjectStore.insert({randomId: rand2, time: new Date('2019/04/05')});
// find Data
const res0 = await mydb.$db.testObjectStore.find(1);
const res1 = await mydb.$db.indexObjectStore.find(new Date('2019/04/03'), 'time');
const res2 = await mydb.$db.indexObjectStore.find({$lte: rand2 , count: 5});
console.log(res0, res1);
console.log(res2, rand2);
// remove data
// let resRemove = await mydb.$db.testObjectStore.remove({$lte: 5});
// console.log(resRemove);
// update data
// let resUpdate = await mydb.$db.testObjectStore.update({$lte: 10}, {test: 222}, {multi: true});
const resUpdate = await mydb.$db.testObjectStore.update(1, {test: 222}, {upsert: true});
console.log(resUpdate);
})();
more example to see demo
- constructor of the class
- default options = {name: 'indexedDBP', version: 1, onError: fn, onSuccess: fn}
- a database exist or not, you can use it before init()
- init the database, you must init a new instance before other operation
- close the database
- delete the databse
- the database contain the obejectStore or not
- create objectStore in this database
- default ObjectStoreOptions = {autoIncrement: true, keyPath: 'id'};
- Delete objectStore in this database
- the obejectStore contain the index or not
db.objectStoreName.createIndex(indexName: string, keyPath?: string, objectParameters?: IDBIndexParameters): Promise
- create a index for the objectStore
- IDBIndexParameters
- create a index of the objectStore
- count the objectStoreName by QueryOptions
- get total when query is undefined
- fint data by query
- insert data
- update data
- default UpdateOptions = {upsert: false, multi: fasle, extend: true}
- remove data
interface ObjectStoreOptions {
autoIncrement?: boolean;
keyPath?: string;
}
interface QueryOptions {
value?: any;
count?: number;
$lt?: any;
$lte?: any;
$gte?: any;
$gt?: any;
}
interface UpdateOptions {
extend?: boolean;
multi?: boolean;
upsert?: boolean;
}
interface IndexedDBPOptions {
name: string;
version?: number;
onError?: any;
onSuccess?: any;
}