UNPKG

axios-ex

Version:

A integration solution of axios for large enterprise projects

8 lines (7 loc) 4.63 kB
/*! * axios-ex v2.6.0 * A integration solution of axios for large enterprise projects * (c) 2021-2023 saqqdy * Released under the MIT License. */ import{__rest as e,__values as t,__awaiter as n,__generator as r}from"tslib";import o from"axios";import i from"is-retry-allowed";import{extend as s}from"js-cool";var u=["get","head","options"],a=u.concat(["put","delete"]);function c(){return 0}function l(e){var t=e["axios-extend"]||{};return t.retryCount=t.retryCount||0,e["axios-extend"]=t,t}function f(e){return!e.response&&Boolean(e.code)&&"ECONNABORTED"!==e.code&&i(e)}function d(e){return!!e.config&&(y(e)&&u.includes(e.config.method))}function h(e){return!!e.config&&(y(e)&&a.includes(e.config.method))}function p(e){return f(e)||h(e)}function m(e){void 0===e&&(e=0);var t=1e3*Math.pow(2,e);return t+.5*t*Math.random()}function y(e){return"ECONNABORTED"!==e.code&&(!e.response||e.response.status>=500&&e.response.status<=599)}var v=function(){function i(t){var n=t.orderly,r=t.unique,o=t.retries,i=t.onCancel,s=e(t,["orderly","unique","retries","onCancel"]);return this.axiosInstance=null,this.waiting={},this.unique=!1,this.orderly=!0,this.onCancel=null,this.orderly=null==n||n,this.unique=null!=r&&r,this.retries=null!=o?o:0,this.onCancel=null!=i?i:null,this.init(s),this}return i.prototype.init=function(t){var n=this,r=t.setHeaders,i=t.onRequest,s=t.onRequestError,u=t.onResponse,a=t.onResponseError,f=t.onError,d=e(t,["setHeaders","onRequest","onRequestError","onResponse","onResponseError","onError"]);this.axiosInstance||(this.axiosInstance=o.create(d)),r&&r(o),i&&o.interceptors.request.use((function(e){var t=l(e);return t.lastRequestTime=Date.now(),t.retryCount>0?e:i(e,e.requestOptions)}),(function(e){return s&&s(e),f&&f(e),Promise.reject(e)})),u&&o.interceptors.response.use((function(e){return u(e,e.config.requestOptions)}),(function(e){var r=e.config;if(!r)return a&&a(e),f&&f(e),Promise.reject(e);var i=function(e,t){return Object.assign({},t,e["axios-extend"])}(r,t),s=i.retries,u=void 0===s?n.retries:s,d=i.retryCondition,h=void 0===d?p:d,m=i.retryDelay,y=void 0===m?c:m,v=i.shouldResetTimeout,g=void 0!==v&&v,C=l(r);if(h(e)&&C.retryCount<u){C.retryCount+=1;var w=y(C.retryCount,e);if(function(e,t){e.defaults.agent===t.agent&&delete t.agent,e.defaults.httpAgent===t.httpAgent&&delete t.httpAgent,e.defaults.httpsAgent===t.httpsAgent&&delete t.httpsAgent}(o,r),!g&&r.timeout&&C.lastRequestTime){var q=Date.now()-C.lastRequestTime;r.timeout=Math.max(r.timeout-q-w,1)}return r.transformRequest=[function(e){return e}],new Promise((function(e){return setTimeout((function(){return e(o(r))}),w)}))}return a&&a(e),f&&f(e),Promise.reject(e)}))},i.prototype.create=function(e){var t,n=this,r=e.unique,i=void 0===r?this.unique:r,u=e.orderly,a=void 0===u?this.orderly:u,c=e.url,l=void 0===c?"":c,f=Symbol("promiseKey"),d=o.CancelToken.source();e.requestOptions=s(!0,{},e),e.cancelToken=d.token,"function"==typeof AbortController&&(t=new AbortController,e.signal=t.signal),i&&this.clear(l);var h=new Promise((function(t,r){o(e).then((function(e){a?n.wait(l,f).then((function(){t(e)})):t(e)})).catch((function(e){o.isCancel(e)?n.onCancel&&n.onCancel(e):r(e)})).finally((function(){var e=n.waiting[l].findIndex((function(e){return e.promiseKey===f}));e>-1&&n.waiting[l].splice(e,1)}))}));return this.add(l,{promiseKey:f,url:l,promise:h,source:d,abortController:t}),h},i.prototype.clear=function(e){var n,r;for(var o in this.waiting)if(!e||o===e){var i=this.waiting[o]||[];try{for(var s=(n=void 0,t(i)),u=s.next();!u.done;u=s.next()){var a=u.value;a.source.cancel("request canceled"),a.abortController&&a.abortController.abort()}}catch(e){n={error:e}}finally{try{u&&!u.done&&(r=s.return)&&r.call(s)}finally{if(n)throw n.error}}this.waiting[o]=[]}},i.prototype.wait=function(e,t){return n(this,void 0,void 0,(function(){var n,o;return r(this,(function(r){switch(r.label){case 0:if(!this.orderly)return[2,Promise.resolve()];n=this.waiting[e]||[],o=n.findIndex((function(e){return e.promiseKey===t})),r.label=1;case 1:if(!(o>0))return[3,7];if(o--,!n[o]||n[o].promiseKey===t)return[3,6];r.label=2;case 2:return r.trys.push([2,4,,5]),[4,n[o].promise];case 3:return r.sent(),[3,5];case 4:return r.sent(),console.info("The task has been dropped"),[3,5];case 5:n.splice(o,1),r.label=6;case 6:return[3,1];case 7:return[2]}}))}))},i.prototype.add=function(e,t){e in this.waiting||(this.waiting[e]=[]),this.waiting[e].push(t)},i}();export{v as AxiosExtend,v as default,m as exponentialDelay,h as isIdempotentRequestError,f as isNetworkError,p as isNetworkOrIdempotentRequestError,y as isRetryableError,d as isSafeRequestError};