Skip to content

Commit 75a8281

Browse files
committed
expand support for query params
1 parent ce2dd21 commit 75a8281

File tree

1 file changed

+69
-11
lines changed

1 file changed

+69
-11
lines changed

packages/docusaurus-theme-openapi-docs/src/theme/ApiExplorer/buildPostmanRequest.ts

Lines changed: 69 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)