@@ -9,6 +9,7 @@ import {ParamRequiredError} from "./error/ParamRequiredError";
99import { AuthorizationRequiredError } from "./error/AuthorizationRequiredError" ;
1010import { CurrentUserCheckerNotDefinedError } from "./error/CurrentUserCheckerNotDefinedError" ;
1111import { isPromiseLike } from "./util/isPromiseLike" ;
12+ import { ParamNormalizationError } from "./error/ParamNormalizationError" ;
1213
1314/**
1415 * Handles action parameter.
@@ -145,31 +146,37 @@ export class ActionParameterHandler<T extends BaseDriver> {
145146 /**
146147 * Normalizes string value to number or boolean.
147148 */
148- protected normalizeValue ( value : any , type : string ) {
149- switch ( type ) {
149+ protected normalizeStringValue ( value : string , parameterName : string , parameterType : string ) {
150+ switch ( parameterType ) {
150151 case "number" :
151- if ( value === "" )
152- return undefined ;
153- const valueNumber = Number ( value ) ;
154- // tslint:disable-next-line:triple-equals
155- if ( valueNumber == value )
156- return valueNumber ;
157- else
158- throw new BadRequestError ( `${ value } can't be parsed to number.` ) ;
152+ if ( value === "" ) {
153+ throw new ParamNormalizationError ( value , parameterName , parameterType ) ;
154+ }
159155
160- case "string" :
161- return value ;
156+ const valueNumber = + value ;
157+ if ( valueNumber === NaN ) {
158+ throw new ParamNormalizationError ( value , parameterName , parameterType ) ;
159+ }
160+
161+ return valueNumber ;
162162
163163 case "boolean" :
164- if ( value === "true" || value === "1" ) {
164+ if ( value === "true" || value === "1" || value === "" ) {
165165 return true ;
166-
167166 } else if ( value === "false" || value === "0" ) {
168167 return false ;
168+ } else {
169+ throw new ParamNormalizationError ( value , parameterName , parameterType ) ;
169170 }
170171
171- return Boolean ( value ) ;
172-
172+ case "date" :
173+ const parsedDate = new Date ( value ) ;
174+ if ( Number . isNaN ( parsedDate . getTime ( ) ) ) {
175+ throw new ParamNormalizationError ( value , parameterName , parameterType ) ;
176+ }
177+ return parsedDate ;
178+
179+ case "string" :
173180 default :
174181 return value ;
175182 }
0 commit comments