fetchff
Version:
<div align="center"> <img src="./docs/logo.png" alt="logo" width="380"/>
3 lines • 14.3 kB
JavaScript
;var x="application/",L=x+"json",Qe="charset=utf-8",C="Content-Type",h="undefined",j="object",b="string",g="function",X="AbortError",Ne="TimeoutError",O="GET",Se="HEAD",ee="reject";var _e=10;function te(e){return e instanceof URLSearchParams}function p(e){return e!==null&&typeof e===j}function K(e){let t={...e};return delete t.__proto__,delete t.constructor,delete t.prototype,t}function Ue(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 ve(e,t){return t?e.includes("?")?`${e}&${t}`:`${e}?${t}`:e}function He(e,t){if(!t)return e;if(te(t)){let l=t.toString();return ve(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>=_e)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]===j&&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 ve(e,u)}function Me(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 re(e){return e.includes("://")}var y=()=>Date.now(),Q=()=>{};function he(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||te(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 ge(e,t=0){return t>=_e?e:e&&p(e)&&typeof e.data!==h?ge(e.data,t+1):e}function ae(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 ne(){return typeof window!==h&&typeof window.addEventListener===g}var De=()=>{if(!ne())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 se=class extends Error{constructor(r,a,n){super(r);this.request=a;this.response=n;this.name="FetchError",this.status=n?n.status:0,this.statusText=n?n.statusText:"",this.config=a,this.isCancelled=false;}status;statusText;config;isCancelled};var oe=class extends se{constructor(t,r,a){super(t,r,a),this.name="ResponseError";}};var ue=600,ie=1e3,lt=ue*ie,z=Array(ue).fill(0).map(()=>[]),q=new Map,J=0,E=null,Le=([e,t])=>{q.delete(e);try{let r=t();r&&r instanceof Promise&&r.catch(Q);}catch{}},I=(e,t,r)=>{if(S(e),r>lt||r%ie!==0){q.set(e,[setTimeout(Le.bind(null,[e,t]),r)]);return}let a=r/ie,n=(J+a)%ue;z[n].push([e,t]),q.set(e,n),E||(E=setInterval(()=>{J=(J+1)%ue,z[J].forEach(Le),z[J]=[],!q.size&&E&&(clearInterval(E),E=null);},ie));},S=e=>{let t=q.get(e);t!==void 0&&(Array.isArray(t)?clearTimeout(t[0]):z[t].splice(z[t].findIndex(([r])=>r===e),1),q.delete(e),!q.size&&E&&(clearInterval(E),E=null));};var A=new Map;function je(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",X)),S(e),u=o[4];}let l=new AbortController;return A.set(e,[l,s,y(),n,u]),s&&I(e,()=>{Ke(e,new DOMException(t+" aborted due to timeout",Ne));},r),l}async function Ke(e,t=null){if(e){let r=A.get(e);r&&(t&&r[0].abort(t),le(e));}}function le(e){S(e),A.delete(e);}function Je(e,t){let r=A.get(e);r&&(r[4]=t,A.set(e,r));}function Te(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 k(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 ct=3*60*1e3,G=new Map,ce=new Map;function ke(e,t=true){let r=e==="focus"?5:6,a=y();G.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 fe(e,t=false){if(!e)return null;let r=G.get(e);if(r){r[1]=y();let a=t?r[4]:r[0];if(a)return await a(t)}return null}function ft(e){mt(e);let t=e==="focus"?5:6;G.forEach((r,a)=>{r[t]&&pt(a);});}function ze(e){if(!ne()||ce.has(e))return;let t=ke.bind(null,e,true);ce.set(e,t),window.addEventListener(e,t);}function mt(e){if(!ne())return;let t=ce.get(e);t&&(window.removeEventListener(e,t),ce.delete(e));}function Ge(e,t,r,a,n,s,o){G.set(e,[t,y(),ct,a,n,s,o]),s&&ze("focus"),o&&ze("online"),a&&I("s:"+e,fe.bind(null,e,true),a*1e3);}function pt(e){G.delete(e),S("s:"+e);}var v=new Map;function dt(e){return v.has(e)||v.set(e,new Set),v.get(e)}function Rt(e,t){dt(e).add(t);}function yt(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 Pt(e,t){return e?(Rt(e,t),()=>{yt(e,t);}):Q}var be=(De()?60:30)*1e3,U={strategy:ee,timeout:be,headers:{Accept:L+", text/plain, */*","Accept-Encoding":"gzip, deflate, br"},retry:{delay:be/30,maxDelay:be,resetTimeout:true,backoff:1.5,retryOn:[408,409,425,429,500,502,503,504]}};function ht(e){let t=K(e);return Object.assign(U,t),U}function $e(){return {...U}}function xe(e,t){if(!t)return We(e,$e());let r=K(t),a=W(U,r);return We(e,a)}function We(e,t){let r=t.method;r=r?r.toUpperCase():O;let a;r!==O&&r!==Se&&(a=t.body??t.data,a&&typeof a!==b&&he(a)&&(a=JSON.stringify(a))),gt(t.headers,a);let n=t.withCredentials?"include":t.credentials,s=Me(e,t.urlPathParams),o=He(s,t.params),l=re(e)?"":t.baseURL||t.apiUrl||"";return t.url=l+o,t.method=r,t.credentials=n,t.body=a,t}function gt(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(te(t))r=x+"x-www-form-urlencoded";else if(t instanceof ArrayBuffer||ArrayBuffer.isView(t))r=x+"octet-stream";else if(he(t))r=L+";"+Qe;else return;e instanceof Headers?e.has(C)||e.set(C,r):p(e)&&!Array.isArray(e)&&!e[C]&&(e[C]=r);}function W(e,t){let r=Object.assign({},e,t);return Ye("retry",r,e,t),Ye("headers",r,e,t),Ee("onRequest",r,e,t),Ee("onResponse",r,e,t),Ee("onError",r,e,t),r}function Ee(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 Ye(e,t,r,a){a[e]&&(t[e]={...r[e],...a[e]});}var pe=new Map,B="|",Ce=64,Ve=new RegExp("[^\\w\\-_|]","g"),Dt=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 Y(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=ae(s):m=s;let c=Object.keys(m),R=c.length;R>1&&c.sort();let P="";for(let f=0;f<R;++f)Dt.has(c[f].toLowerCase())&&(P+=c[f]+":"+m[c[f]]+";");l=k(P);}if(n===O)return (n+B+a+B+u+B+l).replace(Ve,"");let i="";if(o)if(typeof o===b)i=o.length<Ce?o:k(o);else if(o instanceof FormData)o.forEach((m,c)=>{i+=c+"="+m+"&";}),i.length>Ce&&(i=k(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(Ue(o)):String(o);i=m.length>Ce?k(m):m;}return (n+B+a+B+u+B+l+B+i).replace(Ve,"")}function Ze(e){return e.expiry?y()>e.expiry:false}function Tt(e){return e.stale?y()>e.stale:false}function de(e){return pe.get(e)}function Re(e,t,r,a){if(r===0){me(e);return}let n=y(),s=r?r*1e3:0;pe.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,()=>{me(e,true);},s);}function me(e,t=false){if(t){let r=de(e);if(!r||!Ze(r))return}pe.delete(e);}async function we(e,t,r){if(!e)return null;let a=de(e);if(!a)return null;let n=p(t)?K(t):t,s={...a.data,data:n},o={...a,data:s};return pe.set(e,o),_(e,s),r&&r.refetch?await fe(e):null}function ye(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=de(e);if(!n)return null;let s=Ze(n),o=Tt(n);return s?(me(e),null):!o||o&&!s?n.data:null}function qe(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))&&Re(a,e,n,t.staleTime),_(a,e),le(a);let o=t._prevKey;o&&le(o);}}async function Xe(e){if(!e)return null;let t=e.headers?.get(C);t?t=t.toLowerCase().trim():t="";let r=t.split(";",1)[0],a;try{if(r.includes(L)||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 n=a.trim();if(n.startsWith("{")&&n.endsWith("}")||n.startsWith("[")&&n.endsWith("]"))try{a=JSON.parse(n);}catch{}}}catch{a=null;}return a}var Ie=(e,t,r=null)=>{let a=t.defaultResponse,n=t.cacheKey,s=we.bind(null,n);if(!e)return {ok:false,error:r,data: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===j&&Object.keys(u).length===0)&&(e.data=u=a),t.flattenResponse&&(e.data=u=ge(u)),t.select&&(e.data=u=t.select(u));let l=ae(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 et(e){let t=Date.parse(e)-y();return isNaN(t)?null:Math.max(0,Math.floor(t))}function bt(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=et(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?et(s):null}async function tt(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=Y(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 Et(c,l,m,u,o))break;if(R.status===429||R.status===503){let f=bt(c);f!==null&&(i=f);}await N(i),i*=n||1,i=Math.min(i,s||i),l++;}return c}async function Et(e,t,r,a,n=[]){if(t===r)return true;let s=null;return a&&(s=await a(e,t),s!==null)?!s:!(n||[]).includes(e.error?.status??0)}async function rt(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 at(e,t,r){let a=await t(e),n=a.error;if(!n)return qe(a,r),a;r.onError&&await w(r.onError,n);let s=n.isCancelled;if(!s&&r.logger&&xt(r,"FETCH ERROR",n),qe(a,r,true),!s||r.rejectCancelled){let u=r.strategy;if(u===ee)return Promise.reject(n);u==="silent"&&await new Promise(()=>null);}return a}function nt(e,t,r){e.status=e.status||t?.status||0,e.statusText=e.statusText||t?.statusText||"",e.config=e.request=r,e.response=t,e.isCancelled=e.name===X;}function xt(e,...t){let r=e.logger;r&&r.warn&&r.warn(...t);}var Ae={isFetching:true};async function Pe(e,t=null){let r=xe(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=Y(r)),f&&R){let T=ye(f,u,r);if(T)return T}if(f&&o){let T=Te(f,o);if(T)return T}let H=r.retry||{},{retries:st=0,resetTimeout:ot}=H,Be=async(T=false,Oe=0)=>{Oe||(f&&!T&&(l?ye(f,u,r)||(Re(f,Ae,u,l),_(f,Ae)):_(f,Ae)),r.cacheKey=f);let V=r.url,ut=je(f,V,a,o||0,!!n,!!(a&&(!Oe||ot))),D=r;D.signal=ut.signal;let Z,d=null;try{r.onRequest&&await w(r.onRequest,D);let F=r.fetcher;if(d=F?await F(V,D):await fetch(V,D),p(d)&&(typeof Response===g&&d instanceof Response?d.data=await Xe(d):F&&("data"in d&&"body"in d||(d={data:d})),d.config=D,d.ok!==void 0&&!d.ok))throw new oe(`${D.method} to ${V} failed! Status: ${d.status||null}`,D,d);Z=Ie(d,D);let M=r.onResponse;M&&await w(M,Z);}catch(F){let M=F;nt(M,d,D),Z=Ie(d,D,M);}return Z},it=st>0?()=>tt(Be,H):Be,$=(T=false)=>at(T,it,r),Fe=c?rt($,c,r.shouldStopPolling,r.maxPollingAttempts,r.pollingDelay):$();return f&&(o&&Je(f,Fe),Ge(f,$,void 0,l,$,!!i,!!m)),Fe}function Ct(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=re(l)?o?.url===l?W(u,s):s:W(W(e,u),s);return Pe(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)}})}
exports.abortRequest=Ke;exports.addTimeout=I;exports.buildConfig=xe;exports.createApiFetcher=Ct;exports.deleteCache=me;exports.fetchf=Pe;exports.fetchff=Pe;exports.generateCacheKey=Y;exports.getCache=de;exports.getCachedResponse=ye;exports.getDefaultConfig=$e;exports.getInFlightPromise=Te;exports.isSlowConnection=De;exports.mutate=we;exports.removeRevalidators=ft;exports.revalidate=fe;exports.revalidateAll=ke;exports.setCache=Re;exports.setDefaultConfig=ht;exports.subscribe=Pt;//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map