UNPKG

@urql/exchange-request-policy

Version:

An exchange for operation request-policy upgrading in urql

39 lines (35 loc) 1.1 kB
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