@@ -9,6 +9,7 @@ import {ParamRequiredError} from "./error/ParamRequiredError";
9
9
import { AuthorizationRequiredError } from "./error/AuthorizationRequiredError" ;
10
10
import { CurrentUserCheckerNotDefinedError } from "./error/CurrentUserCheckerNotDefinedError" ;
11
11
import { isPromiseLike } from "./util/isPromiseLike" ;
12
+ import { ParamNormalizationError } from "./error/ParamNormalizationError" ;
12
13
13
14
/**
14
15
* Handles action parameter.
@@ -145,31 +146,37 @@ export class ActionParameterHandler<T extends BaseDriver> {
145
146
/**
146
147
* Normalizes string value to number or boolean.
147
148
*/
148
- protected normalizeValue ( value : any , type : string ) {
149
- switch ( type ) {
149
+ protected normalizeStringValue ( value : string , parameterName : string , parameterType : string ) {
150
+ switch ( parameterType ) {
150
151
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
+ }
159
155
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 ;
162
162
163
163
case "boolean" :
164
- if ( value === "true" || value === "1" ) {
164
+ if ( value === "true" || value === "1" || value === "" ) {
165
165
return true ;
166
-
167
166
} else if ( value === "false" || value === "0" ) {
168
167
return false ;
168
+ } else {
169
+ throw new ParamNormalizationError ( value , parameterName , parameterType ) ;
169
170
}
170
171
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" :
173
180
default :
174
181
return value ;
175
182
}
0 commit comments