UNPKG

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