logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

oAJy.2d5429b2.js.map (135861B)


  1. {"version":3,"sources":["webpack:///./node_modules/localforage/dist/localforage.js"],"names":["global","require","module","exports","e","t","n","r","s","o","u","a","i","f","Error","code","l","call","length","1","_dereq_","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","observer","nextTick","element","document","createTextNode","observe","characterData","data","setImmediate","MessageChannel","createElement","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","appendChild","setTimeout","channel","port1","onmessage","port2","postMessage","queue","oldQueue","len","task","push","this","self","window","2","immediate","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","Promise","resolver","TypeError","state","outcome","safelyResolveThenable","QueueItem","promise","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","func","value","returnValue","reject","resolve","getThen","obj","then","apply","arguments","thenable","onError","onSuccess","result","tryCatch","status","out","prototype","constructor","error","reason","all","iterable","Object","toString","values","Array","resolved","allResolver","outValue","race","response","3","4","_typeof","Symbol","iterator","idb","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","getIDB","createBlob","parts","properties","Blob","name","Builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","builder","append","getBlob","type","Promise$1","executeCallback","callback","executeTwoCallbacks","errorCallback","normalizeKey","key","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","close","dbArgs","version","openreq","open","onupgradeneeded","createObjectStore","storeName","oldVersion","ex","newVersion","onerror","onsuccess","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isDowngrade","isUpgrade","incVersion","_decodeBlob","encodedBlob","arrayBuff","bin","buf","ArrayBuffer","arr","Uint8Array","charCodeAt","_binStringToArrayBuffer","atob","_isEncodedBlob","__local_forage_encoded_blob","_fullyReady","_initReady","_dbInfo","createTransaction","mode","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","store","req","openCursor","iterationNumber","cursor","getItem","get","setItem","blobSupport","reader","FileReader","onloadend","base64","btoa","target","readAsBinaryString","_encodeBlob","removeItem","clear","count","advanced","openKeyCursor","advance","keys","dropInstance","currentConfig","config","isCurrentDb","dbPromise","dropObjectPromise","deleteObjectStore","_forage2","dropDBPromise","deleteDatabase","onblocked","_forage","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","p","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","c","storeNames","getAllStoreNames","operationInfo","dropTable","operations","_getKeyPrefix","defaultConfig","keyPrefix","_isLocalStorageUsable","localStorage","checkIfLocalStorageThrows","localStorageWrapper","isLocalStorageValid","keyPrefixLength","itemKey","sameValue","x","y","isNaN","includes","array","searchElement","isArray","arg","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","concat","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","hasOwnProperty","LocalForage","driverTypeKey","instance","Constructor","_classCallCheck","driverName","defineDriver","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","replace","driverObject","complianceError","driverMethods","driverMethodName","isRequired","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","localforage_js"],"mappings":"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","file":"static/js/oAJy.2d5429b2.js","sourcesContent":["/*!\n localForage -- Offline Storage, Improved\n Version 1.9.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 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 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 = 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":""}