@@ -103,40 +103,73 @@ class SchemaRoutes {
103
103
this . logger . warn ( "wrong path param name" , paramName ) ;
104
104
}
105
105
106
- return [
107
- ...pathParams ,
108
- {
109
- $match : match ,
110
- name : _ . camelCase ( paramName ) ,
111
- required : true ,
106
+ pathParams . push ( {
107
+ $match : match ,
108
+ name : _ . camelCase ( paramName ) ,
109
+ required : true ,
110
+ type : "string" ,
111
+ description : "" ,
112
+ schema : {
112
113
type : "string" ,
113
- description : "" ,
114
- schema : {
115
- type : "string" ,
116
- } ,
117
- in : "path" ,
118
114
} ,
119
- ] ;
115
+ in : "path" ,
116
+ } ) ;
117
+
118
+ return pathParams ;
120
119
} ,
121
120
[ ] ,
122
121
) ;
123
122
124
- const fixedRoute = _ . reduce (
123
+ let fixedRoute = _ . reduce (
125
124
pathParams ,
126
125
( fixedRoute , pathParam ) => {
127
126
return _ . replace ( fixedRoute , pathParam . $match , `\${${ pathParam . name } }` ) ;
128
127
} ,
129
128
routeName || "" ,
130
129
) ;
131
130
131
+ const queryParamMatches = fixedRoute . match ( / ( \{ \? .* \} ) / g) ;
132
+
133
+ if ( queryParamMatches && queryParamMatches . length ) {
134
+ queryParamMatches . forEach ( ( match ) => {
135
+ fixedRoute = fixedRoute . replace ( match , "" ) ;
136
+ } ) ;
137
+ }
138
+
139
+ const queryParams = _ . uniq (
140
+ queryParamMatches
141
+ . join ( "," )
142
+ . replace ( / ( \{ \? ) | ( \} ) | \s / g, "" )
143
+ . split ( "," ) ,
144
+ ) . reduce ( ( acc , paramName ) => {
145
+ if ( _ . includes ( paramName , "-" ) ) {
146
+ this . logger . warn ( "wrong query param name" , paramName ) ;
147
+ }
148
+
149
+ acc . push ( {
150
+ $match : paramName ,
151
+ name : _ . camelCase ( paramName ) ,
152
+ required : true ,
153
+ type : "string" ,
154
+ description : "" ,
155
+ schema : {
156
+ type : "string" ,
157
+ } ,
158
+ in : "query" ,
159
+ } ) ;
160
+
161
+ return acc ;
162
+ } , [ ] ) ;
163
+
132
164
return {
133
165
originalRoute : routeName || "" ,
134
166
route : fixedRoute ,
135
167
pathParams,
168
+ queryParams,
136
169
} ;
137
170
} ;
138
171
139
- getRouteParams = ( routeInfo , pathParams ) => {
172
+ getRouteParams = ( routeInfo , pathParamsFromRouteName , queryParamsFromRouteName ) => {
140
173
const { parameters } = routeInfo ;
141
174
142
175
const routeParams = {
@@ -186,13 +219,21 @@ class SchemaRoutes {
186
219
} ) ;
187
220
188
221
// used in case when path parameters is not declared in requestInfo.parameters ("in": "path")
189
- _ . each ( pathParams , ( pathParam ) => {
222
+ _ . each ( pathParamsFromRouteName , ( pathParam ) => {
190
223
const alreadyExist = _ . some ( routeParams . path , ( parameter ) => parameter . name === pathParam . name ) ;
191
224
192
225
if ( ! alreadyExist ) {
193
226
routeParams . path . push ( pathParam ) ;
194
227
}
195
228
} ) ;
229
+ // used in case when path parameters is not declared in requestInfo.parameters ("in": "path")
230
+ _ . each ( queryParamsFromRouteName , ( queryParam ) => {
231
+ const alreadyExist = _ . some ( routeParams . query , ( parameter ) => parameter . name === queryParam . name ) ;
232
+
233
+ if ( ! alreadyExist ) {
234
+ routeParams . query . push ( queryParam ) ;
235
+ }
236
+ } ) ;
196
237
197
238
return routeParams ;
198
239
} ;
@@ -642,7 +683,11 @@ class SchemaRoutes {
642
683
consumes,
643
684
...otherInfo
644
685
} = routeInfo ;
645
- const { route, pathParams } = this . parseRouteName ( rawRouteName ) ;
686
+ const {
687
+ route,
688
+ pathParams : pathParamsFromRouteName ,
689
+ queryParams : queryParamsFromRouteName ,
690
+ } = this . parseRouteName ( rawRouteName ) ;
646
691
647
692
const routeId = generateId ( ) ;
648
693
const firstTag = tags && tags . length > 0 ? tags [ 0 ] : null ;
@@ -655,7 +700,7 @@ class SchemaRoutes {
655
700
hasSecurity = security . length > 0 ;
656
701
}
657
702
658
- const routeParams = this . getRouteParams ( routeInfo , pathParams ) ;
703
+ const routeParams = this . getRouteParams ( routeInfo , pathParamsFromRouteName , queryParamsFromRouteName ) ;
659
704
660
705
const pathArgs = routeParams . path . map ( ( pathArgSchema ) => ( {
661
706
name : pathArgSchema . name ,
0 commit comments