All files / app/lib IDB.ts

81.57% Statements 31/38
50% Branches 4/8
81.25% Functions 13/16
87.87% Lines 29/33

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59    20x   300x 300x 300x 28x 28x 28x   300x 300x       20x   128x 128x 128x 128x 128x     128x             170x 170x 170x 170x 170x 170x 170x               2x 2x 2x 2x 2x 2x              
type storedItem = {name: string; encrypted?: boolean; content: Blob}
type DBName = 'resources' | 'building' | 'coarse_sense_map'
const DBVersions = {resources: 7, building: 1, coarse_sense_map: 1}
function openDB(name: DBName): Promise<IDBDatabase | undefined> {
  return new Promise(resolve => {
    const req = indexedDB.open('dictionary_builder_' + name, DBVersions[name])
    req.onupgradeneeded = () => {
      const db = req.result
      Iif (db.objectStoreNames.contains(name)) db.deleteObjectStore(name)
      db.createObjectStore(name, {keyPath: 'name'})
    }
    req.onsuccess = () => {
      resolve(req.result)
    }
  })
}
export const IDB = {
  setItem: async function (item: storedItem, database: DBName): Promise<boolean> {
    const db = await openDB(database)
    return new Promise(resolve => {
      if (db) {
        const req = db.transaction([database], 'readwrite', {durability: 'relaxed'}).objectStore(database).put(item)
        req.onerror = () => {
          throw Error('failed to store item ' + item.name)
        }
        req.onsuccess = () => resolve(true)
      } else E{
        throw Error
      }
    })
  },
  getItem: async function (name: string, database: DBName): Promise<storedItem | null> {
    const db = await openDB(database)
    return new Promise(resolve => {
      if (db) {
        const req = db.transaction([database], 'readonly', {durability: 'relaxed'}).objectStore(database).get(name)
        req.onerror = () => resolve(null)
        req.onsuccess = () => {
          resolve(req.result)
        }
      } else E{
        resolve(null)
      }
    })
  },
  removeItem: async function (name: string, database: DBName): Promise<boolean> {
    const db = await openDB(database)
    return new Promise(resolve => {
      if (db) {
        const req = db.transaction([database], 'readwrite', {durability: 'relaxed'}).objectStore(database).delete(name)
        req.onerror = () => resolve(false)
        req.onsuccess = () => resolve(true)
      } else E{
        resolve(false)
      }
    })
  },
}