@urql/exchange-graphcache
Version:
A normalized and configurable cache exchange for urql
92 lines (88 loc) • 2.56 kB
JavaScript
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