fix: handle boolean schemas in OpenAPI 3.1 specifications #76
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.
Summary
This PR fixes a bug where the generator crashes on valid OpenAPI 3.1 specifications that use boolean schemas (
"items": falseor"items": true).Fixes #75
Problem
OpenAPI 3.1 adopted JSON Schema 2020-12, which allows boolean schemas. When defining strict tuples:
"items": falsemeans no additional items beyondprefixItemsare allowed"items": truemeans any additional items are allowedThe generator was crashing with:
Solution
Added proper handling for boolean schemas throughout the codebase:
cleanupSchema()- Check if schema is boolean/object before property accessaddRefs()- Skip processing for non-object schemastoSource()- Convert true to Unknown, false returns noneitemsSchema()- Handle boolean values for itemsonUnknown()transformer - Generate proper types fortrueschemasTesting
Test Fixtures Added
Created
test-fixtures/boolean-schema-test.jsonwith test cases for:"items": false"items": trueMinimal Reproduction
Repository with minimal repro: https://github.com/schickling-repros/openapi-gen-boolean-schema-bug
Before fix:
npx @tim-smart/openapi-gen -s minimal-repro.json -n TestClient # TypeError: Cannot use 'in' operator to search for 'type' in falseAfter fix:
npx @tim-smart/openapi-gen -s minimal-repro.json -n TestClient # ✅ Successfully generates client code