@@ -183,41 +183,37 @@ export class VsoClient {
183
183
return url . resolve ( this . baseUrl , path . join ( this . basePath , relativeUrl ) ) ;
184
184
}
185
185
186
- private getSerializedObject ( queryValue : any , object : any ) : string {
187
- let value :string = "" ;
188
- let first :boolean = true ;
189
-
190
- for ( let property in object ) {
191
- if ( object . hasOwnProperty ( property ) ) {
192
- let prop = object [ property ] ;
193
- let valueString = this . getValueString ( property , prop ) ;
194
- if ( first && prop !== undefined ) {
195
- value += valueString ;
196
- first = false ;
197
- } else if ( prop !== undefined ) {
198
- value += "&" + valueString ;
186
+ private queryParamsToStringHelper ( queryParams : any , prefix : string ) : string {
187
+ if ( queryParams === undefined ) {
188
+ return '' ;
189
+ }
190
+ let queryString : string = '' ;
191
+
192
+ if ( typeof ( queryParams ) !== 'string' ) {
193
+ for ( let property in queryParams ) {
194
+ if ( queryParams . hasOwnProperty ( property ) ) {
195
+ const prop = queryParams [ property ] ;
196
+ const newPrefix = prefix + encodeURIComponent ( property . toString ( ) ) + '.' ;
197
+ queryString += this . queryParamsToStringHelper ( prop , newPrefix ) ;
199
198
}
200
199
}
201
200
}
202
201
203
- if ( value == "" ) {
204
- value += queryValue + "=" + object . toString ( ) ;
202
+ if ( queryString === '' && prefix . length > 0 ) {
203
+ // Will always need to chop period off of end of prefix
204
+ queryString = prefix . slice ( 0 , - 1 ) + '=' + encodeURIComponent ( queryParams . toString ( ) ) + '&' ;
205
205
}
206
- return value ;
206
+ return queryString ;
207
207
}
208
208
209
- private getValueString ( queryValue , value ) {
210
- let valueString = null ;
211
- if ( typeof ( value ) === 'object' ) {
212
- valueString = this . getSerializedObject ( queryValue , value ) ;
213
- } else {
214
- valueString = queryValue + "=" + encodeURIComponent ( value ) ;
215
- }
216
- return valueString ;
209
+ private queryParamsToString ( queryParams : any ) : string {
210
+ const queryString : string = '?' + this . queryParamsToStringHelper ( queryParams , '' ) ;
211
+
212
+ // Will always need to slice either a ? or & off of the end
213
+ return queryString . slice ( 0 , - 1 ) ;
217
214
}
218
215
219
216
protected getRequestUrl ( routeTemplate : string , area : string , resource : string , routeValues : any , queryParams ?: any ) : string {
220
-
221
217
// Add area/resource route values (based on the location)
222
218
routeValues = routeValues || { } ;
223
219
if ( ! routeValues . area ) {
@@ -230,22 +226,12 @@ export class VsoClient {
230
226
// Replace templated route values
231
227
let relativeUrl = this . replaceRouteValues ( routeTemplate , routeValues ) ;
232
228
233
- //append query parameters to the end
234
- let first = true ;
235
- for ( let queryValue in queryParams ) {
236
- if ( queryParams [ queryValue ] != null ) {
237
- let value = queryParams [ queryValue ] ;
238
- let valueString = this . getValueString ( queryValue , value ) ;
239
- if ( first ) {
240
- relativeUrl += "?" + valueString ;
241
- first = false ;
242
- } else {
243
- relativeUrl += "&" + valueString ;
244
- }
245
- }
229
+ // Append query parameters to the end
230
+ if ( queryParams ) {
231
+ relativeUrl += this . queryParamsToString ( queryParams ) ;
246
232
}
247
233
248
- //resolve the relative url with the base
234
+ // Resolve the relative url with the base
249
235
return url . resolve ( this . baseUrl , path . join ( this . basePath , relativeUrl ) ) ;
250
236
}
251
237
0 commit comments