Skip to content
Merged
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
7f007cb
docs(downgrader): add progenitor note, NSwag first-branch rule, type-…
claude Oct 31, 2026
6510db0
docs(downgrader): add allOf $ref limitation and datamodel nullable ar…
claude Oct 31, 2026
d31feaa
docs(downgrader): add openapi-zod-client nullable anyOf branch note
claude Oct 31, 2026
6e4d181
docs(downgrader): add OpenAPI Generator Java oneOf coercion, null-onl…
claude Oct 31, 2026
34bdaac
docs(downgrader): note OpenAPI Generator Java rejecting null in a nul…
claude Oct 31, 2026
90e2a89
docs(downgrader): note ogen reading format: byte as bytes (pattern, n…
claude Oct 31, 2026
1136c39
docs(downgrader): name the type list in the OpenAPI Generator Java note
claude Oct 31, 2026
915033c
Merge main (#229 squash) into claude/project-thread-fvev8j
claude Oct 31, 2026
1f9a73d
docs(downgrader): note OpenAPI Generator C# generichost null-only enu…
claude Oct 31, 2026
0f10bfd
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 31, 2026
0e82c08
docs(downgrader): note OpenAPI Generator PHP rejects arrays and maps …
claude Oct 31, 2026
f686bed
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 31, 2026
5b07f22
docs(downgrader): note Kiota TypeScript dropping union tags and base6…
claude Oct 31, 2026
3def872
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 31, 2026
f7e4e7f
docs(downgrader): swagger-typescript-api drops null from more nullabl…
claude Oct 31, 2026
0baa944
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 31, 2026
cc19e3d
docs(downgrader): OpenAPI Generator Go server does not compile nullab…
claude Oct 31, 2026
cbdd0fc
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 31, 2026
9c109e3
docs(downgrader): OpenAPI Generator Spring and FastAPI servers break …
claude Oct 31, 2026
14d72dc
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 31, 2026
2015454
Merge remote-tracking branch 'origin/main' into claude/project-thread…
claude Oct 31, 2026
95b5cee
docs(downgrader): OpenAPI Generator rust-axum breaks on a nullable by…
claude Oct 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/downgrader/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ Accepts the default OAS dialect, which adds `discriminator`, `xml`, `externalDoc
- An untyped schema that gains a `format` from `contentEncoding` or `contentMediaType` also gains `type: "string"`, as 3.0 binary strings need, so it rejects non-string values it accepted. 3.0 tools find file uploads only by `type: "string"` with `format: "binary"`.
- OpenAPI Generator merges the `"null"` branch beside a `$ref` to a string enum into a new enum, so the reference is lost. In 7.17, its TypeScript Fetch client also imports each value of a query parameter that is a nullable enum, such as Zod's `z.enum(["asc", "desc"]).nullish()` in a GET input, as a model, writing `import type { 'asc', 'desc', 'null' }`, so the client does not compile. In 7.26, its Go server does not compile a property or an array item that is a nullable enum, inline or a `$ref`, such as Zod's `z.enum(["a", "b"]).nullable()`, since it checks the merged enum with an `AssertstringRequired` function it never writes. Pass `--openapi-normalizer SIMPLIFY_ONEOF_ANYOF_ENUM=false` to avoid all three.
- OpenAPI Generator's TypeScript, Swift and Kotlin clients can leave null out of the type of an array item or map value that is a nullable `$ref` or enum, which becomes a `oneOf` with the `"null"` branch. OpenAPI Generator reads 3.1 too, which keeps it.
- OpenAPI Generator's Rust client and its Spring server do not compile a required property that is a nullable `format: byte` string, which a nullable `contentEncoding: base64` string becomes, such as Zod's `z.base64().nullable()`. In the Rust client, an optional one can also break the optional `format: byte` properties of the models generated after it. OpenAPI Generator reads 3.1 too, which keeps the string.
- OpenAPI Generator's Rust client and its Spring server do not compile a required property that is a nullable `format: byte` string, which a nullable `contentEncoding: base64` string becomes, such as Zod's `z.base64().nullable()`. In the Rust client, an optional one can also break the optional `format: byte` properties of the models generated after it. In 7.26, its Rust server (`rust-axum`) does not compile such a property, required or optional, when it also has a `pattern`, as Zod writes one. OpenAPI Generator reads 3.1 too, which keeps the string.
- OpenAPI Generator's PHP client drops the namespace separators from the class of an array item that is an `allOf`, as a `$ref` with siblings becomes, writing `\OpenAPIClientModelUser[]`, so deserializing that array throws. It also writes no allowed values for the `enum` of an array item or map value that is `{ type: "null" }` alone, as Zod's `z.null()` writes there, so it rejects such an array or map unless it is empty. OpenAPI Generator reads 3.1 too, which keeps the `$ref` beside its siblings there and lets null through such an item or value.
- OpenAPI Generator's Java client with the `native` or `jersey3` library coerces scalars while it reads a `oneOf`, and wants exactly one branch to match, so it rejects a value that two branches take once coerced, such as `1` or `"1"` against the `oneOf` that `string | number` becomes, or `true` against `string | boolean`. It also rejects null in a tuple member that may be null, as in `z.tuple([z.number(), z.string().nullable()])`, since that null sits in a branch of the `anyOf` that `items` becomes. Its Java clients and Spring server, and its C# client with the default `generichost` library, also write an enum that does not compile for `{ type: "null" }` alone, as Zod's `z.null()` writes for a property, an array item or a component, and its Python FastAPI server does for such a component. With the Java `native` or the C# `generichost` library, a union with a `contentEncoding: base64` string branch does not compile either, since they name the member for that branch, now `format: byte`, `getbyte[]` or `Byte[]`. OpenAPI Generator reads 3.1 too, which keeps the `type` list or `anyOf` and `{ type: "null" }`, leaves `prefixItems` untyped, and reads `contentEncoding` as a plain string.
- datamodel-code-generator reads a required property with `nullable: true` as never null. Pass `--strict-nullable` to keep null. Even then, it leaves null out of an array item or map value that is a nullable array or record, such as Zod's `z.array(z.array(z.string()).nullable())`. It reads 3.1 too, which keeps the `"null"` type.
Expand Down
Loading