indexed-db-as-promised

    0.1.0 • Public • Published

    indexed-db-as-promised Build Status

    npm version

    A thin wrapper around IndexedDB, making it much more pleasant to use by returning Promise-likes. Inspired by ideas in indexeddb-promised, but written with the SyncPromise library to avoid issues with the transaction lifetime.

    This is not an official Google product.

    Installation

    npm install --save indexed-db-as-promised
    

    Usage

    The APIs mirror native IndexedDB's, just returning a promise-like everywhere you would want one.

    import indexedDBP from "indexed-db-as-promised";
     
    indexedDBP.open('database', 1, {
      upgrade(db, { transaction, oldVersion, newVersion }) {
        const people = db.createObjectStore('people', { autoIncrement: true, keyPath: 'id' });
        people.createIndex('ssn', 'ssn', { unique: true });
        people.createIndex('lastName', 'last');
     
        people.add({ first: 'Jane', last: 'Smith', ssn: '111-11-1111' });
      }
    }).then((db) => {
      // Get the Jane's record
      return db.transaction('people').run((tx) => {
        // #run returns a Promise like that will resolve to whatever we return in
        // this block.
        const ssn = tx.objectStore('people').index('ssn');
        return ssn.get('111-11-1111');
      }).then((record) => {
        console.log(record); // => { first: 'Jane', last: 'Smith', ssn: '111-11-1111' }
     
        // Let's add someone, then get the total number of Smiths.
        return db.transaction('people', 'readwrite').run((tx) => {
     
          const store = tx.objectStore('people');
          return store.put({ first: 'John', last: 'Smith', ssn: '111-11-1112' })
            .then((key) => {
              console.log(key); // => 2
     
              return store.index('lastName').count(IDBKeyRange.only('Smith'));
            });
        });
      }).then((count) => {
        console.log(count); // => 2
     
        // Let's iterate over everyone.
        return db.transaction('people').run((tx) => {
     
          // Let's gather all our SSNs with a cursor.
          const open = tx.objectStore('people').openCursor();
          return open.iterate((cursor) => {
            const record = cursor.value;
     
            // Continue/advance (if you want to), or don't and early-exit iteration.
            cursor.continue();
     
            return record.ssn;
          }).then((ssns) => {
            console.log(ssns); // => ['111-11-1111', '111-11-1112']
          });
        });
      }).then(() => {
        // Let's close our connection now.
        db.close();
      });
    });

    License

    Apache 2.0

    Install

    npm i indexed-db-as-promised

    DownloadsWeekly Downloads

    5

    Version

    0.1.0

    License

    Apache-2.0

    Unpacked Size

    440 kB

    Total Files

    24

    Last publish

    Collaborators

    • jridgewell