Files
mr.koi 454e6c51d7 Release 0.2.0
Complete OpenAPI 3.0/3.1 generation, diagnostics, lifecycle safety, enum and naming mappings, bilingual documentation, examples, and pub.dev release validation.
2026-07-31 16:47:39 +08:00

120 lines
7.1 KiB
Markdown

# Compatibility
[English](COMPATIBILITY.md) | [Chinese (Simplified)](zh-CN/COMPATIBILITY.md)
This matrix describes behavior covered by the current implementation and
automated tests.
- **Supported**: implemented and tested.
- **Partial**: only the boundary stated in the notes is supported.
- **Unsupported**: diagnosed before generation, or explicitly ignored with a
warning.
## Documents, references, and merging
| Capability | Status | Boundary |
|---|---|---|
| OpenAPI 3.0.x / 3.1.x | Supported | JSON and YAML; common Schema Object subset needed by client generation |
| Swagger/OpenAPI 2.0 | Unsupported | `openapi.unsupported_version` error |
| Local `$ref` | Supported | JSON Pointer across component groups |
| Relative file / file URL `$ref` | Supported | Resolved relative to the referring document |
| HTTP(S) `$ref` | Supported | Per-run cache, dependency tracking, and cycle diagnostics |
| External component name conflicts | Supported | Deterministic rename with warning |
| Multiple root sources | Supported | Deterministic merge; component and operation conflict diagnostics |
| Unresolved `$ref` | Diagnosed | Error; never silently converted to `dynamic` |
| Callbacks / webhooks | Unsupported | Warning; no reverse-call client is emitted |
| Link Object | Unsupported | `openapi.links_not_supported` warning |
This is not a complete JSON Schema 2020-12 implementation. `$defs` as
generation roots, `if`/`then`/`else`, `not`, `contains`,
`dependentSchemas`, and unevaluated-property/item semantics are outside the
current contract.
## Schemas and models
| Capability | Status | Boundary |
|---|---|---|
| Object / array / map | Supported | Recursive containers and inline schemas |
| `properties` + `additionalProperties` | Supported | Extra entries round-trip at the JSON root |
| String/number/integer/bool/date/date-time | Supported | Formats can be overridden by type mappings |
| Enum | Supported | String, number, and boolean wire values; inline or component |
| Enum member-name mappings | Supported | Configuration and common `x-enum` extensions |
| Enum unknown fallback | Supported | Configurable `JsonKey.unknownEnumValue` output |
| Required / nullable / absent | Supported | Deserialization distinguishes missing from disallowed null; ordinary Freezed fields do not retain presence history |
| Read-only / write-only | Supported | Directional request/response variants when needed |
| `allOf` | Supported | Object properties, required fields, and additional properties are merged |
| Discriminator `oneOf`/`anyOf` | Supported | Local or normalized object branches |
| Non-discriminator `oneOf`/`anyOf` | Partial | Primitive, container, and object branches; overlapping `oneOf` matches are rejected |
| Custom schema/type/format | Supported | External imports; host code owns the JSON conversion contract |
| Constraint metadata | Partial | Descriptions/doc comments retained; no generated runtime validator |
| Presence/dirty tracking | Unsupported | No Kiota-style backing store |
## HTTP wire semantics
| Capability | Status | Boundary |
|---|---|---|
| Path/query/header/cookie parameters | Supported | Type, required/default, and wire names |
| Matrix / label / simple | Supported | Validated location/style combinations |
| Form / spaceDelimited / pipeDelimited / deepObject | Supported | Validated query/cookie combinations |
| Explode / `allowReserved` | Supported | A transport adapter is emitted when Retrofit cannot express the behavior |
| Parameter Object `content` | Partial | Exactly one media type is required |
| JSON / `+json` request body | Supported | Required bodies and null-to-absent behavior |
| Text request body | Supported | Typed `@Body` |
| `multipart/form-data` | Supported | Binary, primitive, array, and structured JSON parts |
| `application/x-www-form-urlencoded` | Supported | Typed fields; complex encoding uses an adapter |
| Binary upload | Supported | `Uint8List` |
| Binary download | Supported | `Uint8List` or Dio `ResponseBody` stream |
| XML / Protobuf / arbitrary custom codec | Unsupported | Content-type error; no unsafe decoder is emitted |
## Responses, servers, and security
| Capability | Status | Boundary |
|---|---|---|
| Multiple 2xx / 204 / `2XX` | Supported | Deterministic primary response; differing JSON types may become `Object?` with a warning |
| `default` / 4xx / 5xx | Supported | Error model/IR metadata retained; never selected as success |
| Response headers | Supported | Status, type, required flag, and description |
| Raw response metadata | Supported | `response_mode: http_response` |
| Mixed binary and JSON success media | Diagnosed | Error when one Retrofit method cannot decode the union safely |
| Root/path/operation servers | Supported | Server variable default/enum validation; preferred server becomes client default |
| Runtime switching among servers | Partial | Metadata retained; no environment-selector UI |
| API key / Bearer / Basic | Metadata supported | Scheme and operation requirements generated; credentials supplied by host interceptor/provider |
| OAuth2 / OpenID / mutual TLS | Partial | Scheme/scope metadata only; no complete authorization flow |
| Security OR/AND requirements | Supported | List entries are OR; schemes inside one map entry are AND |
## Generation and lifecycle
| Capability | Status | Boundary |
|---|---|---|
| Retrofit + Freezed | Supported | The only complete renderer in this release |
| Passthrough / external generic wrapper | Supported | Configurable standard-envelope detection |
| Model/property/parameter/operation mappings | Supported | Collision checks and safe identifiers |
| Schema/type/import mappings | Supported | Recursive Dart `List`/`Map` type expressions |
| Tag/path/operation/model filters | Supported | Exact, glob, and `regex:` patterns |
| Dry run | Supported | Reports would-write and would-delete sets |
| Dart fix / format | Supported | Changed primary generated files only |
| build_runner build/watch | Supported | Runs in the configured host-project directory |
| Unchanged skip | Supported | Spec/config/content and actual-file SHA-256 |
| Stale cleanup | Supported | Manifest ownership, root containment, and user-modification protection |
| Concurrent generation lock | Supported | Operating-system exclusive lock beside the manifest |
| External templates / plugin renderer | Unsupported | IR/preset are separated, but there is no public renderer SPI |
| Complete SDK package scaffold | Unsupported | Generates APIs/models inside an existing project |
## Verification coverage
The repository test suite covers:
- parser, IR, renderer, and lifecycle stages;
- OpenAPI 3.0 YAML and OpenAPI 3.1 JSON/FastAPI fixtures;
- enum and naming mappings, parameter wire styles, responses, schema
semantics, security, and external/cyclic references;
- reviewed SHA-256 golden output;
- generation into a temporary Dart package followed by build_runner, analysis,
and runtime tests.
Coverage of a feature in this matrix is not a claim of full OpenAPI or JSON
Schema conformance outside the stated boundary. Use a minimal fixture and
dry-run when adopting a new schema corpus.
Diagnostic meanings and remediation are documented in
[Diagnostics](DIAGNOSTICS.md).