@@ -26,11 +26,14 @@ export function* compareReqQuery(
2626) : Iterable < Result > {
2727 const { method, oas, operation, path, securitySchemes } = route . store ;
2828
29- // TODO: parse different parameters differently?
30- const searchParams = qs . parse ( route . searchParams , {
29+ const searchParamsParsed = qs . parse ( route . searchParams , {
3130 allowDots : true ,
3231 comma : true ,
3332 } ) ;
33+ const searchParamsUnparsed = qs . parse ( route . searchParams , {
34+ allowDots : false ,
35+ comma : false ,
36+ } ) ;
3437
3538 for ( const [ parameterIndex , parameter ] of (
3639 operation . parameters || [ ]
@@ -42,7 +45,13 @@ export function* compareReqQuery(
4245 const schema : SchemaObject = dereferencedParameter . schema || {
4346 type : dereferencedParameter . type ,
4447 } ;
45- const value = searchParams [ dereferencedParameter . name ] ;
48+
49+ if ( dereferencedParameter . schema ?. type === "string" ) {
50+ searchParamsParsed [ dereferencedParameter . name ] =
51+ searchParamsUnparsed [ dereferencedParameter . name ] ;
52+ }
53+
54+ const value = searchParamsParsed [ dereferencedParameter . name ] ;
4655 if (
4756 schema &&
4857 ( value || dereferencedParameter . required ) &&
@@ -82,7 +91,7 @@ export function* compareReqQuery(
8291 }
8392 }
8493 }
85- delete searchParams [ dereferencedParameter . name ] ;
94+ delete searchParamsParsed [ dereferencedParameter . name ] ;
8695 }
8796
8897 if ( isValidRequest ( interaction ) ) {
@@ -93,7 +102,7 @@ export function* compareReqQuery(
93102 case "apiKey" :
94103 switch ( scheme . in ) {
95104 case "query" :
96- if ( ! searchParams [ scheme . name ] ) {
105+ if ( ! searchParamsParsed [ scheme . name ] ) {
97106 yield {
98107 code : "request.authorization.missing" ,
99108 message :
@@ -112,7 +121,7 @@ export function* compareReqQuery(
112121 type : "error" ,
113122 } ;
114123 }
115- delete searchParams [ scheme . name ] ;
124+ delete searchParamsParsed [ scheme . name ] ;
116125 break ;
117126 case "cookie" :
118127 case "header" :
@@ -136,7 +145,7 @@ export function* compareReqQuery(
136145 }
137146
138147 if ( isValidRequest ( interaction ) ) {
139- for ( const [ key , value ] of Object . entries ( searchParams ) ) {
148+ for ( const [ key , value ] of Object . entries ( searchParamsParsed ) ) {
140149 yield {
141150 code : "request.query.unknown" ,
142151 message : `Query parameter is not defined in the spec file: ${ key } ` ,
0 commit comments