diff --git a/.chronus/changes/tcgc-visibilityHeader-2025-1-3-16-4-24.md b/.chronus/changes/tcgc-visibilityHeader-2025-1-3-16-4-24.md new file mode 100644 index 0000000000..42a7f36175 --- /dev/null +++ b/.chronus/changes/tcgc-visibilityHeader-2025-1-3-16-4-24.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@azure-tools/typespec-client-generator-core" +--- + +add visibility for other properties \ No newline at end of file diff --git a/packages/typespec-client-generator-core/src/interfaces.ts b/packages/typespec-client-generator-core/src/interfaces.ts index 1a293e6b4a..c1df989ca5 100644 --- a/packages/typespec-client-generator-core/src/interfaces.ts +++ b/packages/typespec-client-generator-core/src/interfaces.ts @@ -482,6 +482,7 @@ export interface SdkModelPropertyTypeBase extends DecoratedType { isApiVersionParam: boolean; optional: boolean; crossLanguageDefinitionId: string; + visibility?: Visibility[]; } /** @@ -585,7 +586,6 @@ export interface SdkBodyModelPropertyType extends SdkModelPropertyTypeBase { * @deprecated This property is deprecated. Use `serializationOptions.multipart` instead. */ multipartOptions?: MultipartOptions; - visibility?: Visibility[]; flatten: boolean; } diff --git a/packages/typespec-client-generator-core/src/types.ts b/packages/typespec-client-generator-core/src/types.ts index 1ce5403590..551cb6a14b 100644 --- a/packages/typespec-client-generator-core/src/types.ts +++ b/packages/typespec-client-generator-core/src/types.ts @@ -1163,6 +1163,7 @@ export function getSdkModelPropertyTypeBase( onClient, crossLanguageDefinitionId: getCrossLanguageDefinitionId(context, type, operation), decorators: diagnostics.pipe(getTypeDecorators(context, type)), + visibility: getSdkVisibility(context, type), }); } @@ -1317,7 +1318,6 @@ export function getSdkModelPropertyType( ...base, kind: "property", optional: type.optional, - visibility: getSdkVisibility(context, type), discriminator: false, serializedName: getPropertyNames(context, type)[1], isMultipartFileInput: false, diff --git a/packages/typespec-client-generator-core/test/types/model-types.test.ts b/packages/typespec-client-generator-core/test/types/model-types.test.ts index dd3e09d7bb..f2d02c9b75 100644 --- a/packages/typespec-client-generator-core/test/types/model-types.test.ts +++ b/packages/typespec-client-generator-core/test/types/model-types.test.ts @@ -1,4 +1,5 @@ import { AzureCoreTestLibrary } from "@azure-tools/typespec-azure-core/testing"; +import { Visibility } from "@typespec/http"; import { deepStrictEqual, ok, strictEqual } from "assert"; import { beforeEach, describe, it } from "vitest"; import { SdkModelType, UsageFlags } from "../../src/interfaces.js"; @@ -1787,4 +1788,26 @@ describe("typespec-client-generator-core: model types", () => { strictEqual(models.length, 1); strictEqual(models[0].properties.length, 1); }); + + it("header property on body root model visibility", async function () { + await runner.compileWithBuiltInService(` + model InputModel { + @visibility("read") + @header("x-name") + name: string; + } + op foo(@bodyRoot body: InputModel): void; + `); + const sdkPackage = runner.context.sdkPackage; + strictEqual(sdkPackage.models.length, 1); + const inputModel = sdkPackage.models[0]; + strictEqual(inputModel.name, "InputModel"); + strictEqual(inputModel.properties.length, 1); + const nameProperty = inputModel.properties[0]; + strictEqual(nameProperty.name, "name"); + strictEqual(nameProperty.kind, "header"); + ok(nameProperty.visibility); + strictEqual(nameProperty.visibility.length, 1); + strictEqual(nameProperty.visibility[0], Visibility.Read); + }); });