diff --git a/Route.ts b/Route.ts index 8d39f0f..57bbf9e 100644 --- a/Route.ts +++ b/Route.ts @@ -268,14 +268,18 @@ export default class Route implements IMountableItem { // // This method will iterate through all variables, check their definition type from the spec // and typecast them - private typecastVariables(variables: { [key: string]: string }): { [key: string]: any } { + private typecastVariables(variables: { [key: string]: string }, encoder?: Function): { [key: string]: any } { const parsedVariables: { [key: string]: any } = {}; Object.entries(variables).forEach( ([variableName, value]) => { const variableDefinition = this.operationVariables[variableName]; + const typecastValue = typecastVariable(value, variableDefinition); - parsedVariables[variableName] = typecastVariable(value, variableDefinition); + // We only want to encode strings not integer values otherwise integers + // become strings + const shouldUseEncoder = encoder && typeof typecastValue === 'string'; + parsedVariables[variableName] = shouldUseEncoder ? encode(typecastValue) : typecastValue; } ); @@ -287,7 +291,7 @@ export default class Route implements IMountableItem { const { query, params, body } = req; const parsedQueryVariables = this.typecastVariables(query); - const parsedPathVariables = this.typecastVariables(params); + const parsedPathVariables = this.typecastVariables(params, encodeURI); const providedVariables = { ...parsedQueryVariables, ...parsedPathVariables, ...body };