UNPKG

4.03 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 m 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 m&&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){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 p(e,...s){return O(e,s,(t,r)=>{const{headers:n}=r;return n&&(r.headers=Object.assign({},t.headers||{},n)),r})}function v(e){Object.assign(w,p(w,e))}function S(e,s){let[t,r]=`${e||"/"}/${s||"/"}`.split("?");const[n,a]=t.match(/([a-z][a-z\d+\-.]*:)\/\//gi)||[];if(a)return s;if(n){if(!t.startsWith(n))return s;t=t.replace(n,"")}const o=[];for(const i of t.split("/"))i===".."?o.pop():i&&i!=="."&&o.push(i);return t=`${n||"/"}${o.join("/")}`,r?`${t}?${r}`:t}function k(e){const{baseUrl:s="",url:t="",params:r={},headers:n={}}=e;if(!t)throw new Error("[Fatcher] URL is required.");const[a,o]=S(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 $(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 q(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 l=e[u];if(!l)return n;d&&(a=$(a,d),o=g(a));try{return n=await l.use(o,async h=>i(u+1,h))}catch(h){return Promise.reject(h)}}return i(0)}}function A(){return{name:"fatcher-middleware-fetch",async use(e){let{url:s="",requestHeaders:t,payload:r,method:n="GET",body:a,params:o,validateCode:i,...u}=e;const d=t.get("content-type");["GET","HEAD"].includes(n)?(o=Object.assign({},o,a),a=null):r&&d&&(d.includes("application/json")&&(a=JSON.stringify(r)),d.includes("application/x-www-form-urlencoded")&&(a=new URLSearchParams(r))),Object.keys(o).length&&(s=`${s}?${new URLSearchParams(o)}`);const l=await fetch(s,{...u,headers:t,body:a,method:n}),{status:h,statusText:T,ok:U,headers:M}=l,C={status:h,statusText:T,headers:M,url:s,data:l};return(i?i(h):U)?C:Promise.reject(new m(e,l))}}}async function y(e){var s;let t=[];for await(const r of e)if(Array.isArray(r))t=t.concat(await y(r));else{let n=[R(r)?await r():r];(s=n[0].presets)!=null&&s.length&&(n=(await y(n[0].presets)).concat(n)),t=t.concat(n)}return t}async function _(e={}){const s=p(w,e),{middlewares:t=[],...r}=s,n=await y([...t,A]),a=q(n),o=k(r),i=await a(o),u=f(i.data)?i.data.body:i.data;return{...i,options:s,data:u}}function P(e={}){return function(t,r,n={}){const a=p(e,{...n,url:t,payload:r});return _(a)}}c.FatcherError=m,c.canActivate=f,c.chunkStreamReader=j,c.createScopedRequest=P,c.fatcher=_,c.isAbortError=E,c.isFatcherError=F,c.mergeOptions=p,c.readStreamByChunk=b,c.setDefaultOptions=v,Object.defineProperty(c,"__esModule",{value:!0})});