UNPKG

@urql/exchange-graphcache

Version:

A normalized and configurable cache exchange for urql

130 lines (126 loc) 3.43 kB
var getRequestPromise = e => new Promise(((r, t) => { e.onerror = () => { t(e.error); }; e.onsuccess = () => { r(e.result); }; })); var getTransactionPromise = e => new Promise(((r, t) => { e.onerror = () => { t(e.error); }; e.oncomplete = r; })); var makeDefaultStorage = e => { if (!e) { e = {}; } var r; var t = e.idbName || "graphcache-v4"; var a = "entries"; var n = "metadata"; var o = Object.create(null); var i = Math.floor((new Date).valueOf() / 864e5); var c = i - (e.maxAge || 7); var v = indexedDB.open(t, 1); var s = getRequestPromise(v); v.onupgradeneeded = () => { v.result.createObjectStore(a); v.result.createObjectStore(n); }; var serializeEntry = e => e.replace(/:/g, "%3a"); var deserializeEntry = e => e.replace(/%3a/g, ":"); var deserializeBatch = e => { var r = {}; var t = ""; var a = ""; var n = ""; var o = 0; var i = 0; while (i < e.length) { n = ""; while (":" !== (t = e[i++]) && t) { n += t; } if (o) { r[a] = deserializeEntry(n) || void 0; o = 0; } else { a = deserializeEntry(n); o = 1; } } return r; }; return { clear: () => s.then((e => { var r = e.transaction([ n, a ], "readwrite"); r.objectStore(n).clear(); r.objectStore(a).clear(); o = Object.create(null); return getTransactionPromise(r); })), readMetadata: () => s.then((e => getRequestPromise(e.transaction(n, "readonly").objectStore(n).get(n))), (() => null)), writeMetadata(e) { s.then((r => getRequestPromise(r.transaction(n, "readwrite").objectStore(n).put(e, n))), (() => {})); }, writeData(e) { Object.assign(o, e); var toUndefined = () => {}; return s.then((e => getRequestPromise(e.transaction(a, "readwrite").objectStore(a).put((() => { var e = ""; for (var r in o) { var t = o[r]; e += serializeEntry(r); e += ":"; if (t) { e += serializeEntry(t); } e += ":"; } return e; })(), i)))).then(toUndefined, toUndefined); }, readData() { var e = []; return s.then((r => { var t = r.transaction(a, "readwrite"); var n = t.objectStore(a); (n.openKeyCursor || n.openCursor).call(n).onsuccess = function() { if (this.result) { var {key: r} = this.result; if ("number" != typeof r || r < c) { n.delete(r); } else { var t = n.get(r); var a = e.length; e.push(""); t.onsuccess = () => { var n = "" + t.result; if (r === i) { Object.assign(o, deserializeBatch(n)); } e[a] = n; }; } this.result.continue(); } }; return getTransactionPromise(t); })).then((() => deserializeBatch(e.join(""))), (() => o)); }, onCacheHydrated: e.onCacheHydrated, onOnline(e) { if (r) { window.removeEventListener("online", r); r = void 0; } window.addEventListener("online", r = () => { e(); }); } }; }; export { makeDefaultStorage }; //# sourceMappingURL=urql-exchange-graphcache-default-storage.mjs.map