@urql/exchange-request-policy
Version:
An exchange for operation request-policy upgrading in urql
39 lines (35 loc) • 1.1 kB
JavaScript
import { makeOperation as e } from "@urql/core";
import { tap as r, map as t } from "wonka";
var requestPolicyExchange = a => ({forward: o}) => {
var n = new Map;
var i = (a || {}).ttl || 3e5;
var c = new Map;
var u = 0;
var processIncomingOperation = r => {
if ("query" !== r.kind || "cache-first" !== r.context.requestPolicy && "cache-only" !== r.context.requestPolicy) {
return r;
}
var t = (new Date).getTime();
c.set(r.key, u);
queueMicrotask((() => {
u = u + 1 | 0;
}));
if (t - (n.get(r.key) || 0) > i && (!a.shouldUpgrade || a.shouldUpgrade(r))) {
return e(r.kind, r, {
...r.context,
requestPolicy: "cache-and-network"
});
}
return r;
};
var processIncomingResults = e => {
var r = c.get(e.operation.key) || 0;
if (u !== r) {
c.delete(e.operation.key);
n.set(e.operation.key, (new Date).getTime());
}
};
return e => r(processIncomingResults)(o(t(processIncomingOperation)(e)));
};
export { requestPolicyExchange };
//# sourceMappingURL=urql-exchange-request-policy.mjs.map