UNPKG

2.6 kBJavaScriptView Raw
1var q=n=>{if(/^https?/.test(n))return n;let i=window.location.protocol+"//"+window.location.host;return n[0]==="/"?i+n:i+window.location.pathname+"/"+n},L=n=>[...n.entries()].reduce((i,[a,u])=>(i[a]=u,i),{});var M=(n,i,a=null)=>n.reduce((u,y)=>y.call(a,u),i);function j({namespace:n=globalThis||window}={}){if(n==null&&(n=globalThis||window),typeof n!="object")throw new Error("[xfetch-hook] - `namespace` should be an object");let i=n.XMLHttpRequest;if(typeof i!="function")throw new Error("[xfetch-hook] - `XMLHttpRequest` should be a function.");let a=[];function u(){let t=new i,e=this,c,p,d,b,g,l,R,x,H=[],m=[];this.onreadystatechange=null,t.onreadystatechange=function(){if(d&&this.readyState==4){let o=t.responseType;try{e.response=x||(x=M(H,t.response,e)),(o===""||o==="text")&&(e.responseText=t.responseText),m.forEach(s=>s.call(e,e.response,e))}catch(s){console.warn("Error in proxied xfetch-hook package",s.message)}}if(e.onreadystatechange)return e.onreadystatechange()},["status","statusText","readyState","responseXML","upload"].forEach(function(o){Object.defineProperty(e,o,{get:function(){return t[o]}})}),["ontimeout, timeout","withCredentials","onload","onerror","onprogress","responseType"].forEach(function(o){Object.defineProperty(e,o,{get:function(){return t[o]},set:function(s){o==="onload"&&typeof s=="function"&&(s=s.bind(e)),t[o]=s}})}),["addEventListener","abort","getAllkeyResponseHeaders","getAllResponseHeaders","getResponseHeader","overrideMimeType"].forEach(function(o){Object.defineProperty(e,o,{value:function(){return t[o].apply(t,arguments)}})});let h=new Headers;e.setRequestHeader=function(s,f){h.append(s,f)},e.open=function(s,f,r,T,X){c=s,p=new URL(q(f)),d=r!==!1,b=T,g=X,t.open(c,p.toString(),d,b,g)},e.send=async function(s){if(l=s,d){for(let f of a){let r=await f({method:c,url:p,body:l,get headers(){return R||(R=L(h))}});!r||(r.method&&(c=r.method),r.url&&(p=r.url.href||r.url),r.body!==void 0&&(l=r.body),r.headers instanceof Headers&&(h=r.headers),typeof r.transformResponse=="function"&&H.push(r.transformResponse),typeof r.listen=="function"&&m.push(r.listen))}t.open(c,p,d,b,g);for(let f in h.entries())t.setRequestHeader(f[0],f[1]);t.send(l)}}}Object.defineProperty(u,"name",{value:"XMLHttpRequest",configurable:!0});function y(){n.XMLHttpRequest=u}y();function w(){n.XMLHttpRequest=i}function E(t){a=a.filter(e=>e!==t)}function P(t){a.push(t)}return u.stopProxying=w,u.onRequest=function(e){if(typeof e!="function")throw new Error("[onRequest] - Argument must be a function");let c=()=>E(e);return a.find(d=>d===e)||P(e),c},w}export{j as default};