@@ -27,27 +27,84 @@ function setQueryParams(postman: sdk.Request, queryParams: Param[]) {
2727 return undefined ;
2828 }
2929
30+ // Handle array values
3031 if ( Array . isArray ( param . value ) ) {
31- // Manual support for handling exploded query params
32- if ( param . explode ) {
33- let queryStringArr = [ ] ;
34-
35- for ( let i = 0 ; i < param . value . length ; i ++ ) {
36- queryStringArr . push ( `${ param . name } =${ param . value [ i ] } ` ) ;
37- }
32+ if ( param . style === "spaceDelimited" ) {
33+ return new sdk . QueryParam ( {
34+ key : param . name ,
35+ value : param . value . join ( " " ) ,
36+ } ) ;
37+ } else if ( param . style === "pipeDelimited" ) {
38+ return new sdk . QueryParam ( {
39+ key : param . name ,
40+ value : param . value . join ( "|" ) ,
41+ } ) ;
42+ } else if ( param . explode ) {
43+ return param . value . map (
44+ ( val ) =>
45+ new sdk . QueryParam ( {
46+ key : param . name ,
47+ value : val ,
48+ } )
49+ ) ;
50+ } else {
51+ return new sdk . QueryParam ( {
52+ key : param . name ,
53+ value : param . value . join ( "," ) ,
54+ } ) ;
55+ }
56+ }
3857
39- return queryStringArr . join ( "&" ) ;
58+ const decodedValue = decodeURI ( param . value ) ;
59+ const tryJson = ( ) => {
60+ try {
61+ return JSON . parse ( decodedValue ) ;
62+ } catch ( e ) {
63+ return false ;
4064 }
65+ } ;
66+
67+ const jsonResult = tryJson ( ) ;
68+
69+ // Handle object values
70+ if ( jsonResult && typeof jsonResult === "object" ) {
71+ if ( param . style === "deepObject" ) {
72+ return Object . entries ( jsonResult ) . map (
73+ ( [ key , val ] ) =>
74+ new sdk . QueryParam ( {
75+ key : `${ param . name } [${ key } ]` ,
76+ value : val ,
77+ } )
78+ ) ;
79+ } else if ( param . explode ) {
80+ return Object . entries ( jsonResult ) . map (
81+ ( [ key , val ] ) =>
82+ new sdk . QueryParam ( {
83+ key : key ,
84+ value : val ,
85+ } )
86+ ) ;
87+ } else {
88+ return new sdk . QueryParam ( {
89+ key : param . name ,
90+ value : Object . entries ( jsonResult )
91+ . map ( ( [ key , val ] ) => `${ key } ,${ val } ` )
92+ . join ( "," ) ,
93+ } ) ;
94+ }
95+ }
4196
97+ // Handle boolean values
98+ if ( typeof decodedValue === "boolean" ) {
4299 return new sdk . QueryParam ( {
43100 key : param . name ,
44- value : param . value . join ( "," ) ,
101+ value : decodedValue ? "true" : "false" ,
45102 } ) ;
46103 }
47104
48105 // Parameter allows empty value: "/hello?extended"
49106 if ( param . allowEmptyValue ) {
50- if ( param . value === "true" ) {
107+ if ( decodedValue === "true" ) {
51108 return new sdk . QueryParam ( {
52109 key : param . name ,
53110 value : null ,
@@ -61,7 +118,8 @@ function setQueryParams(postman: sdk.Request, queryParams: Param[]) {
61118 value : param . value ,
62119 } ) ;
63120 } )
64- . filter ( ( item ) : item is sdk . QueryParam => item !== undefined ) ;
121+ . flat ( ) // Flatten the array in case of nested arrays from map
122+ . filter ( ( item ) => item !== undefined ) ;
65123
66124 if ( qp . length > 0 ) {
67125 postman . addQueryParams ( qp ) ;
0 commit comments