diff --git a/packages/parsers/src/openapi/3.1/paths/OperationObjectConverter.node.ts b/packages/parsers/src/openapi/3.1/paths/OperationObjectConverter.node.ts index 0c97a8d956..af5a928a86 100644 --- a/packages/parsers/src/openapi/3.1/paths/OperationObjectConverter.node.ts +++ b/packages/parsers/src/openapi/3.1/paths/OperationObjectConverter.node.ts @@ -55,7 +55,7 @@ export class OperationObjectConverterNode extends BaseOpenApiV3_1ConverterNode< } else { this.context.errors.warning({ message: `Expected parameter reference to resolve to an object. Received undefined reference: ${parameter.$ref}`, - path: this.accessPath, + path: [...this.accessPath, `parameters[${index}]`], }); return undefined; } diff --git a/packages/parsers/src/openapi/3.1/paths/response/ResponseObjectConverter.node.ts b/packages/parsers/src/openapi/3.1/paths/response/ResponseObjectConverter.node.ts index f6ab4163fc..8978ab7ddc 100644 --- a/packages/parsers/src/openapi/3.1/paths/response/ResponseObjectConverter.node.ts +++ b/packages/parsers/src/openapi/3.1/paths/response/ResponseObjectConverter.node.ts @@ -27,15 +27,13 @@ export class ResponseObjectConverterNode extends BaseOpenApiV3_1ConverterNode< parse(streamingFormat: ResponseStreamingFormat | undefined): void { this.description = this.input.description; - const input = isReferenceObject(this.input) - ? resolveResponseReference(this.input, this.context.document) - : this.input; + const input = resolveResponseReference(this.input, this.context.document); if (input == null) { this.context.errors.error({ message: isReferenceObject(this.input) - ? `Expected response reference to resolve to an object. Received undefined reference: ${this.input.$ref}` - : "Expected response to be defined. Received null", + ? `Undefined reference: ${this.input.$ref}` + : "Expected response, received null", path: this.accessPath, }); return; diff --git a/packages/parsers/src/openapi/3.1/schemas/OneOfConverter.node.ts b/packages/parsers/src/openapi/3.1/schemas/OneOfConverter.node.ts index a3eb833a66..c22e5fcc30 100644 --- a/packages/parsers/src/openapi/3.1/schemas/OneOfConverter.node.ts +++ b/packages/parsers/src/openapi/3.1/schemas/OneOfConverter.node.ts @@ -50,15 +50,15 @@ export class OneOfConverterNode extends BaseOpenApiV3_1ConverterNode< if (schema == null) { this.context.errors.warning({ message: `Expected schema reference. Received undefined reference: ${value}`, - path: this.accessPath, + path: [...this.accessPath, "discriminator", "mapping", key], }); return; } discriminatedMapping[key] = new SchemaConverterNode({ input: schema, context: this.context, - accessPath: this.accessPath, - pathId: this.pathId, + accessPath: [...this.accessPath, "discriminator", "mapping", key], + pathId: key, }); }); } diff --git a/packages/parsers/src/openapi/3.1/schemas/primitives/EnumConverter.node.ts b/packages/parsers/src/openapi/3.1/schemas/primitives/EnumConverter.node.ts index d0e9a3d117..4b4d0cfd41 100644 --- a/packages/parsers/src/openapi/3.1/schemas/primitives/EnumConverter.node.ts +++ b/packages/parsers/src/openapi/3.1/schemas/primitives/EnumConverter.node.ts @@ -22,7 +22,7 @@ export class EnumConverterNode extends BaseOpenApiV3_1ConverterNode< if (this.input.enum != null) { let continueParsing = true; this.values = this.input.enum - .map((value) => { + .map((value, index) => { if (!continueParsing) { return undefined; } @@ -31,7 +31,7 @@ export class EnumConverterNode extends BaseOpenApiV3_1ConverterNode< if (typeof value !== "string") { this.context.errors.error({ message: `Expected enum values to be strings. Received ${value}`, - path: this.accessPath, + path: [...this.accessPath, `enum[${index}]`], }); continueParsing = false; return undefined; diff --git a/packages/parsers/src/openapi/utils/3.1/resolveResponseReference.ts b/packages/parsers/src/openapi/utils/3.1/resolveResponseReference.ts index b4e89a0fa4..495adf3345 100644 --- a/packages/parsers/src/openapi/utils/3.1/resolveResponseReference.ts +++ b/packages/parsers/src/openapi/utils/3.1/resolveResponseReference.ts @@ -1,9 +1,14 @@ import { OpenAPIV3_1 } from "openapi-types"; +import { isReferenceObject } from "../../3.1/guards/isReferenceObject"; import { resolveReference } from "./resolveReference"; export function resolveResponseReference( - referenceObject: OpenAPIV3_1.ReferenceObject, + referenceObject: OpenAPIV3_1.ReferenceObject | OpenAPIV3_1.ResponseObject, document: OpenAPIV3_1.Document, ): OpenAPIV3_1.ResponseObject | undefined { - return resolveReference(referenceObject, document, undefined); + if (isReferenceObject(referenceObject)) { + return resolveReference(referenceObject, document, undefined); + } + + return referenceObject; }