@@ -104,40 +104,72 @@ class SchemaRoutes {
104
104
this . logger . warn ( "wrong path param name" , paramName ) ;
105
105
}
106
106
107
- return [
108
- ...pathParams ,
109
- {
110
- $match : match ,
111
- name : _ . camelCase ( paramName ) ,
112
- required : true ,
107
+ pathParams . push ( {
108
+ $match : match ,
109
+ name : _ . camelCase ( paramName ) ,
110
+ required : true ,
111
+ type : "string" ,
112
+ description : "" ,
113
+ schema : {
113
114
type : "string" ,
114
- description : "" ,
115
- schema : {
116
- type : "string" ,
117
- } ,
118
- in : "path" ,
119
115
} ,
120
- ] ;
116
+ in : "path" ,
117
+ } ) ;
118
+
119
+ return pathParams ;
121
120
} ,
122
121
[ ] ,
123
122
) ;
124
123
125
- const fixedRoute = _ . reduce (
124
+ let fixedRoute = _ . reduce (
126
125
pathParams ,
127
126
( fixedRoute , pathParam ) => {
128
127
return _ . replace ( fixedRoute , pathParam . $match , `\${${ pathParam . name } }` ) ;
129
128
} ,
130
129
routeName || "" ,
131
130
) ;
132
131
132
+ const queryParamMatches = fixedRoute . match ( / ( \{ \? .* \} ) / g) ;
133
+ const queryParams = [ ] ;
134
+
135
+ if ( queryParamMatches && queryParamMatches . length ) {
136
+ queryParamMatches . forEach ( ( match ) => {
137
+ fixedRoute = fixedRoute . replace ( match , "" ) ;
138
+ } ) ;
139
+
140
+ _ . uniq (
141
+ queryParamMatches
142
+ . join ( "," )
143
+ . replace ( / ( \{ \? ) | ( \} ) | \s / g, "" )
144
+ . split ( "," ) ,
145
+ ) . forEach ( ( paramName ) => {
146
+ if ( _ . includes ( paramName , "-" ) ) {
147
+ this . logger . warn ( "wrong query param name" , paramName ) ;
148
+ }
149
+
150
+ queryParams . push ( {
151
+ $match : paramName ,
152
+ name : _ . camelCase ( paramName ) ,
153
+ required : true ,
154
+ type : "string" ,
155
+ description : "" ,
156
+ schema : {
157
+ type : "string" ,
158
+ } ,
159
+ in : "query" ,
160
+ } ) ;
161
+ } ) ;
162
+ }
163
+
133
164
return {
134
165
originalRoute : routeName || "" ,
135
166
route : fixedRoute ,
136
167
pathParams,
168
+ queryParams,
137
169
} ;
138
170
} ;
139
171
140
- getRouteParams = ( routeInfo , pathParams ) => {
172
+ getRouteParams = ( routeInfo , pathParamsFromRouteName , queryParamsFromRouteName ) => {
141
173
const { parameters } = routeInfo ;
142
174
143
175
const routeParams = {
@@ -187,13 +219,21 @@ class SchemaRoutes {
187
219
} ) ;
188
220
189
221
// used in case when path parameters is not declared in requestInfo.parameters ("in": "path")
190
- _ . each ( pathParams , ( pathParam ) => {
222
+ _ . each ( pathParamsFromRouteName , ( pathParam ) => {
191
223
const alreadyExist = _ . some ( routeParams . path , ( parameter ) => parameter . name === pathParam . name ) ;
192
224
193
225
if ( ! alreadyExist ) {
194
226
routeParams . path . push ( pathParam ) ;
195
227
}
196
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
+ } ) ;
197
237
198
238
return routeParams ;
199
239
} ;
@@ -649,7 +689,11 @@ class SchemaRoutes {
649
689
consumes,
650
690
...otherInfo
651
691
} = routeInfo ;
652
- const { route, pathParams } = this . parseRouteName ( rawRouteName ) ;
692
+ const {
693
+ route,
694
+ pathParams : pathParamsFromRouteName ,
695
+ queryParams : queryParamsFromRouteName ,
696
+ } = this . parseRouteName ( rawRouteName ) ;
653
697
654
698
const routeId = generateId ( ) ;
655
699
const firstTag = tags && tags . length > 0 ? tags [ 0 ] : null ;
@@ -662,7 +706,7 @@ class SchemaRoutes {
662
706
hasSecurity = security . length > 0 ;
663
707
}
664
708
665
- const routeParams = this . getRouteParams ( routeInfo , pathParams ) ;
709
+ const routeParams = this . getRouteParams ( routeInfo , pathParamsFromRouteName , queryParamsFromRouteName ) ;
666
710
667
711
const pathArgs = routeParams . path . map ( ( pathArgSchema ) => ( {
668
712
name : pathArgSchema . name ,
0 commit comments