@urql/exchange-graphcache
Version:
A normalized and configurable cache exchange for urql
130 lines (126 loc) • 3.43 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 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