fetchff
Version:
<div align="center"> <img src="./docs/logo.png" alt="logo" width="380"/>
3 lines • 14.6 kB
JavaScript
var ct=Object.defineProperty;var ft=(e,t,r)=>t in e?ct(e,t,{enumerable:true,configurable:true,writable:true,value:r}):e[t]=r;var L=(e,t,r)=>ft(e,typeof t!="symbol"?t+"":t,r);var x="application/",j=x+"json",Ne="charset=utf-8",C="Content-Type",h="undefined",K="object",b="string",g="function",ee="AbortError",Se="TimeoutError",O="GET",ve="HEAD",te="reject";var Ue=10;function re(e){return e instanceof URLSearchParams}function p(e){return e!==null&&typeof e===K}function J(e){let t={...e};return delete t.__proto__,delete t.constructor,delete t.prototype,t}function He(e){let t=Object.keys(e);t.sort();let r={};for(let a=0,n=t.length;a<n;a++){let s=t[a];r[s]=e[s];}return r}function _e(e,t){return t?e.includes("?")?`${e}&${t}`:`${e}?${t}`:e}function Me(e,t){if(!t)return e;if(re(t)){let l=t.toString();return _e(e,l)}let r=[],a=encodeURIComponent,n=(l,i)=>{i=typeof i===g?i():i,i=i===null||i===void 0?"":i,r[r.length]=a(l)+"="+a(i);},s=(l,i,m=0)=>{if(m>=Ue)return r;let c,R,P;if(l)if(Array.isArray(i))for(c=0,R=i.length;c<R;c++)s(l+"["+(typeof i[c]===K&&i[c]?c:"")+"]",i[c],m+1);else if(p(i))for(P in i)s(l+"["+P+"]",i[P],m+1);else n(l,i);else if(Array.isArray(i))for(c=0,R=i.length;c<R;c++)n(i[c].name,i[c].value);else for(P in i)s(P,i[P],m+1);return r},u=s("",t).join("&").replace(/%5B%5D/g,"[]");return _e(e,u)}function Le(e,t){if(!t||e.indexOf(":")===-1)return e;let r=t;return e.replace(/:([a-zA-Z0-9_]+)/g,(a,n)=>{if(Object.prototype.hasOwnProperty.call(r,n)){let s=r[n];if(s!=null)return encodeURIComponent(String(s))}return a})}function ae(e){return e.includes("://")}var y=()=>Date.now(),Q=()=>{};function ge(e){let t=typeof e;return e==null?false:t===b||t==="number"||t==="boolean"||Array.isArray(e)?true:typeof globalThis!==h&&typeof globalThis.Buffer!==h&&globalThis.Buffer.isBuffer(e)||e instanceof Date||re(e)?false:!!(p(e)&&(Object.getPrototypeOf(e)===Object.prototype||typeof e.toJSON===g))}async function N(e){return new Promise(t=>setTimeout(()=>t(true),e))}function De(e,t=0){return t>=Ue?e:e&&p(e)&&typeof e.data!==h?De(e.data,t+1):e}function ne(e){if(!e)return {};let t={};if(e instanceof Headers)e.forEach((r,a)=>{t[a]=r;});else if(p(e))for(let[r,a]of Object.entries(e))t[r.toLowerCase()]=a;return t}function se(){return typeof window!==h&&typeof window.addEventListener===g}var Te=()=>{if(!se())return false;let e=navigator&&navigator.connection;return e&&["slow-2g","2g","3g"].includes(e.effectiveType)};async function w(e,t,...r){if(e){if(typeof e===g){let a=await e(t,...r);a&&p(t)&&p(a)&&Object.assign(t,a);}else if(Array.isArray(e))for(let a of e){let n=await a(t,...r);n&&p(t)&&p(n)&&Object.assign(t,n);}}}var oe=class extends Error{constructor(r,a,n){super(r);this.request=a;this.response=n;L(this,"status");L(this,"statusText");L(this,"config");L(this,"isCancelled");this.name="FetchError",this.status=n?n.status:0,this.statusText=n?n.statusText:"",this.config=a,this.isCancelled=false;}};var ie=class extends oe{constructor(t,r,a){super(t,r,a),this.name="ResponseError";}};var le=600,ue=1e3,mt=le*ue,k=Array(le).fill(0).map(()=>[]),q=new Map,z=0,E=null,je=([e,t])=>{q.delete(e);try{let r=t();r&&r instanceof Promise&&r.catch(Q);}catch(r){}},I=(e,t,r)=>{if(S(e),r>mt||r%ue!==0){q.set(e,[setTimeout(je.bind(null,[e,t]),r)]);return}let a=r/ue,n=(z+a)%le;k[n].push([e,t]),q.set(e,n),E||(E=setInterval(()=>{z=(z+1)%le,k[z].forEach(je),k[z]=[],!q.size&&E&&(clearInterval(E),E=null);},ue));},S=e=>{let t=q.get(e);t!==void 0&&(Array.isArray(t)?clearTimeout(t[0]):k[t].splice(k[t].findIndex(([r])=>r===e),1),q.delete(e),!q.size&&E&&(clearInterval(E),E=null));};var A=new Map;function Ke(e,t,r,a,n,s){if(!e)return new AbortController;let o=A.get(e),u=null;if(o){let i=o[0],m=o[3];if(!m&&y()-o[2]<a&&!i.signal.aborted)return i;m&&i.abort(new DOMException("Aborted due to new request",ee)),S(e),u=o[4];}let l=new AbortController;return A.set(e,[l,s,y(),n,u]),s&&I(e,()=>{Je(e,new DOMException(t+" aborted due to timeout",Se));},r),l}async function Je(e,t=null){if(e){let r=A.get(e);r&&(t&&r[0].abort(t),ce(e));}}function ce(e){S(e),A.delete(e);}function ze(e,t){let r=A.get(e);r&&(r[4]=t,A.set(e,r));}function be(e,t){if(!e)return null;let r=A.get(e);return r&&r[4]&&!r[3]&&y()-r[2]<t&&!r[0].signal.aborted?r[4]:null}function G(e){let t=0;for(let r=0,a=e.length;r<a;r++){let n=e.charCodeAt(r);t=t*31+n|0;}return String(t)}var pt=3*60*1e3,W=new Map,fe=new Map;function Ge(e,t=true){let r=e==="focus"?5:6,a=y();W.forEach(n=>{if(!n[r])return;n[1]=a;let s=t?n[4]:n[0];s&&Promise.resolve(s(t)).catch(Q);});}async function me(e,t=false){if(!e)return null;let r=W.get(e);if(r){r[1]=y();let a=t?r[4]:r[0];if(a)return await a(t)}return null}function dt(e){Rt(e);let t=e==="focus"?5:6;W.forEach((r,a)=>{r[t]&&yt(a);});}function ke(e){if(!se()||fe.has(e))return;let t=Ge.bind(null,e,true);fe.set(e,t),window.addEventListener(e,t);}function Rt(e){if(!se())return;let t=fe.get(e);t&&(window.removeEventListener(e,t),fe.delete(e));}function We(e,t,r,a,n,s,o){W.set(e,[t,y(),pt,a,n,s,o]),s&&ke("focus"),o&&ke("online"),a&&I("s:"+e,me.bind(null,e,true),a*1e3);}function yt(e){W.delete(e),S("s:"+e);}var v=new Map;function Pt(e){return v.has(e)||v.set(e,new Set),v.get(e)}function ht(e,t){Pt(e).add(t);}function gt(e,t){let r=v.get(e);r&&(r.delete(t),r.size===0&&v.delete(e));}function _(e,t){let r=v.get(e);if(r)if(r.size===1){let a=r.values().next().value;a(t);}else r.forEach(a=>a(t));}function Dt(e,t){return e?(ht(e,t),()=>{gt(e,t);}):Q}var Ee=(Te()?60:30)*1e3,U={strategy:te,timeout:Ee,headers:{Accept:j+", text/plain, */*","Accept-Encoding":"gzip, deflate, br"},retry:{delay:Ee/30,maxDelay:Ee,resetTimeout:true,backoff:1.5,retryOn:[408,409,425,429,500,502,503,504]}};function Tt(e){let t=J(e);return Object.assign(U,t),U}function Ve(){return {...U}}function Ce(e,t){if(!t)return Ye(e,Ve());let r=J(t),a=Y(U,r);return Ye(e,a)}function Ye(e,t){var i;let r=t.method;r=r?r.toUpperCase():O;let a;r!==O&&r!==ve&&(a=(i=t.body)!=null?i:t.data,a&&typeof a!==b&&ge(a)&&(a=JSON.stringify(a))),bt(t.headers,a);let n=t.withCredentials?"include":t.credentials,s=Le(e,t.urlPathParams),o=Me(s,t.params),l=ae(e)?"":t.baseURL||t.apiUrl||"";return t.url=l+o,t.method=r,t.credentials=n,t.body=a,t}function bt(e,t){if(!e||!t||t instanceof FormData||typeof Blob!==h&&t instanceof Blob||typeof File!==h&&t instanceof File||typeof ReadableStream!==h&&t instanceof ReadableStream)return;let r;if(re(t))r=x+"x-www-form-urlencoded";else if(t instanceof ArrayBuffer||ArrayBuffer.isView(t))r=x+"octet-stream";else if(ge(t))r=j+";"+Ne;else return;e instanceof Headers?e.has(C)||e.set(C,r):p(e)&&!Array.isArray(e)&&!e[C]&&(e[C]=r);}function Y(e,t){let r=Object.assign({},e,t);return $e("retry",r,e,t),$e("headers",r,e,t),xe("onRequest",r,e,t),xe("onResponse",r,e,t),xe("onError",r,e,t),r}function xe(e,t,r,a){let n=r[e],s=a[e];if(!n&&!s)return;if(!n){t[e]=s;return}if(!s){t[e]=n;return}let o=Array.isArray(n)?n:[n],u=Array.isArray(s)?s:[s];t[e]=e==="onResponse"?u.concat(o):o.concat(u);}function $e(e,t,r,a){a[e]&&(t[e]={...r[e],...a[e]});}var de=new Map,B="|",we=64,Ze=new RegExp("[^\\w\\-_|]","g"),Et=new Set(["accept","accept-language","accept-encoding","authorization","content-type","referer","origin","user-agent","cookie","x-api-key","x-requested-with","x-client-id","x-tenant-id","x-user-id","x-app-version","x-feature-flag","x-device-id","x-platform","x-session-id","x-locale"]);function $(e,t=true){let r=e.cacheKey;if(r&&t)return typeof r===b?r:r(e);let{url:a="",method:n=O,headers:s=null,body:o=null,credentials:u="same-origin"}=e,l="";if(s){let m;s instanceof Headers?m=ne(s):m=s;let c=Object.keys(m),R=c.length;R>1&&c.sort();let P="";for(let f=0;f<R;++f)Et.has(c[f].toLowerCase())&&(P+=c[f]+":"+m[c[f]]+";");l=G(P);}if(n===O)return (n+B+a+B+u+B+l).replace(Ze,"");let i="";if(o)if(typeof o===b)i=o.length<we?o:G(o);else if(o instanceof FormData)o.forEach((m,c)=>{i+=c+"="+m+"&";}),i.length>we&&(i=G(i));else if(typeof Blob!==h&&o instanceof Blob||typeof File!==h&&o instanceof File)i="BF"+o.size+o.type;else if(o instanceof ArrayBuffer||ArrayBuffer.isView(o))i="AB"+o.byteLength;else {let m=p(o)?JSON.stringify(He(o)):String(o);i=m.length>we?G(m):m;}return (n+B+a+B+u+B+l+B+i).replace(Ze,"")}function Xe(e){return e.expiry?y()>e.expiry:false}function xt(e){return e.stale?y()>e.stale:false}function Re(e){return de.get(e)}function ye(e,t,r,a){if(r===0){pe(e);return}let n=y(),s=r?r*1e3:0;de.set(e,{data:t,time:n,stale:a&&a>0?n+a*1e3:a,expiry:r===-1?void 0:n+s}),s>0&&I("c:"+e,()=>{pe(e,true);},s);}function pe(e,t=false){if(t){let r=Re(e);if(!r||!Xe(r))return}de.delete(e);}async function qe(e,t,r){if(!e)return null;let a=Re(e);if(!a)return null;let n=p(t)?J(t):t,s={...a.data,data:n},o={...a,data:s};return de.set(e,o),_(e,s),r&&r.refetch?await me(e):null}function Pe(e,t,r){if(!e||t===void 0||t===null)return null;let a=r.cacheBuster||U.cacheBuster;if(a&&a(r)||r.cache&&r.cache==="reload")return null;let n=Re(e);if(!n)return null;let s=Xe(n),o=xt(n);return s?(pe(e),null):!o||o&&!s?n.data:null}function Ie(e,t,r=false){let a=t.cacheKey;if(a){let n=t.cacheTime,s=t.skipCache;n&&(!r||t.cacheErrors)&&!(s&&s(e,t))&&ye(a,e,n,t.staleTime),_(a,e),ce(a);let o=t._prevKey;o&&ce(o);}}async function et(e){var n;if(!e)return null;let t=(n=e.headers)==null?void 0:n.get(C);t?t=t.toLowerCase().trim():t="";let r=t.split(";",1)[0],a;try{if(r.includes(j)||r.includes("+json"))a=await e.json();else if((r.includes("multipart/form-data")||r.includes(x+"x-www-form-urlencoded"))&&typeof e.formData===g)a=await e.formData();else if(r.includes(x+"octet-stream")&&typeof e.blob===g)a=await e.blob();else if(a=await e.text(),typeof a===b){let s=a.trim();if(s.startsWith("{")&&s.endsWith("}")||s.startsWith("[")&&s.endsWith("]"))try{a=JSON.parse(s);}catch(o){}}}catch(s){a=null;}return a}var Ae=(e,t,r=null)=>{let a=t.defaultResponse,n=t.cacheKey,s=qe.bind(null,n);if(!e)return {ok:false,error:r,data:a!=null?a:null,headers:null,config:t,mutate:s,isFetching:false,isSuccess:false,isError:true};let o=typeof Response===g&&e instanceof Response,u=e.data;a!==void 0&&(u==null||typeof u===K&&Object.keys(u).length===0)&&(e.data=u=a),t.flattenResponse&&(e.data=u=De(u)),t.select&&(e.data=u=t.select(u));let l=ne(e.headers);return o?{body:e.body,bodyUsed:e.bodyUsed,ok:e.ok,redirected:e.redirected,type:e.type,url:e.url,status:e.status,statusText:e.statusText,blob:()=>e.blob(),json:()=>e.json(),text:()=>e.text(),clone:()=>e.clone(),arrayBuffer:()=>e.arrayBuffer(),formData:()=>e.formData(),bytes:()=>e.bytes(),error:r,data:u,headers:l,config:t,mutate:s,isFetching:false,isSuccess:e.ok&&!r,isError:!!r}:(p(e)&&(e.error=r,e.headers=l,e.isFetching=false,e.mutate=s,e.isSuccess=e.ok&&!r,e.isError=!!r),e)};function tt(e){let t=Date.parse(e)-y();return isNaN(t)?null:Math.max(0,Math.floor(t))}function Ct(e){if(!e)return null;let t=e.headers||{},r=t["retry-after"];if(r){let o=Number(r);if(!isNaN(o)&&o>=0)return o*1e3;let u=tt(r);if(u!==null)return u}let a="ratelimit-reset",n=t[a+"-after"]||t["x-"+a+"-after"];if(n){let o=Number(n);if(!isNaN(o))return o*1e3}let s=t[a+"-at"]||t["x-"+a+"-at"];return s?tt(s):null}async function rt(e,t){let{retries:r=0,delay:a=0,backoff:n=1,maxDelay:s,retryOn:o=[],shouldRetry:u}=t,l=0,i=a,m=r>0?r:0,c;for(;l<=m;){if(l>0&&c){let f=c.config,H=f.onRetry;H&&(await w(H,c,l),f._isAutoKey&&(f._prevKey=f.cacheKey,f.cacheKey=$(f,false)));}c=await e(l>0,l);let R=c.error;if(!R){if(u&&l<m&&await u(c,l)){await N(i),i*=n||1,i=Math.min(i,s||i),l++;continue}break}if(await wt(c,l,m,u,o))break;if(R.status===429||R.status===503){let f=Ct(c);f!==null&&(i=f);}await N(i),i*=n||1,i=Math.min(i,s||i),l++;}return c}async function wt(e,t,r,a,n=[]){var o,u;if(t===r)return true;let s=null;return a&&(s=await a(e,t),s!==null)?!s:!(n||[]).includes((u=(o=e.error)==null?void 0:o.status)!=null?u:0)}async function at(e,t,r,a=0,n=0){if(!t)return e();let s=0,o;for(;(a===0||s<a)&&(n>0&&await N(n),o=await e(),s++,!(a>0&&s>=a||!t||r&&r(o,s)));)await N(t);return o}async function nt(e,t,r){let a=await t(e),n=a.error;if(!n)return Ie(a,r),a;r.onError&&await w(r.onError,n);let s=n.isCancelled;if(!s&&r.logger&&qt(r,"FETCH ERROR",n),Ie(a,r,true),!s||r.rejectCancelled){let u=r.strategy;if(u===te)return Promise.reject(n);u==="silent"&&await new Promise(()=>null);}return a}function st(e,t,r){e.status=e.status||(t==null?void 0:t.status)||0,e.statusText=e.statusText||(t==null?void 0:t.statusText)||"",e.config=e.request=r,e.response=t,e.isCancelled=e.name===ee;}function qt(e,...t){let r=e.logger;r&&r.warn&&r.warn(...t);}var Be={isFetching:true};async function he(e,t=null){let r=Ce(e,t),{timeout:a,cancellable:n,cacheKey:s,dedupeTime:o,cacheTime:u,staleTime:l,refetchOnFocus:i,refetchOnReconnect:m,pollingInterval:c=0}=r,R=u!==void 0||l!==void 0,P=!!(s||a||o||R||n||i||m),f=null;if(P&&(f=$(r)),f&&R){let T=Pe(f,u,r);if(T)return T}if(f&&o){let T=be(f,o);if(T)return T}let H=r.retry||{},{retries:ot=0,resetTimeout:it}=H,Fe=async(T=false,Qe=0)=>{Qe||(f&&!T&&(l?Pe(f,u,r)||(ye(f,Be,u,l),_(f,Be)):_(f,Be)),r.cacheKey=f);let Z=r.url,lt=Ke(f,Z,a,o||0,!!n,!!(a&&(!Qe||it))),D=r;D.signal=lt.signal;let X,d=null;try{r.onRequest&&await w(r.onRequest,D);let F=r.fetcher;if(d=F?await F(Z,D):await fetch(Z,D),p(d)&&(typeof Response===g&&d instanceof Response?d.data=await et(d):F&&("data"in d&&"body"in d||(d={data:d})),d.config=D,d.ok!==void 0&&!d.ok))throw new ie(`${D.method} to ${Z} failed! Status: ${d.status||null}`,D,d);X=Ae(d,D);let M=r.onResponse;M&&await w(M,X);}catch(F){let M=F;st(M,d,D),X=Ae(d,D,M);}return X},ut=ot>0?()=>rt(Fe,H):Fe,V=(T=false)=>nt(T,ut,r),Oe=c?at(V,c,r.shouldStopPolling,r.maxPollingAttempts,r.pollingDelay):V();return f&&(o&&ze(f,Oe),We(f,V,void 0,l,V,!!i,!!m)),Oe}function It(e){let t=e.endpoints;function r(n){return console.error(`Add ${n} to 'endpoints'.`),Promise.resolve(null)}let a={config:e,endpoints:t,async request(n,s={}){let o=t[n],u=o||{url:String(n)},l=u.url;if(l.startsWith("//"))throw new Error("Protocol-relative URLs are not allowed.");let i=ae(l)?(o==null?void 0:o.url)===l?Y(u,s):s:Y(Y(e,u),s);return he(l,i)}};return new Proxy(a,{get(n,s){return s in a?a[s]:t[s]?a.request.bind(null,s):r.bind(null,s)}})}
export{Je as abortRequest,I as addTimeout,Ce as buildConfig,It as createApiFetcher,pe as deleteCache,he as fetchf,he as fetchff,$ as generateCacheKey,Re as getCache,Pe as getCachedResponse,Ve as getDefaultConfig,be as getInFlightPromise,Te as isSlowConnection,qe as mutate,dt as removeRevalidators,me as revalidate,Ge as revalidateAll,ye as setCache,Tt as setDefaultConfig,Dt as subscribe};//# sourceMappingURL=index.mjs.map
//# sourceMappingURL=index.mjs.map