@alova/adapter-xhr
Version:
XMLHttpRequest adapter for alova.js
2 lines (1 loc) • 2.7 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).AlovaAdapterXhr={})}(this,(function(e){"use strict";const t="undefined",s=Object,o=void 0,r=!0,n=!1;typeof window===t&&typeof process!==t&&process.browser;const a=()=>{},i=e=>s.prototype.toString.call(e),d=e=>{const t=[];let s=[],r=0,n=0;var a,i,d;return a=e,i=(e,a)=>{if(""!==e)if("object"==typeof a&&null!==a)s.push(e),n+=Object.keys(a).length;else if(a!==o){const o=[...s,e].map(((e,t)=>t>0?`[${e}]`:e)).join("");t.push(`${o}=${a}`),r>=n-1?(s=[],r=0,n=0):r+=1}return a},JSON.stringify(a,i,d),t.join("&")},p=e=>{const t=e.trim().split(/[\r\n]+/),s={};return t.forEach((e=>{const[t,o]=e.split(/:\s*/);s[t]=o})),s},l=e=>((e,...t)=>new e(...t))(Error,e),u=e=>"string"===(e=>typeof e)(e)||(e=>{const t=i(e);return/^\[object (Blob|FormData|ReadableStream|URLSearchParams)\]$/i.test(t)||(s=ArrayBuffer,e instanceof s);var s})(e);e.xhrMockResponse=({status:e,statusText:t,body:s,responseHeaders:o})=>({response:{data:s,status:e,statusText:t,headers:o},headers:o}),e.xhrRequestAdapter=function({onCreate:e=a}={}){return({type:t,url:c,data:f=null,headers:h},y)=>{const{config:b}=y,{auth:m,withCredentials:j,mimeType:w,responseType:T}=b;let v,g=a,x=a;const E=new Promise(((a,y)=>{try{v=new XMLHttpRequest,v.open(t,c,r,null==m?void 0:m.username,null==m?void 0:m.password),T&&"json"!==T&&(v.responseType=T),v.timeout=b.timeout||0,j===r&&(v.withCredentials=j),w&&v.overrideMimeType(w);let E=n;const L=/content-type/i.test(s.keys(h).join()),O=f&&"[object FormData]"===f.toString();L||O||(h["Content-Type"]="application/json; charset=UTF-8");const R=["",o,null,n];Object.keys(h).forEach((e=>{var t,s;/content-type/i.test(e)&&(E=/application\/x-www-form-urlencoded/i.test(h[e])),t=R,s=h[e],t.includes(s)||v.setRequestHeader(e,h[e])})),v.addEventListener("progress",(e=>{g(e.loaded,e.total)})),v.upload.addEventListener("progress",(e=>{x(e.loaded,e.total)})),v.addEventListener("load",(()=>{let e=T&&"text"!==T&&"json"!==T?v.response:v.responseText;if(!T||"json"===T)try{e=JSON.parse(e)}catch(e){}a({status:v.status,statusText:v.statusText,data:e,headers:p(v.getAllResponseHeaders())})})),v.addEventListener("error",(()=>{y(l("Network Error"))})),v.addEventListener("timeout",(()=>{y(l("Network Timeout"))})),v.addEventListener("abort",(()=>{y(l("The user aborted a request."))}));let S=f;E&&"[object Object]"===i(S)&&(S=d(S)),null!==S&&(S=u(S)?S:JSON.stringify(S)),e(v),v.send(S)}catch(e){y(e)}}));return{response:()=>E,headers:()=>E.then((e=>e.headers)),abort:()=>{v.abort()},onDownload:e=>{g=e},onUpload:e=>{x=e}}}}}));