Skip to content

Commit 7103120

Browse files
committed
feat: parameters is optional when every parameter is optional
Closes openapi-ts#1334
1 parent ee908d0 commit 7103120

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

packages/openapi-typescript/src/transform/components-object.ts

+13-4
Original file line numberDiff line numberDiff line change
@@ -48,27 +48,36 @@ export default function transformComponentsObject(components: ComponentsObject,
4848

4949
// parameters
5050
if (components.parameters) {
51-
output.push(indent("parameters: {", indentLv));
51+
const parameters: string[] = [];
5252
indentLv++;
53+
54+
let isEveryParameterOptional = true;
55+
5356
for (const [name, parameterObject] of getEntries(components.parameters, ctx.alphabetize, ctx.excludeDeprecated)) {
5457
const c = getSchemaObjectComment(parameterObject, indentLv);
55-
if (c) output.push(indent(c, indentLv));
58+
if (c) parameters.push(indent(c, indentLv));
5659
let key = escObjKey(name);
5760
if (ctx.immutableTypes) key = tsReadonly(key);
5861
if ("$ref" in parameterObject) {
59-
output.push(indent(`${key}: ${transformSchemaObject(parameterObject, { path: `#/components/parameters/${name}`, ctx })};`, indentLv));
62+
parameters.push(indent(`${key}: ${transformSchemaObject(parameterObject, { path: `#/components/parameters/${name}`, ctx })};`, indentLv));
63+
isEveryParameterOptional = false;
6064
} else {
6165
if (parameterObject.in !== "path" && !parameterObject.required) {
6266
key = tsOptionalProperty(key);
67+
} else {
68+
isEveryParameterOptional = false;
6369
}
6470
const parameterType = transformParameterObject(parameterObject, {
6571
path: `#/components/parameters/${name}`,
6672
ctx: { ...ctx, indentLv },
6773
});
68-
output.push(indent(`${key}: ${parameterType};`, indentLv));
74+
parameters.push(indent(`${key}: ${parameterType};`, indentLv));
6975
}
7076
}
7177
indentLv--;
78+
const parametersKey = isEveryParameterOptional ? tsOptionalProperty("parameters") : "parameters";
79+
output.push(indent(`${parametersKey}: {`, indentLv));
80+
output.push(...parameters);
7281
output.push(indent("};", indentLv));
7382
} else {
7483
output.push(indent("parameters: never;", indentLv));

packages/openapi-typescript/test/components-object.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ describe("Components Object", () => {
293293
expect(generated).toBe(`{
294294
schemas: never;
295295
responses: never;
296-
parameters: {
296+
parameters?: {
297297
myParam?: string;
298298
myParam2?: string;
299299
};

0 commit comments

Comments
 (0)