Skip to content

Comments

fix(theme): handle nested discriminators in allOf structures#1303

Merged
sserrata merged 2 commits intomainfrom
fix/nested-oneof-discriminator
Feb 17, 2026
Merged

fix(theme): handle nested discriminators in allOf structures#1303
sserrata merged 2 commits intomainfrom
fix/nested-oneof-discriminator

Conversation

@sserrata
Copy link
Member

@sserrata sserrata commented Feb 3, 2026

Add support for discriminators nested within allOf schemas. Previously, discriminators inside allOf items were not properly detected, and the discriminator property lookup only checked top-level schema properties.

Changes:

  • Add findProperty() helper to recursively search for properties in nested oneOf/anyOf/allOf structures
  • Update DiscriminatorNode to use findProperty() for discriminator property lookup
  • Update SchemaNode to check for discriminators in allOf items and merge schemas before processing
  • Return null instead of empty "object" SchemaItem when properties are empty after discriminator processing
  • Add test case for nested discriminator in allOf

This fixes scenarios like:

allOf:
  - $ref: CommonProps
  - oneOf: [VariantA, VariantB]
    discriminator:
      propertyName: type

Fixes #1302

@sserrata sserrata self-assigned this Feb 3, 2026
@sserrata sserrata added the bug Something isn't working label Feb 3, 2026
@github-actions
Copy link

github-actions bot commented Feb 3, 2026

Size Change: +22.1 kB (+1.01%)

Total Size: 2.2 MB

Filename Size Change
demo/.docusaurus/globalData.json 65.4 kB +3.81 kB (+6.19%) 🔍
demo/.docusaurus/registry.js 94.7 kB +5.56 kB (+6.24%) 🔍
demo/.docusaurus/routes.js 89.6 kB +5.26 kB (+6.24%) 🔍
demo/.docusaurus/routesChunkNames.json 37.1 kB +2.2 kB (+6.31%) 🔍
demo/build/assets/js/main.********.js 656 kB +9.89 kB (+1.53%)
demo/build/assets/js/runtime~main.********.js 22.3 kB +1.08 kB (+5.12%) 🔍
demo/build/petstore/schemas/user/index.html 40.7 kB -5.75 kB (-12.4%) 👏
ℹ️ View Unchanged
Filename Size Change
demo/.docusaurus/codeTranslations.json 2 B 0 B
demo/.docusaurus/docusaurus.config.mjs 14.7 kB 0 B
demo/.docusaurus/i18n.json 372 B 0 B
demo/.docusaurus/site-metadata.json 1.51 kB 0 B
demo/build/assets/css/styles.********.css 163 kB 0 B
demo/build/index.html 97.6 kB 0 B
demo/build/petstore/add-pet/index.html 29.3 kB 0 B
demo/build/petstore/create-user/index.html 24 kB 0 B
demo/build/petstore/create-users-with-array-input/index.html 24.1 kB 0 B
demo/build/petstore/create-users-with-list-input/index.html 24.1 kB 0 B
demo/build/petstore/delete-order/index.html 23.8 kB 0 B
demo/build/petstore/delete-pet/index.html 24.1 kB 0 B
demo/build/petstore/delete-user/index.html 24.3 kB 0 B
demo/build/petstore/find-pets-by-status/index.html 24.8 kB 0 B
demo/build/petstore/find-pets-by-tags/index.html 25.4 kB 0 B
demo/build/petstore/get-inventory/index.html 23.1 kB 0 B
demo/build/petstore/get-order-by-id/index.html 24.1 kB 0 B
demo/build/petstore/get-pet-by-id/index.html 24.9 kB 0 B
demo/build/petstore/get-user-by-name/index.html 24.4 kB 0 B
demo/build/petstore/login-user/index.html 24.9 kB 0 B
demo/build/petstore/logout-user/index.html 23.7 kB 0 B
demo/build/petstore/new-pet/index.html 24.3 kB 0 B
demo/build/petstore/pet/index.html 22.5 kB 0 B
demo/build/petstore/place-order/index.html 23.3 kB 0 B
demo/build/petstore/schemas/apiresponse/index.html 24.6 kB 0 B
demo/build/petstore/schemas/cat/index.html 38.8 kB +1 B (0%)
demo/build/petstore/schemas/category/index.html 25.7 kB 0 B
demo/build/petstore/schemas/dog/index.html 39 kB +1 B (0%)
demo/build/petstore/schemas/honeybee/index.html 39.1 kB +7 B (+0.02%)
demo/build/petstore/schemas/id/index.html 22.7 kB 0 B
demo/build/petstore/schemas/order/index.html 26.8 kB 0 B
demo/build/petstore/schemas/pet/index.html 38.6 kB 0 B
demo/build/petstore/schemas/tag/index.html 24.1 kB 0 B
demo/build/petstore/store/index.html 21.5 kB 0 B
demo/build/petstore/subscribe-to-the-store-events/index.html 30.2 kB 0 B
demo/build/petstore/swagger-petstore-yaml/index.html 30.2 kB 0 B
demo/build/petstore/update-pet-with-form/index.html 24.3 kB 0 B
demo/build/petstore/update-pet/index.html 24.7 kB 0 B
demo/build/petstore/update-user/index.html 24.3 kB 0 B
demo/build/petstore/upload-file/index.html 24.1 kB 0 B
demo/build/petstore/user/index.html 22.2 kB 0 B

compressed-size-action

@github-actions
Copy link

github-actions bot commented Feb 3, 2026

Visit the preview URL for this PR (updated for commit 121d379):

https://docusaurus-openapi-36b86--pr1303-sa4n11fg.web.app

(expires Thu, 19 Mar 2026 20:23:26 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: bf293780ee827f578864d92193b8c2866acd459f

@sserrata sserrata force-pushed the fix/nested-oneof-discriminator branch from ef2c0f9 to b6471c4 Compare February 3, 2026 16:37
sserrata and others added 2 commits February 17, 2026 14:46
Add support for discriminators nested within allOf schemas. Previously,
discriminators inside allOf items were not properly detected, and the
discriminator property lookup only checked top-level schema properties.

Changes:
- Add findProperty() helper to recursively search for properties in
  nested oneOf/anyOf/allOf structures
- Update DiscriminatorNode to use findProperty() for discriminator
  property lookup
- Update SchemaNode to check for discriminators in allOf items and
  merge schemas before processing
- Return null instead of empty "object" SchemaItem when properties
  are empty after discriminator processing
- Add test case for nested discriminator in allOf

This fixes scenarios like:
```yaml
allOf:
  - $ref: CommonProps
  - oneOf: [VariantA, VariantB]
    discriminator:
      propertyName: type
```

Fixes #1302
Handle recursively nested discriminators in composed schemas while preserving intentional empty-object rendering, and add demo specs covering deep allOf discriminator chains and explicit empty object properties.

Co-authored-by: Cursor <cursoragent@cursor.com>
@sserrata sserrata force-pushed the fix/nested-oneof-discriminator branch from b6471c4 to 121d379 Compare February 17, 2026 20:19
@sserrata sserrata merged commit 7a5535e into main Feb 17, 2026
10 checks passed
@sserrata sserrata deleted the fix/nested-oneof-discriminator branch February 17, 2026 20:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Nested and sibling oneOf's

1 participant