{"version":3,"names":["openDatabase","Promise","resolve","reject","db","openreq","indexedDB","open","focalStorage","settings","name","version","onsuccess","result","onupgradeneeded","createObjectStore","storeName","onerror","error","openStore","type","then","transaction","objectStore","openTransaction","getItem","key","store","req","get","value","undefined","catch","getItems","getAll","setItem","console","warn","String","put","oncomplete","onabort","removeItem","delete","clear","length","callback","count","n","advanced","openCursor","cursor","advance","keys","push","continue","config","Object","assign","DEFAULT_SETTINGS","INDEXEDDB","LOCALSTORAGE","driver"],"sources":["focalStorage.js"],"sourcesContent":["/* globals indexedDB */\n/**\n * focalStorage\n *\n * A Promise-based, localStorage-like wrapper around IndexedDB.\n *\n * -\n *\n * Borrowed lots of code from\n *\n * https://github.com/mozilla/localForage/blob/080f665/src/drivers/indexeddb.js and\n * https://github.com/mozilla-b2g/gaia/blob/12d71f3/shared/js/async_storage.js\n *\n * -\n *\n * This file defines an asynchronous version of the localStorage API, backed by\n * an IndexedDB database. It creates a focalStorage object that has methods\n * like the localStorage object's.\n *\n * To store a value use setItem:\n *\n *   focalStorage.setItem('key', 'value');\n *\n * If you want confirmation that the value has been stored, pass a callback\n * function as the third argument:\n *\n *  focalStorage.setItem('key', 'newvalue').then(function () {\n *    console.log('new value stored');\n *  });\n *\n * To read a value, call getItem(), but note that you must supply a callback\n * function that the value will be passed to asynchronously:\n *\n *  focalStorage.getItem('key').then(function (value) {\n *    console.log('The value of key is:', value);\n *  });\n *\n * Note that unlike localStorage, focalStorage does not allow you to store and\n * retrieve values by setting and querying properties directly. You cannot just\n * write focalStorage.key; you have to explicitly call setItem() or getItem().\n *\n * removeItem(), clear(), length(), and key() are like the same-named methods of\n * localStorage, but, like getItem() and setItem() they take a callback\n * argument.\n *\n * The asynchronous nature of getItem() makes it tricky to retrieve multiple\n * values. But unlike localStorage, focalStorage does not require the values you\n * store to be strings. So if you need to save multiple values and want to\n * retrieve them together, in a single asynchronous operation, just group the\n * values into a single object. The properties of this object may not include\n * DOM elements, but they may include things like Blobs and typed arrays.\n */\n\n'use strict';\n\nvar db = null;\n\nfunction openDatabase() {\n  return new Promise(function (resolve, reject) {\n    if (db) {\n      resolve(db);\n      return;\n    }\n\n    var openreq = indexedDB.open(focalStorage.settings.name,\n                                 focalStorage.settings.version);\n\n    openreq.onsuccess = function () {\n      db = openreq.result;\n      resolve(db);\n    };\n\n    openreq.onupgradeneeded = function () {\n      // First time setup: create an empty object store.\n      openreq.result.createObjectStore(focalStorage.settings.storeName);\n    };\n\n    openreq.onerror = function () {\n      reject(openreq.error);\n    };\n  });\n}\n\nfunction openStore(type) {\n  return openDatabase().then(function () {\n    var transaction = db.transaction(focalStorage.settings.storeName, type);\n\n    return transaction.objectStore(focalStorage.settings.storeName);\n  });\n}\n\nfunction openTransaction(type) {\n  return openDatabase().then(function () {\n    return db.transaction(focalStorage.settings.storeName, type);\n  });\n}\n\nfunction getItem(key) {\n  return new Promise(function (resolve, reject) {\n    return openStore('readonly').then(function (store) {\n      var req = store.get(key);\n\n      req.onsuccess = function () {\n        var value = req.result;\n        if (value === undefined) {\n          value = null;\n        }\n\n        resolve(value);\n      };\n\n      req.onerror = function () {\n        reject(req.error);\n      };\n    }).catch(reject);\n  });\n}\n\nfunction getItems() {\n  return new Promise(function (resolve, reject) {\n    return openStore('readonly').then(function (store) {\n      var req = store.getAll();\n\n      req.onsuccess = function () {\n        var value = req.result;\n        if (value === undefined) {\n          value = null;\n        }\n\n        resolve(value);\n      };\n\n      req.onerror = function () {\n        reject(req.error);\n      };\n    }).catch(reject);\n  });\n}\n\nfunction setItem(key, value) {\n  return new Promise(function (resolve, reject) {\n    return openTransaction('readwrite').then(function (transaction) {\n\n      var store = transaction.objectStore(focalStorage.settings.storeName);\n\n      // Cast the key to a string, as that's all we can set as a key.\n      if (typeof key !== 'string') {\n        console.warn(key + ' used as a key, but it is not a string');\n        key = String(key);\n      }\n\n      // The reason we don't _save_ null is because IE 10 does\n      // not support saving the `null` type in IndexedDB.\n      if (value === null) {\n        value = undefined;\n      }\n\n      var req = store.put(value, key);\n\n      transaction.oncomplete = function () {\n        // Cast to undefined so the value passed to\n        // callback/promise is the same as what one would get out\n        // of `getItem()` later. This leads to some weirdness\n        // (setItem('foo', undefined) will return `null`), but\n        // it's not my fault localStorage is our baseline and that\n        // it's weird.\n        if (value === undefined) {\n          value = null;\n        }\n\n        resolve(value);\n      };\n\n      transaction.onabort = transaction.onerror = function () {\n        reject(req.error ? req.error : req.transaction.error);\n      };\n    }).catch(reject);\n  });\n}\n\nfunction removeItem(key) {\n  return new Promise(function (resolve, reject) {\n    return openTransaction('readwrite').then(function (transaction) {\n      var store = transaction.objectStore(focalStorage.settings.storeName);\n\n      // Cast the key to a string, as that's all we can set as a key.\n      if (typeof key !== 'string') {\n        console.warn(key + ' used as a key, but it is not a string');\n        key = String(key);\n      }\n\n      var req = store.delete(key);\n\n      transaction.oncomplete = function () {\n        resolve();\n      };\n\n      transaction.onerror = function () {\n        reject(req.error);\n      };\n\n      // The request will also be aborted if storage space is exceeded.\n      transaction.onabort = function () {\n        reject(req.error ? req.error : req.transaction.error);\n      };\n    }).catch(reject);\n  });\n}\n\nfunction clear() {\n  return new Promise(function (resolve, reject) {\n    return openTransaction('readwrite').then(function (transaction) {\n      var store = transaction.objectStore(focalStorage.settings.storeName);\n\n      var req = store.clear();\n\n      transaction.oncomplete = function () {\n        resolve();\n      };\n\n      transaction.onabort = transaction.onerror = function () {\n        reject(req.error ? req.error : req.transaction.error);\n      };\n    }).catch(reject);\n  });\n}\n\nfunction length(callback) {\n  return new Promise(function (resolve, reject) {\n    openStore('readonly').then(function (store) {\n      var req = store.count();\n\n      req.onsuccess = function () {\n        resolve(req.result);\n      };\n\n      req.onerror = function () {\n        reject(req.error);\n      };\n    }).catch(reject);\n  });\n}\n\nfunction key(n) {\n  return new Promise(function (resolve, reject) {\n    if (n < 0) {\n      resolve(null);\n      return;\n    }\n\n    return openStore('readonly').then(function (store) {\n      var advanced = false;\n      var req = store.openCursor();\n\n      req.onsuccess = function () {\n        var cursor = req.result;\n\n        if (!cursor) {\n          // This means there weren't enough keys.\n          resolve(null);\n          return;\n        }\n\n        if (n === 0) {\n          // We have the first key; return it if that's what they wanted.\n          resolve(cursor.key);\n        } else {\n          if (!advanced) {\n            // Otherwise, ask the cursor to skip ahead `n` records.\n            advanced = true;\n            cursor.advance(n);\n          } else {\n            // When we get here, we've got the nth key.\n            resolve(cursor.key);\n          }\n        }\n      };\n\n      req.onerror = function () {\n        reject(req.error);\n      };\n    }).catch(reject);\n  });\n}\n\nfunction keys() {\n  return new Promise(function (resolve, reject) {\n    return openStore('readonly').then(function (store) {\n      var req = store.openCursor();\n      var keys = [];\n\n      req.onsuccess = function () {\n        var cursor = req.result;\n\n        if (!cursor) {\n          resolve(keys);\n          return;\n        }\n\n        keys.push(cursor.key);\n        cursor.continue();\n      };\n\n      req.onerror = function () {\n        reject(req.error);\n      };\n\n    }).catch(reject);\n  });\n}\n\n/**\n * Assigns configurations.\n * @param {Object} settings Options object to use for `focalStorage` instance.\n */\nfunction config(settings) {\n  focalStorage.settings = Object.assign({}, DEFAULT_SETTINGS, settings || {});\n}\n\nvar focalStorage = {\n  INDEXEDDB: 0,\n  LOCALSTORAGE: 1,\n  getItem: getItem,\n  getItems: getItems,\n  setItem: setItem,\n  removeItem: removeItem,\n  clear: clear,\n  length: length,\n  key: key,\n  keys: keys\n};\n\nvar DEFAULT_SETTINGS = {\n  driver: focalStorage.indexedDB,\n  name: 'focalStorage',\n  version: 1,\n  storeName: 'keyvaluepairs',\n};\n\nfocalStorage.settings = DEFAULT_SETTINGS;\n\nexport default focalStorage;"],"mappings":"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"}