@building-block/xhr-fetch
Version:
XHR-powered fetch implementation with upload and download updates
3 lines (2 loc) • 1.91 kB
JavaScript
;var e=function(){},r={method:"GET",headers:{},body:null,onDownloadProgress:e,onUploadProgress:e,signal:null,credentials:null},n=function(e){var r,t=e.response,o=e.responseText,s=e.responseURL,i=e.status,a=e.statusText,d=function(e){void 0===e&&(e="");var r=new Headers;return e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(e){var n=e.split(":"),t=n.shift().trim();if(t){var o=n.join(":").trim();r.append(t,o)}}),r}(e.getAllResponseHeaders()),u=s||d.get("X-Request-URL");return{blob:function(){return Promise.resolve(new Blob([t]))},clone:function(){return n(e)},headers:d,json:function(){return Promise.resolve(JSON.parse(o))},ok:(r=i,r>=200&&r<=299),status:i,statusText:a,text:function(){return Promise.resolve(o)},url:u}};module.exports=function(t,o){void 0===o&&(o=r);var s=o.method;void 0===s&&(s="GET");var i=o.headers;void 0===i&&(i={});var a=o.body;void 0===a&&(a=null);var d=o.onDownloadProgress;void 0===d&&(d=e);var u=o.onUploadProgress;void 0===u&&(u=e);var l=o.signal,v=o.credentials;return void 0===v&&(v=null),new Promise(function(e,r){var o=new XMLHttpRequest,c=function(){o.abort()};l&&l.addEventListener("abort",c),o.open(s.toLowerCase(),t,!0),"include"===v&&(o.withCredentials=!0),"omit"===v&&(o.withCredentials=!1),Object.keys(i).forEach(function(e){return o.setRequestHeader(e,i[e])}),o.addEventListener("readystatechange",function(){4===o.readyState&&l&&l.removeEventListener("abort",c)}),o.addEventListener("error",function(){r(new TypeError("Network request failed"))}),o.addEventListener("timeout",function(){r(new TypeError("Network request failed"))}),o.addEventListener("abort",function(){r(new DOMException("Aborted","AbortError"))}),o.addEventListener("load",function(){e(n(o))}),o.addEventListener("progress",function(e){return d(e)}),o.upload.addEventListener("progress",function(e){return u(e)}),o.send(a)})};
//# sourceMappingURL=xhrFetch.js.map