Skip to content

Commit c60c764

Browse files
author
Ash Smith
authored
Fix requestBodies that use hypenated naming (#550)
If a request body's name is hypenated it breaks when prettier formats the code as it is an invalid object. Wrapping the request body's name in quotes resolves the issue, and prettier will strip the quotes when they're not required. Example for reproducing: ``` npx openapi-typescript https://raw.githubusercontent.com/ashsmith/api-specs/fix-invalid-examples/reference/channels.v3.yml --output channels.v3.ts ```
1 parent b40c5ea commit c60c764

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

src/transform/responses.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export function transformRequestBodies(requestBodies: Record<string, RequestBody
6868

6969
Object.entries(requestBodies).forEach(([bodyName, requestBody]) => {
7070
if (requestBody && requestBody.description) output += ` ${comment(requestBody.description)}`;
71-
output += ` ${bodyName}: {`;
71+
output += ` "${bodyName}": {`;
7272
output += ` ${transformRequestBodyObj(requestBody, options)}`;
7373
output += ` }\n`;
7474
});

tests/operation.test.ts

+52
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,58 @@ describe("requestBodies", () => {
117117
};`)
118118
);
119119
});
120+
121+
it("hypenated", () => {
122+
const schema = {
123+
"Pet-example": {
124+
description: "Pet-example request body",
125+
content: {
126+
"application/json": {
127+
schema: {
128+
type: "object",
129+
properties: {
130+
test: { type: "string" },
131+
},
132+
},
133+
},
134+
},
135+
},
136+
};
137+
138+
const output = transformRequestBodies(schema, {
139+
immutableTypes: false,
140+
}).trim();
141+
142+
expect(format(`type requestBodies = {${output}}`)).toBe(
143+
format(`type requestBodies = {
144+
/** Pet-example request body */
145+
"Pet-example": {
146+
content: {
147+
"application/json": {
148+
test?: string;
149+
};
150+
};
151+
};
152+
};`)
153+
);
154+
155+
const outputImmutable = transformRequestBodies(schema, {
156+
immutableTypes: true,
157+
}).trim();
158+
159+
expect(format(`type requestBodies = {${outputImmutable}}`)).toBe(
160+
format(`type requestBodies = {
161+
/** Pet-example request body */
162+
"Pet-example": {
163+
readonly content: {
164+
readonly "application/json": {
165+
readonly test?: string;
166+
};
167+
};
168+
};
169+
};`)
170+
);
171+
});
120172
});
121173

122174
describe("parameters", () => {

0 commit comments

Comments
 (0)