1933 lines
66 KiB
JavaScript
1933 lines
66 KiB
JavaScript
/*!
|
|
localForage -- Offline Storage, Improved
|
|
Version 1.7.3
|
|
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) 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() {
|
|
c(f.result), 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.openCursor();
|
|
(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.openCursor(),
|
|
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 = d.onblocked = function(a) {
|
|
var b = d.result;
|
|
b && b.close(), c(a);
|
|
}),
|
|
(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 = 0.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);
|
|
});
|