From 492eab7a47d80f751ff16a0e99c85c18b7805caa Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Wed, 4 Sep 2024 16:33:23 +0800 Subject: [PATCH 1/9] fix --- packages/typespec-client-generator-core/src/package.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typespec-client-generator-core/src/package.ts b/packages/typespec-client-generator-core/src/package.ts index e6038d0c82..051a2fb4d4 100644 --- a/packages/typespec-client-generator-core/src/package.ts +++ b/packages/typespec-client-generator-core/src/package.ts @@ -660,7 +660,7 @@ function addDefaultClientParameters< if (apiVersionParam) { client.initialization.properties.push(apiVersionParam); } - const subId = client.initialization.properties.find((x) => isSubscriptionId(context, x)); + const subId = context.__clientToParameters.get(client.__raw.type)?.find((x) => isSubscriptionId(context, x)); if (subId) { client.initialization.properties.push(subId); } From b28652e9d97950e962a17b918b0151f6d0bc1793 Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Wed, 4 Sep 2024 17:38:47 +0800 Subject: [PATCH 2/9] fix subId --- .../typespec-client-generator-core/src/package.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/typespec-client-generator-core/src/package.ts b/packages/typespec-client-generator-core/src/package.ts index 051a2fb4d4..3a7a85e9d3 100644 --- a/packages/typespec-client-generator-core/src/package.ts +++ b/packages/typespec-client-generator-core/src/package.ts @@ -660,7 +660,16 @@ function addDefaultClientParameters< if (apiVersionParam) { client.initialization.properties.push(apiVersionParam); } - const subId = context.__clientToParameters.get(client.__raw.type)?.find((x) => isSubscriptionId(context, x)); + let subId = context.__clientToParameters.get(client.__raw.type)?.find((x) => isSubscriptionId(context, x)); + if (!subId && context.arm) { + for (const operationGroup of listOperationGroups(context, client.__raw)) { + // if any sub operation groups have an subId param, the top level needs it as well + subId = context.__clientToParameters + .get(operationGroup.type) + ?.find((x) => x.isApiVersionParam); + if (apiVersionParam) break; + } + } if (subId) { client.initialization.properties.push(subId); } From 0422c87112d12eb6de95b87ca15eb6485a8f288d Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Thu, 5 Sep 2024 13:30:53 +0800 Subject: [PATCH 3/9] fix subId --- .../package.json | 1 + .../src/package.ts | 2 +- .../test/package.test.ts | 37 +++++++++++++++++++ .../test/test-host.ts | 32 ++++++++++++++++ pnpm-lock.yaml | 3 ++ 5 files changed, 74 insertions(+), 1 deletion(-) diff --git a/packages/typespec-client-generator-core/package.json b/packages/typespec-client-generator-core/package.json index b713d0118f..7cd67605a3 100644 --- a/packages/typespec-client-generator-core/package.json +++ b/packages/typespec-client-generator-core/package.json @@ -68,6 +68,7 @@ }, "devDependencies": { "@azure-tools/typespec-azure-core": "workspace:~", + "@azure-tools/typespec-azure-resource-manager": "workspace:~", "@types/node": "~18.11.19", "@types/pluralize": "^0.0.33", "@typespec/compiler": "workspace:~", diff --git a/packages/typespec-client-generator-core/src/package.ts b/packages/typespec-client-generator-core/src/package.ts index 3a7a85e9d3..9a72f535c8 100644 --- a/packages/typespec-client-generator-core/src/package.ts +++ b/packages/typespec-client-generator-core/src/package.ts @@ -666,7 +666,7 @@ function addDefaultClientParameters< // if any sub operation groups have an subId param, the top level needs it as well subId = context.__clientToParameters .get(operationGroup.type) - ?.find((x) => x.isApiVersionParam); + ?.find((x) => isSubscriptionId(context, x)); if (apiVersionParam) break; } } diff --git a/packages/typespec-client-generator-core/test/package.test.ts b/packages/typespec-client-generator-core/test/package.test.ts index 34c7ed6609..fcad51da20 100644 --- a/packages/typespec-client-generator-core/test/package.test.ts +++ b/packages/typespec-client-generator-core/test/package.test.ts @@ -1,5 +1,7 @@ import { AzureCoreTestLibrary } from "@azure-tools/typespec-azure-core/testing"; +import { AzureResourceManagerTestLibrary } from "@azure-tools/typespec-azure-resource-manager/testing"; import { ApiKeyAuth, OAuth2Flow, Oauth2Auth } from "@typespec/http"; +import { OpenAPITestLibrary } from "@typespec/openapi/testing"; import { deepStrictEqual, ok, strictEqual } from "assert"; import { beforeEach, describe, it } from "vitest"; import { @@ -2176,6 +2178,41 @@ describe("typespec-client-generator-core: package", () => { strictEqual(apiVersionOpParam.correspondingMethodParams[0], apiVersionClientParam); }); + it("global parameters", async () => { + const runnerWithArm = await createSdkTestRunner({ + librariesToAdd: [AzureResourceManagerTestLibrary, AzureCoreTestLibrary, OpenAPITestLibrary], + autoUsings: ["Azure.ResourceManager", "Azure.Core"], + emitterName: "@azure-tools/typespec-java", + }); + await runnerWithArm.compileWithBuiltInAzureResourceManagerService(` + model MyProperties { + @visibility("read") + @doc("Display name of the Azure Extended Zone.") + displayName: string; + } + + @subscriptionResource + model MyModel is ProxyResource { + @key("extendedZoneName") + @segment("extendedZones") + @path + name: string; + } + + @armResourceOperations + interface MyInterface { + get is ArmResourceRead; + } + `); + + const sdkPackage = runnerWithArm.context.sdkPackage; + const client = sdkPackage.clients[0].methods.find((x) => x.kind === "clientaccessor") + ?.response as SdkClientType; + for (const name of ["apiVersion", "subscriptionId", "endpoint", "credential"]) { + ok(client.initialization.properties.find((x) => x.name === name) !== undefined); + } + }); + it("default api version for operation is", async () => { await runner.compile(` namespace Azure.ResourceManager { diff --git a/packages/typespec-client-generator-core/test/test-host.ts b/packages/typespec-client-generator-core/test/test-host.ts index e8980de81b..4af854253b 100644 --- a/packages/typespec-client-generator-core/test/test-host.ts +++ b/packages/typespec-client-generator-core/test/test-host.ts @@ -34,6 +34,7 @@ export interface SdkTestRunner extends BasicTestRunner { context: SdkContext; compileWithBuiltInService(code: string): Promise>; compileWithBuiltInAzureCoreService(code: string): Promise>; + compileWithBuiltInAzureResourceManagerService(code: string): Promise>; compileWithCustomization(mainCode: string, clientCode: string): Promise>; compileWithVersionedService(code: string): Promise>; compileAndDiagnoseWithCustomization( @@ -165,6 +166,37 @@ export async function createSdkTestRunner( return result; }; + // compile with dummy arm service definition + sdkTestRunner.compileWithBuiltInAzureResourceManagerService = + async function compileWithBuiltInAzureResourceManagerService(code) { + const result = await baseCompile( + ` + @armProviderNamespace("My.Service") + @server("http://localhost:3000", "endpoint") + @service({title: "My.Service"}) + @versioned(Versions) + @armCommonTypesVersion(CommonTypes.Versions.v5) + namespace My.Service; + + /** Api versions */ + enum Versions { + /** 2024-04-01-preview api version */ + @useDependency(Azure.ResourceManager.Versions.v1_0_Preview_1) + V2024_04_01_PREVIEW: "2024-04-01-preview", + } + ${code}`, + { + noEmit: true, + } + ); + sdkTestRunner.context = await createSdkContextTestHelper( + sdkTestRunner.program, + options, + sdkContextOption + ); + return result; + }; + const mainAutoCode = [ ...host.libraries .filter((x) => x !== StandardTestLibrary) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62402179ab..fde690ae41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2219,6 +2219,9 @@ importers: '@azure-tools/typespec-azure-core': specifier: workspace:~ version: link:../typespec-azure-core + '@azure-tools/typespec-azure-resource-manager': + specifier: workspace:~ + version: link:../typespec-azure-resource-manager '@types/node': specifier: ~18.11.19 version: 18.11.19 From 9c1f662aaabb77705161a088019879a27b69e657 Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Thu, 5 Sep 2024 13:32:02 +0800 Subject: [PATCH 4/9] changelog --- .chronus/changes/fix-tcgc-client-init-2024-8-5-13-31-51.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .chronus/changes/fix-tcgc-client-init-2024-8-5-13-31-51.md diff --git a/.chronus/changes/fix-tcgc-client-init-2024-8-5-13-31-51.md b/.chronus/changes/fix-tcgc-client-init-2024-8-5-13-31-51.md new file mode 100644 index 0000000000..30d57d93e0 --- /dev/null +++ b/.chronus/changes/fix-tcgc-client-init-2024-8-5-13-31-51.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@azure-tools/typespec-client-generator-core" +--- + +Fix to add client signature `subcriptionId` for ARM SDK \ No newline at end of file From 8876fb478aef4ca550812d07aa93b4b08a9637bd Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Thu, 5 Sep 2024 13:34:43 +0800 Subject: [PATCH 5/9] format --- .../src/package.ts | 4 ++- .../test/test-host.ts | 28 +++++++++---------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/packages/typespec-client-generator-core/src/package.ts b/packages/typespec-client-generator-core/src/package.ts index 9a72f535c8..978b0f27f0 100644 --- a/packages/typespec-client-generator-core/src/package.ts +++ b/packages/typespec-client-generator-core/src/package.ts @@ -660,7 +660,9 @@ function addDefaultClientParameters< if (apiVersionParam) { client.initialization.properties.push(apiVersionParam); } - let subId = context.__clientToParameters.get(client.__raw.type)?.find((x) => isSubscriptionId(context, x)); + let subId = context.__clientToParameters + .get(client.__raw.type) + ?.find((x) => isSubscriptionId(context, x)); if (!subId && context.arm) { for (const operationGroup of listOperationGroups(context, client.__raw)) { // if any sub operation groups have an subId param, the top level needs it as well diff --git a/packages/typespec-client-generator-core/test/test-host.ts b/packages/typespec-client-generator-core/test/test-host.ts index 4af854253b..87a72b016f 100644 --- a/packages/typespec-client-generator-core/test/test-host.ts +++ b/packages/typespec-client-generator-core/test/test-host.ts @@ -168,9 +168,9 @@ export async function createSdkTestRunner( // compile with dummy arm service definition sdkTestRunner.compileWithBuiltInAzureResourceManagerService = - async function compileWithBuiltInAzureResourceManagerService(code) { - const result = await baseCompile( - ` + async function compileWithBuiltInAzureResourceManagerService(code) { + const result = await baseCompile( + ` @armProviderNamespace("My.Service") @server("http://localhost:3000", "endpoint") @service({title: "My.Service"}) @@ -185,17 +185,17 @@ export async function createSdkTestRunner( V2024_04_01_PREVIEW: "2024-04-01-preview", } ${code}`, - { - noEmit: true, - } - ); - sdkTestRunner.context = await createSdkContextTestHelper( - sdkTestRunner.program, - options, - sdkContextOption - ); - return result; - }; + { + noEmit: true, + } + ); + sdkTestRunner.context = await createSdkContextTestHelper( + sdkTestRunner.program, + options, + sdkContextOption + ); + return result; + }; const mainAutoCode = [ ...host.libraries From fbbf75c94dc681587a1be1331116dcac94ae2b05 Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Thu, 5 Sep 2024 13:39:36 +0800 Subject: [PATCH 6/9] Update fix-tcgc-client-init-2024-8-5-13-31-51.md --- .chronus/changes/fix-tcgc-client-init-2024-8-5-13-31-51.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.chronus/changes/fix-tcgc-client-init-2024-8-5-13-31-51.md b/.chronus/changes/fix-tcgc-client-init-2024-8-5-13-31-51.md index 30d57d93e0..a2bbccd0e2 100644 --- a/.chronus/changes/fix-tcgc-client-init-2024-8-5-13-31-51.md +++ b/.chronus/changes/fix-tcgc-client-init-2024-8-5-13-31-51.md @@ -4,4 +4,4 @@ packages: - "@azure-tools/typespec-client-generator-core" --- -Fix to add client signature `subcriptionId` for ARM SDK \ No newline at end of file +Fix to add client signature `subscriptionId` for ARM SDK From 458968df323ea9f57085c5da9e47695a56778d2e Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Thu, 5 Sep 2024 14:12:46 +0800 Subject: [PATCH 7/9] Update package.test.ts --- packages/typespec-client-generator-core/test/package.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typespec-client-generator-core/test/package.test.ts b/packages/typespec-client-generator-core/test/package.test.ts index fcad51da20..72155b5ff0 100644 --- a/packages/typespec-client-generator-core/test/package.test.ts +++ b/packages/typespec-client-generator-core/test/package.test.ts @@ -2178,7 +2178,7 @@ describe("typespec-client-generator-core: package", () => { strictEqual(apiVersionOpParam.correspondingMethodParams[0], apiVersionClientParam); }); - it("global parameters", async () => { + it("client level signatures by default", async () => { const runnerWithArm = await createSdkTestRunner({ librariesToAdd: [AzureResourceManagerTestLibrary, AzureCoreTestLibrary, OpenAPITestLibrary], autoUsings: ["Azure.ResourceManager", "Azure.Core"], From 0df6a32b1c7cf2979f28cabdf77b871ac730be7c Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Thu, 5 Sep 2024 17:27:06 +0800 Subject: [PATCH 8/9] add test --- packages/typespec-client-generator-core/test/package.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/typespec-client-generator-core/test/package.test.ts b/packages/typespec-client-generator-core/test/package.test.ts index 72155b5ff0..1ce3656a64 100644 --- a/packages/typespec-client-generator-core/test/package.test.ts +++ b/packages/typespec-client-generator-core/test/package.test.ts @@ -2209,7 +2209,9 @@ describe("typespec-client-generator-core: package", () => { const client = sdkPackage.clients[0].methods.find((x) => x.kind === "clientaccessor") ?.response as SdkClientType; for (const name of ["apiVersion", "subscriptionId", "endpoint", "credential"]) { - ok(client.initialization.properties.find((x) => x.name === name) !== undefined); + const item = client.initialization.properties.find((x) => x.name === name) + ok(item !== undefined); + ok(item.onClient); } }); From b43c7736b9428f53d56e1ebb40a90af7c2d09716 Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Thu, 5 Sep 2024 10:42:37 -0400 Subject: [PATCH 9/9] Format --- packages/typespec-client-generator-core/test/package.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typespec-client-generator-core/test/package.test.ts b/packages/typespec-client-generator-core/test/package.test.ts index 1ce3656a64..6a40339599 100644 --- a/packages/typespec-client-generator-core/test/package.test.ts +++ b/packages/typespec-client-generator-core/test/package.test.ts @@ -2209,7 +2209,7 @@ describe("typespec-client-generator-core: package", () => { const client = sdkPackage.clients[0].methods.find((x) => x.kind === "clientaccessor") ?.response as SdkClientType; for (const name of ["apiVersion", "subscriptionId", "endpoint", "credential"]) { - const item = client.initialization.properties.find((x) => x.name === name) + const item = client.initialization.properties.find((x) => x.name === name); ok(item !== undefined); ok(item.onClient); }