{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/sw.js","webpack:///./node_modules/localforage/dist/localforage.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_localforage","getWindowClients","clients","matchAll","includeUncontrolled","then","clientList","filter","_ref","type","self","addEventListener","event","data","waitUntil","localForage","getItem","config","webPushNotifications","isEnabled","list","json","length","registration","showNotification","title","notification","close","client","url","focus","openWindow","f","define","amd","window","global","this","localforage","e","u","a","require","Error","code","1","_dereq_","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","observer","nextTick","element","document","createTextNode","observe","characterData","setImmediate","MessageChannel","createElement","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","appendChild","setTimeout","channel","port1","onmessage","port2","postMessage","queue","oldQueue","len","task","push","2","immediate","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","Promise","resolver","TypeError","state","outcome","safelyResolveThenable","QueueItem","promise","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","func","returnValue","reject","resolve","getThen","obj","apply","arguments","thenable","onError","onSuccess","result","tryCatch","status","out","constructor","error","reason","all","iterable","toString","values","Array","resolved","allResolver","outValue","race","response","3","4","_typeof","iterator","idb","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","getIDB","createBlob","parts","properties","Blob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","append","getBlob","Promise$1","executeCallback","callback","executeTwoCallbacks","errorCallback","normalizeKey","console","warn","String","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","READ_ONLY","READ_WRITE","_checkBlobSupport","txn","transaction","blob","objectStore","put","onabort","preventDefault","stopPropagation","oncomplete","matchedChrome","navigator","userAgent","match","matchedEdge","parseInt","_checkBlobSupportWithoutCaching","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","pop","_rejectReadiness","err","_getConnection","upgradeNeeded","forages","db","dbArgs","version","openreq","open","onupgradeneeded","createObjectStore","storeName","oldVersion","ex","newVersion","onerror","onsuccess","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isDowngrade","isUpgrade","incVersion","_decodeBlob","encodedBlob","bin","buf","ArrayBuffer","arr","Uint8Array","charCodeAt","_binStringToArrayBuffer","atob","_isEncodedBlob","__local_forage_encoded_blob","_fullyReady","_initReady","_dbInfo","createTransaction","retries","undefined","tx","forage","_tryReconnect","asyncStorage","_driver","_initStorage","options","ready","initPromises","ignoreErrors","j","slice","_defaultConfig","k","_support","isSafari","openDatabase","test","platform","hasFetch","fetch","indexOf","IDBKeyRange","isIndexedDBValid","iterate","req","openCursor","iterationNumber","cursor","setItem","blobSupport","reader","FileReader","onloadend","base64","btoa","target","readAsBinaryString","store","removeItem","clear","count","advanced","advance","keys","dropInstance","currentConfig","dbPromise","deleteObjectStore","_forage2","deleteDatabase","onblocked","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","buffer","bytes","bufferToString","base64String","substring","localforageSerializer","serialize","valueType","marker","fileReader","onload","str","readAsArrayBuffer","JSON","stringify","deserialize","parse","blobType","matcher","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","createDbTable","executeSql","tryExecuteSql","sqlStatement","args","SYNTAX_ERR","results","rows","webSQLStorage","dbInfoPromise","description","size","serializer","item","_setItem","retriesLeft","originalValue","sqlError","QUOTA_ERR","storeNames","getAllStoreNames","operationInfo","dropTable","operations","_getKeyPrefix","defaultConfig","keyPrefix","_isLocalStorageUsable","localStorage","checkIfLocalStorageThrows","localStorageWrapper","isLocalStorageValid","keyPrefixLength","itemKey","includes","array","searchElement","x","y","isNaN","isArray","arg","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","concat","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","localforage_js","LocalForage","driverTypeKey","instance","Constructor","_classCallCheck","driverName","defineDriver","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","replace","driverObject","complianceError","driverMethods","driverMethodName","methodNotImplementedFactory","methodName","_i","_len","optionalDriverMethod","configureMissingMethods","setDriverSupport","support","info","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","oldDriverSetDone","currentDriverIndex","driverPromiseLoop","initDriver","supports","libraryMethodsAndProperties","createInstance"],"mappings":"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","file":"sw-pleroma.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/* eslint-env serviceworker */\n\nimport localForage from 'localforage'\n\nfunction isEnabled () {\n  return localForage.getItem('vuex-lz')\n    .then(data => data.config.webPushNotifications)\n}\n\nfunction getWindowClients () {\n  return clients.matchAll({ includeUncontrolled: true })\n    .then((clientList) => clientList.filter(({ type }) => type === 'window'))\n}\n\nself.addEventListener('push', (event) => {\n  if (event.data) {\n    event.waitUntil(isEnabled().then((isEnabled) => {\n      return isEnabled && getWindowClients().then((list) => {\n        const data = event.data.json()\n\n        if (list.length === 0) return self.registration.showNotification(data.title, data)\n      })\n    }))\n  }\n})\n\nself.addEventListener('notificationclick', (event) => {\n  event.notification.close()\n\n  event.waitUntil(getWindowClients().then((list) => {\n    for (var i = 0; i < list.length; i++) {\n      var client = list[i]\n      if (client.url === '/' && 'focus' in client) { return client.focus() }\n    }\n\n    if (clients.openWindow) return clients.openWindow('/')\n  }))\n})\n","/*!\n    localForage -- Offline Storage, Improved\n    Version 1.7.3\n    https://localforage.github.io/localForage\n    (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n  global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n    /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n    try {\n        if (typeof indexedDB !== 'undefined') {\n            return indexedDB;\n        }\n        if (typeof webkitIndexedDB !== 'undefined') {\n            return webkitIndexedDB;\n        }\n        if (typeof mozIndexedDB !== 'undefined') {\n            return mozIndexedDB;\n        }\n        if (typeof OIndexedDB !== 'undefined') {\n            return OIndexedDB;\n        }\n        if (typeof msIndexedDB !== 'undefined') {\n            return msIndexedDB;\n        }\n    } catch (e) {\n        return;\n    }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n    try {\n        // Initialize IndexedDB; fall back to vendor-prefixed versions\n        // if needed.\n        if (!idb) {\n            return false;\n        }\n        // We mimic PouchDB here;\n        //\n        // We test for openDatabase because IE Mobile identifies itself\n        // as Safari. Oh the lulz...\n        var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n        var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n        // Safari <10.1 does not meet our requirements for IDB support (#5572)\n        // since Safari 10.1 shipped with fetch, we can use that to detect it\n        return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n        // some outdated implementations of IDB that appear on Samsung\n        // and HTC Android devices <4.4 are missing IDBKeyRange\n        // See: https://github.com/mozilla/localForage/issues/128\n        // See: https://github.com/mozilla/localForage/issues/272\n        typeof IDBKeyRange !== 'undefined';\n    } catch (e) {\n        return false;\n    }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n    /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n    parts = parts || [];\n    properties = properties || {};\n    try {\n        return new Blob(parts, properties);\n    } catch (e) {\n        if (e.name !== 'TypeError') {\n            throw e;\n        }\n        var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n        var builder = new Builder();\n        for (var i = 0; i < parts.length; i += 1) {\n            builder.append(parts[i]);\n        }\n        return builder.getBlob(properties.type);\n    }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n    // In the \"nopromises\" build this will just throw if you don't have\n    // a global promise object, but it would throw anyway later.\n    _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n    if (callback) {\n        promise.then(function (result) {\n            callback(null, result);\n        }, function (error) {\n            callback(error);\n        });\n    }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n    if (typeof callback === 'function') {\n        promise.then(callback);\n    }\n\n    if (typeof errorCallback === 'function') {\n        promise[\"catch\"](errorCallback);\n    }\n}\n\nfunction normalizeKey(key) {\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    return key;\n}\n\nfunction getCallback() {\n    if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n        return arguments[arguments.length - 1];\n    }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n    var length = bin.length;\n    var buf = new ArrayBuffer(length);\n    var arr = new Uint8Array(buf);\n    for (var i = 0; i < length; i++) {\n        arr[i] = bin.charCodeAt(i);\n    }\n    return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n    return new Promise$1(function (resolve) {\n        var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n        var blob = createBlob(['']);\n        txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n        txn.onabort = function (e) {\n            // If the transaction aborts now its due to not being able to\n            // write to the database, likely due to the disk being full\n            e.preventDefault();\n            e.stopPropagation();\n            resolve(false);\n        };\n\n        txn.oncomplete = function () {\n            var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n            var matchedEdge = navigator.userAgent.match(/Edge\\//);\n            // MS Edge pretends to be Chrome 42:\n            // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n            resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n        };\n    })[\"catch\"](function () {\n        return false; // error, so assume unsupported\n    });\n}\n\nfunction _checkBlobSupport(idb) {\n    if (typeof supportsBlobs === 'boolean') {\n        return Promise$1.resolve(supportsBlobs);\n    }\n    return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n        supportsBlobs = value;\n        return supportsBlobs;\n    });\n}\n\nfunction _deferReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Create a deferred object representing the current database operation.\n    var deferredOperation = {};\n\n    deferredOperation.promise = new Promise$1(function (resolve, reject) {\n        deferredOperation.resolve = resolve;\n        deferredOperation.reject = reject;\n    });\n\n    // Enqueue the deferred operation.\n    dbContext.deferredOperations.push(deferredOperation);\n\n    // Chain its promise to the database readiness.\n    if (!dbContext.dbReady) {\n        dbContext.dbReady = deferredOperation.promise;\n    } else {\n        dbContext.dbReady = dbContext.dbReady.then(function () {\n            return deferredOperation.promise;\n        });\n    }\n}\n\nfunction _advanceReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Resolve its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.resolve();\n        return deferredOperation.promise;\n    }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Reject its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.reject(err);\n        return deferredOperation.promise;\n    }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n    return new Promise$1(function (resolve, reject) {\n        dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n        if (dbInfo.db) {\n            if (upgradeNeeded) {\n                _deferReadiness(dbInfo);\n                dbInfo.db.close();\n            } else {\n                return resolve(dbInfo.db);\n            }\n        }\n\n        var dbArgs = [dbInfo.name];\n\n        if (upgradeNeeded) {\n            dbArgs.push(dbInfo.version);\n        }\n\n        var openreq = idb.open.apply(idb, dbArgs);\n\n        if (upgradeNeeded) {\n            openreq.onupgradeneeded = function (e) {\n                var db = openreq.result;\n                try {\n                    db.createObjectStore(dbInfo.storeName);\n                    if (e.oldVersion <= 1) {\n                        // Added when support for blob shims was added\n                        db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n                    }\n                } catch (ex) {\n                    if (ex.name === 'ConstraintError') {\n                        console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n                    } else {\n                        throw ex;\n                    }\n                }\n            };\n        }\n\n        openreq.onerror = function (e) {\n            e.preventDefault();\n            reject(openreq.error);\n        };\n\n        openreq.onsuccess = function () {\n            resolve(openreq.result);\n            _advanceReadiness(dbInfo);\n        };\n    });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n    return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n    return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n    if (!dbInfo.db) {\n        return true;\n    }\n\n    var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n    var isDowngrade = dbInfo.version < dbInfo.db.version;\n    var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n    if (isDowngrade) {\n        // If the version is not the default one\n        // then warn for impossible downgrade.\n        if (dbInfo.version !== defaultVersion) {\n            console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n        }\n        // Align the versions to prevent errors.\n        dbInfo.version = dbInfo.db.version;\n    }\n\n    if (isUpgrade || isNewStore) {\n        // If the store is new then increment the version (if needed).\n        // This will trigger an \"upgradeneeded\" event which is required\n        // for creating a store.\n        if (isNewStore) {\n            var incVersion = dbInfo.db.version + 1;\n            if (incVersion > dbInfo.version) {\n                dbInfo.version = incVersion;\n            }\n        }\n\n        return true;\n    }\n\n    return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n    return new Promise$1(function (resolve, reject) {\n        var reader = new FileReader();\n        reader.onerror = reject;\n        reader.onloadend = function (e) {\n            var base64 = btoa(e.target.result || '');\n            resolve({\n                __local_forage_encoded_blob: true,\n                data: base64,\n                type: blob.type\n            });\n        };\n        reader.readAsBinaryString(blob);\n    });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n    var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n    return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n    return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n    var self = this;\n\n    var promise = self._initReady().then(function () {\n        var dbContext = dbContexts[self._dbInfo.name];\n\n        if (dbContext && dbContext.dbReady) {\n            return dbContext.dbReady;\n        }\n    });\n\n    executeTwoCallbacks(promise, callback, callback);\n    return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n    _deferReadiness(dbInfo);\n\n    var dbContext = dbContexts[dbInfo.name];\n    var forages = dbContext.forages;\n\n    for (var i = 0; i < forages.length; i++) {\n        var forage = forages[i];\n        if (forage._dbInfo.db) {\n            forage._dbInfo.db.close();\n            forage._dbInfo.db = null;\n        }\n    }\n    dbInfo.db = null;\n\n    return _getOriginalConnection(dbInfo).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        // store the latest db reference\n        // in case the db was upgraded\n        dbInfo.db = dbContext.db = db;\n        for (var i = 0; i < forages.length; i++) {\n            forages[i]._dbInfo.db = db;\n        }\n    })[\"catch\"](function (err) {\n        _rejectReadiness(dbInfo, err);\n        throw err;\n    });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n    if (retries === undefined) {\n        retries = 1;\n    }\n\n    try {\n        var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n        callback(null, tx);\n    } catch (err) {\n        if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n            return Promise$1.resolve().then(function () {\n                if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n                    // increase the db version, to create the new ObjectStore\n                    if (dbInfo.db) {\n                        dbInfo.version = dbInfo.db.version + 1;\n                    }\n                    // Reopen the database for upgrading.\n                    return _getUpgradedConnection(dbInfo);\n                }\n            }).then(function () {\n                return _tryReconnect(dbInfo).then(function () {\n                    createTransaction(dbInfo, mode, callback, retries - 1);\n                });\n            })[\"catch\"](callback);\n        }\n\n        callback(err);\n    }\n}\n\nfunction createDbContext() {\n    return {\n        // Running localForages sharing a database.\n        forages: [],\n        // Shared database.\n        db: null,\n        // Database readiness (promise).\n        dbReady: null,\n        // Deferred operations on the database.\n        deferredOperations: []\n    };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    // Get the current context of the database;\n    var dbContext = dbContexts[dbInfo.name];\n\n    // ...or create a new context.\n    if (!dbContext) {\n        dbContext = createDbContext();\n        // Register the new context in the global container.\n        dbContexts[dbInfo.name] = dbContext;\n    }\n\n    // Register itself as a running localForage in the current context.\n    dbContext.forages.push(self);\n\n    // Replace the default `ready()` function with the specialized one.\n    if (!self._initReady) {\n        self._initReady = self.ready;\n        self.ready = _fullyReady;\n    }\n\n    // Create an array of initialization states of the related localForages.\n    var initPromises = [];\n\n    function ignoreErrors() {\n        // Don't handle errors here,\n        // just makes sure related localForages aren't pending.\n        return Promise$1.resolve();\n    }\n\n    for (var j = 0; j < dbContext.forages.length; j++) {\n        var forage = dbContext.forages[j];\n        if (forage !== self) {\n            // Don't wait for itself...\n            initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n        }\n    }\n\n    // Take a snapshot of the related localForages.\n    var forages = dbContext.forages.slice(0);\n\n    // Initialize the connection process only when\n    // all the related localForages aren't pending.\n    return Promise$1.all(initPromises).then(function () {\n        dbInfo.db = dbContext.db;\n        // Get the connection or open a new one without upgrade.\n        return _getOriginalConnection(dbInfo);\n    }).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        dbInfo.db = dbContext.db = db;\n        self._dbInfo = dbInfo;\n        // Share the final connection amongst related localForages.\n        for (var k = 0; k < forages.length; k++) {\n            var forage = forages[k];\n            if (forage !== self) {\n                // Self is already up-to-date.\n                forage._dbInfo.db = dbInfo.db;\n                forage._dbInfo.version = dbInfo.version;\n            }\n        }\n    });\n}\n\nfunction getItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\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                        if (_isEncodedBlob(value)) {\n                            value = _decodeBlob(value);\n                        }\n                        resolve(value);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openCursor();\n                    var iterationNumber = 1;\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (cursor) {\n                            var value = cursor.value;\n                            if (_isEncodedBlob(value)) {\n                                value = _decodeBlob(value);\n                            }\n                            var result = iterator(value, cursor.key, iterationNumber++);\n\n                            // when the iterator callback retuns any\n                            // (non-`undefined`) value, then we stop\n                            // the iteration immediately\n                            if (result !== void 0) {\n                                resolve(result);\n                            } else {\n                                cursor[\"continue\"]();\n                            }\n                        } else {\n                            resolve();\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n\n    return promise;\n}\n\nfunction setItem(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        var dbInfo;\n        self.ready().then(function () {\n            dbInfo = self._dbInfo;\n            if (toString.call(value) === '[object Blob]') {\n                return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n                    if (blobSupport) {\n                        return value;\n                    }\n                    return _encodeBlob(value);\n                });\n            }\n            return value;\n        }).then(function (value) {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n\n                    // The reason we don't _save_ null is because IE 10 does\n                    // not support saving the `null` type in IndexedDB. How\n                    // ironic, given the bug below!\n                    // See: https://github.com/mozilla/localForage/issues/161\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                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction removeItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    // We use a Grunt task to make this safe for IE and some\n                    // versions of Android (including those used by Cordova).\n                    // Normally IE won't like `.delete()` and will insist on\n                    // using `['delete']()`, but we have a build step that\n                    // fixes this for us now.\n                    var req = store[\"delete\"](key);\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onerror = function () {\n                        reject(req.error);\n                    };\n\n                    // The request will be also be aborted if we've exceeded our storage\n                    // space.\n                    transaction.onabort = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction clear(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.clear();\n\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction length(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\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 (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction key(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        if (n < 0) {\n            resolve(null);\n\n            return;\n        }\n\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var advanced = false;\n                    var req = store.openCursor();\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n                        if (!cursor) {\n                            // this means there weren't enough keys\n                            resolve(null);\n\n                            return;\n                        }\n\n                        if (n === 0) {\n                            // We have the first key, return it if that's what they\n                            // wanted.\n                            resolve(cursor.key);\n                        } else {\n                            if (!advanced) {\n                                // Otherwise, ask the cursor to skip ahead n\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 (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\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                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n        var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n            var dbContext = dbContexts[options.name];\n            var forages = dbContext.forages;\n            dbContext.db = db;\n            for (var i = 0; i < forages.length; i++) {\n                forages[i]._dbInfo.db = db;\n            }\n            return db;\n        });\n\n        if (!options.storeName) {\n            promise = dbPromise.then(function (db) {\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                }\n\n                var dropDBPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.deleteDatabase(options.name);\n\n                    req.onerror = req.onblocked = function (err) {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        reject(err);\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        resolve(db);\n                    };\n                });\n\n                return dropDBPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var i = 0; i < forages.length; i++) {\n                        var _forage = forages[i];\n                        _advanceReadiness(_forage._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        } else {\n            promise = dbPromise.then(function (db) {\n                if (!db.objectStoreNames.contains(options.storeName)) {\n                    return;\n                }\n\n                var newVersion = db.version + 1;\n\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                    forage._dbInfo.version = newVersion;\n                }\n\n                var dropObjectPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.open(options.name, newVersion);\n\n                    req.onerror = function (err) {\n                        var db = req.result;\n                        db.close();\n                        reject(err);\n                    };\n\n                    req.onupgradeneeded = function () {\n                        var db = req.result;\n                        db.deleteObjectStore(options.storeName);\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        db.close();\n                        resolve(db);\n                    };\n                });\n\n                return dropObjectPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var j = 0; j < forages.length; j++) {\n                        var _forage2 = forages[j];\n                        _forage2._dbInfo.db = db;\n                        _advanceReadiness(_forage2._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        }\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar asyncStorage = {\n    _driver: 'asyncStorage',\n    _initStorage: _initStorage,\n    _support: isIndexedDBValid(),\n    iterate: iterate,\n    getItem: getItem,\n    setItem: setItem,\n    removeItem: removeItem,\n    clear: clear,\n    length: length,\n    key: key,\n    keys: keys,\n    dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n    return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n    // Fill the string into a ArrayBuffer.\n    var bufferLength = serializedString.length * 0.75;\n    var len = serializedString.length;\n    var i;\n    var p = 0;\n    var encoded1, encoded2, encoded3, encoded4;\n\n    if (serializedString[serializedString.length - 1] === '=') {\n        bufferLength--;\n        if (serializedString[serializedString.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    var buffer = new ArrayBuffer(bufferLength);\n    var bytes = new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n        encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n        encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n        encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n        /*jslint bitwise: true */\n        bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n        bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n        bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n    }\n    return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n    // base64-arraybuffer\n    var bytes = new Uint8Array(buffer);\n    var base64String = '';\n    var i;\n\n    for (i = 0; i < bytes.length; i += 3) {\n        /*jslint bitwise: true */\n        base64String += BASE_CHARS[bytes[i] >> 2];\n        base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n        base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n        base64String += BASE_CHARS[bytes[i + 2] & 63];\n    }\n\n    if (bytes.length % 3 === 2) {\n        base64String = base64String.substring(0, base64String.length - 1) + '=';\n    } else if (bytes.length % 3 === 1) {\n        base64String = base64String.substring(0, base64String.length - 2) + '==';\n    }\n\n    return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n    var valueType = '';\n    if (value) {\n        valueType = toString$1.call(value);\n    }\n\n    // Cannot use `value instanceof ArrayBuffer` or such here, as these\n    // checks fail when running the tests using casper.js...\n    //\n    // TODO: See why those tests fail and use a better solution.\n    if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n        // Convert binary arrays to a string and prefix the string with\n        // a special marker.\n        var buffer;\n        var marker = SERIALIZED_MARKER;\n\n        if (value instanceof ArrayBuffer) {\n            buffer = value;\n            marker += TYPE_ARRAYBUFFER;\n        } else {\n            buffer = value.buffer;\n\n            if (valueType === '[object Int8Array]') {\n                marker += TYPE_INT8ARRAY;\n            } else if (valueType === '[object Uint8Array]') {\n                marker += TYPE_UINT8ARRAY;\n            } else if (valueType === '[object Uint8ClampedArray]') {\n                marker += TYPE_UINT8CLAMPEDARRAY;\n            } else if (valueType === '[object Int16Array]') {\n                marker += TYPE_INT16ARRAY;\n            } else if (valueType === '[object Uint16Array]') {\n                marker += TYPE_UINT16ARRAY;\n            } else if (valueType === '[object Int32Array]') {\n                marker += TYPE_INT32ARRAY;\n            } else if (valueType === '[object Uint32Array]') {\n                marker += TYPE_UINT32ARRAY;\n            } else if (valueType === '[object Float32Array]') {\n                marker += TYPE_FLOAT32ARRAY;\n            } else if (valueType === '[object Float64Array]') {\n                marker += TYPE_FLOAT64ARRAY;\n            } else {\n                callback(new Error('Failed to get type for BinaryArray'));\n            }\n        }\n\n        callback(marker + bufferToString(buffer));\n    } else if (valueType === '[object Blob]') {\n        // Conver the blob to a binaryArray and then to a string.\n        var fileReader = new FileReader();\n\n        fileReader.onload = function () {\n            // Backwards-compatible prefix for the blob type.\n            var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n            callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n        };\n\n        fileReader.readAsArrayBuffer(value);\n    } else {\n        try {\n            callback(JSON.stringify(value));\n        } catch (e) {\n            console.error(\"Couldn't convert value into a JSON string: \", value);\n\n            callback(null, e);\n        }\n    }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n    // If we haven't marked this string as being specially serialized (i.e.\n    // something other than serialized JSON), we can just return it and be\n    // done with it.\n    if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n        return JSON.parse(value);\n    }\n\n    // The following code deals with deserializing some kind of Blob or\n    // TypedArray. First we separate out the type of data we're dealing\n    // with from the data itself.\n    var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n    var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n    var blobType;\n    // Backwards-compatible blob type serialization strategy.\n    // DBs created with older versions of localForage will simply not have the blob type.\n    if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n        var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n        blobType = matcher[1];\n        serializedString = serializedString.substring(matcher[0].length);\n    }\n    var buffer = stringToBuffer(serializedString);\n\n    // Return the right type based on the code/type set during\n    // serialization.\n    switch (type) {\n        case TYPE_ARRAYBUFFER:\n            return buffer;\n        case TYPE_BLOB:\n            return createBlob([buffer], { type: blobType });\n        case TYPE_INT8ARRAY:\n            return new Int8Array(buffer);\n        case TYPE_UINT8ARRAY:\n            return new Uint8Array(buffer);\n        case TYPE_UINT8CLAMPEDARRAY:\n            return new Uint8ClampedArray(buffer);\n        case TYPE_INT16ARRAY:\n            return new Int16Array(buffer);\n        case TYPE_UINT16ARRAY:\n            return new Uint16Array(buffer);\n        case TYPE_INT32ARRAY:\n            return new Int32Array(buffer);\n        case TYPE_UINT32ARRAY:\n            return new Uint32Array(buffer);\n        case TYPE_FLOAT32ARRAY:\n            return new Float32Array(buffer);\n        case TYPE_FLOAT64ARRAY:\n            return new Float64Array(buffer);\n        default:\n            throw new Error('Unkown type: ' + type);\n    }\n}\n\nvar localforageSerializer = {\n    serialize: serialize,\n    deserialize: deserialize,\n    stringToBuffer: stringToBuffer,\n    bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n    t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n        }\n    }\n\n    var dbInfoPromise = new Promise$1(function (resolve, reject) {\n        // Open the database; the openDatabase API will automatically\n        // create it for us if it doesn't exist.\n        try {\n            dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n        } catch (e) {\n            return reject(e);\n        }\n\n        // Create our key/value table if it doesn't exist.\n        dbInfo.db.transaction(function (t) {\n            createDbTable(t, dbInfo, function () {\n                self._dbInfo = dbInfo;\n                resolve();\n            }, function (t, error) {\n                reject(error);\n            });\n        }, reject);\n    });\n\n    dbInfo.serializer = localforageSerializer;\n    return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n    t.executeSql(sqlStatement, args, callback, function (t, error) {\n        if (error.code === error.SYNTAX_ERR) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n                if (!results.rows.length) {\n                    // if the table is missing (was deleted)\n                    // re-create it table and retry\n                    createDbTable(t, dbInfo, function () {\n                        t.executeSql(sqlStatement, args, callback, errorCallback);\n                    }, errorCallback);\n                } else {\n                    errorCallback(t, error);\n                }\n            }, errorCallback);\n        } else {\n            errorCallback(t, error);\n        }\n    }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).value : null;\n\n                    // Check to see if this is serialized content we need to\n                    // unpack.\n                    if (result) {\n                        result = dbInfo.serializer.deserialize(result);\n                    }\n\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var rows = results.rows;\n                    var length = rows.length;\n\n                    for (var i = 0; i < length; i++) {\n                        var item = rows.item(i);\n                        var result = item.value;\n\n                        // Check to see if this is serialized content\n                        // we need to unpack.\n                        if (result) {\n                            result = dbInfo.serializer.deserialize(result);\n                        }\n\n                        result = iterator(result, item.key, i + 1);\n\n                        // void(0) prevents problems with redefinition\n                        // of `undefined`.\n                        if (result !== void 0) {\n                            resolve(result);\n                            return;\n                        }\n                    }\n\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            // The localStorage API doesn't return undefined values in an\n            // \"expected\" way, so undefined is always cast to null in all\n            // drivers. See: https://github.com/mozilla/localForage/pull/42\n            if (value === undefined) {\n                value = null;\n            }\n\n            // Save the original value to pass to the callback.\n            var originalValue = value;\n\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    dbInfo.db.transaction(function (t) {\n                        tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n                            resolve(originalValue);\n                        }, function (t, error) {\n                            reject(error);\n                        });\n                    }, function (sqlError) {\n                        // The transaction failed; check\n                        // to see if it's a quota error.\n                        if (sqlError.code === sqlError.QUOTA_ERR) {\n                            // We reject the callback outright for now, but\n                            // it's worth trying to re-run the transaction.\n                            // Even if the user accepts the prompt to use\n                            // more storage on Safari, this error will\n                            // be called.\n                            //\n                            // Try to re-run the transaction.\n                            if (retriesLeft > 0) {\n                                resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n                                return;\n                            }\n                            reject(sqlError);\n                        }\n                    });\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n    return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                // Ahhh, SQL makes this one soooooo easy.\n                tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var result = results.rows.item(0).c;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).key : null;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var keys = [];\n\n                    for (var i = 0; i < results.rows.length; i++) {\n                        keys.push(results.rows.item(i).key);\n                    }\n\n                    resolve(keys);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n    return new Promise$1(function (resolve, reject) {\n        db.transaction(function (t) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n                var storeNames = [];\n\n                for (var i = 0; i < results.rows.length; i++) {\n                    storeNames.push(results.rows.item(i).name);\n                }\n\n                resolve({\n                    db: db,\n                    storeNames: storeNames\n                });\n            }, function (t, error) {\n                reject(error);\n            });\n        }, function (sqlError) {\n            reject(sqlError);\n        });\n    });\n}\n\nfunction dropInstance$1(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            var db;\n            if (options.name === currentConfig.name) {\n                // use the db reference of the current instance\n                db = self._dbInfo.db;\n            } else {\n                db = openDatabase(options.name, '', '', 0);\n            }\n\n            if (!options.storeName) {\n                // drop all database tables\n                resolve(getAllStoreNames(db));\n            } else {\n                resolve({\n                    db: db,\n                    storeNames: [options.storeName]\n                });\n            }\n        }).then(function (operationInfo) {\n            return new Promise$1(function (resolve, reject) {\n                operationInfo.db.transaction(function (t) {\n                    function dropTable(storeName) {\n                        return new Promise$1(function (resolve, reject) {\n                            t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n                                resolve();\n                            }, function (t, error) {\n                                reject(error);\n                            });\n                        });\n                    }\n\n                    var operations = [];\n                    for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n                        operations.push(dropTable(operationInfo.storeNames[i]));\n                    }\n\n                    Promise$1.all(operations).then(function () {\n                        resolve();\n                    })[\"catch\"](function (e) {\n                        reject(e);\n                    });\n                }, function (sqlError) {\n                    reject(sqlError);\n                });\n            });\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar webSQLStorage = {\n    _driver: 'webSQLStorage',\n    _initStorage: _initStorage$1,\n    _support: isWebSQLValid(),\n    iterate: iterate$1,\n    getItem: getItem$1,\n    setItem: setItem$1,\n    removeItem: removeItem$1,\n    clear: clear$1,\n    length: length$1,\n    key: key$1,\n    keys: keys$1,\n    dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n    try {\n        return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n        // in IE8 typeof localStorage.setItem === 'object'\n        !!localStorage.setItem;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n    var keyPrefix = options.name + '/';\n\n    if (options.storeName !== defaultConfig.storeName) {\n        keyPrefix += options.storeName + '/';\n    }\n    return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n    var localStorageTestKey = '_localforage_support_test';\n\n    try {\n        localStorage.setItem(localStorageTestKey, true);\n        localStorage.removeItem(localStorageTestKey);\n\n        return false;\n    } catch (e) {\n        return true;\n    }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n    return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n    var self = this;\n    var dbInfo = {};\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n    if (!_isLocalStorageUsable()) {\n        return Promise$1.reject();\n    }\n\n    self._dbInfo = dbInfo;\n    dbInfo.serializer = localforageSerializer;\n\n    return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var keyPrefix = self._dbInfo.keyPrefix;\n\n        for (var i = localStorage.length - 1; i >= 0; i--) {\n            var key = localStorage.key(i);\n\n            if (key.indexOf(keyPrefix) === 0) {\n                localStorage.removeItem(key);\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n        // If a result was found, parse it from the serialized\n        // string into a JS object. If result isn't truthy, the key\n        // is likely undefined and we'll pass it straight to the\n        // callback.\n        if (result) {\n            result = dbInfo.serializer.deserialize(result);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n    var self = this;\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var keyPrefix = dbInfo.keyPrefix;\n        var keyPrefixLength = keyPrefix.length;\n        var length = localStorage.length;\n\n        // We use a dedicated iterator instead of the `i` variable below\n        // so other keys we fetch in localStorage aren't counted in\n        // the `iterationNumber` argument passed to the `iterate()`\n        // callback.\n        //\n        // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n        var iterationNumber = 1;\n\n        for (var i = 0; i < length; i++) {\n            var key = localStorage.key(i);\n            if (key.indexOf(keyPrefix) !== 0) {\n                continue;\n            }\n            var value = localStorage.getItem(key);\n\n            // If a result was found, parse it from the serialized\n            // string into a JS object. If result isn't truthy, the\n            // key is likely undefined and we'll pass it straight\n            // to the iterator.\n            if (value) {\n                value = dbInfo.serializer.deserialize(value);\n            }\n\n            value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n            if (value !== void 0) {\n                return value;\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result;\n        try {\n            result = localStorage.key(n);\n        } catch (error) {\n            result = null;\n        }\n\n        // Remove the prefix from the key, if a key is found.\n        if (result) {\n            result = result.substring(dbInfo.keyPrefix.length);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var length = localStorage.length;\n        var keys = [];\n\n        for (var i = 0; i < length; i++) {\n            var itemKey = localStorage.key(i);\n            if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n                keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n            }\n        }\n\n        return keys;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n    var self = this;\n    var promise = self.keys().then(function (keys) {\n        return keys.length;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        localStorage.removeItem(dbInfo.keyPrefix + key);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        // Convert undefined values to null.\n        // https://github.com/mozilla/localForage/pull/42\n        if (value === undefined) {\n            value = null;\n        }\n\n        // Save the original value to pass to the callback.\n        var originalValue = value;\n\n        return new Promise$1(function (resolve, reject) {\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    try {\n                        localStorage.setItem(dbInfo.keyPrefix + key, value);\n                        resolve(originalValue);\n                    } catch (e) {\n                        // localStorage capacity exceeded.\n                        // TODO: Make this a specific error/event.\n                        if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n                            reject(e);\n                        }\n                        reject(e);\n                    }\n                }\n            });\n        });\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        var currentConfig = this.config();\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            if (!options.storeName) {\n                resolve(options.name + '/');\n            } else {\n                resolve(_getKeyPrefix(options, self._defaultConfig));\n            }\n        }).then(function (keyPrefix) {\n            for (var i = localStorage.length - 1; i >= 0; i--) {\n                var key = localStorage.key(i);\n\n                if (key.indexOf(keyPrefix) === 0) {\n                    localStorage.removeItem(key);\n                }\n            }\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar localStorageWrapper = {\n    _driver: 'localStorageWrapper',\n    _initStorage: _initStorage$2,\n    _support: isLocalStorageValid(),\n    iterate: iterate$2,\n    getItem: getItem$2,\n    setItem: setItem$2,\n    removeItem: removeItem$2,\n    clear: clear$2,\n    length: length$2,\n    key: key$2,\n    keys: keys$2,\n    dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n    return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n    var len = array.length;\n    var i = 0;\n    while (i < len) {\n        if (sameValue(array[i], searchElement)) {\n            return true;\n        }\n        i++;\n    }\n\n    return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n    return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n    INDEXEDDB: asyncStorage,\n    WEBSQL: webSQLStorage,\n    LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n    description: '',\n    driver: DefaultDriverOrder.slice(),\n    name: 'localforage',\n    // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n    // we can use without a prompt.\n    size: 4980736,\n    storeName: 'keyvaluepairs',\n    version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n    localForageInstance[libraryMethod] = function () {\n        var _args = arguments;\n        return localForageInstance.ready().then(function () {\n            return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n        });\n    };\n}\n\nfunction extend() {\n    for (var i = 1; i < arguments.length; i++) {\n        var arg = arguments[i];\n\n        if (arg) {\n            for (var _key in arg) {\n                if (arg.hasOwnProperty(_key)) {\n                    if (isArray(arg[_key])) {\n                        arguments[0][_key] = arg[_key].slice();\n                    } else {\n                        arguments[0][_key] = arg[_key];\n                    }\n                }\n            }\n        }\n    }\n\n    return arguments[0];\n}\n\nvar LocalForage = function () {\n    function LocalForage(options) {\n        _classCallCheck(this, LocalForage);\n\n        for (var driverTypeKey in DefaultDrivers) {\n            if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n                var driver = DefaultDrivers[driverTypeKey];\n                var driverName = driver._driver;\n                this[driverTypeKey] = driverName;\n\n                if (!DefinedDrivers[driverName]) {\n                    // we don't need to wait for the promise,\n                    // since the default drivers can be defined\n                    // in a blocking manner\n                    this.defineDriver(driver);\n                }\n            }\n        }\n\n        this._defaultConfig = extend({}, DefaultConfig);\n        this._config = extend({}, this._defaultConfig, options);\n        this._driverSet = null;\n        this._initDriver = null;\n        this._ready = false;\n        this._dbInfo = null;\n\n        this._wrapLibraryMethodsWithReady();\n        this.setDriver(this._config.driver)[\"catch\"](function () {});\n    }\n\n    // Set any config values for localForage; can be called anytime before\n    // the first API call (e.g. `getItem`, `setItem`).\n    // We loop through options so we don't overwrite existing config\n    // values.\n\n\n    LocalForage.prototype.config = function config(options) {\n        // If the options argument is an object, we use it to set values.\n        // Otherwise, we return either a specified config value or all\n        // config values.\n        if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n            // If localforage is ready and fully initialized, we can't set\n            // any new configuration values. Instead, we return an error.\n            if (this._ready) {\n                return new Error(\"Can't call config() after localforage \" + 'has been used.');\n            }\n\n            for (var i in options) {\n                if (i === 'storeName') {\n                    options[i] = options[i].replace(/\\W/g, '_');\n                }\n\n                if (i === 'version' && typeof options[i] !== 'number') {\n                    return new Error('Database version must be a number.');\n                }\n\n                this._config[i] = options[i];\n            }\n\n            // after all config options are set and\n            // the driver option is used, try setting it\n            if ('driver' in options && options.driver) {\n                return this.setDriver(this._config.driver);\n            }\n\n            return true;\n        } else if (typeof options === 'string') {\n            return this._config[options];\n        } else {\n            return this._config;\n        }\n    };\n\n    // Used to define a custom driver, shared across all instances of\n    // localForage.\n\n\n    LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n        var promise = new Promise$1(function (resolve, reject) {\n            try {\n                var driverName = driverObject._driver;\n                var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n                // A driver name should be defined and not overlap with the\n                // library-defined, default drivers.\n                if (!driverObject._driver) {\n                    reject(complianceError);\n                    return;\n                }\n\n                var driverMethods = LibraryMethods.concat('_initStorage');\n                for (var i = 0, len = driverMethods.length; i < len; i++) {\n                    var driverMethodName = driverMethods[i];\n\n                    // when the property is there,\n                    // it should be a method even when optional\n                    var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n                    if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n                        reject(complianceError);\n                        return;\n                    }\n                }\n\n                var configureMissingMethods = function configureMissingMethods() {\n                    var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n                        return function () {\n                            var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n                            var promise = Promise$1.reject(error);\n                            executeCallback(promise, arguments[arguments.length - 1]);\n                            return promise;\n                        };\n                    };\n\n                    for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n                        var optionalDriverMethod = OptionalDriverMethods[_i];\n                        if (!driverObject[optionalDriverMethod]) {\n                            driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n                        }\n                    }\n                };\n\n                configureMissingMethods();\n\n                var setDriverSupport = function setDriverSupport(support) {\n                    if (DefinedDrivers[driverName]) {\n                        console.info('Redefining LocalForage driver: ' + driverName);\n                    }\n                    DefinedDrivers[driverName] = driverObject;\n                    DriverSupport[driverName] = support;\n                    // don't use a then, so that we can define\n                    // drivers that have simple _support methods\n                    // in a blocking manner\n                    resolve();\n                };\n\n                if ('_support' in driverObject) {\n                    if (driverObject._support && typeof driverObject._support === 'function') {\n                        driverObject._support().then(setDriverSupport, reject);\n                    } else {\n                        setDriverSupport(!!driverObject._support);\n                    }\n                } else {\n                    setDriverSupport(true);\n                }\n            } catch (e) {\n                reject(e);\n            }\n        });\n\n        executeTwoCallbacks(promise, callback, errorCallback);\n        return promise;\n    };\n\n    LocalForage.prototype.driver = function driver() {\n        return this._driver || null;\n    };\n\n    LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n        var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n        executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n        return getDriverPromise;\n    };\n\n    LocalForage.prototype.getSerializer = function getSerializer(callback) {\n        var serializerPromise = Promise$1.resolve(localforageSerializer);\n        executeTwoCallbacks(serializerPromise, callback);\n        return serializerPromise;\n    };\n\n    LocalForage.prototype.ready = function ready(callback) {\n        var self = this;\n\n        var promise = self._driverSet.then(function () {\n            if (self._ready === null) {\n                self._ready = self._initDriver();\n            }\n\n            return self._ready;\n        });\n\n        executeTwoCallbacks(promise, callback, callback);\n        return promise;\n    };\n\n    LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n        var self = this;\n\n        if (!isArray(drivers)) {\n            drivers = [drivers];\n        }\n\n        var supportedDrivers = this._getSupportedDrivers(drivers);\n\n        function setDriverToConfig() {\n            self._config.driver = self.driver();\n        }\n\n        function extendSelfWithDriver(driver) {\n            self._extend(driver);\n            setDriverToConfig();\n\n            self._ready = self._initStorage(self._config);\n            return self._ready;\n        }\n\n        function initDriver(supportedDrivers) {\n            return function () {\n                var currentDriverIndex = 0;\n\n                function driverPromiseLoop() {\n                    while (currentDriverIndex < supportedDrivers.length) {\n                        var driverName = supportedDrivers[currentDriverIndex];\n                        currentDriverIndex++;\n\n                        self._dbInfo = null;\n                        self._ready = null;\n\n                        return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n                    }\n\n                    setDriverToConfig();\n                    var error = new Error('No available storage method found.');\n                    self._driverSet = Promise$1.reject(error);\n                    return self._driverSet;\n                }\n\n                return driverPromiseLoop();\n            };\n        }\n\n        // There might be a driver initialization in progress\n        // so wait for it to finish in order to avoid a possible\n        // race condition to set _dbInfo\n        var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n            return Promise$1.resolve();\n        }) : Promise$1.resolve();\n\n        this._driverSet = oldDriverSetDone.then(function () {\n            var driverName = supportedDrivers[0];\n            self._dbInfo = null;\n            self._ready = null;\n\n            return self.getDriver(driverName).then(function (driver) {\n                self._driver = driver._driver;\n                setDriverToConfig();\n                self._wrapLibraryMethodsWithReady();\n                self._initDriver = initDriver(supportedDrivers);\n            });\n        })[\"catch\"](function () {\n            setDriverToConfig();\n            var error = new Error('No available storage method found.');\n            self._driverSet = Promise$1.reject(error);\n            return self._driverSet;\n        });\n\n        executeTwoCallbacks(this._driverSet, callback, errorCallback);\n        return this._driverSet;\n    };\n\n    LocalForage.prototype.supports = function supports(driverName) {\n        return !!DriverSupport[driverName];\n    };\n\n    LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n        extend(this, libraryMethodsAndProperties);\n    };\n\n    LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n        var supportedDrivers = [];\n        for (var i = 0, len = drivers.length; i < len; i++) {\n            var driverName = drivers[i];\n            if (this.supports(driverName)) {\n                supportedDrivers.push(driverName);\n            }\n        }\n        return supportedDrivers;\n    };\n\n    LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n        // Add a stub for each driver API method that delays the call to the\n        // corresponding driver method until localForage is ready. These stubs\n        // will be replaced by the driver methods as soon as the driver is\n        // loaded, so there is no performance impact.\n        for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n            callWhenReady(this, LibraryMethods[i]);\n        }\n    };\n\n    LocalForage.prototype.createInstance = function createInstance(options) {\n        return new LocalForage(options);\n    };\n\n    return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n"],"sourceRoot":""}