react-box-tools
Version:
Box tools react components, utils and hooks
2 lines (1 loc) • 2.91 kB
JavaScript
var m=Object.defineProperty;var w=(n,e,t)=>e in n?m(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var i=(n,e,t)=>w(n,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class p{constructor(e={headers:{}}){i(this,"onReq",e=>e);i(this,"onRes",e=>e);i(this,"interceptors",{onRequest:this.onReq,onResponse:this.onRes});i(this,"baseUrl","");i(this,"config",{headers:{}});this.config=e}create(e){return new p(e)}processError(e,t){const s={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",413:"Payload Too Large",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",ERR_NETWORK:"Network Error",ERR_TIMEOUT:"Timeout Error",ERR_UNKNOWN:"Unknown Error"};let c;t&&(t instanceof TypeError&&t.message==="Failed to fetch"?e.code="ERR_NETWORK":t instanceof Error&&t.message==="Timed out"?e.code="ERR_TIMEOUT":typeof t=="object"&&t.response&&t.response.status?c=`Error ${t.response.status}: ${t.response.statusText}`:c=`Error ${t}`),e.message=s[e.code]||c||`An error code ${e.code} has occurred`}async request(e,t,s,c){let u={method:t,...s,headers:{...this.config.headers,...s==null?void 0:s.headers}},o={baseUrl:this.baseUrl,url:e,method:t,code:"ERR_UNKNOWN",message:""};await this.interceptors.onRequest(u);const E=fetch(this.baseUrl+e,u),l=(s==null?void 0:s.timeout)||this.config.timeout||3e4,R=new Promise((r,a)=>{setTimeout(async()=>{o.code="ERR_TIMEOUT",this.processError(o),a(async()=>{this.interceptors.onError?await this.interceptors.onError(o):new Error(o.message)})},l)});try{const r=await Promise.race([E,R]);let a;var h=r.status;if(r.ok)switch(c){case"text":a=await r.text();break;case"blob":a=await r.blob();break;case"arrayBuffer":a=await r.arrayBuffer();break;case"formData":a=await r.formData();break;case"unknown":a=r;break;default:a=await r.json();break}else h>=400&&h<=599&&(o.code=h,o.message=r.statusText,this.processError(o),this.interceptors.onError&&await this.interceptors.onError(o));const d={data:a??{},req:u,res:{headers:Object.fromEntries(r.headers),status:r.status,statusText:r.statusText,redirected:r.redirected,ok:r.ok,type:r.type,url:r.url}};return await this.interceptors.onResponse(d),d}catch(r){throw this.processError(o,r),this.interceptors.onError&&await this.interceptors.onError(o),o.message}}get(e,t,s){return this.request(e,"get",t,s)}post(e,t,s){return this.request(e,"post",t,s)}put(e,t,s){return this.request(e,"put",t,s)}delete(e,t,s){return this.request(e,"delete",t,s)}patch(e,t,s){return this.request(e,"patch",t,s)}head(e,t,s){return this.request(e,"head",t,s)}options(e,t,s){return this.request(e,"options",t,s)}cleanup(){this.interceptors.onRequest=this.onReq,this.interceptors.onResponse=this.onRes,this.interceptors.onError=void 0,this.baseUrl="",this.config={headers:{}}}}const b=new p;exports.fetchApi=b;
;