UNPKG

@urql/exchange-graphcache

Version:

A normalized and configurable cache exchange for urql

92 lines (88 loc) 2.56 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 c = Math.floor((new Date).valueOf() / 864e5); var s = c - (e.maxAge || 7); var i = indexedDB.open(t, 1); var l = getRequestPromise(i); i.onupgradeneeded = () => { i.result.createObjectStore(a); i.result.createObjectStore(n); }; return { clear: () => l.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: () => l.then((e => getRequestPromise(e.transaction(n, "readonly").objectStore(n).get(n))), (() => null)), writeMetadata(e) { l.then((r => getRequestPromise(r.transaction(n, "readwrite").objectStore(n).put(e, n))), (() => {})); }, writeData(e) { Object.assign(o, e); var toUndefined = () => {}; return l.then((e => getRequestPromise(e.transaction(a, "readwrite").objectStore(a).put(o, c)))).then(toUndefined, toUndefined); }, readData() { var e = {}; return l.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 < s) { n.delete(r); } else { var t = n.get(r); t.onsuccess = () => { var a = t.result; if (r === c) { Object.assign(o, a); } Object.assign(e, a); }; } this.result.continue(); } }; return getTransactionPromise(t); })).then((() => e), (() => 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