@resk/core
Version:
An innovative TypeScript framework that empowers developers to build applications with a fully decorator-based architecture for efficient resource management. By combining the power of decorators with a resource-oriented design, DecorRes enhances code cla
1 lines • 4.36 kB
JavaScript
;var c=require('../utils/defaultStr'),m=require('../utils/isNonNullString'),isNumber=require('../utils/isNumber'),uri=require('../utils/uri'),i18n=require('../i18n'),json=require('../utils/json');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var c__default=/*#__PURE__*/_interopDefault(c);var m__default=/*#__PURE__*/_interopDefault(m);var T=(f,e,t)=>new Promise((n,s)=>{var E=a=>{try{h(t.next(a));}catch(i){s(i);}},S=a=>{try{h(t.throw(a));}catch(i){s(i);}},h=a=>a.done?n(a.value):Promise.resolve(a.value).then(E,S);h((t=t.apply(f,e)).next());});const r=class r{getBaseUrl(){return c__default.default(process.env.HTTP_CLIENT_BASE_URL).replace(/\\+$/,"")}getBeearToken(){return ""}transformRequestHeader(e){return e instanceof Headers?e:new Headers(e||{})}transformRequestOptions(e,t){return e.headers=this.transformRequestHeader(e.headers),e}fetch(e,t=null){return T(this,null,function*(){t=Object.assign({},t);const n=yield this.getBeearToken(),{xFilter:s}=t,E=yield i18n.I18nClass.getInstance().getLocale();t.headers=Object.assign({Accept:"application/json","Accepted-Language":E,Authorization:m__default.default(n)?"Bearer "+(n.includes("Bearer ")?n.replace("Bearer ",""):n):void 0},t.headers),s&&(t.headers=Object.assign({},{"X-filter":json.JsonHelper.isJSON(s)?s:JSON.stringify(s)},t.headers));const S=yield this.transformRequestOptions(t,e);return this.timeout(new Promise((h,a)=>fetch(this.buildUrl(e,t.queryParams),S).then(i=>T(this,null,function*(){if(this.isSuccessStatus(i.status))h(i);else try{const l=yield this.handleFetchError(i,e,t);a(l);}catch(l){a(l);}}))),t.delay)})}fetchJSon(n){return T(this,arguments,function*(e,t={}){return this.fetch(e,t).then(s=>s.json())})}handleFetchError(e,t,n){return T(this,null,function*(){if((n==null?void 0:n.handleErrors)!==false){let s=typeof e=="object"&&e?c__default.default(e.message,e.ExceptionMessage,e.Message,e.MessageDetail,e.msg,e.error):null;throw c__default.default(Object.prototype.toString.call(e==null?void 0:e.target)).includes("XMLHttpRequest")&&e.target.status===0&&(s=c__default.default(e.message,e.msg,i18n.I18nClass.getInstance().t("httpClient.serverUnreachable"))),s||(s=e==null?void 0:e.toString()),{message:s,path:t,error:e}}throw e})}buildUrl(e,t){if(!uri.isValidUrl(e)){const n=c__default.default(this.getBaseUrl()).replace(/\\+$/,"");if(!uri.isValidUrl(n))throw new Error("HTTP_CLIENT_BASE_URL environment variable is not set");if(!m__default.default(e))throw new Error(`Invalid URL provided: ${e}`)}return uri.setQueryParams(e.replace(/\\+$/,""),t)}isSuccessStatus(e){return typeof e=="string"&&(e=parseInt(e)),isNumber.isNumber(e)?r.SUCCESS_STATUSES.includes(e):false}getFetchDelay(){return 12e4}timeout(e,t){return T(this,null,function*(){return t=isNumber.isNumber(t)&&t>1e3?t:this.getFetchDelay(),new Promise(function(n,s){const E=setTimeout(function(){s({message:i18n.I18nClass.getInstance().t("httpClient.runTimeoutError")});},t);return e.then(n).catch(s).finally(()=>{clearTimeout(E);})})})}transformResponse(e,t){return T(this,null,function*(){return e instanceof Response&&e.headers.has("Content-Type")&&c__default.default(e.headers.get("Content-Type")).toLowerCase().includes("application/json")?e.json():e})}post(e,t={}){return t=Object.assign({},t),t.method=t.method||"POST",this.fetch(e,t).then(n=>this.transformResponse(n,t))}patch(e,t={}){return t=Object.assign({},t),t.method=t.method||"PATCH",this.fetch(e,t).then(n=>this.transformResponse(n,t))}put(e,t={}){return t=Object.assign({},t),t.method=t.method||"PUT",this.fetch(e,t).then(n=>this.transformResponse(n,t))}delete(e,t={}){return t=Object.assign({},t),t.method="DELETE",this.fetch(e,t).then(n=>this.transformResponse(n,t))}};r.STATUSES={SUCCESS:200,CREATED:201,ACCEPTED:202,NON_AUTHORITATIVE_INFORMATION:203,NO_CONTENT:204,RESET_CONTENT:205,PARTIAL_CONTENT:206,MULTI_STATUS:207,ALREADY_REPORTED:208,IM_USED:226,INTERNAL_SERVER_ERROR:500,SERVICE_UNAVAILABLE:503,BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,NOT_ACCEPTABLE:406},r.SUCCESS_STATUSES=[r.STATUSES.SUCCESS,r.STATUSES.CREATED,r.STATUSES.ACCEPTED,r.STATUSES.NON_AUTHORITATIVE_INFORMATION,r.STATUSES.NO_CONTENT,r.STATUSES.RESET_CONTENT,r.STATUSES.PARTIAL_CONTENT,r.STATUSES.MULTI_STATUS,r.STATUSES.ALREADY_REPORTED,r.STATUSES.IM_USED];let R=r;exports.HttpClient=R;