idb-batch

1.0.0 • Public • Published

idb-batch

Perform batch operation on IndexedDB

Create/update/remove objects from IndexedDB store in one transaction without blocking main tread. This module also manually validates unique indexes fixing bugs in WebKit and IndexedDBShim.

Example

Using idb-factory and ES2016 async/await syntax. Check test.js for more examples.

import batch from 'idb-batch'
import { open } from 'idb-factory'
 
// open IndexedDB database with 2 stores
const db = await open('mydb', 1, upgradeCallback)
 
// modify object store
await batch(db, 'magazines', [
  { type: 'add', key: 1, value: { name: 'M1', frequency: 12 } },
  { type: 'add', key: 2, value: { name: 'M2', frequency: 24 } },
  { type: 'add', key: 3, value: { name: 'M3', frequency: 6 } },
  { type: 'del', key: 4,
]).then((result) => {
  console.log(result) // [1, 2, 3, undefined]
}).catch((err) => {
  console.error(err)
})
 
function upgradeCallback(e) {
  e.target.result.createObjectStore('books', { keyPath: 'id' })  
  e.target.result.createObjectStore('magazines')  
}

batch(db: IDBDatabase, storeName: String, ops: Array|Object)

It creates readwrite transaction to storeName, and performs ops sequentially. It returns Promise which resolves with results of each request.

Array notation is inspired by LevelUP. Each operation is an object with 3 possible properties: type, key, value. type is either add, put, or del, and key can be optional, when store has keyPath and value contains it.

await batch(db, 'books', [
  { type: 'add', key: 1, value: { name: 'M1', frequency: 12 } },
  { type: 'del', key: 2
  { type: 'put', value: { id: 3, name: 'M3', frequency: 24 } }, // no key
])

Object notation is a sugar on top of array notation for put/del operations. Set key to null in order to delete value.

await batch(db, 'storage', {
  key1: 'update value',
  key2: null, // delete value
  key3: 'new value',
})

ConstraintError

If during sequential execution one of operations throws ConstraintError, Promise rejects with error, but previous successful operations commit. This behavior can change in future versions, when I will figure out how to properly abort transaction in IndexedDBShim.

LICENSE

MIT

Package Sidebar

Install

npm i idb-batch

Weekly Downloads

0

Version

1.0.0

License

MIT

Last publish

Collaborators

  • alekseykulikov