vue-files-preview-inno
Version:
A tool for previewing files such as doc, excel, pdf, image, markdown, txt, audio, and video and so on.
1 lines • 149 kB
Source Map (JSON)
{"version":3,"file":"localforage.mjs","sources":["../../../../../node_modules/localforage/dist/localforage.js"],"sourcesContent":["/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\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 || !idb.open) {\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\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\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 var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\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 returns 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.openKeyCursor();\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.openKeyCursor();\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 = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\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"],"names":["f","module","e","t","n","r","s","o","u","a","require","i","l","_dereq_","exports","global","Mutation","scheduleDrain","called","observer","nextTick","element","channel","scriptEl","draining","queue","oldQueue","len","immediate","task","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","Promise","resolver","safelyResolveThenable","onRejected","onFulfilled","promise","unwrap","QueueItem","value","func","returnValue","self","result","tryCatch","getThen","thenable","error","obj","then","onError","onSuccess","tryToUnwrap","out","resolve","reject","reason","all","iterable","values","resolved","allResolver","resolveFromAll","outValue","race","response","_typeof","_classCallCheck","instance","Constructor","getIDB","idb","isIndexedDBValid","isSafari","hasFetch","createBlob","parts","properties","Builder","builder","Promise$1","executeCallback","callback","executeTwoCallbacks","errorCallback","normalizeKey","key","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","toString","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","length","buf","arr","_checkBlobSupportWithoutCaching","txn","blob","matchedChrome","matchedEdge","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","_advanceReadiness","_rejectReadiness","err","_getConnection","upgradeNeeded","createDbContext","dbArgs","openreq","db","ex","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","base64","_decodeBlob","encodedBlob","arrayBuff","_isEncodedBlob","_fullyReady","_tryReconnect","forages","forage","createTransaction","mode","retries","tx","_initStorage","options","initPromises","ignoreErrors","j","k","getItem","transaction","store","req","iterate","iterator","iterationNumber","cursor","setItem","blobSupport","removeItem","clear","advanced","keys","dropInstance","currentConfig","isCurrentDb","dbPromise","newVersion","dropObjectPromise","_forage2","dropDBPromise","_forage","asyncStorage","isWebSQLValid","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","bufferLength","p","encoded1","encoded2","encoded3","encoded4","buffer","bytes","bufferToString","base64String","serialize","valueType","marker","fileReader","str","deserialize","type","blobType","matcher","localforageSerializer","createDbTable","_initStorage$1","dbInfoPromise","tryExecuteSql","sqlStatement","args","results","getItem$1","iterate$1","rows","item","_setItem","retriesLeft","originalValue","sqlError","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","storeName","operations","webSQLStorage","isLocalStorageValid","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","x","y","includes","array","searchElement","isArray","arg","DefinedDrivers","DriverSupport","DefaultDrivers","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","LocalForage","driverTypeKey","driver","driverName","driverObject","complianceError","driverMethods","driverMethodName","isRequired","configureMissingMethods","methodNotImplementedFactory","methodName","_i","_len","optionalDriverMethod","setDriverSupport","support","getDriverPromise","serializerPromise","drivers","supportedDrivers","setDriverToConfig","extendSelfWithDriver","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","libraryMethodsAndProperties","localforage_js"],"mappings":"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","x_google_ignoreList":[0]}