UNPKG

@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 3.34 kB
'use strict';var x=require('../utils/isNonNullString'),object=require('../utils/object'),uri=require('../utils/uri'),string=require('../utils/string'),defaultArray=require('../utils/defaultArray'),isNumber=require('../utils/isNumber'),L=require('../utils/defaultStr');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var x__default=/*#__PURE__*/_interopDefault(x);var L__default=/*#__PURE__*/_interopDefault(L);var A=Object.defineProperty,S=Object.defineProperties;var j=Object.getOwnPropertyDescriptors;var D=Object.getOwnPropertySymbols;var M=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable;var b=(n,e,t)=>e in n?A(n,e,{enumerable:true,configurable:true,writable:true,value:t}):n[e]=t,Q=(n,e)=>{for(var t in e||(e={}))M.call(e,t)&&b(n,t,e[t]);if(D)for(var t of D(e))N.call(e,t)&&b(n,t,e[t]);return n},T=(n,e)=>S(n,j(e));class y{static normalizePagination(e){let{page:t,skip:r,limit:i}=Object.assign({},e);return isNumber.isNumber(i)?(isNumber.isNumber(r)&&r>0?t=Math.floor(r/i)+1:isNumber.isNumber(t)&&t>0?r=(t-1)*i:(t=1,r=0),{page:t,skip:r,limit:i}):{}}static normalizeOrderBy(e){if(!Array.isArray(e))return {};const t={};return e.map(r=>{if(!object.isObj(r))return;const[i,u]=Object.entries(r)[0],a=L__default.default(u).toLowerCase().trim();!x__default.default(i)||["asc","desc"].includes(a)||(t[i]=a);}),t}static canPaginateResult(e){return object.isObj(e)?isNumber.isNumber(e.limit):false}static getPaginationMetaData(e,t){const{limit:r,page:i,skip:u}=y.normalizePagination(t);e=isNumber.isNumber(e)?e:0;const a={total:e};return typeof r=="number"&&r>0&&typeof i=="number"&&i>=0&&(a.currentPage=i,a.pageSize=r,a.totalPages=Math.ceil(e/r),a.hasNextPage=a.currentPage<a.totalPages,a.hasPreviousPage=a.currentPage>1,a.nextPage=a.hasNextPage?a.currentPage+1:void 0,a.previousPage=a.hasPreviousPage?a.currentPage-1:void 0,a.lastPage=a.totalPages),a}static paginate(e,t,r){const i=y.getPaginationMetaData(t,r),{currentPage:u,pageSize:a,totalPages:s}=i;if(Array.isArray(e)&&isNumber.isNumber(u)&&isNumber.isNumber(a)&&isNumber.isNumber(s)){const o=Math.max(0,u-1)*a,f=o+a;e=e.slice(o,f);}return {data:e,total:t,meta:i}}static parseQueryOptions(e){var h;const t=object.extendObj({},e==null?void 0:e.params,uri.getQueryParams(e==null?void 0:e.url)),r=object.extendObj({},t,(h=e==null?void 0:e.headers)==null?void 0:h["x-filters"],e==null?void 0:e.filters),i=p(r.limit),u=p(r.skip),a=p(r.page),s=y.normalizePagination({limit:i,skip:u,page:a});let o=r.distinct;typeof o=="number"&&(o=!!o),(typeof o=="boolean"||Array.isArray(o)&&o.length)&&(s.distinct=o);const f=r.orderBy,d=y.normalizeOrderBy(f);d&&Object.getSize(d,true)>0&&(s.orderBy=d);const m=defaultArray.defaultArray(r.include);m.length&&(s.include=m);const O=r.cache;O!==void 0&&(s.cache=!!O);const P=r.cacheTTL;P!==void 0&&(s.cacheTTL=P);const g=K(r.where);object.isObj(g)&&Object.getSize(g,true)&&(s.where=g);const R=r.includeDeleted;typeof R=="boolean"&&(s.includeDeleted=R);const I=defaultArray.defaultArray(r.relations);return I.length&&(s.relations=I),T(Q({},s),{queryParams:t})}}const K=(...n)=>{for(const e of n)if(Array.isArray(e)&&e.length||x__default.default(e)||object.isObj(e)&&Object.getSize(e,true))return e},p=n=>{if(string.isStringNumber(n))return Number(n);if(typeof n=="number")return n};exports.ResourcePaginationHelper=y;