fix(schema): preserve items schema when metadata.items is already defined#3635
Merged
kamilmysliwiec merged 1 commit intonestjs:masterfrom Jan 6, 2026
Merged
fix(schema): preserve items schema when metadata.items is already defined#3635kamilmysliwiec merged 1 commit intonestjs:masterfrom
kamilmysliwiec merged 1 commit intonestjs:masterfrom
Conversation
…ined Fixes transformToArraySchemaProperty overwriting existing items schema from zod-openapi generated classes, ensuring correct OpenAPI schemas
4 tasks
Contributor
Author
|
@kamilmysliwiec could you please review/merge when you have a moment? thanks! |
Contributor
Author
|
@kamilmysliwiec bumping this when you have a moment - dzięki! |
Member
|
lgtm |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fix(schema): preserve items schema when metadata.items is already defined
Fixes transformToArraySchemaProperty overwriting existing items schema from zod-openapi generated classes, ensuring correct OpenAPI schemas.
PR Checklist
Please check if your PR fulfills the following requirements:
PR Type
What kind of change does this PR introduce?
What is the current behavior?
When using
@ApiQuery({ type: SomeClass })whereSomeClassis generated by libraries like@anatine/zod-openapithat pre-defineitemsschema in metadata,transformToArraySchemaPropertywas overwriting the existingitemsschema with{ type: 'array' }instead of preserving it.This occurred because when
typeparameter is the string'array', the function would create new items from the type parameter, ignoring the existingmetadata.itemsthat contained the correct schema definition.Example of incorrect output:
{ "schema": { "type": "array", "items": { "type": "array" } } }Issue Number: #3624
The
transformToArraySchemaPropertymethod now checks ifmetadata.itemsexists first. If it does, it preserves the existing items schema and merges it with moved properties (format, min/max, etc.). This ensures that pre-defined items schemas from zod-openapi and similar libraries are correctly preserved in the OpenAPI output.Example of correct output:
{ "schema": { "type": "array", "items": { "type": "object", "additionalProperties": { "type": "string", "enum": ["asc", "desc"] } } } }The fix is backward compatible - when
metadata.itemsis not defined, it falls back to the original behavior of creating items from thetypeparameter.Does this PR introduce a breaking change?
Other information
Test coverage:
test/services/schema-object-factory.spec.ts: