@cardbrother/up-fetch
Version:
Advanced fetch client builder for typescript.
2 lines • 2.94 kB
JavaScript
var p=class extends Error{constructor(t,r,a){super(`Request failed with status ${t.status}`),this.data=r,this.name="ResponseError",this.response=t,this.status=t.status,this.options=a}},g=e=>e instanceof p;var y=class extends Error{constructor(t,r){super("Validation error"),this.name="ValidationError",this.issues=t.issues,this.data=r}},D=e=>e instanceof y;var T=(...e)=>{let t={};return e.forEach(r=>{new Headers(r).forEach((a,s)=>{a==="null"||a==="undefined"?delete t[s]:t[s]=a})}),t},O=(e,t)=>"any"in AbortSignal?AbortSignal.any([e,t&&AbortSignal.timeout(t)].filter(Boolean)):e,S=(e,t,r)=>typeof t!="string"?{}:F({...u(e,[...new URL(t,"http://a").searchParams.keys()]),...r}),u=(e,t=[])=>{let r={...e};for(let a in r)t.includes(a)&&delete r[a];return r},F=e=>{let t={...e};for(let r in t)t[r]===void 0&&delete t[r];return t},h=e=>!e||typeof e!="object"||e instanceof FormData?!1:e?.constructor?.name==="Object"||Array.isArray(e)||typeof e?.toJSON=="function",l={};function R(e="",t,r){if(typeof t!="string")return t;let a=/^https?:\/\//.test(t)?t:!e||!t?e+t:e.replace(/\/$/,"")+"/"+t.replace(/^\//,"");return r&&(a+=(a.includes("?")?"&":"?")+r.replace(/^\?/,"")),a}async function b(e,t){let r=await e["~standard"].validate(t);if(r.issues)throw new y(r,t);return r.value}var f={parseResponse:e=>e.clone().json().catch(()=>e.text()).then(t=>t||null),parseRejected:async(e,t)=>new p(e,await f.parseResponse(e,t),t),serializeParams:e=>new URLSearchParams(JSON.parse(JSON.stringify(e))).toString(),serializeBody:e=>h(e)?JSON.stringify(e):e,reject:e=>!e.ok};var E=["onRequest","onSuccess","onError"],x=(e,t=l,r=l)=>{e=e?.href??e;let a={...f,...t,...r},s=r.body,o=S(t.params,e,r.params),n=s==null?s:a.serializeBody(s);return a.parseResponseError&&w("parseResponseError","parseRejected"),a.throwResponseError&&w("throwResponseError","reject"),F({...u(a,E),params:o,rawBody:s,body:n,signal:O(a.signal,a.timeout),headers:T(h(s)&&typeof n=="string"?{"content-type":"application/json"}:{},t.headers,r.headers),reject:r.reject??r.throwResponseError??t.reject??t.throwResponseError??f.reject,parseRejected:r.parseRejected??r.parseResponseError??t.parseRejected??t.parseResponseError??f.parseRejected,input:R(a.baseUrl,e,a.serializeParams(o))})};function w(e,t){console.warn(`Deprecation warning: \`${e}\` will be renamed \`${t}\` in v2.0`)}function P(e,t=()=>l){return async(r,a=l,s)=>{let o=t(r,a,s),n=x(r,o,a);return await o?.onRequest?.(n),e(n.input,n,s).catch(c=>{throw o.onError?.(c,n),c}).then(async c=>{if(await n.reject(c)){let i;try{i=await n.parseRejected(c,n)}catch(d){throw o.onError?.(d,n),d}throw o.onError?.(i,n),i}else{let i;try{i=await n.parseResponse(c,n)}catch(m){throw o.onError?.(m,n),m}let d;try{d=n.schema?await b(n.schema,i):i}catch(m){throw o.onError?.(m,n),m}return o.onSuccess?.(d,n),d}})}}export{p as ResponseError,h as isJsonifiable,g as isResponseError,D as isValidationError,P as up};
//# sourceMappingURL=index.js.map