[http-client-csharp] Preserve API versions in input types - #11801
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 204a5049-bd52-4eaa-8d56-8a89da54c191
commit: |
|
No changes needing a change description found. |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 204a5049-bd52-4eaa-8d56-8a89da54c191
There was a problem hiding this comment.
Pull request overview
This PR extends the http-client-csharp pipeline to preserve and round-trip TCGC apiVersions metadata on input models, enums, and model properties—ensuring the emitted tspCodeModel.json and the Microsoft.TypeSpec.Generator.Input layer both retain version-availability information for downstream generators.
Changes:
- Plumb
apiVersionsthrough the TypeScript emitter input-type surface and conversion from TCGC SDK types. - Add
ApiVersionsto C# input types (InputModelType,InputEnumType,InputModelProperty) and deserialize it from the JSON code model. - Regenerate and update Spector/local
tspCodeModel.jsonfixtures and add/extend unit tests to validate the new metadata.
Reviewed changes
Copilot reviewed 82 out of 82 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/http-client-csharp/emitter/src/type/input-type.ts | Add apiVersions to emitter input type interfaces (models/enums/properties). |
| packages/http-client-csharp/emitter/src/lib/type-converter.ts | Copy apiVersions from TCGC SDK types into emitter input types during conversion. |
| packages/http-client-csharp/emitter/test/Unit/client-model-builder.test.ts | Add unit test verifying apiVersions preservation for model/enum/property across versions. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputModelTypeConverter.cs | Deserialize apiVersions into InputModelType. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputModelPropertyConverter.cs | Deserialize apiVersions into InputModelProperty. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputEnumTypeConverter.cs | Deserialize apiVersions into InputEnumType. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/InputModelType.cs | Add ApiVersions to InputModelType and propagate through update/clone paths. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/InputModelProperty.cs | Add ApiVersions to InputModelProperty and support updates. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/InputEnumType.cs | Add ApiVersions to InputEnumType. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/test/InputModelTypeTests.cs | Add test validating model + property apiVersions deserialization. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/test/TypeSpecInputConverterTests.cs | Extend enum deserialization test to assert ApiVersions. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/common/InputFactory.cs | Extend factory helpers to accept/populate apiVersions when constructing input types. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/CanonicalTypeProviderTests.cs | Update test construction to pass apiVersions for InputModelProperty. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/perf/CodeWriterBenchmark.cs | Update perf benchmark construction to pass apiVersions for model/property. |
| packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.ClientModel/test/Providers/MrwSerializationTypeDefinitions/MrwSerializationTypeDefinitionTests.cs | Update test models/properties to pass apiVersions. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/typeChangedFrom/v1/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/typeChangedFrom/v2/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/returnTypeChangedFrom/v1/tspCodeModel.json | Fixture update: include apiVersions for enums. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/returnTypeChangedFrom/v2/tspCodeModel.json | Fixture update: include apiVersions for enums. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/renamedFrom/v1/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/renamedFrom/v2/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v1/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v2Preview/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/removed/v2/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/madeOptional/v1/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/madeOptional/v2/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/added/v1/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/versioning/added/v2/tspCodeModel.json | Fixture update: include apiVersions for enums/models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/union/tspCodeModel.json | Fixture update: include empty apiVersions for unversioned types/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/value-types/tspCodeModel.json | Fixture update: include empty apiVersions for unversioned types/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/optionality/tspCodeModel.json | Fixture update: include empty apiVersions for unversioned types/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/property/nullable/tspCodeModel.json | Fixture update: include empty apiVersions for unversioned types/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/visibility/tspCodeModel.json | Fixture update: include empty apiVersions for unversioned models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/usage/tspCodeModel.json | Fixture update: include empty apiVersions for unversioned models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/single-discriminator/tspCodeModel.json | Fixture update: include empty apiVersions for inheritance shapes. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/recursive/tspCodeModel.json | Fixture update: include empty apiVersions for recursive shapes. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/not-discriminated/tspCodeModel.json | Fixture update: include empty apiVersions for inheritance shapes. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/nested-discriminator/tspCodeModel.json | Fixture update: include empty apiVersions for nested discriminator shapes. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/inheritance/enum-discriminator/tspCodeModel.json | Fixture update: include empty apiVersions for enum discriminator shapes. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/model/empty/tspCodeModel.json | Fixture update: include empty apiVersions for empty model fixtures. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/enum/fixed/tspCodeModel.json | Fixture update: include empty apiVersions for enums. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/enum/extensible/tspCodeModel.json | Fixture update: include empty apiVersions for enums. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/dictionary/tspCodeModel.json | Fixture update: include empty apiVersions for dictionary model/property. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/type/array/tspCodeModel.json | Fixture update: include empty apiVersions for array model/property. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/sse/tspCodeModel.json | Fixture update: include empty apiVersions for streaming models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/streaming/jsonl/tspCodeModel.json | Fixture update: include empty apiVersions for streaming models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/special-headers/repeatability/tspCodeModel.json | Fixture update: include empty apiVersions for enum fixture. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/service/multiple-services/tspCodeModel.json | Fixture update: include apiVersions for multi-service version enums. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/server/versions/versioned/tspCodeModel.json | Fixture update: include apiVersions for server versions enum. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/server/path/multiple/tspCodeModel.json | Fixture update: include apiVersions for versions enum. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/serialization/encoded-name/json/tspCodeModel.json | Fixture update: include empty apiVersions for model/property. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/routes/tspCodeModel.json | Fixture update: include empty apiVersions for model/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/response/status-code-range/tspCodeModel.json | Fixture update: include empty apiVersions for error models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/resiliency/srv-driven/v1/tspCodeModel.json | Fixture update: include apiVersions for versions enum. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/resiliency/srv-driven/v2/tspCodeModel.json | Fixture update: include apiVersions for versions enum. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/payload/xml/tspCodeModel.json | Fixture update: include empty apiVersions for XML models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/payload/pageable/tspCodeModel.json | Fixture update: include empty apiVersions for pageable models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/payload/json-merge-patch/tspCodeModel.json | Fixture update: include empty apiVersions for merge-patch models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/payload/content-negotiation/tspCodeModel.json | Fixture update: include empty apiVersions for content negotiation models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/spread/tspCodeModel.json | Fixture update: include empty apiVersions for spread request models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/body-root/tspCodeModel.json | Fixture update: include empty apiVersions for body-root model/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/body-optionality/tspCodeModel.json | Fixture update: include empty apiVersions for body model/property. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/parameters/basic/tspCodeModel.json | Fixture update: include empty apiVersions for basic parameter models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/encode/numeric/tspCodeModel.json | Fixture update: include empty apiVersions for encode numeric models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/encode/duration/tspCodeModel.json | Fixture update: include empty apiVersions for encode duration models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/encode/datetime/tspCodeModel.json | Fixture update: include empty apiVersions for encode datetime models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/encode/bytes/tspCodeModel.json | Fixture update: include empty apiVersions for encode bytes models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/encode/boolean/tspCodeModel.json | Fixture update: include empty apiVersions for encode boolean models/properties. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/encode/array/tspCodeModel.json | Fixture update: include empty apiVersions for encode array models/properties/enums. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/documentation/tspCodeModel.json | Fixture update: include empty apiVersions for documentation fixtures. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/two-operation-group/tspCodeModel.json | Fixture update: include empty apiVersions for client structure enum fixture. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/renamed-operation/tspCodeModel.json | Fixture update: include empty apiVersions for client structure enum fixture. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/multi-client/tspCodeModel.json | Fixture update: include empty apiVersions for client structure enum fixture. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/default/tspCodeModel.json | Fixture update: include empty apiVersions for client structure enum fixture. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/client/structure/client-operation-group/tspCodeModel.json | Fixture update: include empty apiVersions for client structure enum fixture. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/oauth2/tspCodeModel.json | Fixture update: include empty apiVersions for auth error model/property. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/http/custom/tspCodeModel.json | Fixture update: include empty apiVersions for auth error model/property. |
| packages/http-client-csharp/generator/TestProjects/Spector/http/authentication/api-key/tspCodeModel.json | Fixture update: include empty apiVersions for auth error model/property. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 204a5049-bd52-4eaa-8d56-8a89da54c191
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 79 out of 79 changed files in this pull request and generated 1 comment.
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator.Input/src/InputTypes/Serialization/InputModelTypeConverter.cs:89
- The JSON deserializer reads the
summaryproperty into thedocvariable (TryReadString("summary", ref doc)), which preventsInputModelType.Summaryfrom ever being populated and can also overwrite documentation whensummaryis present.
|| reader.TryReadString("summary", ref doc)
|
Corresponding regen shows no changes except for tspCodeModel files: Azure/azure-sdk-for-net#62607 |
Summary
tspCodeModel.jsonfixtures with the new metadataValidation
npm run buildnpm test(240 emitter tests passed; 4,005 generator tests passed)npm run formateng/scripts/Generate.ps1(67 code-model fixtures updated)Fixes #11799
Downstream tracking: Azure/azure-sdk-for-net#62567