axios-multi-api
Version:
[npm-url]: https://npmjs.org/package/axios-multi-api [npm-image]: http://img.shields.io/npm/v/axios-multi-api.svg
2 lines • 4.77 kB
JavaScript
var g=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var C=(i,e)=>{for(var t in e)g(i,t,{get:e[t],enumerable:!0})},x=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of y(e))!E.call(i,n)&&n!==t&&g(i,n,{get:()=>e[n],enumerable:!(r=m(e,n))||r.enumerable});return i};var w=i=>x(g({},"__esModule",{value:!0}),i),f=(i,e,t,r)=>{for(var n=r>1?void 0:r?m(e,t):e,s=i.length-1,o;s>=0;s--)(o=i[s])&&(n=(r?o(e,t,n):o(n))||n);return r&&n&&g(e,t,n),n};var S={};C(S,{ApiHandler:()=>d,RequestErrorHandler:()=>h,RequestHandler:()=>p,createApiFetcher:()=>I});module.exports=w(S);var b=require("js-magic");var R=require("js-magic");var h=class{logger;requestErrorService;constructor(e,t){this.logger=e,this.requestErrorService=t}process(e){var r;(r=this.logger)!=null&&r.warn&&this.logger.warn("API ERROR",e);let t=e;typeof e=="string"&&(t=new Error(e)),this.requestErrorService&&(typeof this.requestErrorService.process<"u"?this.requestErrorService.process(t):typeof this.requestErrorService=="function"&&this.requestErrorService(t))}};var p=class{requestInstance;timeout=3e4;cancellable=!1;strategy="reject";flattenResponse=!0;defaultResponse=null;axios;logger;requestErrorService;requestsQueue;constructor({axios:e,baseURL:t="",timeout:r=null,cancellable:n=!1,strategy:s=null,flattenResponse:o=null,defaultResponse:l={},logger:a=null,onError:u=null,...c}){this.axios=e,this.timeout=r!==null?r:this.timeout,this.strategy=s!==null?s:this.strategy,this.cancellable=n||this.cancellable,this.flattenResponse=o!==null?o:this.flattenResponse,this.defaultResponse=l,this.logger=a||(globalThis?globalThis.console:null)||null,this.requestErrorService=u,this.requestsQueue=new Map,this.requestInstance=e.create({...c,baseURL:t,timeout:this.timeout})}getInstance(){return this.requestInstance}__get(e){return e in this?this[e]:this.prepareRequest.bind(this,e)}prepareRequest(e,t,r=null,n=null){return this.handleRequest({type:e,url:t,data:r,config:n})}buildRequestConfig(e,t,r,n){let s=e.toLowerCase();return{...n,url:t,method:s,[s==="get"||s==="head"?"params":"data"]:r||{}}}processRequestError(e,t){if(this.isRequestCancelled(e,t))return;t.onError&&typeof t.onError=="function"&&t.onError(e),new h(this.logger,this.requestErrorService).process(e)}async outputErrorResponse(e,t){let r=this.isRequestCancelled(e,t),n=t.strategy||this.strategy;return r&&!t.rejectCancelled?this.defaultResponse:n==="silent"?(await new Promise(()=>null),this.defaultResponse):n==="reject"||n==="throwError"?Promise.reject(e):this.defaultResponse}isRequestCancelled(e,t){return this.axios.isCancel(e)}addCancellationToken(e){if(!this.cancellable&&!e.cancellable)return{};if(typeof e.cancellable<"u"&&!e.cancellable)return{};if(typeof AbortController>"u")return console.error("AbortController is unavailable in your ENV."),{};let{method:t,baseURL:r,url:n,params:s,data:o}=e,l=JSON.stringify([t,r,n,s,o]).substring(0,55**5),a=this.requestsQueue.get(l);a&&a.abort();let u=new AbortController;return this.requestsQueue.set(l,u),{signal:u.signal}}async handleRequest({type:e,url:t,data:r=null,config:n=null}){let s=null,o=n||{},l=this.buildRequestConfig(e,t,r,o);l={...this.addCancellationToken(l),...l};try{s=await this.requestInstance.request(l)}catch(a){return this.processRequestError(a,l),this.outputErrorResponse(a,l)}return this.processResponseData(s)}processResponseData(e){return e.data?this.flattenResponse?typeof e.data=="object"&&typeof e.data.data<"u"&&Object.keys(e.data).length===1?e.data.data:e.data:e:this.defaultResponse}};p=f([R.applyMagic],p);var d=class{requestHandler;endpoints;logger;constructor({axios:e,apiUrl:t,endpoints:r,timeout:n=null,cancellable:s=!1,strategy:o=null,flattenResponse:l=null,defaultResponse:a={},logger:u=null,onError:c=null,...q}){this.endpoints=r,this.logger=u,this.requestHandler=new p({...q,baseURL:t,axios:e,timeout:n,cancellable:s,strategy:o,flattenResponse:l,defaultResponse:a,logger:u,onError:c})}getInstance(){return this.requestHandler.getInstance()}__get(e){return e in this?this[e]:this.endpoints[e]?this.handleRequest.bind(this,e):this.handleNonImplemented.bind(this,e)}async handleRequest(...e){let t=e[0],r=this.endpoints[t],n=e[1]||{},s=e[2]||{},o=e[3]||{},l=r.url.replace(/:[a-z]+/gi,c=>s[c.substring(1)]?s[c.substring(1)]:c),a=null,u={...r};return delete u.url,delete u.method,a=await this.requestHandler[(r.method||"get").toLowerCase()](l,n,{...o,...u}),a}handleNonImplemented(e){var t;return(t=this.logger)!=null&&t.log&&this.logger.log(`${e} endpoint not implemented.`),Promise.resolve(null)}};d=f([b.applyMagic],d);var I=i=>new d(i);0&&(module.exports={ApiHandler,RequestErrorHandler,RequestHandler,createApiFetcher});
//# sourceMappingURL=index.js.map