Skip to content

Commit 4e5d0ef

Browse files
committed
feat: enhance content type handling in generators
This commit includes: - Updated Axios and React Query generators to support both `application/json` and `application/ld+json` schemas for request and response bodies. - Improved schema resolution logic in the schema generator to accommodate additional content types.
1 parent 2d6ad82 commit 4e5d0ef

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

src/generator/clientGenerator.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,10 @@ function generateAxiosMethod(operation: OperationInfo, spec: OpenAPIV3.Document)
5050
const [code, response] = responseDetails;
5151
const responseObj = response as OpenAPIV3.ResponseObject;
5252
const desc = "description" in responseObj ? responseObj.description : "";
53-
const contentType = responseObj.content?.["application/json"]?.schema;
53+
const contentType =
54+
responseObj.content?.["application/json"]?.schema ??
55+
responseObj.content?.["application/ld+json"]?.schema;
56+
5457
const typeName = pascalCase(`${operationId}Response${code}`);
5558

5659
if (contentType) {
@@ -74,9 +77,13 @@ function generateAxiosMethod(operation: OperationInfo, spec: OpenAPIV3.Document)
7477
? resolveSchema(requestBody.content["multipart/form-data"].schema, spec)
7578
: undefined;
7679

77-
const requestBodySchema = requestBody?.content?.["application/json"]?.schema
78-
? resolveSchema(requestBody.content["application/json"].schema, spec)
79-
: undefined;
80+
const content =
81+
requestBody && "content" in requestBody
82+
? (requestBody.content?.["application/json"]?.schema ??
83+
requestBody.content?.["application/ld+json"]?.schema)
84+
: undefined;
85+
86+
const requestBodySchema = content ? resolveSchema(content, spec) : undefined;
8087

8188
// Build data type parts
8289
const dataProps: string[] = [];

src/generator/reactQueryGenerator.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,16 @@ function generateQueryOptions(operation: OperationInfo, spec: OpenAPIV3.Document
2020
return schema.required?.map((p) => `'${p}'`) || [];
2121
};
2222

23+
const content =
24+
requestBody && "content" in requestBody
25+
? (requestBody.content?.["application/json"]?.schema ??
26+
requestBody.content?.["application/ld+json"]?.schema)
27+
: undefined;
2328
// Get required parameter names from both parameters and request body
2429
const requiredParams = [
2530
...(parameters?.filter((p) => p.required).map((p) => `'${p.name}'`) || []),
26-
...(requestBody && "content" in requestBody && requestBody.content?.["application/json"]?.schema
27-
? getRequiredFields(requestBody.content["application/json"].schema, {
31+
...(content
32+
? getRequiredFields(content, {
2833
schemas: (spec.components?.schemas as { [key: string]: OpenAPIV3.SchemaObject }) || {},
2934
})
3035
: []),

src/generator/schemaGenerator.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { OpenAPIV3 } from "openapi-types";
2-
import { pascalCase, sanitizePropertyName, sanitizeTypeName } from "../utils";
2+
import { sanitizePropertyName, sanitizeTypeName } from "../utils";
33

44
interface SchemaContext {
55
schemas: { [key: string]: OpenAPIV3.SchemaObject };
@@ -113,7 +113,8 @@ export function generateTypeDefinitions(spec: OpenAPIV3.Document): string {
113113
// Generate request body type
114114
if (operationObject.requestBody) {
115115
const content = (operationObject.requestBody as OpenAPIV3.RequestBodyObject).content;
116-
const jsonContent = content["application/json"] || content["multipart/form-data"];
116+
const jsonContent =
117+
content["application/json"] || content["multipart/form-data"] || content["application/ld+json"];
117118
if (jsonContent?.schema) {
118119
const typeName = `${operationId}Request`;
119120
output += generateTypeDefinition(typeName, jsonContent.schema as OpenAPIV3.SchemaObject, context);
@@ -124,7 +125,8 @@ export function generateTypeDefinitions(spec: OpenAPIV3.Document): string {
124125
if (operationObject.responses) {
125126
for (const [code, response] of Object.entries(operationObject.responses)) {
126127
const responseObj = response as OpenAPIV3.ResponseObject;
127-
const content = responseObj.content?.["application/json"];
128+
const content =
129+
responseObj.content?.["application/json"] || responseObj.content?.["application/ld+json"];
128130
if (content?.schema) {
129131
const typeName = `${operationId}Response${code}`;
130132
output += generateTypeDefinition(typeName, content.schema as OpenAPIV3.SchemaObject, context);

0 commit comments

Comments
 (0)