rxhr
Version:
Tiny Observable based HTTP client
3 lines (2 loc) • 2.4 kB
JavaScript
function symbolObservablePonyfill(e){var r,o=e.Symbol;return"function"==typeof o?o.observable?r=o.observable:(r=o("observable"),o.observable=r):r="@@observable",r}function _defineProperty(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}var root;root="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof module?module:Function("return this")();var result=symbolObservablePonyfill(root),_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},encodeParams=function(e){return Object.keys(e).map(function(r){return encodeURIComponent(r)+"="+encodeURIComponent(e[r])}).join("&")},buildUrl=function(e,r){return r?e+"?"+encodeParams(r):e},fromResponseHeaderString=function(e){var r={};return e.split("\n").forEach(function(e){var o=e.indexOf(":");o>0&&(r[e.slice(0,o)]=e.slice(o+1).trim())}),r},noop=function(){},rxhr=function(e){return _defineProperty({subscribe:function(r,o,t){var n=r,s=new XMLHttpRequest;"function"==typeof r&&(n={next:r,error:o||noop,complete:t||noop});try{var u=function(r){var o=r||(e.responseType&&"text"!==e.responseType?s.response:s.responseText);return{status:1223===s.status?204:s.status,ok:s.status>=200&&s.status<300,type:r?"error":"default",statusText:r?s.statusText:s.statusText||"OK",headers:fromResponseHeaderString(s.getAllResponseHeaders()),url:s.responseURL,text:function(){return"object"===(void 0===o?"undefined":_typeof(o))?JSON.stringify(o):o},json:function(){return"string"==typeof o?JSON.parse(o):o},blob:function(){return new Blob([o])}}},i=function(){var e=u();if(e.ok)return n.next(e),void n.complete();n.error(e)},f=function(){var e=u(new Error("Network Error"));n.error(e)},a=function(){var e=u(new Error("ECONNABORTED"));n.error(e)};s.open(e.method.toUpperCase(),buildUrl(e.url,e.params)),e.responseType&&(s.responseType=e.responseType),s.withCredentials=!0===e.withCredentials;for(var l in e.headers)s.setRequestHeader(l,e.headers[l]);s.timeout=e.timeout,s.send(e.body||null),s.onload=i,s.onerror=f,s.ontimeout=a}catch(e){n.error(e)}return{unsubscribe:function(){s.abort()}}}},result,function(){return this})};module.exports=rxhr;
//# sourceMappingURL=rxhr.cjs.min.js.map