Skip to content

fayfang/indexedDBP

Repository files navigation

IndexedDBP

Build Status

IndexedDBP is a simple way to use IndexedDB in browsers, base on Promise, similiar to mongoDB api.

  npm install indexeddbp

example

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

operation

Database Operation

constructor (options?: object)
  • constructor of the class
  • default options = {name: 'indexedDBP', version: 1, onError: fn, onSuccess: fn}
db.containDataBase(databaseName: string): Promise:
  • a database exist or not, you can use it before init()
db.init(): Promise
  • init the database, you must init a new instance before other operation
db.closeDB(): undefined
  • close the database
db.dropDatabase(): Promise
  • delete the databse

ObjectStore Operation

db.containObjectStore(name: string): boolean
  • the database contain the obejectStore or not
db.createObjectStore(name: string, options?: ObjectStoreOptions): Promise
  • create objectStore in this database
  • default ObjectStoreOptions = {autoIncrement: true, keyPath: 'id'};
db.deleteObjectStore(name: string)
  • Delete objectStore in this database

Document Operation

db.objectStoreName.containIndex(indexName: string): Promise
  • the obejectStore contain the index or not
db.objectStoreName.createIndex(indexName: string, keyPath?: string, objectParameters?: IDBIndexParameters): Promise
db.objectStoreName.deleteIndex(indexName: string): Promise
  • create a index of the objectStore
db.objectStoreName.count(query?: QueryOptions): Promise
  • count the objectStoreName by QueryOptions
  • get total when query is undefined
db.objectStoreName.find(query: key | index | QueryOptions, indexName?: tring): Promise
  • fint data by query
db.objectStoreName.insert(document: any, key?: string): Promise
  • insert data
db.objectStoreName.update(query: key | QueryOptions, data: any, options?: UpdateOptions): Promise
  • update data
  • default UpdateOptions = {upsert: false, multi: fasle, extend: true}
db.objectStoreName.remove(query?: key | QueryOptions): Promise
  • remove data

Interface

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;
}