cache-kit
Version:
A simple caching layer for fetch requests — supports memory, browser (localStorage), and Node.js (filesystem) adapters with smart strategies.
2 lines (1 loc) • 1.05 kB
JavaScript
import{_ as e}from"./index-CYMT_vcm.js";import{g as t}from"./common.util-DAI6ETz-.js";const o=new Map,n=function(e,t){o.set(e,t)},r=function(e){return o.get(e)||null},i=function(e){return o.has(e)},a=(o,a,l)=>e(void 0,void 0,void 0,(function*(){const e=o;let s;if("cache-first"===l.strategy)if(i(e)&&r(e).expiredAt>Date.now())s=r(e).response.clone();else{const r=yield fetch(o,a),i={response:r.clone(),expiredAt:t(null==l?void 0:l.revalidate)};n(e,i),s=r}else if("network-first"===l.strategy){let c;try{c=yield fetch(o,a);const r={response:c.clone(),expiredAt:t(null==l?void 0:l.revalidate)};n(e,r),s=c}catch(t){if(!(i(e)&&r(e).expiredAt>Date.now()))throw new Error(`Network fetch failed and no cache available: ${t}`);s=r(e).response.clone()}}else"stale-while-revalidate"===l.strategy&&(i(e)&&(s=r(e).response.clone()),fetch(o,a).then((o=>n(e,{response:o,expiredAt:t(null==l?void 0:l.revalidate)}))).catch((e=>{console.warn("Background revalidation failed:",e)})));if(!s)throw new Error("No valid response available.");return s}));export{a as default};