@@ -2,6 +2,7 @@ import { createParamDecorator, ExecutionContext } from '@nestjs/common'
22import type { Request as ExpressRequest } from 'express'
33import type { FastifyRequest } from 'fastify'
44import { Dictionary , isString , mapKeys , pickBy } from 'lodash'
5+ import { isNil } from './helper'
56
67function isRecord ( data : unknown ) : data is Record < string , unknown > {
78 return data !== null && typeof data === 'object' && ! Array . isArray ( data )
@@ -51,6 +52,19 @@ function parseParam<T>(queryParam: unknown, parserLogic: (param: string, res: an
5152 return res . length ? res : undefined
5253}
5354
55+ function parseIntParam ( v : unknown ) : number | undefined {
56+ if ( isNil ( v ) ) {
57+ return undefined
58+ }
59+
60+ const result = Number . parseInt ( v . toString ( ) , 10 )
61+
62+ if ( Number . isNaN ( result ) ) {
63+ return undefined
64+ }
65+ return result
66+ }
67+
5468export const Paginate = createParamDecorator ( ( _data : unknown , ctx : ExecutionContext ) : PaginateQuery => {
5569 let path : string
5670 let query : Record < string , unknown >
@@ -96,8 +110,8 @@ export const Paginate = createParamDecorator((_data: unknown, ctx: ExecutionCont
96110 )
97111
98112 return {
99- page : query . page ? parseInt ( query . page . toString ( ) , 10 ) : undefined ,
100- limit : query . limit ? parseInt ( query . limit . toString ( ) , 10 ) : undefined ,
113+ page : parseIntParam ( query . page ) ,
114+ limit : parseIntParam ( query . limit ) ,
101115 sortBy,
102116 search : query . search ? query . search . toString ( ) : undefined ,
103117 searchBy,
0 commit comments