wonderful-fetch
Version:
A wrapper around fetch.
3 lines (2 loc) • 5.32 kB
JavaScript
var WonderfulFetch=(()=>{var s=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames,E=Object.getOwnPropertySymbols;var O=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable;var R=(r,e,t)=>e in r?s(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,l=(r,e)=>{for(var t in e||(e={}))O.call(e,t)&&R(r,t,e[t]);if(E)for(var t of E(e))C.call(e,t)&&R(r,t,e[t]);return r};var h=(r=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(r,{get:(e,t)=>(typeof require!="undefined"?require:e)[t]}):r)(function(r){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var N=(r,e)=>{for(var t in e)s(r,t,{get:e[t],enumerable:!0})},W=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of k(e))!O.call(r,a)&&a!==t&&s(r,a,{get:()=>e[a],enumerable:!(o=S(e,a))||o.enumerable});return r};var $=r=>W(s({},"__esModule",{value:!0}),r);var i=(r,e,t)=>new Promise((o,a)=>{var n=c=>{try{d(t.next(c))}catch(f){a(f)}},u=c=>{try{d(t.throw(c))}catch(f){a(f)}},d=c=>c.done?o(c.value):Promise.resolve(c.value).then(n,u);d((t=t.apply(r,e)).next())});var L={};N(L,{WonderfulFetch:()=>b,default:()=>H});function T(r,e){if(r=r||e.url,!r)throw new Error("No URL provided.");return e=e||{},e.timeout=e.timeout||6e4,e.tries=typeof e.tries=="undefined"?1:e.tries,e.log=typeof e.log=="undefined"?!1:e.log,e.method=(e.method||"get").toLowerCase(),e.cacheBreaker=typeof e.cacheBreaker=="undefined"?!0:e.cacheBreaker,e.contentType=(typeof e.contentType=="undefined"?"":e.contentType).toLowerCase(),e.response=(typeof e.response=="undefined"?"raw":e.response).toLowerCase(),e.output=typeof e.output=="undefined"?"body":e.output,e.authorization=typeof e.authorization=="undefined"?!1:e.authorization,e.attachResponseHeaders=typeof e.attachResponseHeaders=="undefined"?!1:e.attachResponseHeaders,e.download=e.download||!1,e.headers=e.headers||{},e.query=e.query||{},e.body=e.body||null,{url:r,options:e}}function j(r,e){let t=e.body&&typeof e.body=="object",o=t&&typeof e.body.append=="function",a={method:e.method.toUpperCase(),headers:l({},e.headers),body:null};if(e.body&&(o?a.body=e.body:t?a.body=JSON.stringify(e.body):a.body=e.body),(t&&!o||e.contentType==="json")&&(a.headers["Content-Type"]="application/json"),a.method==="GET"&&(delete a.body,delete a.headers["Content-Type"]),e.authorization){let d=e.authorization;a.headers.Authorization=d.match(/^Bearer |^Basic |^Digest /)?d:`Bearer ${d}`}let n=new URL(r);Object.keys(e.query).forEach(function(d){n.searchParams.set(d,e.query[d])});let u=e.cacheBreaker===!0?Math.floor(Date.now()/1e3):e.cacheBreaker;return u&&n.searchParams.set("cb",u),e.log&&console.log("Fetch configuration:",{bodyIsFormData:o,bodyIsObject:t,options:e,config:a}),{url:n.toString(),config:a}}function p(r){let e={};return!r||!r.headers||r.headers.forEach(function(t,o){try{e[o]=JSON.parse(t)}catch(a){e[o]=t}}),e}function q(r,e){return i(this,null,function*(){if(e.response==="raw")return r;let t=yield r.text();if(e.response==="json")try{return JSON.parse(t)}catch(o){throw new Error(`Response is not JSON: ${o}`)}return t})}function w(r,e,t){return t.output==="body"?e:{status:r.status,headers:p(r),body:e}}function z(r,e){let t=p(r);return r.text().then(function(o){let a=new Error(o||r.statusText||"Unknown error");if(a.status=r.status,t["bm-properties"])try{Object.keys(t["bm-properties"]).forEach(function(n){a[n]=t["bm-properties"][n]})}catch(n){console.warn("Failed to add bm-properties to error object",n)}return e.attachResponseHeaders&&Object.keys(t).forEach(function(n){n!=="bm-properties"&&(a[n]=t[n])}),a})}function D(r){return new Promise(function(e){setTimeout(e,r)})}function B(r,e){return i(this,null,function*(){let t=e.tries,o=t===0,a;for(let n=1;o||n<=t;n++){if(n>1){let c=Math.min(3e3*(n-1),6e4);yield D(c)}e.log&&console.log(`Fetch (${n}/${e.tries}): attempt`);let u,d;e.timeout>0&&(u=new AbortController,d=setTimeout(function(){u.abort()},e.timeout));try{let c=yield r(u?u.signal:void 0);return clearTimeout(d),c}catch(c){if(clearTimeout(d),c.name==="AbortError"?a=new Error("Request timed out"):a=c,!o&&n>=t)throw a}}})}function F(r,e){let{Readable:t}=h("stream"),o=h("fs-jetpack"),a=h("mime-types"),n=h("path");return new Promise(function(u,d){let c=r.headers.get("content-type"),f=(a.extension(c)||"").replace("jpeg","jpg");if(!o.exists(e.download)){let y=n.dirname(e.download);o.dir(y)}n.extname(e.download)||(e.download+=`.${f}`);let g=t.fromWeb(r.body),x=o.createWriteStream(e.download);g.pipe(x),g.on("error",function(y){d(new Error(`Failed to download: ${y}`))}),x.on("finish",function(){u({res:r,path:e.download})})})}function b(r,e){return i(this,null,function*(){let t=T(r,e);r=t.url,e=t.options;let{url:o,config:a}=j(r,e);return B(function(n){return i(this,null,function*(){let u=l({},a);n&&(u.signal=n);let d=typeof window!="undefined"&&window.fetch||globalThis.fetch;e.log&&console.log("Fetching:",o);let c=yield d(o,u);if(c.ok&&e.download){let m=yield F(c,e);return w(c,m,e)}if(!c.ok)throw yield z(c,e);let f=yield q(c,e);return w(c,f,e)})},e)})}typeof window!="undefined"&&(window.WonderfulFetch=b);var H=b;return $(L);})();
WonderfulFetch=WonderfulFetch.default||WonderfulFetch.WonderfulFetch||WonderfulFetch;