Skip to content

Commit 40e5bd8

Browse files
authored
Request body refs (#454)
* Updated request body to support ref structure * Added support for ref requestBody
1 parent 88c9b96 commit 40e5bd8

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

src/transform/operation.ts

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { OperationObject, ParameterObject } from "../types";
2-
import { comment } from "../utils";
1+
import { OperationObject, ParameterObject, ReferenceObject } from "../types";
2+
import { comment, transformRef } from "../utils";
33
import { transformParametersArray } from "./parameters";
44
import { transformResponsesObj } from "./responses";
55
import { transformSchemaObj } from "./schema";
@@ -18,20 +18,31 @@ export function transformOperationObj(
1818
output += ` responses: {\n ${transformResponsesObj(operation.responses)}\n }\n`;
1919
}
2020

21-
if (operation.requestBody && operation.requestBody.content) {
22-
if (operation.requestBody.description) output += comment(operation.requestBody.description);
21+
if (operation.requestBody) {
22+
if (isRef(operation.requestBody)) {
23+
output += ` requestBody: ${transformRef(operation.requestBody.$ref)};\n`;
24+
} else {
25+
const {description, content} = operation.requestBody
2326

24-
if (Object.keys(operation.requestBody.content).length) {
25-
output += ` requestBody: {\n content: {\n`; // open requestBody
27+
if (description) output += comment(description);
28+
29+
if (content && Object.keys(content).length) {
30+
output += ` requestBody: {\n content: {\n`; // open requestBody
31+
32+
Object.entries(content).forEach(([k, v]) => {
33+
output += ` "${k}": ${transformSchemaObj(v.schema)};\n`;
34+
});
35+
output += ` }\n }\n`; // close requestBody
36+
} else {
37+
output += ` requestBody: unknown;\n`;
38+
}
2639

27-
Object.entries(operation.requestBody.content).forEach(([k, v]) => {
28-
output += ` "${k}": ${transformSchemaObj(v.schema)};\n`;
29-
});
30-
output += ` }\n }\n`; // close requestBody
31-
} else {
32-
output += ` requestBody: unknown;\n`;
3340
}
3441
}
3542

3643
return output;
3744
}
45+
46+
export function isRef(obj: any): obj is ReferenceObject {
47+
return !!obj.$ref
48+
}

src/types/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export interface OpenAPI3 {
1111
paths?: Record<string, PathItemObject>; // required
1212
components?: {
1313
schemas?: Record<string, ReferenceObject | SchemaObject>;
14+
requestBodies?: Record<string, ReferenceObject | RequestBody>;
1415
responses?: Record<string, ReferenceObject | ResponseObject>;
1516
parameters?: Record<string, ReferenceObject | ParameterObject>;
1617
headers?: Record<string, ReferenceObject | HeaderObject>;
@@ -56,7 +57,7 @@ export interface OperationObject {
5657
operationId?: string;
5758
parameters?: (ReferenceObject | ParameterObject)[];
5859
responses?: Record<string, ReferenceObject | ResponseObject>; // required
59-
requestBody?: RequestBody;
60+
requestBody?: ReferenceObject | RequestBody;
6061
}
6162

6263
export interface ParameterObject {

0 commit comments

Comments
 (0)