You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1814 lines
70 KiB
1814 lines
70 KiB
/*!
|
|
localForage -- Offline Storage, Improved
|
|
Version 1.10.0
|
|
https://localforage.github.io/localForage
|
|
(c) 2013-2017 Mozilla, Apache License 2.0
|
|
*/
|
|
!function(a) {
|
|
if ("object" == typeof exports && "undefined" != typeof module)
|
|
module.exports = a();
|
|
else if ("function" == typeof define && define.amd)
|
|
define([], a);
|
|
else {
|
|
var b;
|
|
b = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this,
|
|
b.localforage = a()
|
|
}
|
|
}(function() {
|
|
return function a(b, c, d) {
|
|
function e(g, h) {
|
|
if (!c[g]) {
|
|
if (!b[g]) {
|
|
var i = "function" == typeof require && require;
|
|
if (!h && i)
|
|
return i(g, !0);
|
|
if (f)
|
|
return f(g, !0);
|
|
var j = new Error("Cannot find module '" + g + "'");
|
|
throw j.code = "MODULE_NOT_FOUND",
|
|
j
|
|
}
|
|
var k = c[g] = {
|
|
exports: {}
|
|
};
|
|
b[g][0].call(k.exports, function(a) {
|
|
var c = b[g][1][a];
|
|
return e(c || a)
|
|
}, k, k.exports, a, b, c, d)
|
|
}
|
|
return c[g].exports
|
|
}
|
|
for (var f = "function" == typeof require && require, g = 0; g < d.length; g++)
|
|
e(d[g]);
|
|
return e
|
|
}({
|
|
1: [function(a, b, c) {
|
|
(function(a) {
|
|
"use strict";
|
|
function c() {
|
|
k = !0;
|
|
for (var a, b, c = l.length; c; ) {
|
|
for (b = l,
|
|
l = [],
|
|
a = -1; ++a < c; )
|
|
b[a]();
|
|
c = l.length
|
|
}
|
|
k = !1
|
|
}
|
|
function d(a) {
|
|
1 !== l.push(a) || k || e()
|
|
}
|
|
var e, f = a.MutationObserver || a.WebKitMutationObserver;
|
|
if (f) {
|
|
var g = 0
|
|
, h = new f(c)
|
|
, i = a.document.createTextNode("");
|
|
h.observe(i, {
|
|
characterData: !0
|
|
}),
|
|
e = function() {
|
|
i.data = g = ++g % 2
|
|
}
|
|
} else if (a.setImmediate || void 0 === a.MessageChannel)
|
|
e = "document"in a && "onreadystatechange"in a.document.createElement("script") ? function() {
|
|
var b = a.document.createElement("script");
|
|
b.onreadystatechange = function() {
|
|
c(),
|
|
b.onreadystatechange = null,
|
|
b.parentNode.removeChild(b),
|
|
b = null
|
|
}
|
|
,
|
|
a.document.documentElement.appendChild(b)
|
|
}
|
|
: function() {
|
|
setTimeout(c, 0)
|
|
}
|
|
;
|
|
else {
|
|
var j = new a.MessageChannel;
|
|
j.port1.onmessage = c,
|
|
e = function() {
|
|
j.port2.postMessage(0)
|
|
}
|
|
}
|
|
var k, l = [];
|
|
b.exports = d
|
|
}
|
|
).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
|
|
}
|
|
, {}],
|
|
2: [function(a, b, c) {
|
|
"use strict";
|
|
function d() {}
|
|
function e(a) {
|
|
if ("function" != typeof a)
|
|
throw new TypeError("resolver must be a function");
|
|
this.state = s,
|
|
this.queue = [],
|
|
this.outcome = void 0,
|
|
a !== d && i(this, a)
|
|
}
|
|
function f(a, b, c) {
|
|
this.promise = a,
|
|
"function" == typeof b && (this.onFulfilled = b,
|
|
this.callFulfilled = this.otherCallFulfilled),
|
|
"function" == typeof c && (this.onRejected = c,
|
|
this.callRejected = this.otherCallRejected)
|
|
}
|
|
function g(a, b, c) {
|
|
o(function() {
|
|
var d;
|
|
try {
|
|
d = b(c)
|
|
} catch (b) {
|
|
return p.reject(a, b)
|
|
}
|
|
d === a ? p.reject(a, new TypeError("Cannot resolve promise with itself")) : p.resolve(a, d)
|
|
})
|
|
}
|
|
function h(a) {
|
|
var b = a && a.then;
|
|
if (a && ("object" == typeof a || "function" == typeof a) && "function" == typeof b)
|
|
return function() {
|
|
b.apply(a, arguments)
|
|
}
|
|
}
|
|
function i(a, b) {
|
|
function c(b) {
|
|
f || (f = !0,
|
|
p.reject(a, b))
|
|
}
|
|
function d(b) {
|
|
f || (f = !0,
|
|
p.resolve(a, b))
|
|
}
|
|
function e() {
|
|
b(d, c)
|
|
}
|
|
var f = !1
|
|
, g = j(e);
|
|
"error" === g.status && c(g.value)
|
|
}
|
|
function j(a, b) {
|
|
var c = {};
|
|
try {
|
|
c.value = a(b),
|
|
c.status = "success"
|
|
} catch (a) {
|
|
c.status = "error",
|
|
c.value = a
|
|
}
|
|
return c
|
|
}
|
|
function k(a) {
|
|
return a instanceof this ? a : p.resolve(new this(d), a)
|
|
}
|
|
function l(a) {
|
|
var b = new this(d);
|
|
return p.reject(b, a)
|
|
}
|
|
function m(a) {
|
|
function b(a, b) {
|
|
function d(a) {
|
|
g[b] = a,
|
|
++h !== e || f || (f = !0,
|
|
p.resolve(j, g))
|
|
}
|
|
c.resolve(a).then(d, function(a) {
|
|
f || (f = !0,
|
|
p.reject(j, a))
|
|
})
|
|
}
|
|
var c = this;
|
|
if ("[object Array]" !== Object.prototype.toString.call(a))
|
|
return this.reject(new TypeError("must be an array"));
|
|
var e = a.length
|
|
, f = !1;
|
|
if (!e)
|
|
return this.resolve([]);
|
|
for (var g = new Array(e), h = 0, i = -1, j = new this(d); ++i < e; )
|
|
b(a[i], i);
|
|
return j
|
|
}
|
|
function n(a) {
|
|
function b(a) {
|
|
c.resolve(a).then(function(a) {
|
|
f || (f = !0,
|
|
p.resolve(h, a))
|
|
}, function(a) {
|
|
f || (f = !0,
|
|
p.reject(h, a))
|
|
})
|
|
}
|
|
var c = this;
|
|
if ("[object Array]" !== Object.prototype.toString.call(a))
|
|
return this.reject(new TypeError("must be an array"));
|
|
var e = a.length
|
|
, f = !1;
|
|
if (!e)
|
|
return this.resolve([]);
|
|
for (var g = -1, h = new this(d); ++g < e; )
|
|
b(a[g]);
|
|
return h
|
|
}
|
|
var o = a(1)
|
|
, p = {}
|
|
, q = ["REJECTED"]
|
|
, r = ["FULFILLED"]
|
|
, s = ["PENDING"];
|
|
b.exports = e,
|
|
e.prototype.catch = function(a) {
|
|
return this.then(null, a)
|
|
}
|
|
,
|
|
e.prototype.then = function(a, b) {
|
|
if ("function" != typeof a && this.state === r || "function" != typeof b && this.state === q)
|
|
return this;
|
|
var c = new this.constructor(d);
|
|
if (this.state !== s) {
|
|
g(c, this.state === r ? a : b, this.outcome)
|
|
} else
|
|
this.queue.push(new f(c,a,b));
|
|
return c
|
|
}
|
|
,
|
|
f.prototype.callFulfilled = function(a) {
|
|
p.resolve(this.promise, a)
|
|
}
|
|
,
|
|
f.prototype.otherCallFulfilled = function(a) {
|
|
g(this.promise, this.onFulfilled, a)
|
|
}
|
|
,
|
|
f.prototype.callRejected = function(a) {
|
|
p.reject(this.promise, a)
|
|
}
|
|
,
|
|
f.prototype.otherCallRejected = function(a) {
|
|
g(this.promise, this.onRejected, a)
|
|
}
|
|
,
|
|
p.resolve = function(a, b) {
|
|
var c = j(h, b);
|
|
if ("error" === c.status)
|
|
return p.reject(a, c.value);
|
|
var d = c.value;
|
|
if (d)
|
|
i(a, d);
|
|
else {
|
|
a.state = r,
|
|
a.outcome = b;
|
|
for (var e = -1, f = a.queue.length; ++e < f; )
|
|
a.queue[e].callFulfilled(b)
|
|
}
|
|
return a
|
|
}
|
|
,
|
|
p.reject = function(a, b) {
|
|
a.state = q,
|
|
a.outcome = b;
|
|
for (var c = -1, d = a.queue.length; ++c < d; )
|
|
a.queue[c].callRejected(b);
|
|
return a
|
|
}
|
|
,
|
|
e.resolve = k,
|
|
e.reject = l,
|
|
e.all = m,
|
|
e.race = n
|
|
}
|
|
, {
|
|
1: 1
|
|
}],
|
|
3: [function(a, b, c) {
|
|
(function(b) {
|
|
"use strict";
|
|
"function" != typeof b.Promise && (b.Promise = a(2))
|
|
}
|
|
).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
|
|
}
|
|
, {
|
|
2: 2
|
|
}],
|
|
4: [function(a, b, c) {
|
|
"use strict";
|
|
function d(a, b) {
|
|
if (!(a instanceof b))
|
|
throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
function e() {
|
|
try {
|
|
if ("undefined" != typeof indexedDB)
|
|
return indexedDB;
|
|
if ("undefined" != typeof webkitIndexedDB)
|
|
return webkitIndexedDB;
|
|
if ("undefined" != typeof mozIndexedDB)
|
|
return mozIndexedDB;
|
|
if ("undefined" != typeof OIndexedDB)
|
|
return OIndexedDB;
|
|
if ("undefined" != typeof msIndexedDB)
|
|
return msIndexedDB
|
|
} catch (a) {
|
|
return
|
|
}
|
|
}
|
|
function f() {
|
|
try {
|
|
if (!ua || !ua.open)
|
|
return !1;
|
|
var a = "undefined" != typeof openDatabase && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform)
|
|
, b = "function" == typeof fetch && -1 !== fetch.toString().indexOf("[native code");
|
|
return (!a || b) && "undefined" != typeof indexedDB && "undefined" != typeof IDBKeyRange
|
|
} catch (a) {
|
|
return !1
|
|
}
|
|
}
|
|
function g(a, b) {
|
|
a = a || [],
|
|
b = b || {};
|
|
try {
|
|
return new Blob(a,b)
|
|
} catch (f) {
|
|
if ("TypeError" !== f.name)
|
|
throw f;
|
|
for (var c = "undefined" != typeof BlobBuilder ? BlobBuilder : "undefined" != typeof MSBlobBuilder ? MSBlobBuilder : "undefined" != typeof MozBlobBuilder ? MozBlobBuilder : WebKitBlobBuilder, d = new c, e = 0; e < a.length; e += 1)
|
|
d.append(a[e]);
|
|
return d.getBlob(b.type)
|
|
}
|
|
}
|
|
function h(a, b) {
|
|
b && a.then(function(a) {
|
|
b(null, a)
|
|
}, function(a) {
|
|
b(a)
|
|
})
|
|
}
|
|
function i(a, b, c) {
|
|
"function" == typeof b && a.then(b),
|
|
"function" == typeof c && a.catch(c)
|
|
}
|
|
function j(a) {
|
|
return "string" != typeof a && (console.warn(a + " used as a key, but it is not a string."),
|
|
a = String(a)),
|
|
a
|
|
}
|
|
function k() {
|
|
if (arguments.length && "function" == typeof arguments[arguments.length - 1])
|
|
return arguments[arguments.length - 1]
|
|
}
|
|
function l(a) {
|
|
for (var b = a.length, c = new ArrayBuffer(b), d = new Uint8Array(c), e = 0; e < b; e++)
|
|
d[e] = a.charCodeAt(e);
|
|
return c
|
|
}
|
|
function m(a) {
|
|
return new va(function(b) {
|
|
var c = a.transaction(wa, Ba)
|
|
, d = g([""]);
|
|
c.objectStore(wa).put(d, "key"),
|
|
c.onabort = function(a) {
|
|
a.preventDefault(),
|
|
a.stopPropagation(),
|
|
b(!1)
|
|
}
|
|
,
|
|
c.oncomplete = function() {
|
|
var a = navigator.userAgent.match(/Chrome\/(\d+)/)
|
|
, c = navigator.userAgent.match(/Edge\//);
|
|
b(c || !a || parseInt(a[1], 10) >= 43)
|
|
}
|
|
}
|
|
).catch(function() {
|
|
return !1
|
|
})
|
|
}
|
|
function n(a) {
|
|
return "boolean" == typeof xa ? va.resolve(xa) : m(a).then(function(a) {
|
|
return xa = a
|
|
})
|
|
}
|
|
function o(a) {
|
|
var b = ya[a.name]
|
|
, c = {};
|
|
c.promise = new va(function(a, b) {
|
|
c.resolve = a,
|
|
c.reject = b
|
|
}
|
|
),
|
|
b.deferredOperations.push(c),
|
|
b.dbReady ? b.dbReady = b.dbReady.then(function() {
|
|
return c.promise
|
|
}) : b.dbReady = c.promise
|
|
}
|
|
function p(a) {
|
|
var b = ya[a.name]
|
|
, c = b.deferredOperations.pop();
|
|
if (c)
|
|
return c.resolve(),
|
|
c.promise
|
|
}
|
|
function q(a, b) {
|
|
var c = ya[a.name]
|
|
, d = c.deferredOperations.pop();
|
|
if (d)
|
|
return d.reject(b),
|
|
d.promise
|
|
}
|
|
function r(a, b) {
|
|
return new va(function(c, d) {
|
|
if (ya[a.name] = ya[a.name] || B(),
|
|
a.db) {
|
|
if (!b)
|
|
return c(a.db);
|
|
o(a),
|
|
a.db.close()
|
|
}
|
|
var e = [a.name];
|
|
b && e.push(a.version);
|
|
var f = ua.open.apply(ua, e);
|
|
b && (f.onupgradeneeded = function(b) {
|
|
var c = f.result;
|
|
try {
|
|
c.createObjectStore(a.storeName),
|
|
b.oldVersion <= 1 && c.createObjectStore(wa)
|
|
} catch (c) {
|
|
if ("ConstraintError" !== c.name)
|
|
throw c;
|
|
console.warn('The database "' + a.name + '" has been upgraded from version ' + b.oldVersion + " to version " + b.newVersion + ', but the storage "' + a.storeName + '" already exists.')
|
|
}
|
|
}
|
|
),
|
|
f.onerror = function(a) {
|
|
a.preventDefault(),
|
|
d(f.error)
|
|
}
|
|
,
|
|
f.onsuccess = function() {
|
|
var b = f.result;
|
|
b.onversionchange = function(a) {
|
|
a.target.close()
|
|
}
|
|
,
|
|
c(b),
|
|
p(a)
|
|
}
|
|
}
|
|
)
|
|
}
|
|
function s(a) {
|
|
return r(a, !1)
|
|
}
|
|
function t(a) {
|
|
return r(a, !0)
|
|
}
|
|
function u(a, b) {
|
|
if (!a.db)
|
|
return !0;
|
|
var c = !a.db.objectStoreNames.contains(a.storeName)
|
|
, d = a.version < a.db.version
|
|
, e = a.version > a.db.version;
|
|
if (d && (a.version !== b && console.warn('The database "' + a.name + "\" can't be downgraded from version " + a.db.version + " to version " + a.version + "."),
|
|
a.version = a.db.version),
|
|
e || c) {
|
|
if (c) {
|
|
var f = a.db.version + 1;
|
|
f > a.version && (a.version = f)
|
|
}
|
|
return !0
|
|
}
|
|
return !1
|
|
}
|
|
function v(a) {
|
|
return new va(function(b, c) {
|
|
var d = new FileReader;
|
|
d.onerror = c,
|
|
d.onloadend = function(c) {
|
|
var d = btoa(c.target.result || "");
|
|
b({
|
|
__local_forage_encoded_blob: !0,
|
|
data: d,
|
|
type: a.type
|
|
})
|
|
}
|
|
,
|
|
d.readAsBinaryString(a)
|
|
}
|
|
)
|
|
}
|
|
function w(a) {
|
|
return g([l(atob(a.data))], {
|
|
type: a.type
|
|
})
|
|
}
|
|
function x(a) {
|
|
return a && a.__local_forage_encoded_blob
|
|
}
|
|
function y(a) {
|
|
var b = this
|
|
, c = b._initReady().then(function() {
|
|
var a = ya[b._dbInfo.name];
|
|
if (a && a.dbReady)
|
|
return a.dbReady
|
|
});
|
|
return i(c, a, a),
|
|
c
|
|
}
|
|
function z(a) {
|
|
o(a);
|
|
for (var b = ya[a.name], c = b.forages, d = 0; d < c.length; d++) {
|
|
var e = c[d];
|
|
e._dbInfo.db && (e._dbInfo.db.close(),
|
|
e._dbInfo.db = null)
|
|
}
|
|
return a.db = null,
|
|
s(a).then(function(b) {
|
|
return a.db = b,
|
|
u(a) ? t(a) : b
|
|
}).then(function(d) {
|
|
a.db = b.db = d;
|
|
for (var e = 0; e < c.length; e++)
|
|
c[e]._dbInfo.db = d
|
|
}).catch(function(b) {
|
|
throw q(a, b),
|
|
b
|
|
})
|
|
}
|
|
function A(a, b, c, d) {
|
|
void 0 === d && (d = 1);
|
|
try {
|
|
var e = a.db.transaction(a.storeName, b);
|
|
c(null, e)
|
|
} catch (e) {
|
|
if (d > 0 && (!a.db || "InvalidStateError" === e.name || "NotFoundError" === e.name))
|
|
return va.resolve().then(function() {
|
|
if (!a.db || "NotFoundError" === e.name && !a.db.objectStoreNames.contains(a.storeName) && a.version <= a.db.version)
|
|
return a.db && (a.version = a.db.version + 1),
|
|
t(a)
|
|
}).then(function() {
|
|
return z(a).then(function() {
|
|
A(a, b, c, d - 1)
|
|
})
|
|
}).catch(c);
|
|
c(e)
|
|
}
|
|
}
|
|
function B() {
|
|
return {
|
|
forages: [],
|
|
db: null,
|
|
dbReady: null,
|
|
deferredOperations: []
|
|
}
|
|
}
|
|
function C(a) {
|
|
function b() {
|
|
return va.resolve()
|
|
}
|
|
var c = this
|
|
, d = {
|
|
db: null
|
|
};
|
|
if (a)
|
|
for (var e in a)
|
|
d[e] = a[e];
|
|
var f = ya[d.name];
|
|
f || (f = B(),
|
|
ya[d.name] = f),
|
|
f.forages.push(c),
|
|
c._initReady || (c._initReady = c.ready,
|
|
c.ready = y);
|
|
for (var g = [], h = 0; h < f.forages.length; h++) {
|
|
var i = f.forages[h];
|
|
i !== c && g.push(i._initReady().catch(b))
|
|
}
|
|
var j = f.forages.slice(0);
|
|
return va.all(g).then(function() {
|
|
return d.db = f.db,
|
|
s(d)
|
|
}).then(function(a) {
|
|
return d.db = a,
|
|
u(d, c._defaultConfig.version) ? t(d) : a
|
|
}).then(function(a) {
|
|
d.db = f.db = a,
|
|
c._dbInfo = d;
|
|
for (var b = 0; b < j.length; b++) {
|
|
var e = j[b];
|
|
e !== c && (e._dbInfo.db = d.db,
|
|
e._dbInfo.version = d.version)
|
|
}
|
|
})
|
|
}
|
|
function D(a, b) {
|
|
var c = this;
|
|
a = j(a);
|
|
var d = new va(function(b, d) {
|
|
c.ready().then(function() {
|
|
A(c._dbInfo, Aa, function(e, f) {
|
|
if (e)
|
|
return d(e);
|
|
try {
|
|
var g = f.objectStore(c._dbInfo.storeName)
|
|
, h = g.get(a);
|
|
h.onsuccess = function() {
|
|
var a = h.result;
|
|
void 0 === a && (a = null),
|
|
x(a) && (a = w(a)),
|
|
b(a)
|
|
}
|
|
,
|
|
h.onerror = function() {
|
|
d(h.error)
|
|
}
|
|
} catch (a) {
|
|
d(a)
|
|
}
|
|
})
|
|
}).catch(d)
|
|
}
|
|
);
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function E(a, b) {
|
|
var c = this
|
|
, d = new va(function(b, d) {
|
|
c.ready().then(function() {
|
|
A(c._dbInfo, Aa, function(e, f) {
|
|
if (e)
|
|
return d(e);
|
|
try {
|
|
var g = f.objectStore(c._dbInfo.storeName)
|
|
, h = g.openCursor()
|
|
, i = 1;
|
|
h.onsuccess = function() {
|
|
var c = h.result;
|
|
if (c) {
|
|
var d = c.value;
|
|
x(d) && (d = w(d));
|
|
var e = a(d, c.key, i++);
|
|
void 0 !== e ? b(e) : c.continue()
|
|
} else
|
|
b()
|
|
}
|
|
,
|
|
h.onerror = function() {
|
|
d(h.error)
|
|
}
|
|
} catch (a) {
|
|
d(a)
|
|
}
|
|
})
|
|
}).catch(d)
|
|
}
|
|
);
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function F(a, b, c) {
|
|
var d = this;
|
|
a = j(a);
|
|
var e = new va(function(c, e) {
|
|
var f;
|
|
d.ready().then(function() {
|
|
return f = d._dbInfo,
|
|
"[object Blob]" === za.call(b) ? n(f.db).then(function(a) {
|
|
return a ? b : v(b)
|
|
}) : b
|
|
}).then(function(b) {
|
|
A(d._dbInfo, Ba, function(f, g) {
|
|
if (f)
|
|
return e(f);
|
|
try {
|
|
var h = g.objectStore(d._dbInfo.storeName);
|
|
null === b && (b = void 0);
|
|
var i = h.put(b, a);
|
|
g.oncomplete = function() {
|
|
void 0 === b && (b = null),
|
|
c(b)
|
|
}
|
|
,
|
|
g.onabort = g.onerror = function() {
|
|
var a = i.error ? i.error : i.transaction.error;
|
|
e(a)
|
|
}
|
|
} catch (a) {
|
|
e(a)
|
|
}
|
|
})
|
|
}).catch(e)
|
|
}
|
|
);
|
|
return h(e, c),
|
|
e
|
|
}
|
|
function G(a, b) {
|
|
var c = this;
|
|
a = j(a);
|
|
var d = new va(function(b, d) {
|
|
c.ready().then(function() {
|
|
A(c._dbInfo, Ba, function(e, f) {
|
|
if (e)
|
|
return d(e);
|
|
try {
|
|
var g = f.objectStore(c._dbInfo.storeName)
|
|
, h = g.delete(a);
|
|
f.oncomplete = function() {
|
|
b()
|
|
}
|
|
,
|
|
f.onerror = function() {
|
|
d(h.error)
|
|
}
|
|
,
|
|
f.onabort = function() {
|
|
var a = h.error ? h.error : h.transaction.error;
|
|
d(a)
|
|
}
|
|
} catch (a) {
|
|
d(a)
|
|
}
|
|
})
|
|
}).catch(d)
|
|
}
|
|
);
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function H(a) {
|
|
var b = this
|
|
, c = new va(function(a, c) {
|
|
b.ready().then(function() {
|
|
A(b._dbInfo, Ba, function(d, e) {
|
|
if (d)
|
|
return c(d);
|
|
try {
|
|
var f = e.objectStore(b._dbInfo.storeName)
|
|
, g = f.clear();
|
|
e.oncomplete = function() {
|
|
a()
|
|
}
|
|
,
|
|
e.onabort = e.onerror = function() {
|
|
var a = g.error ? g.error : g.transaction.error;
|
|
c(a)
|
|
}
|
|
} catch (a) {
|
|
c(a)
|
|
}
|
|
})
|
|
}).catch(c)
|
|
}
|
|
);
|
|
return h(c, a),
|
|
c
|
|
}
|
|
function I(a) {
|
|
var b = this
|
|
, c = new va(function(a, c) {
|
|
b.ready().then(function() {
|
|
A(b._dbInfo, Aa, function(d, e) {
|
|
if (d)
|
|
return c(d);
|
|
try {
|
|
var f = e.objectStore(b._dbInfo.storeName)
|
|
, g = f.count();
|
|
g.onsuccess = function() {
|
|
a(g.result)
|
|
}
|
|
,
|
|
g.onerror = function() {
|
|
c(g.error)
|
|
}
|
|
} catch (a) {
|
|
c(a)
|
|
}
|
|
})
|
|
}).catch(c)
|
|
}
|
|
);
|
|
return h(c, a),
|
|
c
|
|
}
|
|
function J(a, b) {
|
|
var c = this
|
|
, d = new va(function(b, d) {
|
|
if (a < 0)
|
|
return void b(null);
|
|
c.ready().then(function() {
|
|
A(c._dbInfo, Aa, function(e, f) {
|
|
if (e)
|
|
return d(e);
|
|
try {
|
|
var g = f.objectStore(c._dbInfo.storeName)
|
|
, h = !1
|
|
, i = g.openKeyCursor();
|
|
i.onsuccess = function() {
|
|
var c = i.result;
|
|
if (!c)
|
|
return void b(null);
|
|
0 === a ? b(c.key) : h ? b(c.key) : (h = !0,
|
|
c.advance(a))
|
|
}
|
|
,
|
|
i.onerror = function() {
|
|
d(i.error)
|
|
}
|
|
} catch (a) {
|
|
d(a)
|
|
}
|
|
})
|
|
}).catch(d)
|
|
}
|
|
);
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function K(a) {
|
|
var b = this
|
|
, c = new va(function(a, c) {
|
|
b.ready().then(function() {
|
|
A(b._dbInfo, Aa, function(d, e) {
|
|
if (d)
|
|
return c(d);
|
|
try {
|
|
var f = e.objectStore(b._dbInfo.storeName)
|
|
, g = f.openKeyCursor()
|
|
, h = [];
|
|
g.onsuccess = function() {
|
|
var b = g.result;
|
|
if (!b)
|
|
return void a(h);
|
|
h.push(b.key),
|
|
b.continue()
|
|
}
|
|
,
|
|
g.onerror = function() {
|
|
c(g.error)
|
|
}
|
|
} catch (a) {
|
|
c(a)
|
|
}
|
|
})
|
|
}).catch(c)
|
|
}
|
|
);
|
|
return h(c, a),
|
|
c
|
|
}
|
|
function L(a, b) {
|
|
b = k.apply(this, arguments);
|
|
var c = this.config();
|
|
a = "function" != typeof a && a || {},
|
|
a.name || (a.name = a.name || c.name,
|
|
a.storeName = a.storeName || c.storeName);
|
|
var d, e = this;
|
|
if (a.name) {
|
|
var f = a.name === c.name && e._dbInfo.db
|
|
, g = f ? va.resolve(e._dbInfo.db) : s(a).then(function(b) {
|
|
var c = ya[a.name]
|
|
, d = c.forages;
|
|
c.db = b;
|
|
for (var e = 0; e < d.length; e++)
|
|
d[e]._dbInfo.db = b;
|
|
return b
|
|
});
|
|
d = a.storeName ? g.then(function(b) {
|
|
if (b.objectStoreNames.contains(a.storeName)) {
|
|
var c = b.version + 1;
|
|
o(a);
|
|
var d = ya[a.name]
|
|
, e = d.forages;
|
|
b.close();
|
|
for (var f = 0; f < e.length; f++) {
|
|
var g = e[f];
|
|
g._dbInfo.db = null,
|
|
g._dbInfo.version = c
|
|
}
|
|
return new va(function(b, d) {
|
|
var e = ua.open(a.name, c);
|
|
e.onerror = function(a) {
|
|
e.result.close(),
|
|
d(a)
|
|
}
|
|
,
|
|
e.onupgradeneeded = function() {
|
|
e.result.deleteObjectStore(a.storeName)
|
|
}
|
|
,
|
|
e.onsuccess = function() {
|
|
var a = e.result;
|
|
a.close(),
|
|
b(a)
|
|
}
|
|
}
|
|
).then(function(a) {
|
|
d.db = a;
|
|
for (var b = 0; b < e.length; b++) {
|
|
var c = e[b];
|
|
c._dbInfo.db = a,
|
|
p(c._dbInfo)
|
|
}
|
|
}).catch(function(b) {
|
|
throw (q(a, b) || va.resolve()).catch(function() {}),
|
|
b
|
|
})
|
|
}
|
|
}) : g.then(function(b) {
|
|
o(a);
|
|
var c = ya[a.name]
|
|
, d = c.forages;
|
|
b.close();
|
|
for (var e = 0; e < d.length; e++) {
|
|
d[e]._dbInfo.db = null
|
|
}
|
|
return new va(function(b, c) {
|
|
var d = ua.deleteDatabase(a.name);
|
|
d.onerror = function() {
|
|
var a = d.result;
|
|
a && a.close(),
|
|
c(d.error)
|
|
}
|
|
,
|
|
d.onblocked = function() {
|
|
console.warn('dropInstance blocked for database "' + a.name + '" until all open connections are closed')
|
|
}
|
|
,
|
|
d.onsuccess = function() {
|
|
var a = d.result;
|
|
a && a.close(),
|
|
b(a)
|
|
}
|
|
}
|
|
).then(function(a) {
|
|
c.db = a;
|
|
for (var b = 0; b < d.length; b++)
|
|
p(d[b]._dbInfo)
|
|
}).catch(function(b) {
|
|
throw (q(a, b) || va.resolve()).catch(function() {}),
|
|
b
|
|
})
|
|
})
|
|
} else
|
|
d = va.reject("Invalid arguments");
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function M() {
|
|
return "function" == typeof openDatabase
|
|
}
|
|
function N(a) {
|
|
var b, c, d, e, f, g = .75 * a.length, h = a.length, i = 0;
|
|
"=" === a[a.length - 1] && (g--,
|
|
"=" === a[a.length - 2] && g--);
|
|
var j = new ArrayBuffer(g)
|
|
, k = new Uint8Array(j);
|
|
for (b = 0; b < h; b += 4)
|
|
c = Da.indexOf(a[b]),
|
|
d = Da.indexOf(a[b + 1]),
|
|
e = Da.indexOf(a[b + 2]),
|
|
f = Da.indexOf(a[b + 3]),
|
|
k[i++] = c << 2 | d >> 4,
|
|
k[i++] = (15 & d) << 4 | e >> 2,
|
|
k[i++] = (3 & e) << 6 | 63 & f;
|
|
return j
|
|
}
|
|
function O(a) {
|
|
var b, c = new Uint8Array(a), d = "";
|
|
for (b = 0; b < c.length; b += 3)
|
|
d += Da[c[b] >> 2],
|
|
d += Da[(3 & c[b]) << 4 | c[b + 1] >> 4],
|
|
d += Da[(15 & c[b + 1]) << 2 | c[b + 2] >> 6],
|
|
d += Da[63 & c[b + 2]];
|
|
return c.length % 3 == 2 ? d = d.substring(0, d.length - 1) + "=" : c.length % 3 == 1 && (d = d.substring(0, d.length - 2) + "=="),
|
|
d
|
|
}
|
|
function P(a, b) {
|
|
var c = "";
|
|
if (a && (c = Ua.call(a)),
|
|
a && ("[object ArrayBuffer]" === c || a.buffer && "[object ArrayBuffer]" === Ua.call(a.buffer))) {
|
|
var d, e = Ga;
|
|
a instanceof ArrayBuffer ? (d = a,
|
|
e += Ia) : (d = a.buffer,
|
|
"[object Int8Array]" === c ? e += Ka : "[object Uint8Array]" === c ? e += La : "[object Uint8ClampedArray]" === c ? e += Ma : "[object Int16Array]" === c ? e += Na : "[object Uint16Array]" === c ? e += Pa : "[object Int32Array]" === c ? e += Oa : "[object Uint32Array]" === c ? e += Qa : "[object Float32Array]" === c ? e += Ra : "[object Float64Array]" === c ? e += Sa : b(new Error("Failed to get type for BinaryArray"))),
|
|
b(e + O(d))
|
|
} else if ("[object Blob]" === c) {
|
|
var f = new FileReader;
|
|
f.onload = function() {
|
|
var c = Ea + a.type + "~" + O(this.result);
|
|
b(Ga + Ja + c)
|
|
}
|
|
,
|
|
f.readAsArrayBuffer(a)
|
|
} else
|
|
try {
|
|
b(JSON.stringify(a))
|
|
} catch (c) {
|
|
console.error("Couldn't convert value into a JSON string: ", a),
|
|
b(null, c)
|
|
}
|
|
}
|
|
function Q(a) {
|
|
if (a.substring(0, Ha) !== Ga)
|
|
return JSON.parse(a);
|
|
var b, c = a.substring(Ta), d = a.substring(Ha, Ta);
|
|
if (d === Ja && Fa.test(c)) {
|
|
var e = c.match(Fa);
|
|
b = e[1],
|
|
c = c.substring(e[0].length)
|
|
}
|
|
var f = N(c);
|
|
switch (d) {
|
|
case Ia:
|
|
return f;
|
|
case Ja:
|
|
return g([f], {
|
|
type: b
|
|
});
|
|
case Ka:
|
|
return new Int8Array(f);
|
|
case La:
|
|
return new Uint8Array(f);
|
|
case Ma:
|
|
return new Uint8ClampedArray(f);
|
|
case Na:
|
|
return new Int16Array(f);
|
|
case Pa:
|
|
return new Uint16Array(f);
|
|
case Oa:
|
|
return new Int32Array(f);
|
|
case Qa:
|
|
return new Uint32Array(f);
|
|
case Ra:
|
|
return new Float32Array(f);
|
|
case Sa:
|
|
return new Float64Array(f);
|
|
default:
|
|
throw new Error("Unkown type: " + d)
|
|
}
|
|
}
|
|
function R(a, b, c, d) {
|
|
a.executeSql("CREATE TABLE IF NOT EXISTS " + b.storeName + " (id INTEGER PRIMARY KEY, key unique, value)", [], c, d)
|
|
}
|
|
function S(a) {
|
|
var b = this
|
|
, c = {
|
|
db: null
|
|
};
|
|
if (a)
|
|
for (var d in a)
|
|
c[d] = "string" != typeof a[d] ? a[d].toString() : a[d];
|
|
var e = new va(function(a, d) {
|
|
try {
|
|
c.db = openDatabase(c.name, String(c.version), c.description, c.size)
|
|
} catch (a) {
|
|
return d(a)
|
|
}
|
|
c.db.transaction(function(e) {
|
|
R(e, c, function() {
|
|
b._dbInfo = c,
|
|
a()
|
|
}, function(a, b) {
|
|
d(b)
|
|
})
|
|
}, d)
|
|
}
|
|
);
|
|
return c.serializer = Va,
|
|
e
|
|
}
|
|
function T(a, b, c, d, e, f) {
|
|
a.executeSql(c, d, e, function(a, g) {
|
|
g.code === g.SYNTAX_ERR ? a.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?", [b.storeName], function(a, h) {
|
|
h.rows.length ? f(a, g) : R(a, b, function() {
|
|
a.executeSql(c, d, e, f)
|
|
}, f)
|
|
}, f) : f(a, g)
|
|
}, f)
|
|
}
|
|
function U(a, b) {
|
|
var c = this;
|
|
a = j(a);
|
|
var d = new va(function(b, d) {
|
|
c.ready().then(function() {
|
|
var e = c._dbInfo;
|
|
e.db.transaction(function(c) {
|
|
T(c, e, "SELECT * FROM " + e.storeName + " WHERE key = ? LIMIT 1", [a], function(a, c) {
|
|
var d = c.rows.length ? c.rows.item(0).value : null;
|
|
d && (d = e.serializer.deserialize(d)),
|
|
b(d)
|
|
}, function(a, b) {
|
|
d(b)
|
|
})
|
|
})
|
|
}).catch(d)
|
|
}
|
|
);
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function V(a, b) {
|
|
var c = this
|
|
, d = new va(function(b, d) {
|
|
c.ready().then(function() {
|
|
var e = c._dbInfo;
|
|
e.db.transaction(function(c) {
|
|
T(c, e, "SELECT * FROM " + e.storeName, [], function(c, d) {
|
|
for (var f = d.rows, g = f.length, h = 0; h < g; h++) {
|
|
var i = f.item(h)
|
|
, j = i.value;
|
|
if (j && (j = e.serializer.deserialize(j)),
|
|
void 0 !== (j = a(j, i.key, h + 1)))
|
|
return void b(j)
|
|
}
|
|
b()
|
|
}, function(a, b) {
|
|
d(b)
|
|
})
|
|
})
|
|
}).catch(d)
|
|
}
|
|
);
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function W(a, b, c, d) {
|
|
var e = this;
|
|
a = j(a);
|
|
var f = new va(function(f, g) {
|
|
e.ready().then(function() {
|
|
void 0 === b && (b = null);
|
|
var h = b
|
|
, i = e._dbInfo;
|
|
i.serializer.serialize(b, function(b, j) {
|
|
j ? g(j) : i.db.transaction(function(c) {
|
|
T(c, i, "INSERT OR REPLACE INTO " + i.storeName + " (key, value) VALUES (?, ?)", [a, b], function() {
|
|
f(h)
|
|
}, function(a, b) {
|
|
g(b)
|
|
})
|
|
}, function(b) {
|
|
if (b.code === b.QUOTA_ERR) {
|
|
if (d > 0)
|
|
return void f(W.apply(e, [a, h, c, d - 1]));
|
|
g(b)
|
|
}
|
|
})
|
|
})
|
|
}).catch(g)
|
|
}
|
|
);
|
|
return h(f, c),
|
|
f
|
|
}
|
|
function X(a, b, c) {
|
|
return W.apply(this, [a, b, c, 1])
|
|
}
|
|
function Y(a, b) {
|
|
var c = this;
|
|
a = j(a);
|
|
var d = new va(function(b, d) {
|
|
c.ready().then(function() {
|
|
var e = c._dbInfo;
|
|
e.db.transaction(function(c) {
|
|
T(c, e, "DELETE FROM " + e.storeName + " WHERE key = ?", [a], function() {
|
|
b()
|
|
}, function(a, b) {
|
|
d(b)
|
|
})
|
|
})
|
|
}).catch(d)
|
|
}
|
|
);
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function Z(a) {
|
|
var b = this
|
|
, c = new va(function(a, c) {
|
|
b.ready().then(function() {
|
|
var d = b._dbInfo;
|
|
d.db.transaction(function(b) {
|
|
T(b, d, "DELETE FROM " + d.storeName, [], function() {
|
|
a()
|
|
}, function(a, b) {
|
|
c(b)
|
|
})
|
|
})
|
|
}).catch(c)
|
|
}
|
|
);
|
|
return h(c, a),
|
|
c
|
|
}
|
|
function $(a) {
|
|
var b = this
|
|
, c = new va(function(a, c) {
|
|
b.ready().then(function() {
|
|
var d = b._dbInfo;
|
|
d.db.transaction(function(b) {
|
|
T(b, d, "SELECT COUNT(key) as c FROM " + d.storeName, [], function(b, c) {
|
|
var d = c.rows.item(0).c;
|
|
a(d)
|
|
}, function(a, b) {
|
|
c(b)
|
|
})
|
|
})
|
|
}).catch(c)
|
|
}
|
|
);
|
|
return h(c, a),
|
|
c
|
|
}
|
|
function _(a, b) {
|
|
var c = this
|
|
, d = new va(function(b, d) {
|
|
c.ready().then(function() {
|
|
var e = c._dbInfo;
|
|
e.db.transaction(function(c) {
|
|
T(c, e, "SELECT key FROM " + e.storeName + " WHERE id = ? LIMIT 1", [a + 1], function(a, c) {
|
|
var d = c.rows.length ? c.rows.item(0).key : null;
|
|
b(d)
|
|
}, function(a, b) {
|
|
d(b)
|
|
})
|
|
})
|
|
}).catch(d)
|
|
}
|
|
);
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function aa(a) {
|
|
var b = this
|
|
, c = new va(function(a, c) {
|
|
b.ready().then(function() {
|
|
var d = b._dbInfo;
|
|
d.db.transaction(function(b) {
|
|
T(b, d, "SELECT key FROM " + d.storeName, [], function(b, c) {
|
|
for (var d = [], e = 0; e < c.rows.length; e++)
|
|
d.push(c.rows.item(e).key);
|
|
a(d)
|
|
}, function(a, b) {
|
|
c(b)
|
|
})
|
|
})
|
|
}).catch(c)
|
|
}
|
|
);
|
|
return h(c, a),
|
|
c
|
|
}
|
|
function ba(a) {
|
|
return new va(function(b, c) {
|
|
a.transaction(function(d) {
|
|
d.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", [], function(c, d) {
|
|
for (var e = [], f = 0; f < d.rows.length; f++)
|
|
e.push(d.rows.item(f).name);
|
|
b({
|
|
db: a,
|
|
storeNames: e
|
|
})
|
|
}, function(a, b) {
|
|
c(b)
|
|
})
|
|
}, function(a) {
|
|
c(a)
|
|
})
|
|
}
|
|
)
|
|
}
|
|
function ca(a, b) {
|
|
b = k.apply(this, arguments);
|
|
var c = this.config();
|
|
a = "function" != typeof a && a || {},
|
|
a.name || (a.name = a.name || c.name,
|
|
a.storeName = a.storeName || c.storeName);
|
|
var d, e = this;
|
|
return d = a.name ? new va(function(b) {
|
|
var d;
|
|
d = a.name === c.name ? e._dbInfo.db : openDatabase(a.name, "", "", 0),
|
|
b(a.storeName ? {
|
|
db: d,
|
|
storeNames: [a.storeName]
|
|
} : ba(d))
|
|
}
|
|
).then(function(a) {
|
|
return new va(function(b, c) {
|
|
a.db.transaction(function(d) {
|
|
function e(a) {
|
|
return new va(function(b, c) {
|
|
d.executeSql("DROP TABLE IF EXISTS " + a, [], function() {
|
|
b()
|
|
}, function(a, b) {
|
|
c(b)
|
|
})
|
|
}
|
|
)
|
|
}
|
|
for (var f = [], g = 0, h = a.storeNames.length; g < h; g++)
|
|
f.push(e(a.storeNames[g]));
|
|
va.all(f).then(function() {
|
|
b()
|
|
}).catch(function(a) {
|
|
c(a)
|
|
})
|
|
}, function(a) {
|
|
c(a)
|
|
})
|
|
}
|
|
)
|
|
}) : va.reject("Invalid arguments"),
|
|
h(d, b),
|
|
d
|
|
}
|
|
function da() {
|
|
try {
|
|
return "undefined" != typeof localStorage && "setItem"in localStorage && !!localStorage.setItem
|
|
} catch (a) {
|
|
return !1
|
|
}
|
|
}
|
|
function ea(a, b) {
|
|
var c = a.name + "/";
|
|
return a.storeName !== b.storeName && (c += a.storeName + "/"),
|
|
c
|
|
}
|
|
function fa() {
|
|
var a = "_localforage_support_test";
|
|
try {
|
|
return localStorage.setItem(a, !0),
|
|
localStorage.removeItem(a),
|
|
!1
|
|
} catch (a) {
|
|
return !0
|
|
}
|
|
}
|
|
function ga() {
|
|
return !fa() || localStorage.length > 0
|
|
}
|
|
function ha(a) {
|
|
var b = this
|
|
, c = {};
|
|
if (a)
|
|
for (var d in a)
|
|
c[d] = a[d];
|
|
return c.keyPrefix = ea(a, b._defaultConfig),
|
|
ga() ? (b._dbInfo = c,
|
|
c.serializer = Va,
|
|
va.resolve()) : va.reject()
|
|
}
|
|
function ia(a) {
|
|
var b = this
|
|
, c = b.ready().then(function() {
|
|
for (var a = b._dbInfo.keyPrefix, c = localStorage.length - 1; c >= 0; c--) {
|
|
var d = localStorage.key(c);
|
|
0 === d.indexOf(a) && localStorage.removeItem(d)
|
|
}
|
|
});
|
|
return h(c, a),
|
|
c
|
|
}
|
|
function ja(a, b) {
|
|
var c = this;
|
|
a = j(a);
|
|
var d = c.ready().then(function() {
|
|
var b = c._dbInfo
|
|
, d = localStorage.getItem(b.keyPrefix + a);
|
|
return d && (d = b.serializer.deserialize(d)),
|
|
d
|
|
});
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function ka(a, b) {
|
|
var c = this
|
|
, d = c.ready().then(function() {
|
|
for (var b = c._dbInfo, d = b.keyPrefix, e = d.length, f = localStorage.length, g = 1, h = 0; h < f; h++) {
|
|
var i = localStorage.key(h);
|
|
if (0 === i.indexOf(d)) {
|
|
var j = localStorage.getItem(i);
|
|
if (j && (j = b.serializer.deserialize(j)),
|
|
void 0 !== (j = a(j, i.substring(e), g++)))
|
|
return j
|
|
}
|
|
}
|
|
});
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function la(a, b) {
|
|
var c = this
|
|
, d = c.ready().then(function() {
|
|
var b, d = c._dbInfo;
|
|
try {
|
|
b = localStorage.key(a)
|
|
} catch (a) {
|
|
b = null
|
|
}
|
|
return b && (b = b.substring(d.keyPrefix.length)),
|
|
b
|
|
});
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function ma(a) {
|
|
var b = this
|
|
, c = b.ready().then(function() {
|
|
for (var a = b._dbInfo, c = localStorage.length, d = [], e = 0; e < c; e++) {
|
|
var f = localStorage.key(e);
|
|
0 === f.indexOf(a.keyPrefix) && d.push(f.substring(a.keyPrefix.length))
|
|
}
|
|
return d
|
|
});
|
|
return h(c, a),
|
|
c
|
|
}
|
|
function na(a) {
|
|
var b = this
|
|
, c = b.keys().then(function(a) {
|
|
return a.length
|
|
});
|
|
return h(c, a),
|
|
c
|
|
}
|
|
function oa(a, b) {
|
|
var c = this;
|
|
a = j(a);
|
|
var d = c.ready().then(function() {
|
|
var b = c._dbInfo;
|
|
localStorage.removeItem(b.keyPrefix + a)
|
|
});
|
|
return h(d, b),
|
|
d
|
|
}
|
|
function pa(a, b, c) {
|
|
var d = this;
|
|
a = j(a);
|
|
var e = d.ready().then(function() {
|
|
void 0 === b && (b = null);
|
|
var c = b;
|
|
return new va(function(e, f) {
|
|
var g = d._dbInfo;
|
|
g.serializer.serialize(b, function(b, d) {
|
|
if (d)
|
|
f(d);
|
|
else
|
|
try {
|
|
localStorage.setItem(g.keyPrefix + a, b),
|
|
e(c)
|
|
} catch (a) {
|
|
"QuotaExceededError" !== a.name && "NS_ERROR_DOM_QUOTA_REACHED" !== a.name || f(a),
|
|
f(a)
|
|
}
|
|
})
|
|
}
|
|
)
|
|
});
|
|
return h(e, c),
|
|
e
|
|
}
|
|
function qa(a, b) {
|
|
if (b = k.apply(this, arguments),
|
|
a = "function" != typeof a && a || {},
|
|
!a.name) {
|
|
var c = this.config();
|
|
a.name = a.name || c.name,
|
|
a.storeName = a.storeName || c.storeName
|
|
}
|
|
var d, e = this;
|
|
return d = a.name ? new va(function(b) {
|
|
b(a.storeName ? ea(a, e._defaultConfig) : a.name + "/")
|
|
}
|
|
).then(function(a) {
|
|
for (var b = localStorage.length - 1; b >= 0; b--) {
|
|
var c = localStorage.key(b);
|
|
0 === c.indexOf(a) && localStorage.removeItem(c)
|
|
}
|
|
}) : va.reject("Invalid arguments"),
|
|
h(d, b),
|
|
d
|
|
}
|
|
function ra(a, b) {
|
|
a[b] = function() {
|
|
var c = arguments;
|
|
return a.ready().then(function() {
|
|
return a[b].apply(a, c)
|
|
})
|
|
}
|
|
}
|
|
function sa() {
|
|
for (var a = 1; a < arguments.length; a++) {
|
|
var b = arguments[a];
|
|
if (b)
|
|
for (var c in b)
|
|
b.hasOwnProperty(c) && ($a(b[c]) ? arguments[0][c] = b[c].slice() : arguments[0][c] = b[c])
|
|
}
|
|
return arguments[0]
|
|
}
|
|
var ta = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(a) {
|
|
return typeof a
|
|
}
|
|
: function(a) {
|
|
return a && "function" == typeof Symbol && a.constructor === Symbol && a !== Symbol.prototype ? "symbol" : typeof a
|
|
}
|
|
, ua = e();
|
|
"undefined" == typeof Promise && a(3);
|
|
var va = Promise
|
|
, wa = "local-forage-detect-blob-support"
|
|
, xa = void 0
|
|
, ya = {}
|
|
, za = Object.prototype.toString
|
|
, Aa = "readonly"
|
|
, Ba = "readwrite"
|
|
, Ca = {
|
|
_driver: "asyncStorage",
|
|
_initStorage: C,
|
|
_support: f(),
|
|
iterate: E,
|
|
getItem: D,
|
|
setItem: F,
|
|
removeItem: G,
|
|
clear: H,
|
|
length: I,
|
|
key: J,
|
|
keys: K,
|
|
dropInstance: L
|
|
}
|
|
, Da = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
|
, Ea = "~~local_forage_type~"
|
|
, Fa = /^~~local_forage_type~([^~]+)~/
|
|
, Ga = "__lfsc__:"
|
|
, Ha = Ga.length
|
|
, Ia = "arbf"
|
|
, Ja = "blob"
|
|
, Ka = "si08"
|
|
, La = "ui08"
|
|
, Ma = "uic8"
|
|
, Na = "si16"
|
|
, Oa = "si32"
|
|
, Pa = "ur16"
|
|
, Qa = "ui32"
|
|
, Ra = "fl32"
|
|
, Sa = "fl64"
|
|
, Ta = Ha + Ia.length
|
|
, Ua = Object.prototype.toString
|
|
, Va = {
|
|
serialize: P,
|
|
deserialize: Q,
|
|
stringToBuffer: N,
|
|
bufferToString: O
|
|
}
|
|
, Wa = {
|
|
_driver: "webSQLStorage",
|
|
_initStorage: S,
|
|
_support: M(),
|
|
iterate: V,
|
|
getItem: U,
|
|
setItem: X,
|
|
removeItem: Y,
|
|
clear: Z,
|
|
length: $,
|
|
key: _,
|
|
keys: aa,
|
|
dropInstance: ca
|
|
}
|
|
, Xa = {
|
|
_driver: "localStorageWrapper",
|
|
_initStorage: ha,
|
|
_support: da(),
|
|
iterate: ka,
|
|
getItem: ja,
|
|
setItem: pa,
|
|
removeItem: oa,
|
|
clear: ia,
|
|
length: na,
|
|
key: la,
|
|
keys: ma,
|
|
dropInstance: qa
|
|
}
|
|
, Ya = function(a, b) {
|
|
return a === b || "number" == typeof a && "number" == typeof b && isNaN(a) && isNaN(b)
|
|
}
|
|
, Za = function(a, b) {
|
|
for (var c = a.length, d = 0; d < c; ) {
|
|
if (Ya(a[d], b))
|
|
return !0;
|
|
d++
|
|
}
|
|
return !1
|
|
}
|
|
, $a = Array.isArray || function(a) {
|
|
return "[object Array]" === Object.prototype.toString.call(a)
|
|
}
|
|
, _a = {}
|
|
, ab = {}
|
|
, bb = {
|
|
INDEXEDDB: Ca,
|
|
WEBSQL: Wa,
|
|
LOCALSTORAGE: Xa
|
|
}
|
|
, cb = [bb.INDEXEDDB._driver, bb.WEBSQL._driver, bb.LOCALSTORAGE._driver]
|
|
, db = ["dropInstance"]
|
|
, eb = ["clear", "getItem", "iterate", "key", "keys", "length", "removeItem", "setItem"].concat(db)
|
|
, fb = {
|
|
description: "",
|
|
driver: cb.slice(),
|
|
name: "localforage",
|
|
size: 4980736,
|
|
storeName: "keyvaluepairs",
|
|
version: 1
|
|
}
|
|
, gb = function() {
|
|
function a(b) {
|
|
d(this, a);
|
|
for (var c in bb)
|
|
if (bb.hasOwnProperty(c)) {
|
|
var e = bb[c]
|
|
, f = e._driver;
|
|
this[c] = f,
|
|
_a[f] || this.defineDriver(e)
|
|
}
|
|
this._defaultConfig = sa({}, fb),
|
|
this._config = sa({}, this._defaultConfig, b),
|
|
this._driverSet = null,
|
|
this._initDriver = null,
|
|
this._ready = !1,
|
|
this._dbInfo = null,
|
|
this._wrapLibraryMethodsWithReady(),
|
|
this.setDriver(this._config.driver).catch(function() {})
|
|
}
|
|
return a.prototype.config = function(a) {
|
|
if ("object" === (void 0 === a ? "undefined" : ta(a))) {
|
|
if (this._ready)
|
|
return new Error("Can't call config() after localforage has been used.");
|
|
for (var b in a) {
|
|
if ("storeName" === b && (a[b] = a[b].replace(/\W/g, "_")),
|
|
"version" === b && "number" != typeof a[b])
|
|
return new Error("Database version must be a number.");
|
|
this._config[b] = a[b]
|
|
}
|
|
return !("driver"in a && a.driver) || this.setDriver(this._config.driver)
|
|
}
|
|
return "string" == typeof a ? this._config[a] : this._config
|
|
}
|
|
,
|
|
a.prototype.defineDriver = function(a, b, c) {
|
|
var d = new va(function(b, c) {
|
|
try {
|
|
var d = a._driver
|
|
, e = new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");
|
|
if (!a._driver)
|
|
return void c(e);
|
|
for (var f = eb.concat("_initStorage"), g = 0, i = f.length; g < i; g++) {
|
|
var j = f[g];
|
|
if ((!Za(db, j) || a[j]) && "function" != typeof a[j])
|
|
return void c(e)
|
|
}
|
|
(function() {
|
|
for (var b = function(a) {
|
|
return function() {
|
|
var b = new Error("Method " + a + " is not implemented by the current driver")
|
|
, c = va.reject(b);
|
|
return h(c, arguments[arguments.length - 1]),
|
|
c
|
|
}
|
|
}, c = 0, d = db.length; c < d; c++) {
|
|
var e = db[c];
|
|
a[e] || (a[e] = b(e))
|
|
}
|
|
}
|
|
)();
|
|
var k = function(c) {
|
|
_a[d] && console.info("Redefining LocalForage driver: " + d),
|
|
_a[d] = a,
|
|
ab[d] = c,
|
|
b()
|
|
};
|
|
"_support"in a ? a._support && "function" == typeof a._support ? a._support().then(k, c) : k(!!a._support) : k(!0)
|
|
} catch (a) {
|
|
c(a)
|
|
}
|
|
}
|
|
);
|
|
return i(d, b, c),
|
|
d
|
|
}
|
|
,
|
|
a.prototype.driver = function() {
|
|
return this._driver || null
|
|
}
|
|
,
|
|
a.prototype.getDriver = function(a, b, c) {
|
|
var d = _a[a] ? va.resolve(_a[a]) : va.reject(new Error("Driver not found."));
|
|
return i(d, b, c),
|
|
d
|
|
}
|
|
,
|
|
a.prototype.getSerializer = function(a) {
|
|
var b = va.resolve(Va);
|
|
return i(b, a),
|
|
b
|
|
}
|
|
,
|
|
a.prototype.ready = function(a) {
|
|
var b = this
|
|
, c = b._driverSet.then(function() {
|
|
return null === b._ready && (b._ready = b._initDriver()),
|
|
b._ready
|
|
});
|
|
return i(c, a, a),
|
|
c
|
|
}
|
|
,
|
|
a.prototype.setDriver = function(a, b, c) {
|
|
function d() {
|
|
g._config.driver = g.driver()
|
|
}
|
|
function e(a) {
|
|
return g._extend(a),
|
|
d(),
|
|
g._ready = g._initStorage(g._config),
|
|
g._ready
|
|
}
|
|
function f(a) {
|
|
return function() {
|
|
function b() {
|
|
for (; c < a.length; ) {
|
|
var f = a[c];
|
|
return c++,
|
|
g._dbInfo = null,
|
|
g._ready = null,
|
|
g.getDriver(f).then(e).catch(b)
|
|
}
|
|
d();
|
|
var h = new Error("No available storage method found.");
|
|
return g._driverSet = va.reject(h),
|
|
g._driverSet
|
|
}
|
|
var c = 0;
|
|
return b()
|
|
}
|
|
}
|
|
var g = this;
|
|
$a(a) || (a = [a]);
|
|
var h = this._getSupportedDrivers(a)
|
|
, j = null !== this._driverSet ? this._driverSet.catch(function() {
|
|
return va.resolve()
|
|
}) : va.resolve();
|
|
return this._driverSet = j.then(function() {
|
|
var a = h[0];
|
|
return g._dbInfo = null,
|
|
g._ready = null,
|
|
g.getDriver(a).then(function(a) {
|
|
g._driver = a._driver,
|
|
d(),
|
|
g._wrapLibraryMethodsWithReady(),
|
|
g._initDriver = f(h)
|
|
})
|
|
}).catch(function() {
|
|
d();
|
|
var a = new Error("No available storage method found.");
|
|
return g._driverSet = va.reject(a),
|
|
g._driverSet
|
|
}),
|
|
i(this._driverSet, b, c),
|
|
this._driverSet
|
|
}
|
|
,
|
|
a.prototype.supports = function(a) {
|
|
return !!ab[a]
|
|
}
|
|
,
|
|
a.prototype._extend = function(a) {
|
|
sa(this, a)
|
|
}
|
|
,
|
|
a.prototype._getSupportedDrivers = function(a) {
|
|
for (var b = [], c = 0, d = a.length; c < d; c++) {
|
|
var e = a[c];
|
|
this.supports(e) && b.push(e)
|
|
}
|
|
return b
|
|
}
|
|
,
|
|
a.prototype._wrapLibraryMethodsWithReady = function() {
|
|
for (var a = 0, b = eb.length; a < b; a++)
|
|
ra(this, eb[a])
|
|
}
|
|
,
|
|
a.prototype.createInstance = function(b) {
|
|
return new a(b)
|
|
}
|
|
,
|
|
a
|
|
}()
|
|
, hb = new gb;
|
|
b.exports = hb
|
|
}
|
|
, {
|
|
3: 3
|
|
}]
|
|
}, {}, [4])(4)
|
|
});
|
|
|