UNPKG

4.12 kBJavaScriptView Raw
1(function(c,f){typeof exports=="object"&&typeof module<"u"?f(exports):typeof define=="function"&&define.amd?define(["exports"],f):(c=typeof globalThis<"u"?globalThis:c||self,f(c.Fatcher={}))})(this,function(c){"use strict";function f(e){return e instanceof Response&&!e.bodyUsed&&!!e.body}function E(e){return e instanceof DOMException&&e.name==="AbortError"}async function b(e,r){async function t(n){const{value:s,done:a}=await n.read();a||!s||(r(s),await t(n))}return t(e.getReader())}const S=b;class m extends Error{constructor(r,t){super(`[Fatcher] Fetch failed with status code ${t.status}`);this.name="FatcherError",this.__isFatcherError__=!0,this._response=t,this._context=r}toJSON(){const r={};for(const[t,n]of this._response.headers)r[t]=n;return{status:this._response.status,statusText:this._response.statusText,context:this._context,headers:r,data:this._response.body}}}function F(e){return e instanceof m&&e.name==="FatcherError"&&e.__isFatcherError__}const p={baseUrl:"/",middlewares:[],headers:{"Content-Type":"application/x-www-form-urlencoded"},params:{},credentials:"same-origin",cache:"default",redirect:"follow",referrerPolicy:"no-referrer-when-downgrade",mode:"cors"};function v(e){return/^http(s)?:\/\/.+/.test(e)}function g(e){let r;return e.replace(/http(s?):\/\//,t=>(r=t,"")).replace(/\/\/(\/)?/g,"/").replace(/.*\S/,t=>(r??"")+t)}function R(e,r){return r?v(r)?g(r):e==="/"?r:g(`${e}/${r}`):e}function k(e){return typeof e=="function"}function O(e){return new Proxy(e,{set(){return!0}})}function _(e,r,t){return r.reduce((n,s)=>Object.assign(n,t(n,s)),Object.assign(Object.create(null),e))}function h(e,...r){return _(e,r,(t,n)=>{const{headers:s}=n;return s&&(n.headers=Object.assign({},t.headers||{},s)),n})}function P(e){Object.assign(p,h(p,e))}function U(e){const{baseUrl:r="",url:t="",params:n={},headers:s={}}=e;if(!t)throw new Error("[Fatcher] URL is required.");const[a,u]=R(r,t).split("?");if(u)for(const[o,d]of new URLSearchParams(u))n[o]=d;const i=new Headers;for(const[o,d]of Object.entries(s))d&&i.set(o,d);return{...e,url:a,params:n,requestHeaders:i}}function q(e,...r){return _(e,r,(t,n)=>{const{headers:s}=n;if(s){n.headers=Object.assign(t.headers||{},s);for(const[a,u]of Object.entries(s))u&&e.requestHeaders.set(a,u)}return n})}function A(e){return function(t){let n=-1,s,a=t,u=O(a);async function i(o,d){if(o<=n)return Promise.reject(new Error(`Middleware <${e[o-1].name}> call next() more than once.`));n=o;const l=e[o];if(!l)return s;d&&(a=q(a,d),u=O(a));try{return s=await l.use(u,async w=>i(o+1,w))}catch(w){return Promise.reject(w)}}return i(0)}}function M(){return{name:"fatcher-middleware-http-fetcher",async use(e){const{url:r="",requestHeaders:t,...n}=e,s=await fetch(r,{...n,headers:t}),{status:a,statusText:u,ok:i,headers:o}=s,d={status:a,statusText:u,headers:o,url:r,data:s};return i?d:Promise.reject(new m(e,s))}}}function T(){return{name:"fatcher-middleware-payload-consumer",use(e,r){const{payload:t,url:n,requestHeaders:s,method:a,body:u,params:i={}}=e,o=s.get("content-type");let d=n;if(["GET","HEAD"].includes(a))return Object.keys(i).length&&(d=`${n}?${new URLSearchParams(Object.assign({},i,u)).toString()}`),r({url:d,body:null});let l=u;return t&&(o?.includes("application/json")&&(l=JSON.stringify(t)),o?.includes("application/x-www-form-urlencoded")&&(l=new URLSearchParams(t))),Object.keys(i).length&&(d=`${n}?${new URLSearchParams(i).toString()}`),r({url:d,body:l})}}}function y(e){return e.reduce((r,t)=>{var n;let s;return Array.isArray(t)?s=y(t):(s=[k(t)?t():t],(n=s[0].presets)!=null&&n.length&&(s=y(s[0].presets).concat(s))),r.concat(s)},[])}async function j(e={}){const r=h(p,e),{middlewares:t=[],...n}=r,s=y([...t,T,M]),a=A(s),u=U(n),i=await a(u),o=f(i.data)?i.data.body:i.data;return{...i,options:r,data:o}}function $(e={}){return function(t,n,s={}){const a=h(e,{...s,url:t,payload:n});return j(a)}}c.FatcherError=m,c.canActivate=f,c.chunkStreamReader=S,c.createScopedRequest=$,c.fatcher=j,c.isAbortError=E,c.isFatcherError=F,c.mergeOptions=h,c.readStreamByChunk=b,c.setDefaultOptions=P,Object.defineProperty(c,"__esModule",{value:!0})});