All files / app/lib IDB.ts

81.57% Statements 31/38
50% Branches 4/8
82.35% Functions 14/17
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    88x   1648x 1648x 1648x 113x 113x 113x   1648x 1636x       88x   645x 636x 636x 636x 636x     636x             993x 990x 990x 990x 990x 990x 986x               10x 10x 10x 10x 10x 10x              
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)
      }
    })
  },
}