wretch
Version:
A tiny wrapper built around fetch with an intuitive syntax.
2 lines • 1.39 kB
JavaScript
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.wretchThrottlingCacheMiddleware={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let t=(e,t)=>t.skipCache||t.method!==`GET`,n=(e,t)=>t.method+`@`+e,r=()=>!1,i=()=>null,a=e=>e.ok;e.throttlingCache=({throttle:e=1e3,skip:o=t,key:s=n,clear:c=r,invalidate:l=i,condition:u=a,flagResponseOnCacheHit:d=`__cached`}={})=>{let f=new Map,p=new Map,m=new Set,h=t=>{e&&!m.has(t)&&(m.add(t),setTimeout(()=>{m.delete(t)},e))},g=e=>(t,n)=>{let r=s(t,n),i=l(t,n);if(i&&(i instanceof Array||(i=[i]),i.forEach(e=>{typeof e==`string`?f.delete(e):e instanceof RegExp&&f.forEach((t,n)=>{e.test(n)&&f.delete(n)})})),c(t,n)&&f.clear(),o(t,n))return e(t,n);if(m.has(r)){if(f.has(r)){let e=f.get(r).clone();return d&&Object.defineProperty(e,d,{value:r,enumerable:!1}),Promise.resolve(e)}else if(p.has(r))return new Promise((e,t)=>{p.get(r).push([e,t])})}return p.has(r)||p.set(r,[]),h(r),e(t,n).then(e=>(u(e.clone())&&f.set(r,e.clone()),p.get(r).forEach(([t])=>t(e.clone())),p.delete(r),e)).catch(e=>{throw p.get(r).forEach(([,t])=>t(e)),p.delete(r),e})};return g.cacheResponse=function(e,t){h(e),f.set(e,t)},g.cache=f,g.inflight=p,g.throttling=m,g}});
//# sourceMappingURL=throttlingCache.min.js.map