axios-serializer
Version:
A serializer for axios
8 lines (7 loc) • 3.27 kB
JavaScript
/*!
* axios-serializer v1.3.0
* A serializer for axios
* (c) 2021-2023 saqqdy
* Released under the MIT License.
*/
import{__rest as e,__awaiter as n,__generator as r,__values as t}from"tslib";import i from"axios";import{extend as o}from"js-cool";function s(e){var n=e["axios-serializer"]||{};return n.retryCount=n.retryCount||0,e["axios-serializer"]=n,n}var a=function(){function a(n){var r=n.unique,t=n.onCancel,i=e(n,["unique","onCancel"]);return this.axiosInstance=null,this.waiting={},this.unique=!1,this.orderly=!0,this.onCancel=null,this.unique=null!=r&&r,this.onCancel=null!=t?t:null,this.init(i),this}return a.prototype.init=function(n){var r=n.setHeaders,t=n.onRequest,o=n.onRequestError,a=n.onResponse,u=n.onResponseError,c=n.onError,l=e(n,["setHeaders","onRequest","onRequestError","onResponse","onResponseError","onError"]);this.axiosInstance||(this.axiosInstance=i.create(l)),r&&r(this.axiosInstance),t&&this.axiosInstance.interceptors.request.use((function(e){var n=s(e);return n.lastRequestTime=Date.now(),n.retryCount>0?e:t(e,e.requestOptions)}),(function(e){return o&&o(e),c&&c(e),Promise.reject(e)})),a&&this.axiosInstance.interceptors.response.use((function(e){return a(e,e.config.requestOptions)}),(function(e){var n=e.config;return n?(s(n).retryCount+=1,u&&u(e),c&&c(e),Promise.reject(e)):(u&&u(e),c&&c(e),Promise.reject(e))}))},a.prototype.create=function(e){return n(this,void 0,void 0,(function(){var n,t,s,a,u,c,l,f,h,p,d=this;return r(this,(function(r){return n=e.unique,t=void 0===n?this.unique:n,s=e.orderly,a=void 0===s?this.orderly:s,u=e.url,c=void 0===u?"":u,l=Symbol("promiseKey"),f=i.CancelToken.source(),e.requestOptions=o(!0,{},e),e.cancelToken=f.token,"function"==typeof AbortController&&(h=new AbortController,e.signal=h.signal),t&&this.clear(e.url),p=new Promise((function(n,r){d.axiosInstance(e).then((function(r){a?d.wait(e.url,l).then((function(){n(r)})):n(r)})).catch((function(e){i.isCancel(e)?d.onCancel&&d.onCancel(e):r(e)})).finally((function(){var n=d.waiting[e.url].findIndex((function(e){return e.promiseKey===l}));n>-1&&d.waiting[e.url].splice(n,1)}))})),this.add(e.url,{promiseKey:l,url:c,promise:p,source:f,abortController:h}),[2,p]}))}))},a.prototype.clear=function(e){var n,r;for(var i in this.waiting)if(!e||i===e){var o=this.waiting[i]||[];try{for(var s=(n=void 0,t(o)),a=s.next();!a.done;a=s.next()){var u=a.value;u.source.cancel("request canceled"),u.abortController&&u.abortController.abort()}}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=s.return)&&r.call(s)}finally{if(n)throw n.error}}this.waiting[i]=[]}},a.prototype.wait=function(e,t){return n(this,void 0,void 0,(function(){var n,i;return r(this,(function(r){switch(r.label){case 0:if(!this.orderly)return[2,Promise.resolve()];n=this.waiting[e]||[],i=n.findIndex((function(e){return e.promiseKey===t})),r.label=1;case 1:if(!(i>0))return[3,7];if(i--,!n[i]||n[i].promiseKey===t)return[3,6];r.label=2;case 2:return r.trys.push([2,4,,5]),[4,n[i].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(i,1),r.label=6;case 6:return[3,1];case 7:return[2]}}))}))},a.prototype.add=function(e,n){e in this.waiting||(this.waiting[e]=[]),this.waiting[e].push(n)},a}();export{a as default};