UNPKG

@building-block/xhr-fetch

Version:

XHR-powered fetch implementation with upload and download updates

3 lines (2 loc) 2.07 kB
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):e.xhrFetch=n()}(this,function(){"use strict";var e=function(){},n={method:"GET",headers:{},body:null,onDownloadProgress:e,onUploadProgress:e,signal:null,credentials:null},t=function(e){var n,r=e.response,o=e.responseText,s=e.responseURL,i=e.status,a=e.statusText,d=function(e){void 0===e&&(e="");var n=new Headers;return e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(e){var t=e.split(":"),r=t.shift().trim();if(r){var o=t.join(":").trim();n.append(r,o)}}),n}(e.getAllResponseHeaders()),u=s||d.get("X-Request-URL");return{blob:function(){return Promise.resolve(new Blob([r]))},clone:function(){return t(e)},headers:d,json:function(){return Promise.resolve(JSON.parse(o))},ok:(n=i,n>=200&&n<=299),status:i,statusText:a,text:function(){return Promise.resolve(o)},url:u}};return function(r,o){void 0===o&&(o=n);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,c=o.credentials;return void 0===c&&(c=null),new Promise(function(e,n){var o=new XMLHttpRequest,f=function(){o.abort()};l&&l.addEventListener("abort",f),o.open(s.toLowerCase(),r,!0),"include"===c&&(o.withCredentials=!0),"omit"===c&&(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",f)}),o.addEventListener("error",function(){n(new TypeError("Network request failed"))}),o.addEventListener("timeout",function(){n(new TypeError("Network request failed"))}),o.addEventListener("abort",function(){n(new DOMException("Aborted","AbortError"))}),o.addEventListener("load",function(){e(t(o))}),o.addEventListener("progress",function(e){return d(e)}),o.upload.addEventListener("progress",function(e){return u(e)}),o.send(a)})}}); //# sourceMappingURL=xhrFetch.umd.js.map