From 949cb81790b51145d0a4301e74b971ca35f61426 Mon Sep 17 00:00:00 2001 From: unnoq Date: Sat, 23 Aug 2025 08:15:11 +0700 Subject: [PATCH] fix(openapi): spec generator in case commonSchemas + GET + compact + no params --- .../openapi/src/openapi-generator.test.ts | 38 +++++++++++++++++++ packages/openapi/src/openapi-generator.ts | 6 ++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/packages/openapi/src/openapi-generator.test.ts b/packages/openapi/src/openapi-generator.test.ts index d24971cae..b50a7b409 100644 --- a/packages/openapi/src/openapi-generator.test.ts +++ b/packages/openapi/src/openapi-generator.test.ts @@ -1082,6 +1082,7 @@ describe('openAPIGenerator', () => { detailedStructure: oc.route({ path: '/detailed/{pet}', inputStructure: 'detailed', outputStructure: 'detailed' }) .input(InputDetailedStructure) .output(OutputDetailedStructure), + getWithoutParams: oc.route({ method: 'GET' }).input(Query), }, { commonSchemas: { User: { @@ -1515,5 +1516,42 @@ describe('openAPIGenerator', () => { }, }) }) + + it('work with method=GET, inputStructure=compact, and without params', async () => { + expect(spec.paths!['/getWithoutParams']).toEqual({ + get: { + operationId: 'getWithoutParams', + parameters: [ + { + allowEmptyValue: true, + allowReserved: true, + name: 'user', + in: 'query', + explode: true, + required: true, + schema: { + $ref: '#/components/schemas/User', + }, + style: 'deepObject', + }, + ], + responses: { + 200: { + description: 'OK', + content: { + 'application/json': { + schema: { + anyOf: [ + {}, + { not: {} }, + ], + }, + }, + }, + }, + }, + }, + }) + }) }) }) diff --git a/packages/openapi/src/openapi-generator.ts b/packages/openapi/src/openapi-generator.ts index eb1f5d625..088c97a80 100644 --- a/packages/openapi/src/openapi-generator.ts +++ b/packages/openapi/src/openapi-generator.ts @@ -323,14 +323,16 @@ export class OpenAPIGenerator { } if (method === 'GET') { - if (!isObjectSchema(schema)) { + const resolvedSchema = resolveOpenAPIJsonSchemaRef(doc, schema) + + if (!isObjectSchema(resolvedSchema)) { throw new OpenAPIGeneratorError( 'When method is "GET", input schema must satisfy: object | any | unknown', ) } ref.parameters ??= [] - ref.parameters.push(...toOpenAPIParameters(schema, 'query')) + ref.parameters.push(...toOpenAPIParameters(resolvedSchema, 'query')) } else { ref.requestBody = {