simple-typed-fetch
Version:
Making HTTP requests human way
2 lines • 2.88 kB
JavaScript
;var O=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var R=(r,a)=>{for(var o in a)O(r,o,{get:a[o],enumerable:!0})},x=(r,a,o,p)=>{if(a&&typeof a=="object"||typeof a=="function")for(let n of w(a))!D.call(r,n)&&n!==o&&O(r,n,{get:()=>a[n],enumerable:!(p=I(a,n))||p.enumerable});return r};var U=r=>x(O({},"__esModule",{value:!0}),r);var k={};R(k,{fetchWithValidation:()=>m,simpleFetch:()=>T});module.exports=U(k);var F=require("warp-isomorphic");var t=require("neverthrow");async function m(r,a,o,p){let n={...o,headers:o?.headers??{}},E={requestOptions:n,url:r},$=await(0,t.fromPromise)(fetch(r,n),e=>e instanceof Error?(0,t.err)({type:"fetchError",...E,message:`Fetch error: ${e.message}. URL: ${r}`,error:e}):(0,t.err)({type:"unknownFetchThrow",...E,message:`Unknown fetch error. URL: ${r}`,error:e}));if($.isErr())return $.error;let s=$.value,d={...E,response:s},h=await(0,t.fromPromise)(s.text(),e=>e instanceof Error?(0,t.err)({type:"unknownGetTextError",...d,message:`Can't get response content: ${e.message}. URL: ${r}. HTTP ${s.status}`,error:e}):(0,t.err)({type:"unknownGetTextUnknownError",...d,message:`Can't get response content: Unknown error. URL: ${r}. HTTP ${s.status}`,error:e}));if(h.isErr())return h.error;let i=h.value,c={...d,text:i},u=(0,t.fromThrowable)(JSON.parse,e=>e instanceof Error?(0,t.err)({type:"jsonParseError",...c,message:`Can't parse response as JSON: ${e.message}. URL: ${r}. HTTP ${s.status}. Original response: ${i}`,error:e}):(0,t.err)({type:"jsonParseUnknownError",...c,message:`Unknown JSON parse error. URL: ${r}. HTTP ${s.status}. Original response: ${i}`,error:e}))(i);if(u.isErr()){let e=a.safeParse(i);return e.success?(0,t.ok)({...c,data:e.data}):(0,t.err)({type:"jsonParseError",...c,message:`Can't parse response as JSON: ${u.error.error.message}. URL: ${r}. HTTP ${s.status}. Original response: ${i}`,error:u.error.error})}let g=u.value,f;if(p){let e=p.safeParse(g);e.success&&(f=e.data)}if(s.status>=500)return(0,t.err)({type:"serverError",...c,message:`Server error. URL: ${r}. HTTP ${s.status} ${s.statusText}. Original response: ${i}. ${f?`Data: ${JSON.stringify(f)}`:""}`});if(s.status>=400)return(0,t.err)({type:"clientError",...c,message:`Error: ${s.status} ${s.statusText}. URL: ${r}. HTTP ${s.status}. Original response: ${i}`,errorMetadata:f});let y=a.safeParse(g);if(!y.success){let e=y.error.issues.map(l=>`[${l.path.join(".")}] ${l.message}`).join(", ");return(0,t.err)({type:"payloadParseError",...c,message:`Can't recognize response payload: ${e}. URL: ${r}. HTTP ${s.status}. Original response: ${i}`})}return(0,t.ok)({...c,data:y.data})}function T(r){return async(...a)=>{let o=await r(...a);if(o.isErr()){let{message:p,url:n}=o.error;throw new Error(`${p} (${n})`)}return o.value.data}}
//# sourceMappingURL=index.cjs.map