UNPKG

alova

Version:

The Request Toolkit For Ultimate Efficiency

2 lines (1 loc) 1.85 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).alovaFetch=t()}(this,(function(){"use strict";const e="undefined",t=Promise,o=Object,n=void 0,r=!0,a=!1,s=e=>clearTimeout(e);typeof window===e&&typeof process!==e&&process.browser;const c=e=>{const t=(n=e,o.prototype.toString.call(n));var n;return/^\[object (Blob|FormData|ReadableStream|URLSearchParams)\]$/i.test(t)||((e,t)=>e instanceof t)(e,ArrayBuffer)},i=e=>"string"===(e=>typeof e)(e)||c(e);return function(e={}){return(c,l)=>{const d=l.config,f=d.timeout||0,u=new AbortController,{data:p,headers:h}=c,y=/content-type/i.test(o.keys(h).join()),g=p&&"[object FormData]"===p.toString();y||g||(h["Content-Type"]="application/json; charset=UTF-8");const b=["",n,null,a];o.keys(h).forEach((e=>{var t,o;t=b,o=h[e],t.includes(o)&&delete h[e]}));const m=(e.customFetch||fetch)(c.url,{...d,method:c.type,signal:u.signal,body:i(p)?p:(w=p,JSON.stringify(w,v,j))});var w,v,j;let T,F=a;return f>0&&(T=((e,t=0)=>setTimeout(e,t))((()=>{F=r,u.abort()}),f)),{response:()=>m.then((e=>(s(T),e.clone())),(e=>(e=>t.reject(e))(F?((e,...t)=>new e(...t))(Error,"fetchError: network timeout"):e))),headers:()=>m.then((({headers:e})=>e),(()=>({}))),onDownload:async e=>{let t=a;const o=await m.catch((()=>{t=r}));if(!o)return;const{headers:s,body:c}=o.clone(),i=c?c.getReader():n,l=Number(s.get("Content-Length")||s.get("content-length")||0);if(l<=0)return;let d=0;if(i){const o=()=>i.read().then((({done:n,value:r=new Uint8Array})=>{if(!n&&!t)return d+=r.byteLength,e(d,l),o();t&&e(d,0)}));o()}},onUpload(){console.error("fetch API does'nt support uploading progress. please consider to change `@alova/adapter-xhr` or `@alova/adapter-axios`")},abort:()=>{u.abort(),s(T)}}}}}));