From 143965f24d99160e95c19c588dc446fb07fbfad4 Mon Sep 17 00:00:00 2001 From: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> Date: Fri, 8 Aug 2025 14:31:42 +0800 Subject: [PATCH 01/18] add default nested cases for client-initialization --- ...zation-scenarios-2025-8-5-comprehensive.md | 14 + packages/azure-http-specs/spec-summary.md | 631 +++++++++++++++++- .../{ => default/default}/client.tsp | 188 +++++- .../{ => default/default}/main.tsp | 81 ++- .../default/default/mockapi.ts | 445 ++++++++++++ .../client-initialization/mockapi.ts | 223 ------- 6 files changed, 1322 insertions(+), 260 deletions(-) create mode 100644 .chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md rename packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/{ => default/default}/client.tsp (51%) rename packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/{ => default/default}/main.tsp (56%) create mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/mockapi.ts delete mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/mockapi.ts diff --git a/.chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md b/.chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md new file mode 100644 index 0000000000..9ad8b16bf2 --- /dev/null +++ b/.chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md @@ -0,0 +1,14 @@ +--- +kind: feature +packages: + - "@azure-tools/azure-http-specs" +--- + +Add comprehensive client initialization test scenarios for Azure Client Generator Core. Extended the existing test suite from 8 to 23 scenarios covering all combinations of `initializedBy` parameter values including default, individually, parent, and both modes. Added nested two-layer scenarios to test complex client initialization hierarchies. + +Features added: +- 4 basic initialization scenarios covering all `initializedBy` combinations +- 12 nested two-layer scenarios testing first-layer × second-layer combinations +- Comprehensive test matrix ensuring complete coverage of client initialization modes +- Mock API implementations for all new scenarios +- Detailed scenario documentation for each test case diff --git a/packages/azure-http-specs/spec-summary.md b/packages/azure-http-specs/spec-summary.md index b1dccba2ba..6c51032bbb 100644 --- a/packages/azure-http-specs/spec-summary.md +++ b/packages/azure-http-specs/spec-summary.md @@ -271,6 +271,296 @@ This scenario contains 4 public operations. All should be generated and exported 'OrphanModel' is not used but specified as 'public' and 'input', so it should be generated in SDK. The 'orphanModelSerializable' operation verifies that the model can be serialized to JSON. The other models' usage is additive to roundtrip, so they should be generated and exported as well. +### Azure_ClientGeneratorCore_ClientInitialization_DefaultClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/initialization-default/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/initialization-default/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/initialization-default/{resourceName}` + +Client for testing default initialization behavior (no initializedBy decorator). + +This client uses default initialization behavior. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +const client = new DefaultClient.getDefaultClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-default-default/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-default-default/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-default-default/{resourceName}` + +Client for testing default -> default nested initialization. + +The parent client uses default initialization behavior, +and the child client also uses default initialization behavior. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via DefaultParentClient +const client = new DefaultParentClient.getDefaultNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_FlexibleNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-default-both/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-default-both/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-default-both/{resourceName}` + +Client for testing default -> both nested initialization. + +The parent client uses default initialization behavior, +and the child client supports both individual and parent initialization. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via DefaultParentClient +const client1 = new DefaultParentClient.getFlexibleNestedClient({ + resourceName: "test-resource" +}); + +// directly +const client2 = new FlexibleNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client1.withQuery(format: "text"); +client2.getStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividualNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-default-individual/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-default-individual/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-default-individual/{resourceName}` + +Client for testing default -> individual nested initialization. + +The parent client uses default initialization behavior, +but the child client can only be initialized individually. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via DefaultParentClient +const client1 = new DefaultParentClient.getIndividualNestedClient({ + resourceName: "test-resource" +}); + +// directly +const client2 = new IndividualNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client1.withQuery(format: "text"); +client2.getStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentOnlyNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-default-parent/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-default-parent/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-default-parent/{resourceName}` + +Client for testing default -> parent nested initialization. + +The parent client uses default initialization behavior, +but the child client can only be initialized through its parent. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via DefaultParentClient only +const client = new DefaultParentClient.getParentOnlyNestedClient({ + resourceName: "test-resource" +}); + +// Direct initialization should NOT be supported +// const client = new ParentOnlyNestedClient(...); // This should not work + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_DefaultNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-both-default/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-both-default/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-both-default/{resourceName}` + +Client for testing both -> default nested initialization. + +The parent client supports both individual and parent initialization, +and the child client uses default initialization behavior. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via FlexibleParentClient +const client = new FlexibleParentClient.getDefaultNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-both-both/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-both-both/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-both-both/{resourceName}` + +Client for testing both -> both nested initialization. + +Both the parent and child clients support both individual and parent initialization, +providing maximum flexibility for client initialization. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via FlexibleParentClient +const client1 = new FlexibleParentClient.getFlexibleNestedClient({ + resourceName: "test-resource" +}); + +// directly +const client2 = new FlexibleNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client1.withQuery(format: "text"); +client2.getStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_IndividualNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-both-individual/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-both-individual/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-both-individual/{resourceName}` + +Client for testing both -> individual nested initialization. + +The parent client supports both individual and parent initialization, +but the child client can only be initialized individually. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via FlexibleParentClient +const client1 = new FlexibleParentClient.getIndividualNestedClient({ + resourceName: "test-resource" +}); + +// directly +const client2 = new IndividualNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client1.withQuery(format: "text"); +client2.getStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_ParentOnlyNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-both-parent/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-both-parent/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-both-parent/{resourceName}` + +Client for testing both -> parent nested initialization. + +The parent client supports both individual and parent initialization, +but the child client can only be initialized through its parent. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via FlexibleParentClient only +const client = new FlexibleParentClient.getParentOnlyNestedClient({ + resourceName: "test-resource" +}); + +// Direct initialization should NOT be supported +// const client = new ParentOnlyNestedClient(...); // This should not work + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + ### Azure_ClientGeneratorCore_ClientInitialization_HeaderParam - Endpoints: @@ -294,6 +584,193 @@ client.withQuery(id: "test-id"); // No need to pass name here client.withBody({ name: "test-name" }); // No need to pass name here ``` +### Azure_ClientGeneratorCore_ClientInitialization_IndividuallyOnlyClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/initialization-individually/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/initialization-individually/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/initialization-individually/{resourceName}` + +Client for testing individually-only initialization. + +This client can ONLY be initialized directly, not through a parent client. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +const client = new IndividuallyOnlyClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentFlexibleClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/initialization-both/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/initialization-both/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/initialization-both/{resourceName}` + +Client for testing both individual and parent initialization. + +This client can be initialized both directly and through its parent client. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// Can be created directly +const client = new IndividuallyParentFlexibleClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_IndividualParentClient_DefaultNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-individual-default/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-individual-default/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-individual-default/{resourceName}` + +Client for testing individual -> default nested initialization. + +The parent client can only be initialized individually, +and the child client uses default initialization behavior. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via IndividualParentClient +const client = new IndividualParentClient.getDefaultNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_IndividualParentClient_FlexibleNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-individual-both/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-individual-both/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-individual-both/{resourceName}` + +Client for testing individual -> both nested initialization. + +The parent client can only be initialized individually, +and the child client supports both individual and parent initialization. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via IndividualParentClient +const client1 = new IndividualParentClient.getFlexibleNestedClient({ + resourceName: "test-resource" +}); + +// directly +const client2 = new FlexibleNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client1.withQuery(format: "text"); +client2.getStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_IndividualParentClient_IndividualNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-individual-individual/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-individual-individual/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-individual-individual/{resourceName}` + +Client for testing individual -> individual nested initialization. + +Both the parent and child clients can only be initialized individually. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via IndividualParentClient +const client1 = new IndividualParentClient.getIndividualNestedClient({ + resourceName: "test-resource" +}); + +// directly +const client2 = new IndividualNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client1.withQuery(format: "text"); +client2.getStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_IndividualParentClient_ParentOnlyNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-individual-parent/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-individual-parent/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-individual-parent/{resourceName}` + +Client for testing individual -> parent nested initialization. + +The parent client can only be initialized individually, +but the child client can only be initialized through its parent. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via IndividualParentClient only +const client = new IndividualParentClient.getParentOnlyNestedClient({ + resourceName: "test-resource" +}); + +// Direct initialization should NOT be supported +// const client = new ParentOnlyNestedClient(...); // This should not work + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + ### Azure_ClientGeneratorCore_ClientInitialization_MixedParams - Endpoints: @@ -366,35 +843,163 @@ client.withAliasedName(); client.withOriginalName(); ``` -### Azure_ClientGeneratorCore_ClientInitialization_ParentClient_ChildClient +### Azure_ClientGeneratorCore_ClientInitialization_ParentOnlyClient - Endpoints: - - `get /azure/client-generator-core/client-initialization/child-client/{blobName}/with-query` - - `get /azure/client-generator-core/client-initialization/child-client/{blobName}/get-standalone` - - `get /azure/client-generator-core/client-initialization/child-client/{blobName}` + - `get /azure/client-generator-core/client-initialization/initialization-parent-only/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/initialization-parent-only/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/initialization-parent-only/{resourceName}` -Client for testing a path parameter (blobName) moved to client level, in child client. +Client for testing parent-only initialization. -The child client can be initialized individually, or via its parent client. +This client can ONLY be initialized through its parent client, not directly. Parameters elevated to client level: -- blobName: "sample-blob" (path parameter) +- resourceName: "test-resource" (path parameter) Expected client usage: ```ts -// via ParentClient -const client = new ParentClient.getChildClient({ - blobName: "sample-blob" +// Can only be created via parent client +const client = new ParentOnlyClient.getParentOnlyClient({ + resourceName: "test-resource" +}); + +// Direct initialization should NOT be supported +// const client = new ParentOnlyClient(...); // This should not work + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_ParentOnlyParentClient_DefaultNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-parent-default/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-parent-default/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-parent-default/{resourceName}` + +Client for testing parent -> default nested initialization. + +The parent client can only be initialized through its parent, +and the child client uses default initialization behavior. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via ParentOnlyParentClient +const client = new ParentOnlyParentClient.getDefaultNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client.withQuery(format: "text"); +client.getStandalone(); +client.deleteStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_ParentOnlyParentClient_FlexibleNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-parent-both/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-parent-both/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-parent-both/{resourceName}` + +Client for testing parent -> both nested initialization. + +The parent client can only be initialized through its parent, +and the child client supports both individual and parent initialization. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via ParentOnlyParentClient +const client1 = new ParentOnlyParentClient.getFlexibleNestedClient({ + resourceName: "test-resource" }); // directly -const client = new ChildClient({ - blobName: "sample-blob" +const client2 = new FlexibleNestedClient({ + resourceName: "test-resource" }); -// No need to pass blobName to any operations +// Operations don't need resourceName parameter +client1.withQuery(format: "text"); +client2.getStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_ParentOnlyParentClient_IndividualNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-parent-individual/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-parent-individual/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-parent-individual/{resourceName}` + +Client for testing parent -> individual nested initialization. + +The parent client can only be initialized through its parent, +but the child client can only be initialized individually. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via ParentOnlyParentClient +const client1 = new ParentOnlyParentClient.getIndividualNestedClient({ + resourceName: "test-resource" +}); + +// directly +const client2 = new IndividualNestedClient({ + resourceName: "test-resource" +}); + +// Operations don't need resourceName parameter +client1.withQuery(format: "text"); +client2.getStandalone(); +``` + +### Azure_ClientGeneratorCore_ClientInitialization_ParentOnlyParentClient_ParentOnlyNestedClient + +- Endpoints: + - `get /azure/client-generator-core/client-initialization/nested-parent-parent/{resourceName}/with-query` + - `get /azure/client-generator-core/client-initialization/nested-parent-parent/{resourceName}/get-standalone` + - `get /azure/client-generator-core/client-initialization/nested-parent-parent/{resourceName}` + +Client for testing parent -> parent nested initialization. + +Both the parent and child clients can only be initialized through their parents. + +Parameters elevated to client level: + +- resourceName: "test-resource" (path parameter) + +Expected client usage: + +```ts +// via ParentOnlyParentClient only +const client = new ParentOnlyParentClient.getParentOnlyNestedClient({ + resourceName: "test-resource" +}); + +// Direct initialization should NOT be supported +// const client = new ParentOnlyNestedClient(...); // This should not work + +// Operations don't need resourceName parameter client.withQuery(format: "text"); client.getStandalone(); client.deleteStandalone(); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp similarity index 51% rename from packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/client.tsp rename to packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp index b2e9c79eb4..8a818ebd29 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp @@ -47,6 +47,12 @@ model ParamAliasClientOptions { blobName: string; } +// Models for initialization scenarios +model DefaultQueryParamClientOptions { + @doc("The name of the resource. This parameter is used as a path parameter in all operations.") + blobName: string; +} + // Scenario 1: Header parameter moved to client level @scenarioDoc(""" Client for testing header parameter moved to client level. @@ -200,33 +206,66 @@ interface ParamAlias { withOriginalName is Service.ParamAlias.withOriginalName; } + @global.Azure.ClientGenerator.Core.client({ - name: "ParentClient", + name: "DefaultParentClient", service: Service, }) -namespace ParentClient { +namespace DefaultParentClient { + // Scenario 6: Default -> Default initialization with path parameter @scenarioDoc(""" - Client for testing a path parameter (blobName) moved to client level, in child client. + Client for testing default -> default nested initialization. - The child client can be initialized individually, or via its parent client. + The parent client uses default initialization behavior, + and the child client also uses default initialization behavior. Parameters elevated to client level: - - blobName: "sample-blob" (path parameter) + - resourceName: "test-resource" (path parameter) Expected client usage: ```ts - // via ParentClient - const client = new ParentClient.getChildClient({ - blobName: "sample-blob" + // via DefaultParentClient + const client = new DefaultParentClient.getDefaultNestedClient({ + resourceName: "test-resource" }); - // directly - const client = new ChildClient({ - blobName: "sample-blob" + // Operations don't need resourceName parameter + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: PathParamClientOptions, + }) + @route("/nested-default-default") + interface DefaultNestedWithPathClient { + withQuery is Service.NestedDefaultDefaultWithPath.withQuery; + getStandalone is Service.NestedDefaultDefaultWithPath.getStandalone; + deleteStandalone is Service.NestedDefaultDefaultWithPath.deleteStandalone; + } + + // Scenario 7: Default -> Default initialization with query parameter + @scenarioDoc(""" + Client for testing default -> default nested initialization. + + The parent client uses default initialization behavior, + and the child client also uses default initialization behavior. + + Parameters elevated to client level: + - resourceName: "test-resource" (path parameter) + + Expected client usage: + ```ts + // via DefaultParentClient + const client = new DefaultParentClient.getDefaultNestedClient({ + resourceName: "test-resource" }); - // No need to pass blobName to any operations - client.withQuery(format: "text"); + // Operations don't need resourceName parameter + client.withQuery(format: "text"); client.getStandalone(); client.deleteStandalone(); ``` @@ -234,13 +273,122 @@ namespace ParentClient { @scenario @global.Azure.ClientGenerator.Core.operationGroup @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: PathParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, + parameters: DefaultQueryParamClientOptions, + }) + @route("/nested-default-default") + interface DefaultNestedWithQueryClient { + withQuery is Service.NestedDefaultDefaultWithQuery.withQuery; + getStandalone is Service.NestedDefaultDefaultWithQuery.getStandalone; + deleteStandalone is Service.NestedDefaultDefaultWithQuery.deleteStandalone; + } + + // Scenario 8: Default -> Default initialization with Header parameter + @scenarioDoc(""" + Client for testing default -> header parameter nested initialization. + + The parent client uses default initialization behavior, + and the child client moves header parameters to client level. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Expected client usage: + ```ts + // via DefaultParentClient + const client = new DefaultParentClient.getHeaderNestedClient({ + name: "test-name-value" + }); + + // Operations don't need name header parameter + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: HeaderParamClientOptions, + }) + @route("/nested-default-header") + interface DefaultNestedWithHeaderClient { + withQuery is Service.NestedDefaultHeader.withQuery; + getStandalone is Service.NestedDefaultHeader.getStandalone; + deleteStandalone is Service.NestedDefaultHeader.deleteStandalone; + } + + // Scenario 15: Default -> Multiple parameters client + @scenarioDoc(""" + Client for testing default -> multiple parameters nested initialization. + + The parent client uses default initialization behavior, + and the child client moves multiple parameters (header and query) to client level. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + // via DefaultParentClient + const client = new DefaultParentClient.getMultipleNestedClient({ + name: "test-name-value", + region: "us-west" + }); + + // Operations don't need name or region parameters + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MultipleParamsClientOptions, + }) + @route("/nested-default-multiple") + interface DefaultNestedWithMultipleClient { + withQuery is Service.NestedDefaultMultiple.withQuery; + getStandalone is Service.NestedDefaultMultiple.getStandalone; + deleteStandalone is Service.NestedDefaultMultiple.deleteStandalone; + } + + // Scenario 16: Default -> Mixed parameters client + @scenarioDoc(""" + Client for testing default -> mixed parameters nested initialization. + + The parent client uses default initialization behavior, + and the child client moves some parameters to client level while keeping others at method level. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Parameters remaining at method level: + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + // via DefaultParentClient + const client = new DefaultParentClient.getMixedNestedClient({ + name: "test-name-value" + }); + + // Operations still need region parameter + client.withQuery(region: "us-west", format: "text"); + client.getStandalone(region: "us-west"); + client.deleteStandalone(region: "us-west"); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MixedParamsClientOptions, }) - @route("/child-client") - interface ChildClient { - withQuery is Service.ChildClient.withQuery; - getStandalone is Service.ChildClient.getStandalone; - deleteStandalone is Service.ChildClient.deleteStandalone; + @route("/nested-default-mixed") + interface DefaultNestedWithMixedClient { + withQuery is Service.NestedDefaultMixed.withQuery; + getStandalone is Service.NestedDefaultMixed.getStandalone; + deleteStandalone is Service.NestedDefaultMixed.deleteStandalone; } } diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp similarity index 56% rename from packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/main.tsp rename to packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp index 883e1218aa..14d8d06214 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp @@ -26,6 +26,11 @@ model Input { name: string; } +model DefaultnQueryParam { + @query + blobName: string; +} + // Scenario 1: Header parameter moved to client level @route("/header-param") @@ -115,10 +120,10 @@ model BlobProperties { createdOn: utcDateTime; } -// Scenario 6: Client initialization on child client -@doc("Blob operations with path parameter that should be moved to client level, in child client") -@route("/child-client") -interface ChildClient { +// Nested layer services for first-layer default (no decorator) +@doc("Operations for nested default -> default") +@route("/nested-default-default") +interface NestedDefaultDefaultWithPath { @route("/{blobName}/with-query") @get withQuery(@path blobName: string, @query format?: string): void; @@ -131,3 +136,71 @@ interface ChildClient { @delete deleteStandalone(@path blobName: string): void; } + +// Nested layer services for first-layer default (no decorator) - Query variant +@doc("Operations for nested default -> default with query parameters") +@route("/nested-default-default-query") +interface NestedDefaultDefaultWithQuery { + @route("/with-query") + @get + withQuery(...DefaultnQueryParam): void; + + @route("/get-standalone") + @get + getStandalone(...DefaultnQueryParam): BlobProperties; + + @route("/delete-resource") + @delete + deleteStandalone(...DefaultnQueryParam): void; +} + +// Nested layer services for default -> header parameters +@doc("Operations for nested default -> header parameters") +@route("/nested-default-header") +interface NestedDefaultHeader { + @route("/with-query") + @get + withQuery(...NameHeaderParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam): void; +} + +// Nested layer services for default -> multiple parameters +@doc("Operations for nested default -> multiple parameters") +@route("/nested-default-multiple") +interface NestedDefaultMultiple { + @route("/with-query") + @get + withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam, ...RegionQueryParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; +} + +// Nested layer services for default -> mixed parameters +@doc("Operations for nested default -> mixed parameters") +@route("/nested-default-mixed") +interface NestedDefaultMixed { + @route("/with-query") + @get + withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam, ...RegionQueryParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/mockapi.ts new file mode 100644 index 0000000000..f9da6ed004 --- /dev/null +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/mockapi.ts @@ -0,0 +1,445 @@ +import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; + +export const Scenarios: Record = {}; + +// Mock responses for HeaderParam scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_HeaderParam = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/header-param/with-query", + method: "get", + request: { + query: { + id: "test-id", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/header-param/with-body", + method: "post", + request: { + headers: { + name: "test-name-value", + }, + body: json({ + name: "test-name", + }), + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for MultipleParams scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_MultipleParams = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/multiple-params/with-query", + method: "get", + request: { + query: { + id: "test-id", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/multiple-params/with-body", + method: "post", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + body: json({ + name: "test-name", + }), + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for MixedParams scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_MixedParams = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/mixed-params/with-query", + method: "get", + request: { + query: { + id: "test-id", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/mixed-params/with-body", + method: "post", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + body: json({ + name: "test-name", + }), + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for PathParam scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_PathParam = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/path/sample-blob/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/path/sample-blob/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "sample-blob", + size: 42, + contentType: "text/plain", + createdOn: "2025-04-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/path/sample-blob", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for ParamAlias scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParamAlias = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/param-alias/sample-blob/with-aliased-name", + method: "get", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/param-alias/sample-blob/with-original-name", + method: "get", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for DefaultParentClient additional nested scenarios +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedWithHeaderClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 42, + contentType: "text/plain", + createdOn: "2025-04-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedWithMultipleClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 42, + contentType: "text/plain", + createdOn: "2025-04-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedWithMixedClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 42, + contentType: "text/plain", + createdOn: "2025-04-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +// Mock responses for DefaultNestedWithPathClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedWithPathClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-blob/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-blob/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 42, + contentType: "text/plain", + createdOn: "2025-04-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-blob", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +// Mock responses for DefaultNestedWithQueryClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedWithQueryClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 42, + contentType: "text/plain", + createdOn: "2025-04-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/mockapi.ts deleted file mode 100644 index 1d2aaf9951..0000000000 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/mockapi.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; - -export const Scenarios: Record = {}; - -// Mock responses for HeaderParam scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_HeaderParam = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/header-param/with-query", - method: "get", - request: { - query: { - id: "test-id", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/header-param/with-body", - method: "post", - request: { - headers: { - name: "test-name-value", - }, - body: json({ - name: "test-name", - }), - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// Mock responses for MultipleParams scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_MultipleParams = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/multiple-params/with-query", - method: "get", - request: { - query: { - id: "test-id", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/multiple-params/with-body", - method: "post", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - body: json({ - name: "test-name", - }), - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// Mock responses for MixedParams scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_MixedParams = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/mixed-params/with-query", - method: "get", - request: { - query: { - id: "test-id", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/mixed-params/with-body", - method: "post", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - body: json({ - name: "test-name", - }), - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// Mock responses for PathParam scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_PathParam = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/path/sample-blob/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/path/sample-blob/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "sample-blob", - size: 42, - contentType: "text/plain", - createdOn: "2025-04-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/path/sample-blob", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// Mock responses for ParamAlias scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParamAlias = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/param-alias/sample-blob/with-aliased-name", - method: "get", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/param-alias/sample-blob/with-original-name", - method: "get", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// Mock responses for ParentClient/ChildClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentClient_ChildClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/child-client/sample-blob/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/child-client/sample-blob/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "sample-blob", - size: 42, - contentType: "text/plain", - createdOn: "2025-04-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/child-client/sample-blob", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); From d17211d06a95a7528464a898672c28a5306e91ec Mon Sep 17 00:00:00 2001 From: ZiWei Chen Date: Thu, 4 Sep 2025 15:38:28 +0800 Subject: [PATCH 02/18] update --- .../default/individually/client.tsp | 231 ++++++++++++++++ .../default/individually/main.tsp | 125 +++++++++ .../default/individually/mockapi.ts | 245 +++++++++++++++++ .../default/individuallyParent/client.tsp | 257 ++++++++++++++++++ .../default/individuallyParent/main.tsp | 125 +++++++++ .../default/individuallyParent/mockapi.ts | 245 +++++++++++++++++ .../default/parent/client.tsp | 231 ++++++++++++++++ .../default/parent/main.tsp | 125 +++++++++ .../default/parent/mockapi.ts | 245 +++++++++++++++++ 9 files changed, 1829 insertions(+) create mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp create mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/main.tsp create mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts create mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp create mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/main.tsp create mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts create mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp create mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/main.tsp create mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp new file mode 100644 index 0000000000..f73429b400 --- /dev/null +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp @@ -0,0 +1,231 @@ +import "./main.tsp"; +import "@azure-tools/typespec-client-generator-core"; +import "@typespec/spector"; +import "@typespec/http"; + +using Spector; +using Http; + +@route("/azure/client-generator-core/client-initialization") +namespace _Specs_.Azure.ClientGeneratorCore.ClientInitialization; + +using Service; + +// Reusable option types for client initialization +model PathParamClientOptions { + @doc("The blob name to use for operations") + blobName: string; +} + +model DefaultQueryParamClientOptions { + @doc("The blob name to use for operations") + blobName: string; +} + +model HeaderParamClientOptions { + @doc("The name to use for operations") + name: string; +} + +model MultipleParamsClientOptions { + @doc("The name to use for operations") + name: string; + @doc("The region to use for operations") + region: string; +} + +model MixedParamsClientOptions { + @doc("The name to use for operations") + name: string; +} + +@global.Azure.ClientGenerator.Core.client({ + name: "DefaultParentClient", + service: Service, +}) +namespace DefaultParentClient { + // Scenario 6: Default -> Individually initialization with path parameter + @scenarioDoc(""" + Client for testing default -> individually nested initialization. + + The parent client uses default initialization behavior, + and the child client uses individually initialization behavior. + + Parameters elevated to client level: + - resourceName: "test-resource" (path parameter) + + Expected client usage: + ```ts + // directly (individually initialized) + const client = new DefaultNestedWithPathClient({ + resourceName: "test-resource" + }); + + // Operations don't need resourceName parameter + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: PathParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, + }) + @route("/nested-default-individually") + interface IndividuallyNestedWithPathClient { + withQuery is Service.NestedDefaultIndividuallyWithPath.withQuery; + getStandalone is Service.NestedDefaultIndividuallyWithPath.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyWithPath.deleteStandalone; + } + + // Scenario 7: Default -> Individually initialization with query parameter + @scenarioDoc(""" + Client for testing default -> individually nested initialization. + + The parent client uses default initialization behavior, + and the child client uses individually initialization behavior. + + Parameters elevated to client level: + - blobName: "test-blob" (query parameter) + + Expected client usage: + ```ts + // directly (individually initialized) + const client = new DefaultNestedWithQueryClient({ + blobName: "test-blob" + }); + + // Operations don't need blobName parameter + client.withQuery(); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: DefaultQueryParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, + }) + @route("/nested-default-individually-query") + interface IndividuallyNestedWithQueryClient { + withQuery is Service.NestedDefaultIndividuallyWithQuery.withQuery; + getStandalone is Service.NestedDefaultIndividuallyWithQuery.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyWithQuery.deleteStandalone; + } + + // Scenario 8: Default -> Individually initialization with Header parameter + @scenarioDoc(""" + Client for testing default -> individually header parameter nested initialization. + + The parent client uses default initialization behavior, + and the child client moves header parameters to client level and uses individually initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Expected client usage: + ```ts + // directly (individually initialized) + const client = new DefaultNestedWithHeaderClient({ + name: "test-name-value" + }); + + // Operations don't need name header parameter + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: HeaderParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, + }) + @route("/nested-default-individually-header") + interface IndividuallyNestedWithHeaderClient { + withQuery is Service.NestedDefaultIndividuallyHeader.withQuery; + getStandalone is Service.NestedDefaultIndividuallyHeader.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyHeader.deleteStandalone; + } + + // Scenario 15: Default -> Individually Multiple parameters client + @scenarioDoc(""" + Client for testing default -> individually multiple parameters nested initialization. + + The parent client uses default initialization behavior, + and the child client moves multiple parameters (header and query) to client level with individually initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + // directly (individually initialized) + const client = new DefaultNestedWithMultipleClient({ + name: "test-name-value", + region: "us-west" + }); + + // Operations don't need name or region parameters + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MultipleParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, + }) + @route("/nested-default-individually-multiple") + interface IndividuallyNestedWithMultipleClient { + withQuery is Service.NestedDefaultIndividuallyMultiple.withQuery; + getStandalone is Service.NestedDefaultIndividuallyMultiple.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyMultiple.deleteStandalone; + } + + // Scenario 16: Default -> Individually Mixed parameters client + @scenarioDoc(""" + Client for testing default -> individually mixed parameters nested initialization. + + The parent client uses default initialization behavior, + and the child client moves some parameters to client level while keeping others at method level with individually initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Parameters remaining at method level: + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + // directly (individually initialized) + const client = new DefaultNestedWithMixedClient({ + name: "test-name-value" + }); + + // Operations still need region parameter + client.withQuery(region: "us-west", format: "text"); + client.getStandalone(region: "us-west"); + client.deleteStandalone(region: "us-west"); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MixedParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, + }) + @route("/nested-default-individually-mixed") + interface IndividuallyNestedWithMixedClient { + withQuery is Service.NestedDefaultIndividuallyMixed.withQuery; + getStandalone is Service.NestedDefaultIndividuallyMixed.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyMixed.deleteStandalone; + } +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/main.tsp new file mode 100644 index 0000000000..87ba9e6262 --- /dev/null +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/main.tsp @@ -0,0 +1,125 @@ +import "@typespec/http"; +import "@typespec/spector"; +import "@azure-tools/typespec-client-generator-core"; + +using Http; +using Spector; +using Azure.ClientGenerator.Core; + +@doc("Test for client initialization decorator - moving parameters from method to client level") +@scenarioService("/azure/client-generator-core/client-initialization") +namespace Service; + +// Common parameter types and models + +model NameHeaderParam { + @header("name") + name: string; +} + +model RegionQueryParam { + @query + region: string; +} + +model Input { + name: string; +} + +model DefaultnQueryParam { + @query + blobName: string; +} + +// Nested layer services for first-layer default (no decorator) +@doc("Operations for nested default -> individually") +@route("/nested-default-individually") +interface NestedDefaultIndividuallyWithPath { + @route("/{blobName}/with-query") + @get + withQuery(@path blobName: string, @query format?: string): void; + + @route("/{blobName}/get-standalone") + @get + getStandalone(@path blobName: string): BlobProperties; + + @route("/{blobName}") + @delete + deleteStandalone(@path blobName: string): void; +} + +// Nested layer services for first-layer default (no decorator) - Query variant +@doc("Operations for nested default -> individually with query parameters") +@route("/nested-default-individually-query") +interface NestedDefaultIndividuallyWithQuery { + @route("/with-query") + @get + withQuery(...DefaultnQueryParam): void; + + @route("/get-standalone") + @get + getStandalone(...DefaultnQueryParam): BlobProperties; + + @route("/delete-resource") + @delete + deleteStandalone(...DefaultnQueryParam): void; +} + +// Nested layer services for default -> header parameters +@doc("Operations for nested default -> individually header parameters") +@route("/nested-default-individually-header") +interface NestedDefaultIndividuallyHeader { + @route("/with-query") + @get + withQuery(...NameHeaderParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam): void; +} + +// Nested layer services for default -> multiple parameters +@doc("Operations for nested default -> individually multiple parameters") +@route("/nested-default-individually-multiple") +interface NestedDefaultIndividuallyMultiple { + @route("/with-query") + @get + withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam, ...RegionQueryParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; +} + +// Nested layer services for default -> mixed parameters +@doc("Operations for nested default -> individually mixed parameters") +@route("/nested-default-individually-mixed") +interface NestedDefaultIndividuallyMixed { + @route("/with-query") + @get + withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam, ...RegionQueryParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; +} + +@doc("Properties of a blob") +model BlobProperties { + name: string; + size: int64; + contentType: string; + createdOn: utcDateTime; +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts new file mode 100644 index 0000000000..4b7c708c22 --- /dev/null +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts @@ -0,0 +1,245 @@ +import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; + +export const Scenarios: Record = {}; + +// Mock responses for IndividuallyNestedWithPathClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithPathClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyNestedWithQueryClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithQueryClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyNestedWithHeaderClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithHeaderClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyNestedWithMultipleClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithMultipleClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyNestedWithMixedClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithMixedClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp new file mode 100644 index 0000000000..e83d9d4bff --- /dev/null +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp @@ -0,0 +1,257 @@ +import "./main.tsp"; +import "@azure-tools/typespec-client-generator-core"; +import "@typespec/spector"; +import "@typespec/http"; + +using Spector; +using Http; + +@route("/azure/client-generator-core/client-initialization") +namespace _Specs_.Azure.ClientGeneratorCore.ClientInitialization; + +using Service; + +// Reusable option types for client initialization +model PathParamClientOptions { + @doc("The blob name to use for operations") + blobName: string; +} + +model DefaultQueryParamClientOptions { + @doc("The blob name to use for operations") + blobName: string; +} + +model HeaderParamClientOptions { + @doc("The name to use for operations") + name: string; +} + +model MultipleParamsClientOptions { + @doc("The name to use for operations") + name: string; + @doc("The region to use for operations") + region: string; +} + +model MixedParamsClientOptions { + @doc("The name to use for operations") + name: string; +} + +@global.Azure.ClientGenerator.Core.client({ + name: "DefaultParentClient", + service: Service, +}) +namespace DefaultParentClient { + // Scenario 6: Default -> Individually and Parent initialization with path parameter + @scenarioDoc(""" + Client for testing default -> individually and parent nested initialization. + + The parent client uses default initialization behavior, + and the child client uses both individually and parent initialization behavior. + + Parameters elevated to client level: + - resourceName: "test-resource" (path parameter) + + Expected client usage: + ```ts + // via DefaultParentClient (parent initialization) + const client = new DefaultParentClient.getDefaultNestedWithPathClient({ + resourceName: "test-resource" + }); + + // directly (individually initialized) + const client = new DefaultNestedWithPathClient({ + resourceName: "test-resource" + }); + + // Operations don't need resourceName parameter + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: PathParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, + }) + @route("/nested-default-individually-parent") + interface IndividuallyParentNestedWithPathClient { + withQuery is Service.NestedDefaultIndividuallyParentWithPath.withQuery; + getStandalone is Service.NestedDefaultIndividuallyParentWithPath.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyParentWithPath.deleteStandalone; + } + + // Scenario 7: Default -> Individually and Parent initialization with query parameter + @scenarioDoc(""" + Client for testing default -> individually and parent nested initialization. + + The parent client uses default initialization behavior, + and the child client uses both individually and parent initialization behavior. + + Parameters elevated to client level: + - blobName: "test-blob" (query parameter) + + Expected client usage: + ```ts + // via DefaultParentClient (parent initialization) + const client = new DefaultParentClient.getDefaultNestedWithQueryClient({ + blobName: "test-blob" + }); + + // directly (individually initialized) + const client = new DefaultNestedWithQueryClient({ + blobName: "test-blob" + }); + + // Operations don't need blobName parameter + client.withQuery(); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: DefaultQueryParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, + }) + @route("/nested-default-individually-parent-query") + interface IndividuallyParentNestedWithQueryClient { + withQuery is Service.NestedDefaultIndividuallyParentWithQuery.withQuery; + getStandalone is Service.NestedDefaultIndividuallyParentWithQuery.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyParentWithQuery.deleteStandalone; + } + + // Scenario 8: Default -> Individually and Parent initialization with Header parameter + @scenarioDoc(""" + Client for testing default -> individually and parent header parameter nested initialization. + + The parent client uses default initialization behavior, + and the child client moves header parameters to client level and uses both individually and parent initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Expected client usage: + ```ts + // via DefaultParentClient (parent initialization) + const client = new DefaultParentClient.getDefaultNestedWithHeaderClient({ + name: "test-name-value" + }); + + // directly (individually initialized) + const client = new DefaultNestedWithHeaderClient({ + name: "test-name-value" + }); + + // Operations don't need name header parameter + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: HeaderParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, + }) + @route("/nested-default-individually-parent-header") + interface IndividuallyParentNestedWithHeaderClient { + withQuery is Service.NestedDefaultIndividuallyParentHeader.withQuery; + getStandalone is Service.NestedDefaultIndividuallyParentHeader.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyParentHeader.deleteStandalone; + } + + // Scenario 15: Default -> Individually and Parent Multiple parameters client + @scenarioDoc(""" + Client for testing default -> individually and parent multiple parameters nested initialization. + + The parent client uses default initialization behavior, + and the child client moves multiple parameters (header and query) to client level with both individually and parent initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + // via DefaultParentClient (parent initialization) + const client = new DefaultParentClient.getDefaultNestedWithMultipleClient({ + name: "test-name-value", + region: "us-west" + }); + + // directly (individually initialized) + const client = new DefaultNestedWithMultipleClient({ + name: "test-name-value", + region: "us-west" + }); + + // Operations don't need name or region parameters + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MultipleParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, + }) + @route("/nested-default-individually-parent-multiple") + interface IndividuallyParentNestedWithMultipleClient { + withQuery is Service.NestedDefaultIndividuallyParentMultiple.withQuery; + getStandalone is Service.NestedDefaultIndividuallyParentMultiple.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyParentMultiple.deleteStandalone; + } + + // Scenario 16: Default -> Individually and Parent Mixed parameters client + @scenarioDoc(""" + Client for testing default -> individually and parent mixed parameters nested initialization. + + The parent client uses default initialization behavior, + and the child client moves some parameters to client level while keeping others at method level with both individually and parent initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Parameters remaining at method level: + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + // via DefaultParentClient (parent initialization) + const client = new DefaultParentClient.getDefaultNestedWithMixedClient({ + name: "test-name-value" + }); + + // directly (individually initialized) + const client = new DefaultNestedWithMixedClient({ + name: "test-name-value" + }); + + // Operations still need region parameter + client.withQuery(region: "us-west", format: "text"); + client.getStandalone(region: "us-west"); + client.deleteStandalone(region: "us-west"); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MixedParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, + }) + @route("/nested-default-individually-parent-mixed") + interface IndividuallyParentNestedWithMixedClient { + withQuery is Service.NestedDefaultIndividuallyParentMixed.withQuery; + getStandalone is Service.NestedDefaultIndividuallyParentMixed.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyParentMixed.deleteStandalone; + } +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/main.tsp new file mode 100644 index 0000000000..4018cd4642 --- /dev/null +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/main.tsp @@ -0,0 +1,125 @@ +import "@typespec/http"; +import "@typespec/spector"; +import "@azure-tools/typespec-client-generator-core"; + +using Http; +using Spector; +using Azure.ClientGenerator.Core; + +@doc("Test for client initialization decorator - moving parameters from method to client level") +@scenarioService("/azure/client-generator-core/client-initialization") +namespace Service; + +// Common parameter types and models + +model NameHeaderParam { + @header("name") + name: string; +} + +model RegionQueryParam { + @query + region: string; +} + +model Input { + name: string; +} + +model DefaultnQueryParam { + @query + blobName: string; +} + +// Nested layer services for first-layer default (no decorator) +@doc("Operations for nested default -> individually and parent") +@route("/nested-default-individually-parent") +interface NestedDefaultIndividuallyParentWithPath { + @route("/{blobName}/with-query") + @get + withQuery(@path blobName: string, @query format?: string): void; + + @route("/{blobName}/get-standalone") + @get + getStandalone(@path blobName: string): BlobProperties; + + @route("/{blobName}") + @delete + deleteStandalone(@path blobName: string): void; +} + +// Nested layer services for first-layer default (no decorator) - Query variant +@doc("Operations for nested default -> individually and parent with query parameters") +@route("/nested-default-individually-parent-query") +interface NestedDefaultIndividuallyParentWithQuery { + @route("/with-query") + @get + withQuery(...DefaultnQueryParam): void; + + @route("/get-standalone") + @get + getStandalone(...DefaultnQueryParam): BlobProperties; + + @route("/delete-resource") + @delete + deleteStandalone(...DefaultnQueryParam): void; +} + +// Nested layer services for default -> header parameters +@doc("Operations for nested default -> individually and parent header parameters") +@route("/nested-default-individually-parent-header") +interface NestedDefaultIndividuallyParentHeader { + @route("/with-query") + @get + withQuery(...NameHeaderParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam): void; +} + +// Nested layer services for default -> multiple parameters +@doc("Operations for nested default -> individually and parent multiple parameters") +@route("/nested-default-individually-parent-multiple") +interface NestedDefaultIndividuallyParentMultiple { + @route("/with-query") + @get + withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam, ...RegionQueryParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; +} + +// Nested layer services for default -> mixed parameters +@doc("Operations for nested default -> individually and parent mixed parameters") +@route("/nested-default-individually-parent-mixed") +interface NestedDefaultIndividuallyParentMixed { + @route("/with-query") + @get + withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam, ...RegionQueryParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; +} + +@doc("Properties of a blob") +model BlobProperties { + name: string; + size: int64; + contentType: string; + createdOn: utcDateTime; +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts new file mode 100644 index 0000000000..74c1d1b5a3 --- /dev/null +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts @@ -0,0 +1,245 @@ +import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; + +export const Scenarios: Record = {}; + +// Mock responses for IndividuallyParentNestedWithPathClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithPathClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyParentNestedWithQueryClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithQueryClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyParentNestedWithHeaderClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithHeaderClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyParentNestedWithMultipleClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMultipleClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyParentNestedWithMixedClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMixedClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp new file mode 100644 index 0000000000..b247ae3617 --- /dev/null +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp @@ -0,0 +1,231 @@ +import "./main.tsp"; +import "@azure-tools/typespec-client-generator-core"; +import "@typespec/spector"; +import "@typespec/http"; + +using Spector; +using Http; + +@route("/azure/client-generator-core/client-initialization") +namespace _Specs_.Azure.ClientGeneratorCore.ClientInitialization; + +using Service; + +// Reusable option types for client initialization +model PathParamClientOptions { + @doc("The blob name to use for operations") + blobName: string; +} + +model DefaultQueryParamClientOptions { + @doc("The blob name to use for operations") + blobName: string; +} + +model HeaderParamClientOptions { + @doc("The name to use for operations") + name: string; +} + +model MultipleParamsClientOptions { + @doc("The name to use for operations") + name: string; + @doc("The region to use for operations") + region: string; +} + +model MixedParamsClientOptions { + @doc("The name to use for operations") + name: string; +} + +@global.Azure.ClientGenerator.Core.client({ + name: "DefaultParentClient", + service: Service, +}) +namespace DefaultParentClient { + // Scenario 6: Default -> Parent initialization with path parameter + @scenarioDoc(""" + Client for testing default -> parent nested initialization. + + The parent client uses default initialization behavior, + and the child client uses parent initialization behavior. + + Parameters elevated to client level: + - resourceName: "test-resource" (path parameter) + + Expected client usage: + ```ts + // via DefaultParentClient (parent initialization) + const client = new DefaultParentClient.getDefaultNestedWithPathClient({ + resourceName: "test-resource" + }); + + // Operations don't need resourceName parameter + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: PathParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, + }) + @route("/nested-default-parent") + interface ParentNestedWithPathClient { + withQuery is Service.NestedDefaultParentWithPath.withQuery; + getStandalone is Service.NestedDefaultParentWithPath.getStandalone; + deleteStandalone is Service.NestedDefaultParentWithPath.deleteStandalone; + } + + // Scenario 7: Default -> Parent initialization with query parameter + @scenarioDoc(""" + Client for testing default -> parent nested initialization. + + The parent client uses default initialization behavior, + and the child client uses parent initialization behavior. + + Parameters elevated to client level: + - blobName: "test-blob" (query parameter) + + Expected client usage: + ```ts + // via DefaultParentClient (parent initialization) + const client = new DefaultParentClient.getDefaultNestedWithQueryClient({ + blobName: "test-blob" + }); + + // Operations don't need blobName parameter + client.withQuery(); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: DefaultQueryParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, + }) + @route("/nested-default-parent-query") + interface ParentNestedWithQueryClient { + withQuery is Service.NestedDefaultParentWithQuery.withQuery; + getStandalone is Service.NestedDefaultParentWithQuery.getStandalone; + deleteStandalone is Service.NestedDefaultParentWithQuery.deleteStandalone; + } + + // Scenario 8: Default -> Parent initialization with Header parameter + @scenarioDoc(""" + Client for testing default -> parent header parameter nested initialization. + + The parent client uses default initialization behavior, + and the child client moves header parameters to client level and uses parent initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Expected client usage: + ```ts + // via DefaultParentClient (parent initialization) + const client = new DefaultParentClient.getDefaultNestedWithHeaderClient({ + name: "test-name-value" + }); + + // Operations don't need name header parameter + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: HeaderParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, + }) + @route("/nested-default-parent-header") + interface ParentNestedWithHeaderClient { + withQuery is Service.NestedDefaultParentHeader.withQuery; + getStandalone is Service.NestedDefaultParentHeader.getStandalone; + deleteStandalone is Service.NestedDefaultParentHeader.deleteStandalone; + } + + // Scenario 15: Default -> Parent Multiple parameters client + @scenarioDoc(""" + Client for testing default -> parent multiple parameters nested initialization. + + The parent client uses default initialization behavior, + and the child client moves multiple parameters (header and query) to client level with parent initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + // via DefaultParentClient (parent initialization) + const client = new DefaultParentClient.getDefaultNestedWithMultipleClient({ + name: "test-name-value", + region: "us-west" + }); + + // Operations don't need name or region parameters + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MultipleParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, + }) + @route("/nested-default-parent-multiple") + interface ParentNestedWithMultipleClient { + withQuery is Service.NestedDefaultParentMultiple.withQuery; + getStandalone is Service.NestedDefaultParentMultiple.getStandalone; + deleteStandalone is Service.NestedDefaultParentMultiple.deleteStandalone; + } + + // Scenario 16: Default -> Parent Mixed parameters client + @scenarioDoc(""" + Client for testing default -> parent mixed parameters nested initialization. + + The parent client uses default initialization behavior, + and the child client moves some parameters to client level while keeping others at method level with parent initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Parameters remaining at method level: + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + // via DefaultParentClient (parent initialization) + const client = new DefaultParentClient.getDefaultNestedWithMixedClient({ + name: "test-name-value" + }); + + // Operations still need region parameter + client.withQuery(region: "us-west", format: "text"); + client.getStandalone(region: "us-west"); + client.deleteStandalone(region: "us-west"); + ``` + """) + @scenario + @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MixedParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, + }) + @route("/nested-default-parent-mixed") + interface ParentNestedWithMixedClient { + withQuery is Service.NestedDefaultParentMixed.withQuery; + getStandalone is Service.NestedDefaultParentMixed.getStandalone; + deleteStandalone is Service.NestedDefaultParentMixed.deleteStandalone; + } +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/main.tsp new file mode 100644 index 0000000000..85563eeb99 --- /dev/null +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/main.tsp @@ -0,0 +1,125 @@ +import "@typespec/http"; +import "@typespec/spector"; +import "@azure-tools/typespec-client-generator-core"; + +using Http; +using Spector; +using Azure.ClientGenerator.Core; + +@doc("Test for client initialization decorator - moving parameters from method to client level") +@scenarioService("/azure/client-generator-core/client-initialization") +namespace Service; + +// Common parameter types and models + +model NameHeaderParam { + @header("name") + name: string; +} + +model RegionQueryParam { + @query + region: string; +} + +model Input { + name: string; +} + +model DefaultnQueryParam { + @query + blobName: string; +} + +// Nested layer services for first-layer default (no decorator) +@doc("Operations for nested default -> parent") +@route("/nested-default-parent") +interface NestedDefaultParentWithPath { + @route("/{blobName}/with-query") + @get + withQuery(@path blobName: string, @query format?: string): void; + + @route("/{blobName}/get-standalone") + @get + getStandalone(@path blobName: string): BlobProperties; + + @route("/{blobName}") + @delete + deleteStandalone(@path blobName: string): void; +} + +// Nested layer services for first-layer default (no decorator) - Query variant +@doc("Operations for nested default -> parent with query parameters") +@route("/nested-default-parent-query") +interface NestedDefaultParentWithQuery { + @route("/with-query") + @get + withQuery(...DefaultnQueryParam): void; + + @route("/get-standalone") + @get + getStandalone(...DefaultnQueryParam): BlobProperties; + + @route("/delete-resource") + @delete + deleteStandalone(...DefaultnQueryParam): void; +} + +// Nested layer services for default -> header parameters +@doc("Operations for nested default -> parent header parameters") +@route("/nested-default-parent-header") +interface NestedDefaultParentHeader { + @route("/with-query") + @get + withQuery(...NameHeaderParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam): void; +} + +// Nested layer services for default -> multiple parameters +@doc("Operations for nested default -> parent multiple parameters") +@route("/nested-default-parent-multiple") +interface NestedDefaultParentMultiple { + @route("/with-query") + @get + withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam, ...RegionQueryParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; +} + +// Nested layer services for default -> mixed parameters +@doc("Operations for nested default -> parent mixed parameters") +@route("/nested-default-parent-mixed") +interface NestedDefaultParentMixed { + @route("/with-query") + @get + withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; + + @route("/get-standalone") + @get + getStandalone(...NameHeaderParam, ...RegionQueryParam): void; + + @route("/delete-standalone") + @delete + deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; +} + +@doc("Properties of a blob") +model BlobProperties { + name: string; + size: int64; + contentType: string; + createdOn: utcDateTime; +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts new file mode 100644 index 0000000000..0145877979 --- /dev/null +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts @@ -0,0 +1,245 @@ +import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; + +export const Scenarios: Record = {}; + +// Mock responses for ParentNestedWithPathClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithPathClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for ParentNestedWithQueryClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithQueryClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for ParentNestedWithHeaderClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithHeaderClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for ParentNestedWithMultipleClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithMultipleClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for ParentNestedWithMixedClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithMixedClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); From e7dc1b78b62287d25b7338016399a9fd5f936341 Mon Sep 17 00:00:00 2001 From: ZiWei Chen Date: Wed, 17 Sep 2025 14:27:19 +0800 Subject: [PATCH 03/18] update --- ...zation-scenarios-2025-8-5-comprehensive.md | 2 +- .../default/default/client.tsp | 9 +- .../default/default/main.tsp | 8 +- .../default/individually/client.tsp | 9 +- .../default/individually/main.tsp | 8 +- .../default/individually/mockapi.ts | 469 +++++++++--------- .../default/individuallyParent/client.tsp | 9 +- .../default/individuallyParent/main.tsp | 8 +- .../default/individuallyParent/mockapi.ts | 469 +++++++++--------- .../default/parent/client.tsp | 9 +- .../default/parent/main.tsp | 8 +- .../default/parent/mockapi.ts | 469 +++++++++--------- 12 files changed, 747 insertions(+), 730 deletions(-) diff --git a/.chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md b/.chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md index 9ad8b16bf2..dd905c946c 100644 --- a/.chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md +++ b/.chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md @@ -1,5 +1,5 @@ --- -kind: feature +changeKind: feature packages: - "@azure-tools/azure-http-specs" --- diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp index 8a818ebd29..5293443c18 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp @@ -206,7 +206,6 @@ interface ParamAlias { withOriginalName is Service.ParamAlias.withOriginalName; } - @global.Azure.ClientGenerator.Core.client({ name: "DefaultParentClient", service: Service, @@ -247,8 +246,8 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultDefaultWithPath.deleteStandalone; } - // Scenario 7: Default -> Default initialization with query parameter - @scenarioDoc(""" + // Scenario 7: Default -> Default initialization with query parameter + @scenarioDoc(""" Client for testing default -> default nested initialization. The parent client uses default initialization behavior, @@ -282,8 +281,8 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultDefaultWithQuery.deleteStandalone; } - // Scenario 8: Default -> Default initialization with Header parameter - @scenarioDoc(""" + // Scenario 8: Default -> Default initialization with Header parameter + @scenarioDoc(""" Client for testing default -> header parameter nested initialization. The parent client uses default initialization behavior, diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp index 14d8d06214..395e17f4c3 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp @@ -26,7 +26,7 @@ model Input { name: string; } -model DefaultnQueryParam { +model DefaultQueryParam { @query blobName: string; } @@ -143,15 +143,15 @@ interface NestedDefaultDefaultWithPath { interface NestedDefaultDefaultWithQuery { @route("/with-query") @get - withQuery(...DefaultnQueryParam): void; + withQuery(...DefaultQueryParam): void; @route("/get-standalone") @get - getStandalone(...DefaultnQueryParam): BlobProperties; + getStandalone(...DefaultQueryParam): BlobProperties; @route("/delete-resource") @delete - deleteStandalone(...DefaultnQueryParam): void; + deleteStandalone(...DefaultQueryParam): void; } // Nested layer services for default -> header parameters diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp index f73429b400..54ad19d598 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp @@ -30,6 +30,7 @@ model HeaderParamClientOptions { model MultipleParamsClientOptions { @doc("The name to use for operations") name: string; + @doc("The region to use for operations") region: string; } @@ -80,8 +81,8 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultIndividuallyWithPath.deleteStandalone; } - // Scenario 7: Default -> Individually initialization with query parameter - @scenarioDoc(""" + // Scenario 7: Default -> Individually initialization with query parameter + @scenarioDoc(""" Client for testing default -> individually nested initialization. The parent client uses default initialization behavior, @@ -116,8 +117,8 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultIndividuallyWithQuery.deleteStandalone; } - // Scenario 8: Default -> Individually initialization with Header parameter - @scenarioDoc(""" + // Scenario 8: Default -> Individually initialization with Header parameter + @scenarioDoc(""" Client for testing default -> individually header parameter nested initialization. The parent client uses default initialization behavior, diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/main.tsp index 87ba9e6262..1f881e39e5 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/main.tsp @@ -26,7 +26,7 @@ model Input { name: string; } -model DefaultnQueryParam { +model DefaultQueryParam { @query blobName: string; } @@ -54,15 +54,15 @@ interface NestedDefaultIndividuallyWithPath { interface NestedDefaultIndividuallyWithQuery { @route("/with-query") @get - withQuery(...DefaultnQueryParam): void; + withQuery(...DefaultQueryParam): void; @route("/get-standalone") @get - getStandalone(...DefaultnQueryParam): BlobProperties; + getStandalone(...DefaultQueryParam): BlobProperties; @route("/delete-resource") @delete - deleteStandalone(...DefaultnQueryParam): void; + deleteStandalone(...DefaultQueryParam): void; } // Nested layer services for default -> header parameters diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts index 4b7c708c22..da7e4c0a12 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts @@ -3,243 +3,248 @@ import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; export const Scenarios: Record = {}; // Mock responses for IndividuallyNestedWithPathClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithPathClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "test-resource", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithPathClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for IndividuallyNestedWithQueryClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithQueryClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/with-query", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/get-standalone", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 200, - body: json({ - name: "test-blob", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/delete-resource", - method: "delete", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithQueryClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for IndividuallyNestedWithHeaderClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithHeaderClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/with-query", - method: "get", - request: { - query: { - format: "text", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/get-standalone", - method: "get", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/delete-standalone", - method: "delete", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithHeaderClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for IndividuallyNestedWithMultipleClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithMultipleClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithMultipleClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for IndividuallyNestedWithMixedClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithMixedClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithMixedClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp index e83d9d4bff..ddd365d910 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp @@ -30,6 +30,7 @@ model HeaderParamClientOptions { model MultipleParamsClientOptions { @doc("The name to use for operations") name: string; + @doc("The region to use for operations") region: string; } @@ -85,8 +86,8 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultIndividuallyParentWithPath.deleteStandalone; } - // Scenario 7: Default -> Individually and Parent initialization with query parameter - @scenarioDoc(""" + // Scenario 7: Default -> Individually and Parent initialization with query parameter + @scenarioDoc(""" Client for testing default -> individually and parent nested initialization. The parent client uses default initialization behavior, @@ -126,8 +127,8 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultIndividuallyParentWithQuery.deleteStandalone; } - // Scenario 8: Default -> Individually and Parent initialization with Header parameter - @scenarioDoc(""" + // Scenario 8: Default -> Individually and Parent initialization with Header parameter + @scenarioDoc(""" Client for testing default -> individually and parent header parameter nested initialization. The parent client uses default initialization behavior, diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/main.tsp index 4018cd4642..1f43806ed6 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/main.tsp @@ -26,7 +26,7 @@ model Input { name: string; } -model DefaultnQueryParam { +model DefaultQueryParam { @query blobName: string; } @@ -54,15 +54,15 @@ interface NestedDefaultIndividuallyParentWithPath { interface NestedDefaultIndividuallyParentWithQuery { @route("/with-query") @get - withQuery(...DefaultnQueryParam): void; + withQuery(...DefaultQueryParam): void; @route("/get-standalone") @get - getStandalone(...DefaultnQueryParam): BlobProperties; + getStandalone(...DefaultQueryParam): BlobProperties; @route("/delete-resource") @delete - deleteStandalone(...DefaultnQueryParam): void; + deleteStandalone(...DefaultQueryParam): void; } // Nested layer services for default -> header parameters diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts index 74c1d1b5a3..5665042def 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts @@ -3,243 +3,248 @@ import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; export const Scenarios: Record = {}; // Mock responses for IndividuallyParentNestedWithPathClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithPathClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "test-resource", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithPathClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for IndividuallyParentNestedWithQueryClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithQueryClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/with-query", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/get-standalone", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 200, - body: json({ - name: "test-blob", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/delete-resource", - method: "delete", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithQueryClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for IndividuallyParentNestedWithHeaderClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithHeaderClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/with-query", - method: "get", - request: { - query: { - format: "text", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/get-standalone", - method: "get", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/delete-standalone", - method: "delete", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithHeaderClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for IndividuallyParentNestedWithMultipleClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMultipleClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMultipleClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for IndividuallyParentNestedWithMixedClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMixedClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMixedClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp index b247ae3617..968163e5a5 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp @@ -30,6 +30,7 @@ model HeaderParamClientOptions { model MultipleParamsClientOptions { @doc("The name to use for operations") name: string; + @doc("The region to use for operations") region: string; } @@ -80,8 +81,8 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultParentWithPath.deleteStandalone; } - // Scenario 7: Default -> Parent initialization with query parameter - @scenarioDoc(""" + // Scenario 7: Default -> Parent initialization with query parameter + @scenarioDoc(""" Client for testing default -> parent nested initialization. The parent client uses default initialization behavior, @@ -116,8 +117,8 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultParentWithQuery.deleteStandalone; } - // Scenario 8: Default -> Parent initialization with Header parameter - @scenarioDoc(""" + // Scenario 8: Default -> Parent initialization with Header parameter + @scenarioDoc(""" Client for testing default -> parent header parameter nested initialization. The parent client uses default initialization behavior, diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/main.tsp index 85563eeb99..e25e738d65 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/main.tsp @@ -26,7 +26,7 @@ model Input { name: string; } -model DefaultnQueryParam { +model DefaultQueryParam { @query blobName: string; } @@ -54,15 +54,15 @@ interface NestedDefaultParentWithPath { interface NestedDefaultParentWithQuery { @route("/with-query") @get - withQuery(...DefaultnQueryParam): void; + withQuery(...DefaultQueryParam): void; @route("/get-standalone") @get - getStandalone(...DefaultnQueryParam): BlobProperties; + getStandalone(...DefaultQueryParam): BlobProperties; @route("/delete-resource") @delete - deleteStandalone(...DefaultnQueryParam): void; + deleteStandalone(...DefaultQueryParam): void; } // Nested layer services for default -> header parameters diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts index 0145877979..1cd1c10367 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts @@ -3,243 +3,248 @@ import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; export const Scenarios: Record = {}; // Mock responses for ParentNestedWithPathClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithPathClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "test-resource", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithPathClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for ParentNestedWithQueryClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithQueryClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/with-query", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/get-standalone", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 200, - body: json({ - name: "test-blob", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/delete-resource", - method: "delete", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithQueryClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for ParentNestedWithHeaderClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithHeaderClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/with-query", - method: "get", - request: { - query: { - format: "text", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/get-standalone", - method: "get", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/delete-standalone", - method: "delete", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithHeaderClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for ParentNestedWithMultipleClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithMultipleClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithMultipleClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); // Mock responses for ParentNestedWithMixedClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithMixedClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithMixedClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); From 1b60fe2c0254854c162c16ed625cfc6839ba2211 Mon Sep 17 00:00:00 2001 From: ZiWei Chen Date: Fri, 19 Sep 2025 17:10:30 +0800 Subject: [PATCH 04/18] update --- .../default/individually/client.tsp | 143 ++++++++++++++++-- .../default/individually/mockapi.ts | 117 ++++++++++++++ .../default/individuallyParent/client.tsp | 143 ++++++++++++++++-- .../default/individuallyParent/mockapi.ts | 117 ++++++++++++++ .../default/parent/client.tsp | 139 +++++++++++++++-- .../default/parent/mockapi.ts | 117 ++++++++++++++ 6 files changed, 742 insertions(+), 34 deletions(-) diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp index 54ad19d598..d8298923f2 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp @@ -41,10 +41,10 @@ model MixedParamsClientOptions { } @global.Azure.ClientGenerator.Core.client({ - name: "DefaultParentClient", + name: "IndividuallyClient", service: Service, }) -namespace DefaultParentClient { +namespace IndividuallyClient { // Scenario 6: Default -> Individually initialization with path parameter @scenarioDoc(""" Client for testing default -> individually nested initialization. @@ -57,8 +57,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // directly (individually initialized) - const client = new DefaultNestedWithPathClient({ + // via IndividuallyClient (individually initialization) + const client = new IndividuallyClient.getIndividuallyNestedWithPathClient({ resourceName: "test-resource" }); @@ -93,8 +93,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // directly (individually initialized) - const client = new DefaultNestedWithQueryClient({ + // via IndividuallyClient (individually initialization) + const client = new IndividuallyClient.getIndividuallyNestedWithQueryClient({ blobName: "test-blob" }); @@ -129,8 +129,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // directly (individually initialized) - const client = new DefaultNestedWithHeaderClient({ + // via IndividuallyClient (individually initialization) + const client = new IndividuallyClient.getIndividuallyNestedWithHeaderClient({ name: "test-name-value" }); @@ -166,8 +166,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // directly (individually initialized) - const client = new DefaultNestedWithMultipleClient({ + // via IndividuallyClient (individually initialization) + const client = new IndividuallyClient.getIndividuallyNestedWithMultipleClient({ name: "test-name-value", region: "us-west" }); @@ -206,8 +206,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // directly (individually initialized) - const client = new DefaultNestedWithMixedClient({ + // via IndividuallyClient (individually initialization) + const client = new IndividuallyClient.getIndividuallyNestedWithMixedClient({ name: "test-name-value" }); @@ -230,3 +230,122 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultIndividuallyMixed.deleteStandalone; } } + +// Additional standalone clients for multi-client architecture +// Scenario: Individually path parameter client +@scenarioDoc(""" + Standalone client for testing individually initialization with path parameter. + + Parameters elevated to client level: + - blobName: "sample-blob" (path parameter) + + Expected client usage: + ```ts + const client = new IndividuallyPathParamClient({ + blobName: "sample-blob" + }); + + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.client({ + name: "IndividuallyPathParamClient", + service: Service, +}) +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: PathParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, +}) +@route("/individually-path") +interface IndividuallyPathParam { + @route("/{blobName}/with-query") + @get + withQuery(@path blobName: string, @query format?: string): void; + + @route("/{blobName}/get-standalone") + @get + getStandalone(@path blobName: string): Service.BlobProperties; + + @route("/{blobName}") + @delete + deleteStandalone(@path blobName: string): void; +} + +// Scenario: Individually header parameter client +@scenarioDoc(""" + Standalone client for testing individually initialization with header parameter. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Expected client usage: + ```ts + const client = new IndividuallyHeaderParamClient({ + name: "test-name-value" + }); + + client.withQuery(id: "test-id"); + client.withBody({ name: "test-name" }); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.client({ + name: "IndividuallyHeaderParamClient", + service: Service, +}) +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: HeaderParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, +}) +@route("/individually-header") +interface IndividuallyHeaderParam { + @route("/with-query") + @get + withQuery(@header name: string, @query id?: string): void; + + @route("/with-body") + @post + withBody(@header name: string, @body input: Service.Input): void; +} + +// Scenario: Individually multiple parameters client +@scenarioDoc(""" + Standalone client for testing individually initialization with multiple parameters. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + const client = new IndividuallyMultipleParamsClient({ + name: "test-name-value", + region: "us-west" + }); + + client.withQuery(id: "test-id"); + client.withBody({ name: "test-name" }); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.client({ + name: "IndividuallyMultipleParamsClient", + service: Service, +}) +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MultipleParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, +}) +@route("/individually-multiple") +interface IndividuallyMultipleParams { + @route("/with-query") + @get + withQuery(@header name: string, @query region: string, @query id?: string): void; + + @route("/with-body") + @post + withBody(@header name: string, @query region: string, @body input: Service.Input): void; +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts index da7e4c0a12..1f2cbdd242 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts @@ -248,3 +248,120 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind kind: "MockApiDefinition", }, ]); + +// Mock responses for IndividuallyPathParam scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyPathParam = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/individually-path/sample-blob/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/individually-path/sample-blob/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "sample-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T00:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/individually-path/sample-blob", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyHeaderParam scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyHeaderParam = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/individually-header/with-query", + method: "get", + request: { + query: { + id: "test-id", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/individually-header/with-body", + method: "post", + request: { + body: json({ + name: "test-name", + }), + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyMultipleParams scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyMultipleParams = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/individually-multiple/with-query", + method: "get", + request: { + query: { + region: "us-west", + id: "test-id", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/individually-multiple/with-body", + method: "post", + request: { + body: json({ + name: "test-name", + }), + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp index ddd365d910..f7d3b2dceb 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp @@ -41,10 +41,10 @@ model MixedParamsClientOptions { } @global.Azure.ClientGenerator.Core.client({ - name: "DefaultParentClient", + name: "IndividuallyParentClient", service: Service, }) -namespace DefaultParentClient { +namespace IndividuallyParentClient { // Scenario 6: Default -> Individually and Parent initialization with path parameter @scenarioDoc(""" Client for testing default -> individually and parent nested initialization. @@ -57,8 +57,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient (parent initialization) - const client = new DefaultParentClient.getDefaultNestedWithPathClient({ + // via IndividuallyParentClient (individually | parent initialization) + const client = new IndividuallyParentClient.getDefaultNestedWithPathClient({ resourceName: "test-resource" }); @@ -98,8 +98,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient (parent initialization) - const client = new DefaultParentClient.getDefaultNestedWithQueryClient({ + // via IndividuallyParentClient (individually | parent initialization) + const client = new IndividuallyParentClient.getDefaultNestedWithQueryClient({ blobName: "test-blob" }); @@ -139,8 +139,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient (parent initialization) - const client = new DefaultParentClient.getDefaultNestedWithHeaderClient({ + // via IndividuallyParentClient (individually | parent initialization) + const client = new IndividuallyParentClient.getDefaultNestedWithHeaderClient({ name: "test-name-value" }); @@ -181,8 +181,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient (parent initialization) - const client = new DefaultParentClient.getDefaultNestedWithMultipleClient({ + // via IndividuallyParentClient (individually | parent initialization) + const client = new IndividuallyParentClient.getDefaultNestedWithMultipleClient({ name: "test-name-value", region: "us-west" }); @@ -227,8 +227,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient (parent initialization) - const client = new DefaultParentClient.getDefaultNestedWithMixedClient({ + // via IndividuallyParentClient (individually | parent initialization) + const client = new IndividuallyParentClient.getDefaultNestedWithMixedClient({ name: "test-name-value" }); @@ -256,3 +256,122 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultIndividuallyParentMixed.deleteStandalone; } } + +// Additional standalone clients for multi-client architecture +// Scenario: IndividuallyParent path parameter client +@scenarioDoc(""" + Standalone client for testing individually | parent initialization with path parameter. + + Parameters elevated to client level: + - blobName: "sample-blob" (path parameter) + + Expected client usage: + ```ts + const client = new IndividuallyParentPathParamClient({ + blobName: "sample-blob" + }); + + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.client({ + name: "IndividuallyParentPathParamClient", + service: Service, +}) +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: PathParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, +}) +@route("/individually-parent-path") +interface IndividuallyParentPathParam { + @route("/{blobName}/with-query") + @get + withQuery(@path blobName: string, @query format?: string): void; + + @route("/{blobName}/get-standalone") + @get + getStandalone(@path blobName: string): Service.BlobProperties; + + @route("/{blobName}") + @delete + deleteStandalone(@path blobName: string): void; +} + +// Scenario: IndividuallyParent header parameter client +@scenarioDoc(""" + Standalone client for testing individually | parent initialization with header parameter. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Expected client usage: + ```ts + const client = new IndividuallyParentHeaderParamClient({ + name: "test-name-value" + }); + + client.withQuery(id: "test-id"); + client.withBody({ name: "test-name" }); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.client({ + name: "IndividuallyParentHeaderParamClient", + service: Service, +}) +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: HeaderParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, +}) +@route("/individually-parent-header") +interface IndividuallyParentHeaderParam { + @route("/with-query") + @get + withQuery(@header name: string, @query id?: string): void; + + @route("/with-body") + @post + withBody(@header name: string, @body input: Service.Input): void; +} + +// Scenario: IndividuallyParent multiple parameters client +@scenarioDoc(""" + Standalone client for testing individually | parent initialization with multiple parameters. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + const client = new IndividuallyParentMultipleParamsClient({ + name: "test-name-value", + region: "us-west" + }); + + client.withQuery(id: "test-id"); + client.withBody({ name: "test-name" }); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.client({ + name: "IndividuallyParentMultipleParamsClient", + service: Service, +}) +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MultipleParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, +}) +@route("/individually-parent-multiple") +interface IndividuallyParentMultipleParams { + @route("/with-query") + @get + withQuery(@header name: string, @query region: string, @query id?: string): void; + + @route("/with-body") + @post + withBody(@header name: string, @query region: string, @body input: Service.Input): void; +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts index 5665042def..10f7b5f87c 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts @@ -248,3 +248,120 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind kind: "MockApiDefinition", }, ]); + +// Mock responses for IndividuallyParentPathParam scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentPathParam = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "sample-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T00:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyParentHeaderParam scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentHeaderParam = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-header/with-query", + method: "get", + request: { + query: { + id: "test-id", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-header/with-body", + method: "post", + request: { + body: json({ + name: "test-name", + }), + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for IndividuallyParentMultipleParams scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentMultipleParams = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-multiple/with-query", + method: "get", + request: { + query: { + region: "us-west", + id: "test-id", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-multiple/with-body", + method: "post", + request: { + body: json({ + name: "test-name", + }), + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp index 968163e5a5..43991ec0d4 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp @@ -41,10 +41,10 @@ model MixedParamsClientOptions { } @global.Azure.ClientGenerator.Core.client({ - name: "DefaultParentClient", + name: "ParentClient", service: Service, }) -namespace DefaultParentClient { +namespace ParentClient { // Scenario 6: Default -> Parent initialization with path parameter @scenarioDoc(""" Client for testing default -> parent nested initialization. @@ -57,8 +57,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient (parent initialization) - const client = new DefaultParentClient.getDefaultNestedWithPathClient({ + // via ParentClient (parent initialization) + const client = new ParentClient.getDefaultNestedWithPathClient({ resourceName: "test-resource" }); @@ -93,8 +93,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient (parent initialization) - const client = new DefaultParentClient.getDefaultNestedWithQueryClient({ + // via ParentClient (parent initialization) + const client = new ParentClient.getDefaultNestedWithQueryClient({ blobName: "test-blob" }); @@ -129,8 +129,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient (parent initialization) - const client = new DefaultParentClient.getDefaultNestedWithHeaderClient({ + // via ParentClient (parent initialization) + const client = new ParentClient.getDefaultNestedWithHeaderClient({ name: "test-name-value" }); @@ -166,8 +166,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient (parent initialization) - const client = new DefaultParentClient.getDefaultNestedWithMultipleClient({ + // via ParentClient (parent initialization) + const client = new ParentClient.getDefaultNestedWithMultipleClient({ name: "test-name-value", region: "us-west" }); @@ -230,3 +230,122 @@ namespace DefaultParentClient { deleteStandalone is Service.NestedDefaultParentMixed.deleteStandalone; } } + +// Additional standalone clients for multi-client architecture +// Scenario: Parent path parameter client +@scenarioDoc(""" + Standalone client for testing parent initialization with path parameter. + + Parameters elevated to client level: + - blobName: "sample-blob" (path parameter) + + Expected client usage: + ```ts + const client = new ParentPathParamClient({ + blobName: "sample-blob" + }); + + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.client({ + name: "ParentPathParamClient", + service: Service, +}) +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: PathParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, +}) +@route("/parent-path") +interface ParentPathParam { + @route("/{blobName}/with-query") + @get + withQuery(@path blobName: string, @query format?: string): void; + + @route("/{blobName}/get-standalone") + @get + getStandalone(@path blobName: string): Service.BlobProperties; + + @route("/{blobName}") + @delete + deleteStandalone(@path blobName: string): void; +} + +// Scenario: Parent header parameter client +@scenarioDoc(""" + Standalone client for testing parent initialization with header parameter. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Expected client usage: + ```ts + const client = new ParentHeaderParamClient({ + name: "test-name-value" + }); + + client.withQuery(id: "test-id"); + client.withBody({ name: "test-name" }); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.client({ + name: "ParentHeaderParamClient", + service: Service, +}) +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: HeaderParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, +}) +@route("/parent-header") +interface ParentHeaderParam { + @route("/with-query") + @get + withQuery(@header name: string, @query id?: string): void; + + @route("/with-body") + @post + withBody(@header name: string, @body input: Service.Input): void; +} + +// Scenario: Parent multiple parameters client +@scenarioDoc(""" + Standalone client for testing parent initialization with multiple parameters. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + const client = new ParentMultipleParamsClient({ + name: "test-name-value", + region: "us-west" + }); + + client.withQuery(id: "test-id"); + client.withBody({ name: "test-name" }); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.client({ + name: "ParentMultipleParamsClient", + service: Service, +}) +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MultipleParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, +}) +@route("/parent-multiple") +interface ParentMultipleParams { + @route("/with-query") + @get + withQuery(@header name: string, @query region: string, @query id?: string): void; + + @route("/with-body") + @post + withBody(@header name: string, @query region: string, @body input: Service.Input): void; +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts index 1cd1c10367..862e79811e 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts @@ -248,3 +248,120 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Par kind: "MockApiDefinition", }, ]); + +// Mock responses for ParentPathParam scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentPathParam = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/parent-path/sample-blob/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/parent-path/sample-blob/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "sample-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T00:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/parent-path/sample-blob", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for ParentHeaderParam scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentHeaderParam = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/parent-header/with-query", + method: "get", + request: { + query: { + id: "test-id", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/parent-header/with-body", + method: "post", + request: { + body: json({ + name: "test-name", + }), + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// Mock responses for ParentMultipleParams scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentMultipleParams = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/parent-multiple/with-query", + method: "get", + request: { + query: { + region: "us-west", + id: "test-id", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/parent-multiple/with-body", + method: "post", + request: { + body: json({ + name: "test-name", + }), + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); From 715756a8661269d92df25c082ed388fdb8386b0e Mon Sep 17 00:00:00 2001 From: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> Date: Mon, 22 Sep 2025 15:28:12 +0800 Subject: [PATCH 05/18] update --- .../default/individuallyParent/client.tsp | 34 +++++++++---------- .../default/individuallyParent/mockapi.ts | 20 +++++------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp index f7d3b2dceb..0d6bfc4fb8 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp @@ -41,10 +41,10 @@ model MixedParamsClientOptions { } @global.Azure.ClientGenerator.Core.client({ - name: "IndividuallyParentClient", + name: "FlexibleParentClient", service: Service, }) -namespace IndividuallyParentClient { +namespace FlexibleParentClient { // Scenario 6: Default -> Individually and Parent initialization with path parameter @scenarioDoc(""" Client for testing default -> individually and parent nested initialization. @@ -57,8 +57,8 @@ namespace IndividuallyParentClient { Expected client usage: ```ts - // via IndividuallyParentClient (individually | parent initialization) - const client = new IndividuallyParentClient.getDefaultNestedWithPathClient({ + // via FlexibleParentClient (individually | parent initialization) + const client = new FlexibleParentClient.getDefaultNestedWithPathClient({ resourceName: "test-resource" }); @@ -80,7 +80,7 @@ namespace IndividuallyParentClient { initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, }) @route("/nested-default-individually-parent") - interface IndividuallyParentNestedWithPathClient { + interface FlexibleNestedWithPathClient { withQuery is Service.NestedDefaultIndividuallyParentWithPath.withQuery; getStandalone is Service.NestedDefaultIndividuallyParentWithPath.getStandalone; deleteStandalone is Service.NestedDefaultIndividuallyParentWithPath.deleteStandalone; @@ -98,8 +98,8 @@ namespace IndividuallyParentClient { Expected client usage: ```ts - // via IndividuallyParentClient (individually | parent initialization) - const client = new IndividuallyParentClient.getDefaultNestedWithQueryClient({ + // via FlexibleParentClient (individually | parent initialization) + const client = new FlexibleParentClient.getDefaultNestedWithQueryClient({ blobName: "test-blob" }); @@ -121,7 +121,7 @@ namespace IndividuallyParentClient { initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, }) @route("/nested-default-individually-parent-query") - interface IndividuallyParentNestedWithQueryClient { + interface FlexibleNestedWithQueryClient { withQuery is Service.NestedDefaultIndividuallyParentWithQuery.withQuery; getStandalone is Service.NestedDefaultIndividuallyParentWithQuery.getStandalone; deleteStandalone is Service.NestedDefaultIndividuallyParentWithQuery.deleteStandalone; @@ -139,8 +139,8 @@ namespace IndividuallyParentClient { Expected client usage: ```ts - // via IndividuallyParentClient (individually | parent initialization) - const client = new IndividuallyParentClient.getDefaultNestedWithHeaderClient({ + // via FlexibleParentClient (individually | parent initialization) + const client = new FlexibleParentClient.getDefaultNestedWithHeaderClient({ name: "test-name-value" }); @@ -162,7 +162,7 @@ namespace IndividuallyParentClient { initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, }) @route("/nested-default-individually-parent-header") - interface IndividuallyParentNestedWithHeaderClient { + interface FlexibleNestedWithHeaderClient { withQuery is Service.NestedDefaultIndividuallyParentHeader.withQuery; getStandalone is Service.NestedDefaultIndividuallyParentHeader.getStandalone; deleteStandalone is Service.NestedDefaultIndividuallyParentHeader.deleteStandalone; @@ -181,8 +181,8 @@ namespace IndividuallyParentClient { Expected client usage: ```ts - // via IndividuallyParentClient (individually | parent initialization) - const client = new IndividuallyParentClient.getDefaultNestedWithMultipleClient({ + // via FlexibleParentClient (individually | parent initialization) + const client = new FlexibleParentClient.getDefaultNestedWithMultipleClient({ name: "test-name-value", region: "us-west" }); @@ -206,7 +206,7 @@ namespace IndividuallyParentClient { initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, }) @route("/nested-default-individually-parent-multiple") - interface IndividuallyParentNestedWithMultipleClient { + interface FlexibleNestedWithMultipleClient { withQuery is Service.NestedDefaultIndividuallyParentMultiple.withQuery; getStandalone is Service.NestedDefaultIndividuallyParentMultiple.getStandalone; deleteStandalone is Service.NestedDefaultIndividuallyParentMultiple.deleteStandalone; @@ -227,8 +227,8 @@ namespace IndividuallyParentClient { Expected client usage: ```ts - // via IndividuallyParentClient (individually | parent initialization) - const client = new IndividuallyParentClient.getDefaultNestedWithMixedClient({ + // via FlexibleParentClient (individually | parent initialization) + const client = new FlexibleParentClient.getDefaultNestedWithMixedClient({ name: "test-name-value" }); @@ -250,7 +250,7 @@ namespace IndividuallyParentClient { initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, }) @route("/nested-default-individually-parent-mixed") - interface IndividuallyParentNestedWithMixedClient { + interface FlexibleNestedWithMixedClient { withQuery is Service.NestedDefaultIndividuallyParentMixed.withQuery; getStandalone is Service.NestedDefaultIndividuallyParentMixed.getStandalone; deleteStandalone is Service.NestedDefaultIndividuallyParentMixed.deleteStandalone; diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts index 10f7b5f87c..2425bb3502 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts @@ -2,8 +2,8 @@ import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; export const Scenarios: Record = {}; -// Mock responses for IndividuallyParentNestedWithPathClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithPathClient = +// Mock responses for FlexibleNestedWithPathClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedWithPathClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/with-query", @@ -44,8 +44,8 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind }, ]); -// Mock responses for IndividuallyParentNestedWithQueryClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithQueryClient = +// Mock responses for FlexibleNestedWithQueryClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedWithQueryClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/with-query", @@ -94,8 +94,8 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind }, ]); -// Mock responses for IndividuallyParentNestedWithHeaderClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithHeaderClient = +// Mock responses for FlexibleNestedWithHeaderClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedWithHeaderClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/with-query", @@ -141,8 +141,8 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind }, ]); -// Mock responses for IndividuallyParentNestedWithMultipleClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMultipleClient = +// Mock responses for FlexibleNestedWithMultipleClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedWithMultipleClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/with-query", @@ -195,8 +195,8 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind }, ]); -// Mock responses for IndividuallyParentNestedWithMixedClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMixedClient = +// Mock responses for FlexibleNestedWithMixedClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedWithMixedClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/with-query", From f9cbbf3337c7d99a5ade6c96f69d7a7261d3c551 Mon Sep 17 00:00:00 2001 From: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> Date: Mon, 22 Sep 2025 15:50:50 +0800 Subject: [PATCH 06/18] Revert "update" This reverts commit 715756a8661269d92df25c082ed388fdb8386b0e. --- .../default/individuallyParent/client.tsp | 34 +++++++++---------- .../default/individuallyParent/mockapi.ts | 20 +++++------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp index 0d6bfc4fb8..f7d3b2dceb 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp @@ -41,10 +41,10 @@ model MixedParamsClientOptions { } @global.Azure.ClientGenerator.Core.client({ - name: "FlexibleParentClient", + name: "IndividuallyParentClient", service: Service, }) -namespace FlexibleParentClient { +namespace IndividuallyParentClient { // Scenario 6: Default -> Individually and Parent initialization with path parameter @scenarioDoc(""" Client for testing default -> individually and parent nested initialization. @@ -57,8 +57,8 @@ namespace FlexibleParentClient { Expected client usage: ```ts - // via FlexibleParentClient (individually | parent initialization) - const client = new FlexibleParentClient.getDefaultNestedWithPathClient({ + // via IndividuallyParentClient (individually | parent initialization) + const client = new IndividuallyParentClient.getDefaultNestedWithPathClient({ resourceName: "test-resource" }); @@ -80,7 +80,7 @@ namespace FlexibleParentClient { initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, }) @route("/nested-default-individually-parent") - interface FlexibleNestedWithPathClient { + interface IndividuallyParentNestedWithPathClient { withQuery is Service.NestedDefaultIndividuallyParentWithPath.withQuery; getStandalone is Service.NestedDefaultIndividuallyParentWithPath.getStandalone; deleteStandalone is Service.NestedDefaultIndividuallyParentWithPath.deleteStandalone; @@ -98,8 +98,8 @@ namespace FlexibleParentClient { Expected client usage: ```ts - // via FlexibleParentClient (individually | parent initialization) - const client = new FlexibleParentClient.getDefaultNestedWithQueryClient({ + // via IndividuallyParentClient (individually | parent initialization) + const client = new IndividuallyParentClient.getDefaultNestedWithQueryClient({ blobName: "test-blob" }); @@ -121,7 +121,7 @@ namespace FlexibleParentClient { initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, }) @route("/nested-default-individually-parent-query") - interface FlexibleNestedWithQueryClient { + interface IndividuallyParentNestedWithQueryClient { withQuery is Service.NestedDefaultIndividuallyParentWithQuery.withQuery; getStandalone is Service.NestedDefaultIndividuallyParentWithQuery.getStandalone; deleteStandalone is Service.NestedDefaultIndividuallyParentWithQuery.deleteStandalone; @@ -139,8 +139,8 @@ namespace FlexibleParentClient { Expected client usage: ```ts - // via FlexibleParentClient (individually | parent initialization) - const client = new FlexibleParentClient.getDefaultNestedWithHeaderClient({ + // via IndividuallyParentClient (individually | parent initialization) + const client = new IndividuallyParentClient.getDefaultNestedWithHeaderClient({ name: "test-name-value" }); @@ -162,7 +162,7 @@ namespace FlexibleParentClient { initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, }) @route("/nested-default-individually-parent-header") - interface FlexibleNestedWithHeaderClient { + interface IndividuallyParentNestedWithHeaderClient { withQuery is Service.NestedDefaultIndividuallyParentHeader.withQuery; getStandalone is Service.NestedDefaultIndividuallyParentHeader.getStandalone; deleteStandalone is Service.NestedDefaultIndividuallyParentHeader.deleteStandalone; @@ -181,8 +181,8 @@ namespace FlexibleParentClient { Expected client usage: ```ts - // via FlexibleParentClient (individually | parent initialization) - const client = new FlexibleParentClient.getDefaultNestedWithMultipleClient({ + // via IndividuallyParentClient (individually | parent initialization) + const client = new IndividuallyParentClient.getDefaultNestedWithMultipleClient({ name: "test-name-value", region: "us-west" }); @@ -206,7 +206,7 @@ namespace FlexibleParentClient { initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, }) @route("/nested-default-individually-parent-multiple") - interface FlexibleNestedWithMultipleClient { + interface IndividuallyParentNestedWithMultipleClient { withQuery is Service.NestedDefaultIndividuallyParentMultiple.withQuery; getStandalone is Service.NestedDefaultIndividuallyParentMultiple.getStandalone; deleteStandalone is Service.NestedDefaultIndividuallyParentMultiple.deleteStandalone; @@ -227,8 +227,8 @@ namespace FlexibleParentClient { Expected client usage: ```ts - // via FlexibleParentClient (individually | parent initialization) - const client = new FlexibleParentClient.getDefaultNestedWithMixedClient({ + // via IndividuallyParentClient (individually | parent initialization) + const client = new IndividuallyParentClient.getDefaultNestedWithMixedClient({ name: "test-name-value" }); @@ -250,7 +250,7 @@ namespace FlexibleParentClient { initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, }) @route("/nested-default-individually-parent-mixed") - interface FlexibleNestedWithMixedClient { + interface IndividuallyParentNestedWithMixedClient { withQuery is Service.NestedDefaultIndividuallyParentMixed.withQuery; getStandalone is Service.NestedDefaultIndividuallyParentMixed.getStandalone; deleteStandalone is Service.NestedDefaultIndividuallyParentMixed.deleteStandalone; diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts index 2425bb3502..10f7b5f87c 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts @@ -2,8 +2,8 @@ import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; export const Scenarios: Record = {}; -// Mock responses for FlexibleNestedWithPathClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedWithPathClient = +// Mock responses for IndividuallyParentNestedWithPathClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithPathClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/with-query", @@ -44,8 +44,8 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_Fl }, ]); -// Mock responses for FlexibleNestedWithQueryClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedWithQueryClient = +// Mock responses for IndividuallyParentNestedWithQueryClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithQueryClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/with-query", @@ -94,8 +94,8 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_Fl }, ]); -// Mock responses for FlexibleNestedWithHeaderClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedWithHeaderClient = +// Mock responses for IndividuallyParentNestedWithHeaderClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithHeaderClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/with-query", @@ -141,8 +141,8 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_Fl }, ]); -// Mock responses for FlexibleNestedWithMultipleClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedWithMultipleClient = +// Mock responses for IndividuallyParentNestedWithMultipleClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMultipleClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/with-query", @@ -195,8 +195,8 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_Fl }, ]); -// Mock responses for FlexibleNestedWithMixedClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_FlexibleParentClient_FlexibleNestedWithMixedClient = +// Mock responses for IndividuallyParentNestedWithMixedClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMixedClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/with-query", From 4b8338fc6bc970bbaf0fd2dd122e97d9f278ef36 Mon Sep 17 00:00:00 2001 From: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> Date: Mon, 22 Sep 2025 16:06:05 +0800 Subject: [PATCH 07/18] format --- .../default/individually/mockapi.ts | 68 +++--- .../default/individuallyParent/mockapi.ts | 201 +++++++++--------- .../default/parent/mockapi.ts | 2 +- 3 files changed, 138 insertions(+), 133 deletions(-) diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts index 1f2cbdd242..33bdf8bc49 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts @@ -249,7 +249,7 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind }, ]); -// Mock responses for IndividuallyPathParam scenario +// Mock responses for IndividuallyPathParam scenario Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyPathParam = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/individually-path/sample-blob/with-query", @@ -327,41 +327,43 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyHeaderParam ]); // Mock responses for IndividuallyMultipleParams scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyMultipleParams = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/individually-multiple/with-query", - method: "get", - request: { - query: { - region: "us-west", - id: "test-id", +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyMultipleParams = passOnSuccess( + [ + { + uri: "/azure/client-generator-core/client-initialization/individually-multiple/with-query", + method: "get", + request: { + query: { + region: "us-west", + id: "test-id", + }, + headers: { + name: "test-name-value", + }, }, - headers: { - name: "test-name-value", + response: { + status: 204, }, + kind: "MockApiDefinition", }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-multiple/with-body", - method: "post", - request: { - body: json({ - name: "test-name", - }), - query: { - region: "us-west", + { + uri: "/azure/client-generator-core/client-initialization/individually-multiple/with-body", + method: "post", + request: { + body: json({ + name: "test-name", + }), + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, }, - headers: { - name: "test-name-value", + response: { + status: 204, }, + kind: "MockApiDefinition", }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); + ], +); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts index 10f7b5f87c..95b1aa6785 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts @@ -249,119 +249,122 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind }, ]); -// Mock responses for IndividuallyParentPathParam scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentPathParam = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob/with-query", - method: "get", - request: { - query: { - format: "text", +// Mock responses for IndividuallyParentPathParam scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentPathParam = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob/with-query", + method: "get", + request: { + query: { + format: "text", + }, }, + response: { + status: 204, + }, + kind: "MockApiDefinition", }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "sample-blob", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T00:00:00Z", - }), + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "sample-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T00:00:00Z", + }), + }, + kind: "MockApiDefinition", }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob", - method: "delete", - request: {}, - response: { - status: 204, + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", }, - kind: "MockApiDefinition", - }, -]); + ]); // Mock responses for IndividuallyParentHeaderParam scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentHeaderParam = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-header/with-query", - method: "get", - request: { - query: { - id: "test-id", +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentHeaderParam = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-header/with-query", + method: "get", + request: { + query: { + id: "test-id", + }, + headers: { + name: "test-name-value", + }, }, - headers: { - name: "test-name-value", + response: { + status: 204, }, + kind: "MockApiDefinition", }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-header/with-body", - method: "post", - request: { - body: json({ - name: "test-name", - }), - headers: { - name: "test-name-value", + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-header/with-body", + method: "post", + request: { + body: json({ + name: "test-name", + }), + headers: { + name: "test-name-value", + }, }, + response: { + status: 204, + }, + kind: "MockApiDefinition", }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); + ]); // Mock responses for IndividuallyParentMultipleParams scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentMultipleParams = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-multiple/with-query", - method: "get", - request: { - query: { - region: "us-west", - id: "test-id", - }, - headers: { - name: "test-name-value", +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentMultipleParams = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-multiple/with-query", + method: "get", + request: { + query: { + region: "us-west", + id: "test-id", + }, + headers: { + name: "test-name-value", + }, }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-multiple/with-body", - method: "post", - request: { - body: json({ - name: "test-name", - }), - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", + response: { + status: 204, }, + kind: "MockApiDefinition", }, - response: { - status: 204, + { + uri: "/azure/client-generator-core/client-initialization/individually-parent-multiple/with-body", + method: "post", + request: { + body: json({ + name: "test-name", + }), + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", }, - kind: "MockApiDefinition", - }, -]); + ]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts index 862e79811e..1cf892e597 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts @@ -249,7 +249,7 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Par }, ]); -// Mock responses for ParentPathParam scenario +// Mock responses for ParentPathParam scenario Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentPathParam = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/parent-path/sample-blob/with-query", From 51efbbc174b07cf1a2c16dd493bda50d5a634b83 Mon Sep 17 00:00:00 2001 From: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> Date: Mon, 22 Sep 2025 16:26:10 +0800 Subject: [PATCH 08/18] update --- .../default/individually/mockapi.ts | 243 ++++++++++++++++++ .../default/individuallyParent/mockapi.ts | 243 ++++++++++++++++++ .../default/parent/mockapi.ts | 243 ++++++++++++++++++ 3 files changed, 729 insertions(+) diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts index 33bdf8bc49..00e8fd0b45 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts @@ -367,3 +367,246 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyMultiplePar }, ], ); + +// Additional mock responses for IndividuallyClient scenarios +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyClient_IndividuallyNestedWithPathClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyClient_IndividuallyNestedWithQueryClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyClient_IndividuallyNestedWithHeaderClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyClient_IndividuallyNestedWithMultipleClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyClient_IndividuallyNestedWithMixedClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts index 95b1aa6785..a937860d5d 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts @@ -368,3 +368,246 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentMulti kind: "MockApiDefinition", }, ]); + +// Additional mock responses for IndividuallyParentClient scenarios +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithPathClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithQueryClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithHeaderClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithMultipleClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithMixedClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts index 1cf892e597..2b947906f7 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts @@ -365,3 +365,246 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentMultipleParams = kind: "MockApiDefinition", }, ]); + +// Additional mock responses for ParentClient scenarios +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentClient_ParentNestedWithPathClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentClient_ParentNestedWithQueryClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 1024, + contentType: "application/octet-stream", + createdOn: "2023-01-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentClient_ParentNestedWithHeaderClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentClient_ParentNestedWithMultipleClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); + +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentClient_ParentNestedWithMixedClient = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); From a6869111f2838f6dfda492aae7fd741eace002cb Mon Sep 17 00:00:00 2001 From: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> Date: Tue, 23 Sep 2025 10:55:56 +0800 Subject: [PATCH 09/18] Update client.tsp --- .../default/default/client.tsp | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp index 5293443c18..a6616cd4f4 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp @@ -236,9 +236,7 @@ namespace DefaultParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: PathParamClientOptions, - }) + @global.Azure.ClientGenerator.Core.clientInitialization(PathParamClientOptions) @route("/nested-default-default") interface DefaultNestedWithPathClient { withQuery is Service.NestedDefaultDefaultWithPath.withQuery; @@ -271,9 +269,7 @@ namespace DefaultParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: DefaultQueryParamClientOptions, - }) + @global.Azure.ClientGenerator.Core.clientInitialization(DefaultQueryParamClientOptions) @route("/nested-default-default") interface DefaultNestedWithQueryClient { withQuery is Service.NestedDefaultDefaultWithQuery.withQuery; @@ -306,9 +302,7 @@ namespace DefaultParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: HeaderParamClientOptions, - }) + @global.Azure.ClientGenerator.Core.clientInitialization(HeaderParamClientOptions) @route("/nested-default-header") interface DefaultNestedWithHeaderClient { withQuery is Service.NestedDefaultHeader.withQuery; @@ -343,9 +337,7 @@ namespace DefaultParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MultipleParamsClientOptions, - }) + @global.Azure.ClientGenerator.Core.clientInitialization(MultipleParamsClientOptions) @route("/nested-default-multiple") interface DefaultNestedWithMultipleClient { withQuery is Service.NestedDefaultMultiple.withQuery; @@ -381,9 +373,7 @@ namespace DefaultParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MixedParamsClientOptions, - }) + @global.Azure.ClientGenerator.Core.clientInitialization(MixedParamsClientOptions) @route("/nested-default-mixed") interface DefaultNestedWithMixedClient { withQuery is Service.NestedDefaultMixed.withQuery; From ecc28b3b209e3ebe935b21a6395fd3579413fe15 Mon Sep 17 00:00:00 2001 From: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> Date: Tue, 23 Sep 2025 13:41:55 +0800 Subject: [PATCH 10/18] Update client.tsp --- .../default/default/client.tsp | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp index a6616cd4f4..5293443c18 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp @@ -236,7 +236,9 @@ namespace DefaultParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization(PathParamClientOptions) + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: PathParamClientOptions, + }) @route("/nested-default-default") interface DefaultNestedWithPathClient { withQuery is Service.NestedDefaultDefaultWithPath.withQuery; @@ -269,7 +271,9 @@ namespace DefaultParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization(DefaultQueryParamClientOptions) + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: DefaultQueryParamClientOptions, + }) @route("/nested-default-default") interface DefaultNestedWithQueryClient { withQuery is Service.NestedDefaultDefaultWithQuery.withQuery; @@ -302,7 +306,9 @@ namespace DefaultParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization(HeaderParamClientOptions) + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: HeaderParamClientOptions, + }) @route("/nested-default-header") interface DefaultNestedWithHeaderClient { withQuery is Service.NestedDefaultHeader.withQuery; @@ -337,7 +343,9 @@ namespace DefaultParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization(MultipleParamsClientOptions) + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MultipleParamsClientOptions, + }) @route("/nested-default-multiple") interface DefaultNestedWithMultipleClient { withQuery is Service.NestedDefaultMultiple.withQuery; @@ -373,7 +381,9 @@ namespace DefaultParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization(MixedParamsClientOptions) + @global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MixedParamsClientOptions, + }) @route("/nested-default-mixed") interface DefaultNestedWithMixedClient { withQuery is Service.NestedDefaultMixed.withQuery; From 6c8be1985ce8cb039bad42ae6d07fb5906cc52da Mon Sep 17 00:00:00 2001 From: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> Date: Tue, 23 Sep 2025 17:48:25 +0800 Subject: [PATCH 11/18] update --- .../default/default/client.tsp | 81 ++- .../default/default/main.tsp | 18 +- .../default/default/mockapi.ts | 497 +++++++++--------- .../default/individually/client.tsp | 139 +---- .../default/individually/mockapi.ts | 129 +---- .../default/individuallyParent/client.tsp | 139 +---- .../default/individuallyParent/mockapi.ts | 120 ----- .../default/parent/client.tsp | 131 +---- .../default/parent/mockapi.ts | 127 +---- 9 files changed, 324 insertions(+), 1057 deletions(-) diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp index 5293443c18..e6f1d5b652 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/client.tsp @@ -47,9 +47,8 @@ model ParamAliasClientOptions { blobName: string; } -// Models for initialization scenarios model DefaultQueryParamClientOptions { - @doc("The name of the resource. This parameter is used as a path parameter in all operations.") + @doc("The blob name to use for operations") blobName: string; } @@ -207,24 +206,24 @@ interface ParamAlias { } @global.Azure.ClientGenerator.Core.client({ - name: "DefaultParentClient", + name: "DefaultClient", service: Service, }) -namespace DefaultParentClient { +namespace DefaultClient { // Scenario 6: Default -> Default initialization with path parameter @scenarioDoc(""" Client for testing default -> default nested initialization. The parent client uses default initialization behavior, - and the child client also uses default initialization behavior. + and the child client uses default initialization behavior. Parameters elevated to client level: - resourceName: "test-resource" (path parameter) Expected client usage: ```ts - // via DefaultParentClient - const client = new DefaultParentClient.getDefaultNestedClient({ + // via DefaultClient (default initialization) + const client = new DefaultClient.getDefaultNestedWithPathClient({ resourceName: "test-resource" }); @@ -251,20 +250,20 @@ namespace DefaultParentClient { Client for testing default -> default nested initialization. The parent client uses default initialization behavior, - and the child client also uses default initialization behavior. + and the child client uses default initialization behavior. Parameters elevated to client level: - - resourceName: "test-resource" (path parameter) + - blobName: "test-blob" (query parameter) Expected client usage: ```ts - // via DefaultParentClient - const client = new DefaultParentClient.getDefaultNestedClient({ - resourceName: "test-resource" + // via DefaultClient (default initialization) + const client = new DefaultClient.getDefaultNestedWithQueryClient({ + blobName: "test-blob" }); - // Operations don't need resourceName parameter - client.withQuery(format: "text"); + // Operations don't need blobName parameter + client.withQuery(); client.getStandalone(); client.deleteStandalone(); ``` @@ -274,7 +273,7 @@ namespace DefaultParentClient { @global.Azure.ClientGenerator.Core.clientInitialization({ parameters: DefaultQueryParamClientOptions, }) - @route("/nested-default-default") + @route("/nested-default-default-query") interface DefaultNestedWithQueryClient { withQuery is Service.NestedDefaultDefaultWithQuery.withQuery; getStandalone is Service.NestedDefaultDefaultWithQuery.getStandalone; @@ -283,18 +282,18 @@ namespace DefaultParentClient { // Scenario 8: Default -> Default initialization with Header parameter @scenarioDoc(""" - Client for testing default -> header parameter nested initialization. + Client for testing default -> default header parameter nested initialization. The parent client uses default initialization behavior, - and the child client moves header parameters to client level. + and the child client moves header parameters to client level and uses default initialization. Parameters elevated to client level: - name: "test-name-value" (header parameter) Expected client usage: ```ts - // via DefaultParentClient - const client = new DefaultParentClient.getHeaderNestedClient({ + // via DefaultClient (default initialization) + const client = new DefaultClient.getDefaultNestedWithHeaderClient({ name: "test-name-value" }); @@ -309,19 +308,19 @@ namespace DefaultParentClient { @global.Azure.ClientGenerator.Core.clientInitialization({ parameters: HeaderParamClientOptions, }) - @route("/nested-default-header") + @route("/nested-default-default-header") interface DefaultNestedWithHeaderClient { - withQuery is Service.NestedDefaultHeader.withQuery; - getStandalone is Service.NestedDefaultHeader.getStandalone; - deleteStandalone is Service.NestedDefaultHeader.deleteStandalone; + withQuery is Service.NestedDefaultDefaultHeader.withQuery; + getStandalone is Service.NestedDefaultDefaultHeader.getStandalone; + deleteStandalone is Service.NestedDefaultDefaultHeader.deleteStandalone; } - // Scenario 15: Default -> Multiple parameters client + // Scenario 15: Default -> Default Multiple parameters client @scenarioDoc(""" - Client for testing default -> multiple parameters nested initialization. + Client for testing default -> default multiple parameters nested initialization. The parent client uses default initialization behavior, - and the child client moves multiple parameters (header and query) to client level. + and the child client moves multiple parameters (header and query) to client level with default initialization. Parameters elevated to client level: - name: "test-name-value" (header parameter) @@ -329,8 +328,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient - const client = new DefaultParentClient.getMultipleNestedClient({ + // via DefaultClient (default initialization) + const client = new DefaultClient.getDefaultNestedWithMultipleClient({ name: "test-name-value", region: "us-west" }); @@ -346,19 +345,19 @@ namespace DefaultParentClient { @global.Azure.ClientGenerator.Core.clientInitialization({ parameters: MultipleParamsClientOptions, }) - @route("/nested-default-multiple") + @route("/nested-default-default-multiple") interface DefaultNestedWithMultipleClient { - withQuery is Service.NestedDefaultMultiple.withQuery; - getStandalone is Service.NestedDefaultMultiple.getStandalone; - deleteStandalone is Service.NestedDefaultMultiple.deleteStandalone; + withQuery is Service.NestedDefaultDefaultMultiple.withQuery; + getStandalone is Service.NestedDefaultDefaultMultiple.getStandalone; + deleteStandalone is Service.NestedDefaultDefaultMultiple.deleteStandalone; } - // Scenario 16: Default -> Mixed parameters client + // Scenario 16: Default -> Default Mixed parameters client @scenarioDoc(""" - Client for testing default -> mixed parameters nested initialization. + Client for testing default -> default mixed parameters nested initialization. The parent client uses default initialization behavior, - and the child client moves some parameters to client level while keeping others at method level. + and the child client moves some parameters to client level while keeping others at method level with default initialization. Parameters elevated to client level: - name: "test-name-value" (header parameter) @@ -368,8 +367,8 @@ namespace DefaultParentClient { Expected client usage: ```ts - // via DefaultParentClient - const client = new DefaultParentClient.getMixedNestedClient({ + // via DefaultClient (default initialization) + const client = new DefaultClient.getDefaultNestedWithMixedClient({ name: "test-name-value" }); @@ -384,10 +383,10 @@ namespace DefaultParentClient { @global.Azure.ClientGenerator.Core.clientInitialization({ parameters: MixedParamsClientOptions, }) - @route("/nested-default-mixed") + @route("/nested-default-default-mixed") interface DefaultNestedWithMixedClient { - withQuery is Service.NestedDefaultMixed.withQuery; - getStandalone is Service.NestedDefaultMixed.getStandalone; - deleteStandalone is Service.NestedDefaultMixed.deleteStandalone; + withQuery is Service.NestedDefaultDefaultMixed.withQuery; + getStandalone is Service.NestedDefaultDefaultMixed.getStandalone; + deleteStandalone is Service.NestedDefaultDefaultMixed.deleteStandalone; } } diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp index 395e17f4c3..07d6ce2677 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/main.tsp @@ -155,9 +155,9 @@ interface NestedDefaultDefaultWithQuery { } // Nested layer services for default -> header parameters -@doc("Operations for nested default -> header parameters") -@route("/nested-default-header") -interface NestedDefaultHeader { +@doc("Operations for nested default -> default header parameters") +@route("/nested-default-default-header") +interface NestedDefaultDefaultHeader { @route("/with-query") @get withQuery(...NameHeaderParam, @query format?: string): void; @@ -172,9 +172,9 @@ interface NestedDefaultHeader { } // Nested layer services for default -> multiple parameters -@doc("Operations for nested default -> multiple parameters") -@route("/nested-default-multiple") -interface NestedDefaultMultiple { +@doc("Operations for nested default -> default multiple parameters") +@route("/nested-default-default-multiple") +interface NestedDefaultDefaultMultiple { @route("/with-query") @get withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; @@ -189,9 +189,9 @@ interface NestedDefaultMultiple { } // Nested layer services for default -> mixed parameters -@doc("Operations for nested default -> mixed parameters") -@route("/nested-default-mixed") -interface NestedDefaultMixed { +@doc("Operations for nested default -> default mixed parameters") +@route("/nested-default-default-mixed") +interface NestedDefaultDefaultMixed { @route("/with-query") @get withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/mockapi.ts index f9da6ed004..00a8dd327c 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/default/mockapi.ts @@ -181,265 +181,246 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParamAlias = passOnSucc }, ]); -// Mock responses for DefaultParentClient additional nested scenarios -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedWithHeaderClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-header/with-query", - method: "get", - request: { - query: { - format: "text", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-header/get-standalone", - method: "get", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 200, - body: json({ - name: "test-resource", - size: 42, - contentType: "text/plain", - createdOn: "2025-04-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-header/delete-standalone", - method: "delete", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); +// Mock responses for DefaultClient nested scenarios -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedWithMultipleClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-multiple/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-multiple/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 200, - body: json({ - name: "test-resource", - size: 42, - contentType: "text/plain", - createdOn: "2025-04-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-multiple/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); +// DefaultNestedWithPathClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_DefaultNestedWithPathClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-resource/with-query", + method: "get", + request: { + query: { + format: "text", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-resource/get-standalone", + method: "get", + request: {}, + response: { + status: 200, + body: json({ + name: "test-resource", + size: 42, + contentType: "text/plain", + createdOn: "2025-04-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-resource", + method: "delete", + request: {}, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); + +// DefaultNestedWithQueryClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_DefaultNestedWithQueryClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 42, + contentType: "text/plain", + createdOn: "2025-04-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedWithMixedClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-mixed/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-mixed/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 200, - body: json({ - name: "test-resource", - size: 42, - contentType: "text/plain", - createdOn: "2025-04-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-mixed/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); +// DefaultNestedWithHeaderClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_DefaultNestedWithHeaderClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-header/with-query", + method: "get", + request: { + query: { + format: "text", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-header/get-standalone", + method: "get", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-header/delete-standalone", + method: "delete", + request: { + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); -// Mock responses for DefaultNestedWithPathClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedWithPathClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-blob/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-blob/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "test-blob", - size: 42, - contentType: "text/plain", - createdOn: "2025-04-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-blob", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); +// DefaultNestedWithMultipleClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_DefaultNestedWithMultipleClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-multiple/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-multiple/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-multiple/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); -// Mock responses for DefaultNestedWithQueryClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_DefaultNestedWithQueryClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/with-query", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/get-standalone", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 200, - body: json({ - name: "test-blob", - size: 42, - contentType: "text/plain", - createdOn: "2025-04-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/delete-resource", - method: "delete", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); +// DefaultNestedWithMixedClient scenario +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_DefaultNestedWithMixedClient = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-mixed/with-query", + method: "get", + request: { + query: { + format: "text", + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-mixed/get-standalone", + method: "get", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/nested-default-default-mixed/delete-standalone", + method: "delete", + request: { + query: { + region: "us-west", + }, + headers: { + name: "test-name-value", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp index d8298923f2..cd156e4ce5 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/client.tsp @@ -57,8 +57,8 @@ namespace IndividuallyClient { Expected client usage: ```ts - // via IndividuallyClient (individually initialization) - const client = new IndividuallyClient.getIndividuallyNestedWithPathClient({ + // directly (individually initialized) + const client = new IndividuallyNestedWithPathClient({ resourceName: "test-resource" }); @@ -93,8 +93,8 @@ namespace IndividuallyClient { Expected client usage: ```ts - // via IndividuallyClient (individually initialization) - const client = new IndividuallyClient.getIndividuallyNestedWithQueryClient({ + // directly (individually initialized) + const client = new IndividuallyNestedWithQueryClient({ blobName: "test-blob" }); @@ -129,8 +129,8 @@ namespace IndividuallyClient { Expected client usage: ```ts - // via IndividuallyClient (individually initialization) - const client = new IndividuallyClient.getIndividuallyNestedWithHeaderClient({ + // directly (individually initialized) + const client = new IndividuallyNestedWithHeaderClient({ name: "test-name-value" }); @@ -166,8 +166,8 @@ namespace IndividuallyClient { Expected client usage: ```ts - // via IndividuallyClient (individually initialization) - const client = new IndividuallyClient.getIndividuallyNestedWithMultipleClient({ + // directly (individually initialized) + const client = new IndividuallyNestedWithMultipleClient({ name: "test-name-value", region: "us-west" }); @@ -206,8 +206,8 @@ namespace IndividuallyClient { Expected client usage: ```ts - // via IndividuallyClient (individually initialization) - const client = new IndividuallyClient.getIndividuallyNestedWithMixedClient({ + // directly (individually initialized) + const client = new IndividuallyNestedWithMixedClient({ name: "test-name-value" }); @@ -230,122 +230,3 @@ namespace IndividuallyClient { deleteStandalone is Service.NestedDefaultIndividuallyMixed.deleteStandalone; } } - -// Additional standalone clients for multi-client architecture -// Scenario: Individually path parameter client -@scenarioDoc(""" - Standalone client for testing individually initialization with path parameter. - - Parameters elevated to client level: - - blobName: "sample-blob" (path parameter) - - Expected client usage: - ```ts - const client = new IndividuallyPathParamClient({ - blobName: "sample-blob" - }); - - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) -@scenario -@global.Azure.ClientGenerator.Core.client({ - name: "IndividuallyPathParamClient", - service: Service, -}) -@global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: PathParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, -}) -@route("/individually-path") -interface IndividuallyPathParam { - @route("/{blobName}/with-query") - @get - withQuery(@path blobName: string, @query format?: string): void; - - @route("/{blobName}/get-standalone") - @get - getStandalone(@path blobName: string): Service.BlobProperties; - - @route("/{blobName}") - @delete - deleteStandalone(@path blobName: string): void; -} - -// Scenario: Individually header parameter client -@scenarioDoc(""" - Standalone client for testing individually initialization with header parameter. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - Expected client usage: - ```ts - const client = new IndividuallyHeaderParamClient({ - name: "test-name-value" - }); - - client.withQuery(id: "test-id"); - client.withBody({ name: "test-name" }); - ``` - """) -@scenario -@global.Azure.ClientGenerator.Core.client({ - name: "IndividuallyHeaderParamClient", - service: Service, -}) -@global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: HeaderParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, -}) -@route("/individually-header") -interface IndividuallyHeaderParam { - @route("/with-query") - @get - withQuery(@header name: string, @query id?: string): void; - - @route("/with-body") - @post - withBody(@header name: string, @body input: Service.Input): void; -} - -// Scenario: Individually multiple parameters client -@scenarioDoc(""" - Standalone client for testing individually initialization with multiple parameters. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - region: "us-west" (query parameter) - - Expected client usage: - ```ts - const client = new IndividuallyMultipleParamsClient({ - name: "test-name-value", - region: "us-west" - }); - - client.withQuery(id: "test-id"); - client.withBody({ name: "test-name" }); - ``` - """) -@scenario -@global.Azure.ClientGenerator.Core.client({ - name: "IndividuallyMultipleParamsClient", - service: Service, -}) -@global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MultipleParamsClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, -}) -@route("/individually-multiple") -interface IndividuallyMultipleParams { - @route("/with-query") - @get - withQuery(@header name: string, @query region: string, @query id?: string): void; - - @route("/with-body") - @post - withBody(@header name: string, @query region: string, @body input: Service.Input): void; -} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts index 00e8fd0b45..89f0b854f1 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individually/mockapi.ts @@ -3,7 +3,7 @@ import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; export const Scenarios: Record = {}; // Mock responses for IndividuallyNestedWithPathClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithPathClient = +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_IndividuallyNestedWithPathClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/with-query", @@ -45,7 +45,7 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind ]); // Mock responses for IndividuallyNestedWithQueryClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithQueryClient = +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_IndividuallyNestedWithQueryClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/with-query", @@ -95,7 +95,7 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind ]); // Mock responses for IndividuallyNestedWithHeaderClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithHeaderClient = +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_IndividuallyNestedWithHeaderClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/with-query", @@ -142,7 +142,7 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind ]); // Mock responses for IndividuallyNestedWithMultipleClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithMultipleClient = +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_IndividuallyNestedWithMultipleClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/with-query", @@ -196,7 +196,7 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind ]); // Mock responses for IndividuallyNestedWithMixedClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_IndividuallyNestedWithMixedClient = +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_IndividuallyNestedWithMixedClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/with-query", @@ -249,125 +249,6 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind }, ]); -// Mock responses for IndividuallyPathParam scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyPathParam = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/individually-path/sample-blob/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-path/sample-blob/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "sample-blob", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T00:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-path/sample-blob", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// Mock responses for IndividuallyHeaderParam scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyHeaderParam = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/individually-header/with-query", - method: "get", - request: { - query: { - id: "test-id", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-header/with-body", - method: "post", - request: { - body: json({ - name: "test-name", - }), - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// Mock responses for IndividuallyMultipleParams scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyMultipleParams = passOnSuccess( - [ - { - uri: "/azure/client-generator-core/client-initialization/individually-multiple/with-query", - method: "get", - request: { - query: { - region: "us-west", - id: "test-id", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-multiple/with-body", - method: "post", - request: { - body: json({ - name: "test-name", - }), - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ], -); - // Additional mock responses for IndividuallyClient scenarios Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyClient_IndividuallyNestedWithPathClient = passOnSuccess([ diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp index f7d3b2dceb..d7c212bd9b 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/client.tsp @@ -58,12 +58,12 @@ namespace IndividuallyParentClient { Expected client usage: ```ts // via IndividuallyParentClient (individually | parent initialization) - const client = new IndividuallyParentClient.getDefaultNestedWithPathClient({ + const client = new IndividuallyParentClient.getIndividuallyParentNestedWithPathClient({ resourceName: "test-resource" }); // directly (individually initialized) - const client = new DefaultNestedWithPathClient({ + const client = new IndividuallyParentNestedWithPathClient({ resourceName: "test-resource" }); @@ -99,12 +99,12 @@ namespace IndividuallyParentClient { Expected client usage: ```ts // via IndividuallyParentClient (individually | parent initialization) - const client = new IndividuallyParentClient.getDefaultNestedWithQueryClient({ + const client = new IndividuallyParentClient.getIndividuallyParentNestedWithQueryClient({ blobName: "test-blob" }); // directly (individually initialized) - const client = new DefaultNestedWithQueryClient({ + const client = new IndividuallyParentNestedWithQueryClient({ blobName: "test-blob" }); @@ -140,12 +140,12 @@ namespace IndividuallyParentClient { Expected client usage: ```ts // via IndividuallyParentClient (individually | parent initialization) - const client = new IndividuallyParentClient.getDefaultNestedWithHeaderClient({ + const client = new IndividuallyParentClient.getIndividuallyParentNestedWithHeaderClient({ name: "test-name-value" }); // directly (individually initialized) - const client = new DefaultNestedWithHeaderClient({ + const client = new IndividuallyParentNestedWithHeaderClient({ name: "test-name-value" }); @@ -182,13 +182,13 @@ namespace IndividuallyParentClient { Expected client usage: ```ts // via IndividuallyParentClient (individually | parent initialization) - const client = new IndividuallyParentClient.getDefaultNestedWithMultipleClient({ + const client = new IndividuallyParentClient.getIndividuallyParentNestedWithMultipleClient({ name: "test-name-value", region: "us-west" }); // directly (individually initialized) - const client = new DefaultNestedWithMultipleClient({ + const client = new IndividuallyParentNestedWithMultipleClient({ name: "test-name-value", region: "us-west" }); @@ -228,12 +228,12 @@ namespace IndividuallyParentClient { Expected client usage: ```ts // via IndividuallyParentClient (individually | parent initialization) - const client = new IndividuallyParentClient.getDefaultNestedWithMixedClient({ + const client = new IndividuallyParentClient.getIndividuallyParentNestedWithMixedClient({ name: "test-name-value" }); // directly (individually initialized) - const client = new DefaultNestedWithMixedClient({ + const client = new IndividuallyParentNestedWithMixedClient({ name: "test-name-value" }); @@ -256,122 +256,3 @@ namespace IndividuallyParentClient { deleteStandalone is Service.NestedDefaultIndividuallyParentMixed.deleteStandalone; } } - -// Additional standalone clients for multi-client architecture -// Scenario: IndividuallyParent path parameter client -@scenarioDoc(""" - Standalone client for testing individually | parent initialization with path parameter. - - Parameters elevated to client level: - - blobName: "sample-blob" (path parameter) - - Expected client usage: - ```ts - const client = new IndividuallyParentPathParamClient({ - blobName: "sample-blob" - }); - - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) -@scenario -@global.Azure.ClientGenerator.Core.client({ - name: "IndividuallyParentPathParamClient", - service: Service, -}) -@global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: PathParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, -}) -@route("/individually-parent-path") -interface IndividuallyParentPathParam { - @route("/{blobName}/with-query") - @get - withQuery(@path blobName: string, @query format?: string): void; - - @route("/{blobName}/get-standalone") - @get - getStandalone(@path blobName: string): Service.BlobProperties; - - @route("/{blobName}") - @delete - deleteStandalone(@path blobName: string): void; -} - -// Scenario: IndividuallyParent header parameter client -@scenarioDoc(""" - Standalone client for testing individually | parent initialization with header parameter. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - Expected client usage: - ```ts - const client = new IndividuallyParentHeaderParamClient({ - name: "test-name-value" - }); - - client.withQuery(id: "test-id"); - client.withBody({ name: "test-name" }); - ``` - """) -@scenario -@global.Azure.ClientGenerator.Core.client({ - name: "IndividuallyParentHeaderParamClient", - service: Service, -}) -@global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: HeaderParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, -}) -@route("/individually-parent-header") -interface IndividuallyParentHeaderParam { - @route("/with-query") - @get - withQuery(@header name: string, @query id?: string): void; - - @route("/with-body") - @post - withBody(@header name: string, @body input: Service.Input): void; -} - -// Scenario: IndividuallyParent multiple parameters client -@scenarioDoc(""" - Standalone client for testing individually | parent initialization with multiple parameters. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - region: "us-west" (query parameter) - - Expected client usage: - ```ts - const client = new IndividuallyParentMultipleParamsClient({ - name: "test-name-value", - region: "us-west" - }); - - client.withQuery(id: "test-id"); - client.withBody({ name: "test-name" }); - ``` - """) -@scenario -@global.Azure.ClientGenerator.Core.client({ - name: "IndividuallyParentMultipleParamsClient", - service: Service, -}) -@global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MultipleParamsClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually | global.Azure.ClientGenerator.Core.InitializedBy.parent, -}) -@route("/individually-parent-multiple") -interface IndividuallyParentMultipleParams { - @route("/with-query") - @get - withQuery(@header name: string, @query region: string, @query id?: string): void; - - @route("/with-body") - @post - withBody(@header name: string, @query region: string, @body input: Service.Input): void; -} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts index a937860d5d..0adbcdecab 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/individuallyParent/mockapi.ts @@ -249,126 +249,6 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Ind }, ]); -// Mock responses for IndividuallyParentPathParam scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentPathParam = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "sample-blob", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T00:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-path/sample-blob", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -// Mock responses for IndividuallyParentHeaderParam scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentHeaderParam = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-header/with-query", - method: "get", - request: { - query: { - id: "test-id", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-header/with-body", - method: "post", - request: { - body: json({ - name: "test-name", - }), - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -// Mock responses for IndividuallyParentMultipleParams scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentMultipleParams = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-multiple/with-query", - method: "get", - request: { - query: { - region: "us-west", - id: "test-id", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/individually-parent-multiple/with-body", - method: "post", - request: { - body: json({ - name: "test-name", - }), - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - // Additional mock responses for IndividuallyParentClient scenarios Scenarios.Azure_ClientGeneratorCore_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithPathClient = passOnSuccess([ diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp index 43991ec0d4..0b8a99449e 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/client.tsp @@ -58,7 +58,7 @@ namespace ParentClient { Expected client usage: ```ts // via ParentClient (parent initialization) - const client = new ParentClient.getDefaultNestedWithPathClient({ + const client = new ParentClient.getParentNestedWithPathClient({ resourceName: "test-resource" }); @@ -94,7 +94,7 @@ namespace ParentClient { Expected client usage: ```ts // via ParentClient (parent initialization) - const client = new ParentClient.getDefaultNestedWithQueryClient({ + const client = new ParentClient.getParentNestedWithQueryClient({ blobName: "test-blob" }); @@ -130,7 +130,7 @@ namespace ParentClient { Expected client usage: ```ts // via ParentClient (parent initialization) - const client = new ParentClient.getDefaultNestedWithHeaderClient({ + const client = new ParentClient.getParentNestedWithHeaderClient({ name: "test-name-value" }); @@ -167,7 +167,7 @@ namespace ParentClient { Expected client usage: ```ts // via ParentClient (parent initialization) - const client = new ParentClient.getDefaultNestedWithMultipleClient({ + const client = new ParentClient.getParentNestedWithMultipleClient({ name: "test-name-value", region: "us-west" }); @@ -206,8 +206,8 @@ namespace ParentClient { Expected client usage: ```ts - // via DefaultParentClient (parent initialization) - const client = new DefaultParentClient.getDefaultNestedWithMixedClient({ + // via ParentClient (parent initialization) + const client = new ParentClient.getParentNestedWithMixedClient({ name: "test-name-value" }); @@ -230,122 +230,3 @@ namespace ParentClient { deleteStandalone is Service.NestedDefaultParentMixed.deleteStandalone; } } - -// Additional standalone clients for multi-client architecture -// Scenario: Parent path parameter client -@scenarioDoc(""" - Standalone client for testing parent initialization with path parameter. - - Parameters elevated to client level: - - blobName: "sample-blob" (path parameter) - - Expected client usage: - ```ts - const client = new ParentPathParamClient({ - blobName: "sample-blob" - }); - - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) -@scenario -@global.Azure.ClientGenerator.Core.client({ - name: "ParentPathParamClient", - service: Service, -}) -@global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: PathParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, -}) -@route("/parent-path") -interface ParentPathParam { - @route("/{blobName}/with-query") - @get - withQuery(@path blobName: string, @query format?: string): void; - - @route("/{blobName}/get-standalone") - @get - getStandalone(@path blobName: string): Service.BlobProperties; - - @route("/{blobName}") - @delete - deleteStandalone(@path blobName: string): void; -} - -// Scenario: Parent header parameter client -@scenarioDoc(""" - Standalone client for testing parent initialization with header parameter. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - Expected client usage: - ```ts - const client = new ParentHeaderParamClient({ - name: "test-name-value" - }); - - client.withQuery(id: "test-id"); - client.withBody({ name: "test-name" }); - ``` - """) -@scenario -@global.Azure.ClientGenerator.Core.client({ - name: "ParentHeaderParamClient", - service: Service, -}) -@global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: HeaderParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, -}) -@route("/parent-header") -interface ParentHeaderParam { - @route("/with-query") - @get - withQuery(@header name: string, @query id?: string): void; - - @route("/with-body") - @post - withBody(@header name: string, @body input: Service.Input): void; -} - -// Scenario: Parent multiple parameters client -@scenarioDoc(""" - Standalone client for testing parent initialization with multiple parameters. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - region: "us-west" (query parameter) - - Expected client usage: - ```ts - const client = new ParentMultipleParamsClient({ - name: "test-name-value", - region: "us-west" - }); - - client.withQuery(id: "test-id"); - client.withBody({ name: "test-name" }); - ``` - """) -@scenario -@global.Azure.ClientGenerator.Core.client({ - name: "ParentMultipleParamsClient", - service: Service, -}) -@global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MultipleParamsClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, -}) -@route("/parent-multiple") -interface ParentMultipleParams { - @route("/with-query") - @get - withQuery(@header name: string, @query region: string, @query id?: string): void; - - @route("/with-body") - @post - withBody(@header name: string, @query region: string, @body input: Service.Input): void; -} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts index 2b947906f7..9be89c6d22 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/parent/mockapi.ts @@ -3,7 +3,7 @@ import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; export const Scenarios: Record = {}; // Mock responses for ParentNestedWithPathClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithPathClient = +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_ParentNestedWithPathClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/with-query", @@ -45,7 +45,7 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Par ]); // Mock responses for ParentNestedWithQueryClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithQueryClient = +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_ParentNestedWithQueryClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/with-query", @@ -95,7 +95,7 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Par ]); // Mock responses for ParentNestedWithHeaderClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithHeaderClient = +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_ParentNestedWithHeaderClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/with-query", @@ -142,7 +142,7 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Par ]); // Mock responses for ParentNestedWithMultipleClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithMultipleClient = +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_ParentNestedWithMultipleClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/with-query", @@ -196,7 +196,7 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Par ]); // Mock responses for ParentNestedWithMixedClient scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_ParentNestedWithMixedClient = +Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultClient_ParentNestedWithMixedClient = passOnSuccess([ { uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/with-query", @@ -249,123 +249,6 @@ Scenarios.Azure_ClientGeneratorCore_ClientInitialization_DefaultParentClient_Par }, ]); -// Mock responses for ParentPathParam scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentPathParam = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent-path/sample-blob/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent-path/sample-blob/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "sample-blob", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T00:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent-path/sample-blob", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// Mock responses for ParentHeaderParam scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentHeaderParam = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent-header/with-query", - method: "get", - request: { - query: { - id: "test-id", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent-header/with-body", - method: "post", - request: { - body: json({ - name: "test-name", - }), - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// Mock responses for ParentMultipleParams scenario -Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentMultipleParams = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent-multiple/with-query", - method: "get", - request: { - query: { - region: "us-west", - id: "test-id", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent-multiple/with-body", - method: "post", - request: { - body: json({ - name: "test-name", - }), - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - // Additional mock responses for ParentClient scenarios Scenarios.Azure_ClientGeneratorCore_ClientInitialization_ParentClient_ParentNestedWithPathClient = passOnSuccess([ From 8b03323b68078c16678e5cd3fd75bb9c8552fca2 Mon Sep 17 00:00:00 2001 From: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> Date: Mon, 15 Dec 2025 10:00:42 +0800 Subject: [PATCH 12/18] update --- .../client-initialization/default/client.tsp | 174 +------- .../client-initialization/default/main.tsp | 78 +--- .../client-initialization/default/mockapi.ts | 315 +++------------ .../individually/client.tsp | 374 +++++++++--------- .../individually/main.tsp | 2 +- .../individually/mockapi.ts | 60 +-- .../individuallyParent/client.tsp | 13 +- .../individuallyParent/main.tsp | 2 +- .../individuallyParent/mockapi.ts | 60 +-- .../client-initialization/parent/client.tsp | 33 +- .../client-initialization/parent/main.tsp | 2 +- .../client-initialization/parent/mockapi.ts | 60 +-- 12 files changed, 402 insertions(+), 771 deletions(-) diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/client.tsp index a38c822fcd..3860e85110 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/client.tsp @@ -6,10 +6,10 @@ import "@typespec/http"; using Spector; using Http; -@route("/azure/client-generator-core/client-initialization") -namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization; +@route("/azure/client-generator-core/client-initialization/default") +namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization.Default; -@@global.Azure.ClientGenerator.Core.clientNamespace(_Specs_.Azure.ClientGenerator.Core.ClientInitialization, +@@global.Azure.ClientGenerator.Core.clientNamespace(_Specs_.Azure.ClientGenerator.Core.ClientInitialization.Default, "azure.clientgenerator.core.clientinitialization", "java" ); @@ -205,47 +205,7 @@ interface ParamAlias { withOriginalName is Service.ParamAlias.withOriginalName; } -@global.Azure.ClientGenerator.Core.client({ - name: "DefaultClient", - service: Service, -}) -namespace DefaultClient { - // Scenario 6: Default -> Default initialization with path parameter - @scenarioDoc(""" - Client for testing default -> default nested initialization. - - The parent client uses default initialization behavior, - and the child client uses default initialization behavior. - - Parameters elevated to client level: - - resourceName: "test-resource" (path parameter) - - Expected client usage: - ```ts - // via DefaultClient (default initialization) - const client = new DefaultClient.getDefaultNestedWithPathClient({ - resourceName: "test-resource" - }); - - // Operations don't need resourceName parameter - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: PathParamClientOptions, - }) - @route("/nested-default-default") - interface DefaultNestedWithPathClient { - withQuery is Service.NestedDefaultDefaultWithPath.withQuery; - getStandalone is Service.NestedDefaultDefaultWithPath.getStandalone; - deleteStandalone is Service.NestedDefaultDefaultWithPath.deleteStandalone; - } - - // Scenario 7: Default -> Default initialization with query parameter +// Scenario 6: Query parameter moved to client level @scenarioDoc(""" Client for testing default -> default nested initialization. @@ -269,124 +229,16 @@ namespace DefaultClient { ``` """) @scenario - @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.client({ + name: "QueryParamClient", + service: Service, +}) @global.Azure.ClientGenerator.Core.clientInitialization({ parameters: DefaultQueryParamClientOptions, }) - @route("/nested-default-default-query") - interface DefaultNestedWithQueryClient { - withQuery is Service.NestedDefaultDefaultWithQuery.withQuery; - getStandalone is Service.NestedDefaultDefaultWithQuery.getStandalone; - deleteStandalone is Service.NestedDefaultDefaultWithQuery.deleteStandalone; + @route("/query") + interface QueryParam { + withQuery is Service.QueryParam.withQuery; + getStandalone is Service.QueryParam.getStandalone; + deleteStandalone is Service.QueryParam.deleteStandalone; } - - // Scenario 8: Default -> Default initialization with Header parameter - @scenarioDoc(""" - Client for testing default -> default header parameter nested initialization. - - The parent client uses default initialization behavior, - and the child client moves header parameters to client level and uses default initialization. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - Expected client usage: - ```ts - // via DefaultClient (default initialization) - const client = new DefaultClient.getDefaultNestedWithHeaderClient({ - name: "test-name-value" - }); - - // Operations don't need name header parameter - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: HeaderParamClientOptions, - }) - @route("/nested-default-default-header") - interface DefaultNestedWithHeaderClient { - withQuery is Service.NestedDefaultDefaultHeader.withQuery; - getStandalone is Service.NestedDefaultDefaultHeader.getStandalone; - deleteStandalone is Service.NestedDefaultDefaultHeader.deleteStandalone; - } - - // Scenario 15: Default -> Default Multiple parameters client - @scenarioDoc(""" - Client for testing default -> default multiple parameters nested initialization. - - The parent client uses default initialization behavior, - and the child client moves multiple parameters (header and query) to client level with default initialization. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - region: "us-west" (query parameter) - - Expected client usage: - ```ts - // via DefaultClient (default initialization) - const client = new DefaultClient.getDefaultNestedWithMultipleClient({ - name: "test-name-value", - region: "us-west" - }); - - // Operations don't need name or region parameters - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MultipleParamsClientOptions, - }) - @route("/nested-default-default-multiple") - interface DefaultNestedWithMultipleClient { - withQuery is Service.NestedDefaultDefaultMultiple.withQuery; - getStandalone is Service.NestedDefaultDefaultMultiple.getStandalone; - deleteStandalone is Service.NestedDefaultDefaultMultiple.deleteStandalone; - } - - // Scenario 16: Default -> Default Mixed parameters client - @scenarioDoc(""" - Client for testing default -> default mixed parameters nested initialization. - - The parent client uses default initialization behavior, - and the child client moves some parameters to client level while keeping others at method level with default initialization. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - Parameters remaining at method level: - - region: "us-west" (query parameter) - - Expected client usage: - ```ts - // via DefaultClient (default initialization) - const client = new DefaultClient.getDefaultNestedWithMixedClient({ - name: "test-name-value" - }); - - // Operations still need region parameter - client.withQuery(region: "us-west", format: "text"); - client.getStandalone(region: "us-west"); - client.deleteStandalone(region: "us-west"); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MixedParamsClientOptions, - }) - @route("/nested-default-default-mixed") - interface DefaultNestedWithMixedClient { - withQuery is Service.NestedDefaultDefaultMixed.withQuery; - getStandalone is Service.NestedDefaultDefaultMixed.getStandalone; - deleteStandalone is Service.NestedDefaultDefaultMixed.deleteStandalone; - } -} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/main.tsp index 07d6ce2677..3f48a482ff 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/main.tsp @@ -7,7 +7,7 @@ using Spector; using Azure.ClientGenerator.Core; @doc("Test for client initialization decorator - moving parameters from method to client level") -@scenarioService("/azure/client-generator-core/client-initialization") +@scenarioService("/azure/client-generator-core/client-initialization/default") namespace Service; // Common parameter types and models @@ -120,27 +120,10 @@ model BlobProperties { createdOn: utcDateTime; } -// Nested layer services for first-layer default (no decorator) -@doc("Operations for nested default -> default") -@route("/nested-default-default") -interface NestedDefaultDefaultWithPath { - @route("/{blobName}/with-query") - @get - withQuery(@path blobName: string, @query format?: string): void; - - @route("/{blobName}/get-standalone") - @get - getStandalone(@path blobName: string): BlobProperties; - - @route("/{blobName}") - @delete - deleteStandalone(@path blobName: string): void; -} - -// Nested layer services for first-layer default (no decorator) - Query variant -@doc("Operations for nested default -> default with query parameters") -@route("/nested-default-default-query") -interface NestedDefaultDefaultWithQuery { +// Scenario 6: Query parameter moved to client level +@doc("Blob operations with query parameter that should be moved to client level") +@route("/query") +interface QueryParam { @route("/with-query") @get withQuery(...DefaultQueryParam): void; @@ -153,54 +136,3 @@ interface NestedDefaultDefaultWithQuery { @delete deleteStandalone(...DefaultQueryParam): void; } - -// Nested layer services for default -> header parameters -@doc("Operations for nested default -> default header parameters") -@route("/nested-default-default-header") -interface NestedDefaultDefaultHeader { - @route("/with-query") - @get - withQuery(...NameHeaderParam, @query format?: string): void; - - @route("/get-standalone") - @get - getStandalone(...NameHeaderParam): void; - - @route("/delete-standalone") - @delete - deleteStandalone(...NameHeaderParam): void; -} - -// Nested layer services for default -> multiple parameters -@doc("Operations for nested default -> default multiple parameters") -@route("/nested-default-default-multiple") -interface NestedDefaultDefaultMultiple { - @route("/with-query") - @get - withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; - - @route("/get-standalone") - @get - getStandalone(...NameHeaderParam, ...RegionQueryParam): void; - - @route("/delete-standalone") - @delete - deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; -} - -// Nested layer services for default -> mixed parameters -@doc("Operations for nested default -> default mixed parameters") -@route("/nested-default-default-mixed") -interface NestedDefaultDefaultMixed { - @route("/with-query") - @get - withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; - - @route("/get-standalone") - @get - getStandalone(...NameHeaderParam, ...RegionQueryParam): void; - - @route("/delete-standalone") - @delete - deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; -} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/mockapi.ts index ccd2e98f4f..6442af407d 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/mockapi.ts @@ -1,3 +1,4 @@ + import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; export const Scenarios: Record = {}; @@ -5,7 +6,7 @@ export const Scenarios: Record = {}; // Mock responses for HeaderParam scenario Scenarios.Azure_ClientGenerator_Core_ClientInitialization_HeaderParam = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/header-param/with-query", + uri: "/azure/client-generator-core/client-initialization/default/header-param/with-query", method: "get", request: { query: { @@ -21,7 +22,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_HeaderParam = passOnSu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/header-param/with-body", + uri: "/azure/client-generator-core/client-initialization/default/header-param/with-body", method: "post", request: { headers: { @@ -41,7 +42,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_HeaderParam = passOnSu // Mock responses for MultipleParams scenario Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MultipleParams = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/multiple-params/with-query", + uri: "/azure/client-generator-core/client-initialization/default/multiple-params/with-query", method: "get", request: { query: { @@ -58,7 +59,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MultipleParams = passO kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/multiple-params/with-body", + uri: "/azure/client-generator-core/client-initialization/default/multiple-params/with-body", method: "post", request: { query: { @@ -81,7 +82,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MultipleParams = passO // Mock responses for MixedParams scenario Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MixedParams = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/mixed-params/with-query", + uri: "/azure/client-generator-core/client-initialization/default/mixed-params/with-query", method: "get", request: { query: { @@ -98,7 +99,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MixedParams = passOnSu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/mixed-params/with-body", + uri: "/azure/client-generator-core/client-initialization/default/mixed-params/with-body", method: "post", request: { query: { @@ -121,7 +122,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_MixedParams = passOnSu // Mock responses for PathParam scenario Scenarios.Azure_ClientGenerator_Core_ClientInitialization_PathParam = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/path/sample-blob/with-query", + uri: "/azure/client-generator-core/client-initialization/default/path/sample-blob/with-query", method: "get", request: { query: { @@ -134,7 +135,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_PathParam = passOnSucc kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/path/sample-blob/get-standalone", + uri: "/azure/client-generator-core/client-initialization/default/path/sample-blob/get-standalone", method: "get", request: {}, response: { @@ -149,7 +150,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_PathParam = passOnSucc kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/path/sample-blob", + uri: "/azure/client-generator-core/client-initialization/default/path/sample-blob", method: "delete", request: {}, response: { @@ -162,16 +163,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_PathParam = passOnSucc // Mock responses for ParamAlias scenario Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParamAlias = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/param-alias/sample-blob/with-aliased-name", - method: "get", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/param-alias/sample-blob/with-original-name", + uri: "/azure/client-generator-core/client-initialization/default/param-alias/sample-blob/with-aliased-name", method: "get", request: {}, response: { @@ -179,43 +171,9 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParamAlias = passOnSuc }, kind: "MockApiDefinition", }, -]); - -// Mock responses for DefaultClient nested scenarios - -// DefaultNestedWithPathClient scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_DefaultNestedWithPathClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-resource/with-query", + uri: "/azure/client-generator-core/client-initialization/default/param-alias/sample-blob/with-original-name", method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-resource/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "test-resource", - size: 42, - contentType: "text/plain", - createdOn: "2025-04-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default/test-resource", - method: "delete", request: {}, response: { status: 204, @@ -224,203 +182,52 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_DefaultN }, ]); -// DefaultNestedWithQueryClient scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_DefaultNestedWithQueryClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/with-query", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/get-standalone", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 200, - body: json({ - name: "test-blob", - size: 42, - contentType: "text/plain", - createdOn: "2025-04-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-query/delete-resource", - method: "delete", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// DefaultNestedWithHeaderClient scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_DefaultNestedWithHeaderClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-header/with-query", - method: "get", - request: { - query: { - format: "text", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-header/get-standalone", - method: "get", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-header/delete-standalone", - method: "delete", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// DefaultNestedWithMultipleClient scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_DefaultNestedWithMultipleClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-multiple/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-multiple/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-multiple/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); - -// DefaultNestedWithMixedClient scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_DefaultNestedWithMixedClient = passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-mixed/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-mixed/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/nested-default-default-mixed/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, -]); +// Mock responses for QueryParam scenario +Scenarios.Azure_ClientGenerator_Core_ClientInitialization_QueryParam = + passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/default/query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/default/query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 42, + contentType: "text/plain", + createdOn: "2025-04-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/default/query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", + }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + ]); diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/client.tsp index 2cfd2db8c3..d24c619b5d 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/client.tsp @@ -6,10 +6,17 @@ import "@typespec/http"; using Spector; using Http; -@route("/azure/client-generator-core/client-initialization") -namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization; +@route("/azure/client-generator-core/client-initialization/individually") +namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization.IndividuallyClient; -using Service; +@@global.Azure.ClientGenerator.Core.clientNamespace(_Specs_.Azure.ClientGenerator.Core.ClientInitialization.IndividuallyClient, + "azure.clientgenerator.core.clientinitialization", + "java" +); +@@global.Azure.ClientGenerator.Core.clientNamespace(Service, + "azure.clientgenerator.core.clientinitialization", + "java" +); // Reusable option types for client initialization model PathParamClientOptions { @@ -44,189 +51,188 @@ model MixedParamsClientOptions { name: "IndividuallyClient", service: Service, }) -namespace IndividuallyClient { - // Scenario 6: Default -> Individually initialization with path parameter - @scenarioDoc(""" - Client for testing default -> individually nested initialization. - - The parent client uses default initialization behavior, - and the child client uses individually initialization behavior. - - Parameters elevated to client level: - - resourceName: "test-resource" (path parameter) - - Expected client usage: - ```ts - // directly (individually initialized) - const client = new IndividuallyNestedWithPathClient({ - resourceName: "test-resource" - }); - - // Operations don't need resourceName parameter - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: PathParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, - }) - @route("/nested-default-individually") - interface IndividuallyNestedWithPathClient { - withQuery is Service.NestedDefaultIndividuallyWithPath.withQuery; - getStandalone is Service.NestedDefaultIndividuallyWithPath.getStandalone; - deleteStandalone is Service.NestedDefaultIndividuallyWithPath.deleteStandalone; - } - // Scenario 7: Default -> Individually initialization with query parameter - @scenarioDoc(""" - Client for testing default -> individually nested initialization. - - The parent client uses default initialization behavior, - and the child client uses individually initialization behavior. - - Parameters elevated to client level: - - blobName: "test-blob" (query parameter) - - Expected client usage: - ```ts - // directly (individually initialized) - const client = new IndividuallyNestedWithQueryClient({ - blobName: "test-blob" - }); - - // Operations don't need blobName parameter - client.withQuery(); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: DefaultQueryParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, - }) - @route("/nested-default-individually-query") - interface IndividuallyNestedWithQueryClient { - withQuery is Service.NestedDefaultIndividuallyWithQuery.withQuery; - getStandalone is Service.NestedDefaultIndividuallyWithQuery.getStandalone; - deleteStandalone is Service.NestedDefaultIndividuallyWithQuery.deleteStandalone; - } +// Scenario 6: Default -> Individually initialization with path parameter +@scenarioDoc(""" + Client for testing default -> individually nested initialization. + + The parent client uses default initialization behavior, + and the child client uses individually initialization behavior. + + Parameters elevated to client level: + - blobName: "test-resource" (path parameter) + + Expected client usage: + ```ts + // directly (individually initialized) + const client = new IndividuallyNestedWithPathClient({ + resourceName: "test-resource" + }); + + // Operations don't need resourceName parameter + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.operationGroup +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: PathParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, +}) +@route("/nested-default-individually") +interface IndividuallyNestedWithPathClient { + withQuery is Service.NestedDefaultIndividuallyWithPath.withQuery; + getStandalone is Service.NestedDefaultIndividuallyWithPath.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyWithPath.deleteStandalone; +} + +// Scenario 7: Default -> Individually initialization with query parameter +@scenarioDoc(""" + Client for testing default -> individually nested initialization. + + The parent client uses default initialization behavior, + and the child client uses individually initialization behavior. + + Parameters elevated to client level: + - blobName: "test-blob" (query parameter) + + Expected client usage: + ```ts + // directly (individually initialized) + const client = new IndividuallyNestedWithQueryClient({ + blobName: "test-blob" + }); + + // Operations don't need blobName parameter + client.withQuery(); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.operationGroup +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: DefaultQueryParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, +}) +@route("/nested-default-individually-query") +interface IndividuallyNestedWithQueryClient { + withQuery is Service.NestedDefaultIndividuallyWithQuery.withQuery; + getStandalone is Service.NestedDefaultIndividuallyWithQuery.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyWithQuery.deleteStandalone; +} - // Scenario 8: Default -> Individually initialization with Header parameter - @scenarioDoc(""" - Client for testing default -> individually header parameter nested initialization. - - The parent client uses default initialization behavior, - and the child client moves header parameters to client level and uses individually initialization. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - Expected client usage: - ```ts - // directly (individually initialized) - const client = new IndividuallyNestedWithHeaderClient({ - name: "test-name-value" - }); - - // Operations don't need name header parameter - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: HeaderParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, - }) - @route("/nested-default-individually-header") - interface IndividuallyNestedWithHeaderClient { - withQuery is Service.NestedDefaultIndividuallyHeader.withQuery; - getStandalone is Service.NestedDefaultIndividuallyHeader.getStandalone; - deleteStandalone is Service.NestedDefaultIndividuallyHeader.deleteStandalone; - } +// Scenario 8: Default -> Individually initialization with Header parameter +@scenarioDoc(""" + Client for testing default -> individually header parameter nested initialization. + + The parent client uses default initialization behavior, + and the child client moves header parameters to client level and uses individually initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Expected client usage: + ```ts + // directly (individually initialized) + const client = new IndividuallyNestedWithHeaderClient({ + name: "test-name-value" + }); + + // Operations don't need name header parameter + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.operationGroup +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: HeaderParamClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, +}) +@route("/nested-default-individually-header") +interface IndividuallyNestedWithHeaderClient { + withQuery is Service.NestedDefaultIndividuallyHeader.withQuery; + getStandalone is Service.NestedDefaultIndividuallyHeader.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyHeader.deleteStandalone; +} - // Scenario 15: Default -> Individually Multiple parameters client - @scenarioDoc(""" - Client for testing default -> individually multiple parameters nested initialization. - - The parent client uses default initialization behavior, - and the child client moves multiple parameters (header and query) to client level with individually initialization. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - region: "us-west" (query parameter) - - Expected client usage: - ```ts - // directly (individually initialized) - const client = new IndividuallyNestedWithMultipleClient({ - name: "test-name-value", - region: "us-west" - }); - - // Operations don't need name or region parameters - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MultipleParamsClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, - }) - @route("/nested-default-individually-multiple") - interface IndividuallyNestedWithMultipleClient { - withQuery is Service.NestedDefaultIndividuallyMultiple.withQuery; - getStandalone is Service.NestedDefaultIndividuallyMultiple.getStandalone; - deleteStandalone is Service.NestedDefaultIndividuallyMultiple.deleteStandalone; - } +// Scenario 15: Default -> Individually Multiple parameters client +@scenarioDoc(""" + Client for testing default -> individually multiple parameters nested initialization. + + The parent client uses default initialization behavior, + and the child client moves multiple parameters (header and query) to client level with individually initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + // directly (individually initialized) + const client = new IndividuallyNestedWithMultipleClient({ + name: "test-name-value", + region: "us-west" + }); + + // Operations don't need name or region parameters + client.withQuery(format: "text"); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.operationGroup +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MultipleParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, +}) +@route("/nested-default-individually-multiple") +interface IndividuallyNestedWithMultipleClient { + withQuery is Service.NestedDefaultIndividuallyMultiple.withQuery; + getStandalone is Service.NestedDefaultIndividuallyMultiple.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyMultiple.deleteStandalone; +} - // Scenario 16: Default -> Individually Mixed parameters client - @scenarioDoc(""" - Client for testing default -> individually mixed parameters nested initialization. - - The parent client uses default initialization behavior, - and the child client moves some parameters to client level while keeping others at method level with individually initialization. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - Parameters remaining at method level: - - region: "us-west" (query parameter) - - Expected client usage: - ```ts - // directly (individually initialized) - const client = new IndividuallyNestedWithMixedClient({ - name: "test-name-value" - }); - - // Operations still need region parameter - client.withQuery(region: "us-west", format: "text"); - client.getStandalone(region: "us-west"); - client.deleteStandalone(region: "us-west"); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MixedParamsClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, - }) - @route("/nested-default-individually-mixed") - interface IndividuallyNestedWithMixedClient { - withQuery is Service.NestedDefaultIndividuallyMixed.withQuery; - getStandalone is Service.NestedDefaultIndividuallyMixed.getStandalone; - deleteStandalone is Service.NestedDefaultIndividuallyMixed.deleteStandalone; - } +// Scenario 16: Default -> Individually Mixed parameters client +@scenarioDoc(""" + Client for testing default -> individually mixed parameters nested initialization. + + The parent client uses default initialization behavior, + and the child client moves some parameters to client level while keeping others at method level with individually initialization. + + Parameters elevated to client level: + - name: "test-name-value" (header parameter) + + Parameters remaining at method level: + - region: "us-west" (query parameter) + + Expected client usage: + ```ts + // directly (individually initialized) + const client = new IndividuallyNestedWithMixedClient({ + name: "test-name-value" + }); + + // Operations still need region parameter + client.withQuery(region: "us-west", format: "text"); + client.getStandalone(region: "us-west"); + client.deleteStandalone(region: "us-west"); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.operationGroup +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: MixedParamsClientOptions, + initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.individually, +}) +@route("/nested-default-individually-mixed") +interface IndividuallyNestedWithMixedClient { + withQuery is Service.NestedDefaultIndividuallyMixed.withQuery; + getStandalone is Service.NestedDefaultIndividuallyMixed.getStandalone; + deleteStandalone is Service.NestedDefaultIndividuallyMixed.deleteStandalone; } diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/main.tsp index 1f881e39e5..3c948ae2b8 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/main.tsp @@ -7,7 +7,7 @@ using Spector; using Azure.ClientGenerator.Core; @doc("Test for client initialization decorator - moving parameters from method to client level") -@scenarioService("/azure/client-generator-core/client-initialization") +@scenarioService("/azure/client-generator-core/client-initialization/individually") namespace Service; // Common parameter types and models diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/mockapi.ts index 99c359c983..552641d571 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individually/mockapi.ts @@ -6,7 +6,7 @@ export const Scenarios: Record = {}; Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_IndividuallyNestedWithPathClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/with-query", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually/test-resource/with-query", method: "get", request: { query: { @@ -19,7 +19,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually/test-resource/get-standalone", method: "get", request: {}, response: { @@ -34,7 +34,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually/test-resource", method: "delete", request: {}, response: { @@ -48,7 +48,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_IndividuallyNestedWithQueryClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/with-query", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-query/with-query", method: "get", request: { query: { @@ -61,7 +61,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-query/get-standalone", method: "get", request: { query: { @@ -80,7 +80,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/delete-resource", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-query/delete-resource", method: "delete", request: { query: { @@ -98,7 +98,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_IndividuallyNestedWithHeaderClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/with-query", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-header/with-query", method: "get", request: { query: { @@ -114,7 +114,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-header/get-standalone", method: "get", request: { headers: { @@ -127,7 +127,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-header/delete-standalone", method: "delete", request: { headers: { @@ -145,7 +145,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_IndividuallyNestedWithMultipleClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/with-query", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-multiple/with-query", method: "get", request: { query: { @@ -162,7 +162,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-multiple/get-standalone", method: "get", request: { query: { @@ -178,7 +178,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-multiple/delete-standalone", method: "delete", request: { query: { @@ -199,7 +199,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_IndividuallyNestedWithMixedClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/with-query", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-mixed/with-query", method: "get", request: { query: { @@ -216,7 +216,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-mixed/get-standalone", method: "get", request: { query: { @@ -232,7 +232,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-mixed/delete-standalone", method: "delete", request: { query: { @@ -253,7 +253,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_Individu Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_IndividuallyNestedWithPathClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/with-query", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually/test-resource/with-query", method: "get", request: { query: { @@ -266,7 +266,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually/test-resource/get-standalone", method: "get", request: {}, response: { @@ -281,7 +281,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually/test-resource", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually/test-resource", method: "delete", request: {}, response: { @@ -294,7 +294,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_IndividuallyNestedWithQueryClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/with-query", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-query/with-query", method: "get", request: { query: { @@ -307,7 +307,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-query/get-standalone", method: "get", request: { query: { @@ -326,7 +326,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-query/delete-resource", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-query/delete-resource", method: "delete", request: { query: { @@ -343,7 +343,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_IndividuallyNestedWithHeaderClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/with-query", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-header/with-query", method: "get", request: { query: { @@ -359,7 +359,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-header/get-standalone", method: "get", request: { headers: { @@ -372,7 +372,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-header/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-header/delete-standalone", method: "delete", request: { headers: { @@ -389,7 +389,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_IndividuallyNestedWithMultipleClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/with-query", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-multiple/with-query", method: "get", request: { query: { @@ -406,7 +406,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-multiple/get-standalone", method: "get", request: { query: { @@ -422,7 +422,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-multiple/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-multiple/delete-standalone", method: "delete", request: { query: { @@ -442,7 +442,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_IndividuallyNestedWithMixedClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/with-query", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-mixed/with-query", method: "get", request: { query: { @@ -459,7 +459,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-mixed/get-standalone", method: "get", request: { query: { @@ -475,7 +475,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyClient_Ind kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-mixed/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually/nested-default-individually-mixed/delete-standalone", method: "delete", request: { query: { diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/client.tsp index af7fca19e8..af5807304b 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/client.tsp @@ -6,10 +6,17 @@ import "@typespec/http"; using Spector; using Http; -@route("/azure/client-generator-core/client-initialization") -namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization; +@route("/azure/client-generator-core/client-initialization/individually-parent") +namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization.IndividuallyParent; -using Service; +@@global.Azure.ClientGenerator.Core.clientNamespace(_Specs_.Azure.ClientGenerator.Core.ClientInitialization.IndividuallyParent, + "azure.clientgenerator.core.clientinitialization", + "java" +); +@@global.Azure.ClientGenerator.Core.clientNamespace(Service, + "azure.clientgenerator.core.clientinitialization", + "java" +); // Reusable option types for client initialization model PathParamClientOptions { diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/main.tsp index 1f43806ed6..20d9360359 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/main.tsp @@ -7,7 +7,7 @@ using Spector; using Azure.ClientGenerator.Core; @doc("Test for client initialization decorator - moving parameters from method to client level") -@scenarioService("/azure/client-generator-core/client-initialization") +@scenarioService("/azure/client-generator-core/client-initialization/individually-parent") namespace Service; // Common parameter types and models diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/mockapi.ts index 10b76e6e1d..8fd5dc4507 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/individuallyParent/mockapi.ts @@ -6,7 +6,7 @@ export const Scenarios: Record = {}; Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithPathClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/with-query", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent/test-resource/with-query", method: "get", request: { query: { @@ -19,7 +19,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent/test-resource/get-standalone", method: "get", request: {}, response: { @@ -34,7 +34,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent/test-resource", method: "delete", request: {}, response: { @@ -48,7 +48,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithQueryClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/with-query", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-query/with-query", method: "get", request: { query: { @@ -61,7 +61,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-query/get-standalone", method: "get", request: { query: { @@ -80,7 +80,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/delete-resource", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-query/delete-resource", method: "delete", request: { query: { @@ -98,7 +98,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithHeaderClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/with-query", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-header/with-query", method: "get", request: { query: { @@ -114,7 +114,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-header/get-standalone", method: "get", request: { headers: { @@ -127,7 +127,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-header/delete-standalone", method: "delete", request: { headers: { @@ -145,7 +145,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMultipleClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/with-query", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-multiple/with-query", method: "get", request: { query: { @@ -162,7 +162,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-multiple/get-standalone", method: "get", request: { query: { @@ -178,7 +178,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-multiple/delete-standalone", method: "delete", request: { query: { @@ -199,7 +199,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_IndividuallyParentNestedWithMixedClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/with-query", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-mixed/with-query", method: "get", request: { query: { @@ -216,7 +216,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-mixed/get-standalone", method: "get", request: { query: { @@ -232,7 +232,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-mixed/delete-standalone", method: "delete", request: { query: { @@ -253,7 +253,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultParentClient_In Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithPathClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/with-query", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent/test-resource/with-query", method: "get", request: { query: { @@ -266,7 +266,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent/test-resource/get-standalone", method: "get", request: {}, response: { @@ -281,7 +281,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent/test-resource", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent/test-resource", method: "delete", request: {}, response: { @@ -294,7 +294,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithQueryClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/with-query", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-query/with-query", method: "get", request: { query: { @@ -307,7 +307,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-query/get-standalone", method: "get", request: { query: { @@ -326,7 +326,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-query/delete-resource", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-query/delete-resource", method: "delete", request: { query: { @@ -343,7 +343,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithHeaderClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/with-query", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-header/with-query", method: "get", request: { query: { @@ -359,7 +359,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-header/get-standalone", method: "get", request: { headers: { @@ -372,7 +372,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-header/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-header/delete-standalone", method: "delete", request: { headers: { @@ -389,7 +389,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithMultipleClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/with-query", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-multiple/with-query", method: "get", request: { query: { @@ -406,7 +406,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-multiple/get-standalone", method: "get", request: { query: { @@ -422,7 +422,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-multiple/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-multiple/delete-standalone", method: "delete", request: { query: { @@ -442,7 +442,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClient_IndividuallyParentNestedWithMixedClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/with-query", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-mixed/with-query", method: "get", request: { query: { @@ -459,7 +459,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/get-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-mixed/get-standalone", method: "get", request: { query: { @@ -475,7 +475,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_IndividuallyParentClie kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-individually-parent-mixed/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/individually-parent/nested-default-individually-parent-mixed/delete-standalone", method: "delete", request: { query: { diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/client.tsp index 6d5ef26326..246cb5a7c6 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/client.tsp @@ -6,10 +6,17 @@ import "@typespec/http"; using Spector; using Http; -@route("/azure/client-generator-core/client-initialization") -namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization; +@route("/azure/client-generator-core/client-initialization/parent") +namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization.Parent; -using Service; +@@global.Azure.ClientGenerator.Core.clientNamespace(_Specs_.Azure.ClientGenerator.Core.ClientInitialization.Parent, + "azure.clientgenerator.core.clientinitialization", + "java" +); +@@global.Azure.ClientGenerator.Core.clientNamespace(Service, + "azure.clientgenerator.core.clientinitialization", + "java" +); // Reusable option types for client initialization model PathParamClientOptions { @@ -70,6 +77,10 @@ namespace ParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.client({ + name: "ParentNestedWithPathClient", + service: Service, + }) @global.Azure.ClientGenerator.Core.clientInitialization({ parameters: PathParamClientOptions, initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, @@ -106,6 +117,10 @@ namespace ParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.client({ + name: "ParentNestedWithQueryClient", + service: Service, + }) @global.Azure.ClientGenerator.Core.clientInitialization({ parameters: DefaultQueryParamClientOptions, initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, @@ -142,6 +157,10 @@ namespace ParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.client({ + name: "ParentNestedWithHeaderClient", + service: Service, + }) @global.Azure.ClientGenerator.Core.clientInitialization({ parameters: HeaderParamClientOptions, initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, @@ -180,6 +199,10 @@ namespace ParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.client({ + name: "ParentNestedWithMultipleClient", + service: Service, + }) @global.Azure.ClientGenerator.Core.clientInitialization({ parameters: MultipleParamsClientOptions, initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, @@ -219,6 +242,10 @@ namespace ParentClient { """) @scenario @global.Azure.ClientGenerator.Core.operationGroup + @global.Azure.ClientGenerator.Core.client({ + name: "ParentNestedWithMixedClient", + service: Service, + }) @global.Azure.ClientGenerator.Core.clientInitialization({ parameters: MixedParamsClientOptions, initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/main.tsp index e25e738d65..52e1705051 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/main.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/main.tsp @@ -7,7 +7,7 @@ using Spector; using Azure.ClientGenerator.Core; @doc("Test for client initialization decorator - moving parameters from method to client level") -@scenarioService("/azure/client-generator-core/client-initialization") +@scenarioService("/azure/client-generator-core/client-initialization/parent") namespace Service; // Common parameter types and models diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/mockapi.ts index f431958a70..50cf2b6d3a 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/mockapi.ts @@ -6,7 +6,7 @@ export const Scenarios: Record = {}; Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNestedWithPathClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/with-query", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource/with-query", method: "get", request: { query: { @@ -19,7 +19,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/get-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource/get-standalone", method: "get", request: {}, response: { @@ -34,7 +34,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource", method: "delete", request: {}, response: { @@ -48,7 +48,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNestedWithQueryClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/with-query", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/with-query", method: "get", request: { query: { @@ -61,7 +61,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/get-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/get-standalone", method: "get", request: { query: { @@ -80,7 +80,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/delete-resource", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/delete-resource", method: "delete", request: { query: { @@ -98,7 +98,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNestedWithHeaderClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/with-query", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/with-query", method: "get", request: { query: { @@ -114,7 +114,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/get-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/get-standalone", method: "get", request: { headers: { @@ -127,7 +127,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/delete-standalone", method: "delete", request: { headers: { @@ -145,7 +145,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNestedWithMultipleClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/with-query", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/with-query", method: "get", request: { query: { @@ -162,7 +162,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/get-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/get-standalone", method: "get", request: { query: { @@ -178,7 +178,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/delete-standalone", method: "delete", request: { query: { @@ -199,7 +199,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNestedWithMixedClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/with-query", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/with-query", method: "get", request: { query: { @@ -216,7 +216,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/get-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/get-standalone", method: "get", request: { query: { @@ -232,7 +232,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/delete-standalone", method: "delete", request: { query: { @@ -253,7 +253,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNe Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNestedWithPathClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/with-query", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource/with-query", method: "get", request: { query: { @@ -266,7 +266,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource/get-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource/get-standalone", method: "get", request: {}, response: { @@ -281,7 +281,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent/test-resource", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource", method: "delete", request: {}, response: { @@ -294,7 +294,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNestedWithQueryClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/with-query", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/with-query", method: "get", request: { query: { @@ -307,7 +307,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/get-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/get-standalone", method: "get", request: { query: { @@ -326,7 +326,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-query/delete-resource", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/delete-resource", method: "delete", request: { query: { @@ -343,7 +343,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNestedWithHeaderClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/with-query", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/with-query", method: "get", request: { query: { @@ -359,7 +359,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/get-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/get-standalone", method: "get", request: { headers: { @@ -372,7 +372,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-header/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/delete-standalone", method: "delete", request: { headers: { @@ -389,7 +389,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNestedWithMultipleClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/with-query", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/with-query", method: "get", request: { query: { @@ -406,7 +406,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/get-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/get-standalone", method: "get", request: { query: { @@ -422,7 +422,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-multiple/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/delete-standalone", method: "delete", request: { query: { @@ -442,7 +442,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNestedWithMixedClient = passOnSuccess([ { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/with-query", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/with-query", method: "get", request: { query: { @@ -459,7 +459,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/get-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/get-standalone", method: "get", request: { query: { @@ -475,7 +475,7 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNes kind: "MockApiDefinition", }, { - uri: "/azure/client-generator-core/client-initialization/nested-default-parent-mixed/delete-standalone", + uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/delete-standalone", method: "delete", request: { query: { From 66bfe07e06f1d997c1623cbd526d0dcc4e429bce Mon Sep 17 00:00:00 2001 From: ZiWei Chen Date: Wed, 24 Dec 2025 15:07:09 +0800 Subject: [PATCH 13/18] remove parent only cases --- .../client-initialization/parent/client.tsp | 259 --------- .../client-initialization/parent/main.tsp | 125 ----- .../client-initialization/parent/mockapi.ts | 493 ------------------ 3 files changed, 877 deletions(-) delete mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/client.tsp delete mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/main.tsp delete mode 100644 packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/mockapi.ts diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/client.tsp deleted file mode 100644 index 246cb5a7c6..0000000000 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/client.tsp +++ /dev/null @@ -1,259 +0,0 @@ -import "./main.tsp"; -import "@azure-tools/typespec-client-generator-core"; -import "@typespec/spector"; -import "@typespec/http"; - -using Spector; -using Http; - -@route("/azure/client-generator-core/client-initialization/parent") -namespace _Specs_.Azure.ClientGenerator.Core.ClientInitialization.Parent; - -@@global.Azure.ClientGenerator.Core.clientNamespace(_Specs_.Azure.ClientGenerator.Core.ClientInitialization.Parent, - "azure.clientgenerator.core.clientinitialization", - "java" -); -@@global.Azure.ClientGenerator.Core.clientNamespace(Service, - "azure.clientgenerator.core.clientinitialization", - "java" -); - -// Reusable option types for client initialization -model PathParamClientOptions { - @doc("The blob name to use for operations") - blobName: string; -} - -model DefaultQueryParamClientOptions { - @doc("The blob name to use for operations") - blobName: string; -} - -model HeaderParamClientOptions { - @doc("The name to use for operations") - name: string; -} - -model MultipleParamsClientOptions { - @doc("The name to use for operations") - name: string; - - @doc("The region to use for operations") - region: string; -} - -model MixedParamsClientOptions { - @doc("The name to use for operations") - name: string; -} - -@global.Azure.ClientGenerator.Core.client({ - name: "ParentClient", - service: Service, -}) -namespace ParentClient { - // Scenario 6: Default -> Parent initialization with path parameter - @scenarioDoc(""" - Client for testing default -> parent nested initialization. - - The parent client uses default initialization behavior, - and the child client uses parent initialization behavior. - - Parameters elevated to client level: - - resourceName: "test-resource" (path parameter) - - Expected client usage: - ```ts - // via ParentClient (parent initialization) - const client = new ParentClient.getParentNestedWithPathClient({ - resourceName: "test-resource" - }); - - // Operations don't need resourceName parameter - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.client({ - name: "ParentNestedWithPathClient", - service: Service, - }) - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: PathParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, - }) - @route("/nested-default-parent") - interface ParentNestedWithPathClient { - withQuery is Service.NestedDefaultParentWithPath.withQuery; - getStandalone is Service.NestedDefaultParentWithPath.getStandalone; - deleteStandalone is Service.NestedDefaultParentWithPath.deleteStandalone; - } - - // Scenario 7: Default -> Parent initialization with query parameter - @scenarioDoc(""" - Client for testing default -> parent nested initialization. - - The parent client uses default initialization behavior, - and the child client uses parent initialization behavior. - - Parameters elevated to client level: - - blobName: "test-blob" (query parameter) - - Expected client usage: - ```ts - // via ParentClient (parent initialization) - const client = new ParentClient.getParentNestedWithQueryClient({ - blobName: "test-blob" - }); - - // Operations don't need blobName parameter - client.withQuery(); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.client({ - name: "ParentNestedWithQueryClient", - service: Service, - }) - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: DefaultQueryParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, - }) - @route("/nested-default-parent-query") - interface ParentNestedWithQueryClient { - withQuery is Service.NestedDefaultParentWithQuery.withQuery; - getStandalone is Service.NestedDefaultParentWithQuery.getStandalone; - deleteStandalone is Service.NestedDefaultParentWithQuery.deleteStandalone; - } - - // Scenario 8: Default -> Parent initialization with Header parameter - @scenarioDoc(""" - Client for testing default -> parent header parameter nested initialization. - - The parent client uses default initialization behavior, - and the child client moves header parameters to client level and uses parent initialization. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - Expected client usage: - ```ts - // via ParentClient (parent initialization) - const client = new ParentClient.getParentNestedWithHeaderClient({ - name: "test-name-value" - }); - - // Operations don't need name header parameter - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.client({ - name: "ParentNestedWithHeaderClient", - service: Service, - }) - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: HeaderParamClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, - }) - @route("/nested-default-parent-header") - interface ParentNestedWithHeaderClient { - withQuery is Service.NestedDefaultParentHeader.withQuery; - getStandalone is Service.NestedDefaultParentHeader.getStandalone; - deleteStandalone is Service.NestedDefaultParentHeader.deleteStandalone; - } - - // Scenario 15: Default -> Parent Multiple parameters client - @scenarioDoc(""" - Client for testing default -> parent multiple parameters nested initialization. - - The parent client uses default initialization behavior, - and the child client moves multiple parameters (header and query) to client level with parent initialization. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - region: "us-west" (query parameter) - - Expected client usage: - ```ts - // via ParentClient (parent initialization) - const client = new ParentClient.getParentNestedWithMultipleClient({ - name: "test-name-value", - region: "us-west" - }); - - // Operations don't need name or region parameters - client.withQuery(format: "text"); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.client({ - name: "ParentNestedWithMultipleClient", - service: Service, - }) - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MultipleParamsClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, - }) - @route("/nested-default-parent-multiple") - interface ParentNestedWithMultipleClient { - withQuery is Service.NestedDefaultParentMultiple.withQuery; - getStandalone is Service.NestedDefaultParentMultiple.getStandalone; - deleteStandalone is Service.NestedDefaultParentMultiple.deleteStandalone; - } - - // Scenario 16: Default -> Parent Mixed parameters client - @scenarioDoc(""" - Client for testing default -> parent mixed parameters nested initialization. - - The parent client uses default initialization behavior, - and the child client moves some parameters to client level while keeping others at method level with parent initialization. - - Parameters elevated to client level: - - name: "test-name-value" (header parameter) - - Parameters remaining at method level: - - region: "us-west" (query parameter) - - Expected client usage: - ```ts - // via ParentClient (parent initialization) - const client = new ParentClient.getParentNestedWithMixedClient({ - name: "test-name-value" - }); - - // Operations still need region parameter - client.withQuery(region: "us-west", format: "text"); - client.getStandalone(region: "us-west"); - client.deleteStandalone(region: "us-west"); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.operationGroup - @global.Azure.ClientGenerator.Core.client({ - name: "ParentNestedWithMixedClient", - service: Service, - }) - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: MixedParamsClientOptions, - initializedBy: global.Azure.ClientGenerator.Core.InitializedBy.parent, - }) - @route("/nested-default-parent-mixed") - interface ParentNestedWithMixedClient { - withQuery is Service.NestedDefaultParentMixed.withQuery; - getStandalone is Service.NestedDefaultParentMixed.getStandalone; - deleteStandalone is Service.NestedDefaultParentMixed.deleteStandalone; - } -} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/main.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/main.tsp deleted file mode 100644 index 52e1705051..0000000000 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/main.tsp +++ /dev/null @@ -1,125 +0,0 @@ -import "@typespec/http"; -import "@typespec/spector"; -import "@azure-tools/typespec-client-generator-core"; - -using Http; -using Spector; -using Azure.ClientGenerator.Core; - -@doc("Test for client initialization decorator - moving parameters from method to client level") -@scenarioService("/azure/client-generator-core/client-initialization/parent") -namespace Service; - -// Common parameter types and models - -model NameHeaderParam { - @header("name") - name: string; -} - -model RegionQueryParam { - @query - region: string; -} - -model Input { - name: string; -} - -model DefaultQueryParam { - @query - blobName: string; -} - -// Nested layer services for first-layer default (no decorator) -@doc("Operations for nested default -> parent") -@route("/nested-default-parent") -interface NestedDefaultParentWithPath { - @route("/{blobName}/with-query") - @get - withQuery(@path blobName: string, @query format?: string): void; - - @route("/{blobName}/get-standalone") - @get - getStandalone(@path blobName: string): BlobProperties; - - @route("/{blobName}") - @delete - deleteStandalone(@path blobName: string): void; -} - -// Nested layer services for first-layer default (no decorator) - Query variant -@doc("Operations for nested default -> parent with query parameters") -@route("/nested-default-parent-query") -interface NestedDefaultParentWithQuery { - @route("/with-query") - @get - withQuery(...DefaultQueryParam): void; - - @route("/get-standalone") - @get - getStandalone(...DefaultQueryParam): BlobProperties; - - @route("/delete-resource") - @delete - deleteStandalone(...DefaultQueryParam): void; -} - -// Nested layer services for default -> header parameters -@doc("Operations for nested default -> parent header parameters") -@route("/nested-default-parent-header") -interface NestedDefaultParentHeader { - @route("/with-query") - @get - withQuery(...NameHeaderParam, @query format?: string): void; - - @route("/get-standalone") - @get - getStandalone(...NameHeaderParam): void; - - @route("/delete-standalone") - @delete - deleteStandalone(...NameHeaderParam): void; -} - -// Nested layer services for default -> multiple parameters -@doc("Operations for nested default -> parent multiple parameters") -@route("/nested-default-parent-multiple") -interface NestedDefaultParentMultiple { - @route("/with-query") - @get - withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; - - @route("/get-standalone") - @get - getStandalone(...NameHeaderParam, ...RegionQueryParam): void; - - @route("/delete-standalone") - @delete - deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; -} - -// Nested layer services for default -> mixed parameters -@doc("Operations for nested default -> parent mixed parameters") -@route("/nested-default-parent-mixed") -interface NestedDefaultParentMixed { - @route("/with-query") - @get - withQuery(...NameHeaderParam, ...RegionQueryParam, @query format?: string): void; - - @route("/get-standalone") - @get - getStandalone(...NameHeaderParam, ...RegionQueryParam): void; - - @route("/delete-standalone") - @delete - deleteStandalone(...NameHeaderParam, ...RegionQueryParam): void; -} - -@doc("Properties of a blob") -model BlobProperties { - name: string; - size: int64; - contentType: string; - createdOn: utcDateTime; -} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/mockapi.ts deleted file mode 100644 index 50cf2b6d3a..0000000000 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/parent/mockapi.ts +++ /dev/null @@ -1,493 +0,0 @@ -import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; - -export const Scenarios: Record = {}; - -// Mock responses for ParentNestedWithPathClient scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNestedWithPathClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "test-resource", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -// Mock responses for ParentNestedWithQueryClient scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNestedWithQueryClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/with-query", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/get-standalone", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 200, - body: json({ - name: "test-blob", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/delete-resource", - method: "delete", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -// Mock responses for ParentNestedWithHeaderClient scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNestedWithHeaderClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/with-query", - method: "get", - request: { - query: { - format: "text", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/get-standalone", - method: "get", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/delete-standalone", - method: "delete", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -// Mock responses for ParentNestedWithMultipleClient scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNestedWithMultipleClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -// Mock responses for ParentNestedWithMixedClient scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_DefaultClient_ParentNestedWithMixedClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -// Additional mock responses for ParentClient scenarios -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNestedWithPathClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource/with-query", - method: "get", - request: { - query: { - format: "text", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource/get-standalone", - method: "get", - request: {}, - response: { - status: 200, - body: json({ - name: "test-resource", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent/test-resource", - method: "delete", - request: {}, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNestedWithQueryClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/with-query", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/get-standalone", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 200, - body: json({ - name: "test-blob", - size: 1024, - contentType: "application/octet-stream", - createdOn: "2023-01-01T12:00:00Z", - }), - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-query/delete-resource", - method: "delete", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNestedWithHeaderClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/with-query", - method: "get", - request: { - query: { - format: "text", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/get-standalone", - method: "get", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-header/delete-standalone", - method: "delete", - request: { - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNestedWithMultipleClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-multiple/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); - -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParentClient_ParentNestedWithMixedClient = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/with-query", - method: "get", - request: { - query: { - format: "text", - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/get-standalone", - method: "get", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/parent/nested-default-parent-mixed/delete-standalone", - method: "delete", - request: { - query: { - region: "us-west", - }, - headers: { - name: "test-name-value", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - ]); From b963d39f6c961e34906a64e41fe0d26ae3002d8e Mon Sep 17 00:00:00 2001 From: ZiWei Chen Date: Thu, 25 Dec 2025 16:04:07 +0800 Subject: [PATCH 14/18] format --- .../client-initialization/default/client.tsp | 66 +++++++------- .../client-initialization/default/mockapi.ts | 88 +++++++++---------- .../src/interfaces.ts | 49 +++++------ 3 files changed, 96 insertions(+), 107 deletions(-) diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/client.tsp b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/client.tsp index 3860e85110..188f90b984 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/client.tsp +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/client.tsp @@ -206,39 +206,39 @@ interface ParamAlias { } // Scenario 6: Query parameter moved to client level - @scenarioDoc(""" - Client for testing default -> default nested initialization. - - The parent client uses default initialization behavior, - and the child client uses default initialization behavior. - - Parameters elevated to client level: - - blobName: "test-blob" (query parameter) - - Expected client usage: - ```ts - // via DefaultClient (default initialization) - const client = new DefaultClient.getDefaultNestedWithQueryClient({ - blobName: "test-blob" - }); - - // Operations don't need blobName parameter - client.withQuery(); - client.getStandalone(); - client.deleteStandalone(); - ``` - """) - @scenario - @global.Azure.ClientGenerator.Core.client({ +@scenarioDoc(""" + Client for testing default -> default nested initialization. + + The parent client uses default initialization behavior, + and the child client uses default initialization behavior. + + Parameters elevated to client level: + - blobName: "test-blob" (query parameter) + + Expected client usage: + ```ts + // via DefaultClient (default initialization) + const client = new DefaultClient.getDefaultNestedWithQueryClient({ + blobName: "test-blob" + }); + + // Operations don't need blobName parameter + client.withQuery(); + client.getStandalone(); + client.deleteStandalone(); + ``` + """) +@scenario +@global.Azure.ClientGenerator.Core.client({ name: "QueryParamClient", service: Service, }) - @global.Azure.ClientGenerator.Core.clientInitialization({ - parameters: DefaultQueryParamClientOptions, - }) - @route("/query") - interface QueryParam { - withQuery is Service.QueryParam.withQuery; - getStandalone is Service.QueryParam.getStandalone; - deleteStandalone is Service.QueryParam.deleteStandalone; - } +@global.Azure.ClientGenerator.Core.clientInitialization({ + parameters: DefaultQueryParamClientOptions, +}) +@route("/query") +interface QueryParam { + withQuery is Service.QueryParam.withQuery; + getStandalone is Service.QueryParam.getStandalone; + deleteStandalone is Service.QueryParam.deleteStandalone; +} diff --git a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/mockapi.ts b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/mockapi.ts index 6442af407d..cad3fc3fd2 100644 --- a/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/mockapi.ts +++ b/packages/azure-http-specs/specs/azure/client-generator-core/client-initialization/default/mockapi.ts @@ -1,4 +1,3 @@ - import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api"; export const Scenarios: Record = {}; @@ -183,51 +182,50 @@ Scenarios.Azure_ClientGenerator_Core_ClientInitialization_ParamAlias = passOnSuc ]); // Mock responses for QueryParam scenario -Scenarios.Azure_ClientGenerator_Core_ClientInitialization_QueryParam = - passOnSuccess([ - { - uri: "/azure/client-generator-core/client-initialization/default/query/with-query", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 204, - }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/default/query/get-standalone", - method: "get", - request: { - query: { - blobName: "test-blob", - }, - }, - response: { - status: 200, - body: json({ - name: "test-blob", - size: 42, - contentType: "text/plain", - createdOn: "2025-04-01T12:00:00Z", - }), +Scenarios.Azure_ClientGenerator_Core_ClientInitialization_QueryParam = passOnSuccess([ + { + uri: "/azure/client-generator-core/client-initialization/default/query/with-query", + method: "get", + request: { + query: { + blobName: "test-blob", }, - kind: "MockApiDefinition", - }, - { - uri: "/azure/client-generator-core/client-initialization/default/query/delete-resource", - method: "delete", - request: { - query: { - blobName: "test-blob", - }, + }, + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/default/query/get-standalone", + method: "get", + request: { + query: { + blobName: "test-blob", }, - response: { - status: 204, + }, + response: { + status: 200, + body: json({ + name: "test-blob", + size: 42, + contentType: "text/plain", + createdOn: "2025-04-01T12:00:00Z", + }), + }, + kind: "MockApiDefinition", + }, + { + uri: "/azure/client-generator-core/client-initialization/default/query/delete-resource", + method: "delete", + request: { + query: { + blobName: "test-blob", }, - kind: "MockApiDefinition", }, - ]); + response: { + status: 204, + }, + kind: "MockApiDefinition", + }, +]); diff --git a/packages/typespec-client-generator-core/src/interfaces.ts b/packages/typespec-client-generator-core/src/interfaces.ts index 4bd61fe8b5..f24742798e 100644 --- a/packages/typespec-client-generator-core/src/interfaces.ts +++ b/packages/typespec-client-generator-core/src/interfaces.ts @@ -197,9 +197,8 @@ export interface DecoratorInfo { /** * Represents a client in the package. */ -export interface SdkClientType< - TServiceOperation extends SdkServiceOperation, -> extends DecoratedType { +export interface SdkClientType + extends DecoratedType { __raw: SdkClient | SdkOperationGroup; kind: "client"; /** Name of the client. */ @@ -262,9 +261,8 @@ export type SdkType = | SdkCredentialType | SdkEndpointType; -export interface SdkBuiltInType< - TKind extends SdkBuiltInKinds = SdkBuiltInKinds, -> extends SdkTypeBase { +export interface SdkBuiltInType + extends SdkTypeBase { kind: TKind; /** How to encode the type on wire. */ encode?: string; @@ -466,9 +464,8 @@ export interface SdkEnumType extends SdkTypeBase { isUnionAsEnum: boolean; } -export interface SdkEnumValueType< - TValueType extends SdkTypeBase = SdkBuiltInType, -> extends SdkTypeBase { +export interface SdkEnumValueType + extends SdkTypeBase { kind: "enumvalue"; name: string; value: string | number; @@ -573,9 +570,8 @@ export interface SdkEndpointType extends SdkTypeBase { templateArguments: SdkPathParameter[]; } -export interface SdkModelPropertyTypeBase< - TType extends SdkTypeBase = SdkType, -> extends DecoratedType { +export interface SdkModelPropertyTypeBase + extends DecoratedType { __raw?: ModelProperty; /** Parameter type. */ type: TType; @@ -667,9 +663,8 @@ export interface BinarySerializationOptions { /** * Endpoint parameter type for the client. */ -export interface SdkEndpointParameter extends SdkModelPropertyTypeBase< - SdkEndpointType | SdkUnionType -> { +export interface SdkEndpointParameter + extends SdkModelPropertyTypeBase> { kind: "endpoint"; /** Whether do url encode for the endpoint string. */ urlEncode: boolean; @@ -681,9 +676,8 @@ export interface SdkEndpointParameter extends SdkModelPropertyTypeBase< serializedName?: string; } -export interface SdkCredentialParameter extends SdkModelPropertyTypeBase< - SdkCredentialType | SdkUnionType -> { +export interface SdkCredentialParameter + extends SdkModelPropertyTypeBase> { kind: "credential"; /** Credential parameter is always on client level. */ onClient: true; @@ -920,9 +914,8 @@ export interface SdkHttpOperation extends SdkServiceOperationBase { export type SdkServiceOperation = SdkHttpOperation; -interface SdkServiceMethodBase< - TServiceOperation extends SdkServiceOperation, -> extends DecoratedType { +interface SdkServiceMethodBase + extends DecoratedType { __raw?: Operation; name: string; /** Whether the type has public or private accessibility */ @@ -954,9 +947,8 @@ interface SdkServiceMethodBase< /** * Basic method. */ -export interface SdkBasicServiceMethod< - TServiceOperation extends SdkServiceOperation, -> extends SdkServiceMethodBase { +export interface SdkBasicServiceMethod + extends SdkServiceMethodBase { kind: "basic"; } @@ -997,8 +989,7 @@ export interface SdkPagingServiceMetadata - extends - SdkServiceMethodBase, + extends SdkServiceMethodBase, SdkPagingServiceMethodOptions { kind: "paging"; } @@ -1163,7 +1154,8 @@ export interface SdkLroServiceFinalResponse { * Long running method. */ export interface SdkLroServiceMethod - extends SdkServiceMethodBase, SdkLroServiceMethodOptions { + extends SdkServiceMethodBase, + SdkLroServiceMethodOptions { kind: "lro"; } @@ -1171,8 +1163,7 @@ export interface SdkLroServiceMethod - extends - SdkServiceMethodBase, + extends SdkServiceMethodBase, SdkLroServiceMethodOptions, SdkPagingServiceMethodOptions { kind: "lropaging"; From 571ddbe768930b792dbcf835a199298a13e89c2f Mon Sep 17 00:00:00 2001 From: ZiWei Chen Date: Thu, 25 Dec 2025 16:18:03 +0800 Subject: [PATCH 15/18] Update pnpm-lock.yaml --- pnpm-lock.yaml | 1633 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 1140 insertions(+), 493 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 797a761c4a..4a65d6f963 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,11 +98,11 @@ importers: specifier: ^1.0.1 version: 1.0.3 '@eslint/js': - specifier: ^9.39.2 + specifier: ^9.23.0 version: 9.39.2 '@microsoft/api-extractor': - specifier: ^7.55.2 - version: 7.55.2(@types/node@25.0.2) + specifier: ^7.52.1 + version: 7.55.2(@types/node@24.10.4) '@octokit/core': specifier: ^7.0.2 version: 7.0.6 @@ -116,22 +116,22 @@ importers: specifier: ^4.0.9 version: 4.0.10 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/eslint-plugin': - specifier: ^1.5.2 + specifier: ^1.1.38 version: 1.5.2(eslint@9.39.2)(typescript@5.9.3)(vitest@4.0.15) c8: specifier: ^10.1.3 version: 10.1.3 cspell: - specifier: ^9.4.0 + specifier: ^9.0.1 version: 9.4.0 eslint: - specifier: ^9.39.2 + specifier: ^9.23.0 version: 9.39.2 eslint-plugin-import: specifier: ^2.31.0 @@ -149,20 +149,20 @@ importers: specifier: ~1.1.1 version: 1.1.1 playwright: - specifier: ^1.57.0 + specifier: ^1.51.1 version: 1.57.0 prettier: - specifier: ~3.7.4 - version: 3.7.4 + specifier: ~3.6.2 + version: 3.6.2 prettier-plugin-astro: specifier: ^0.14.1 version: 0.14.1 prettier-plugin-organize-imports: specifier: ~4.3.0 - version: 4.3.0(prettier@3.7.4)(typescript@5.9.3) + version: 4.3.0(prettier@3.6.2)(typescript@5.9.3) prettier-plugin-sh: specifier: ^0.17.4 - version: 0.17.4(prettier@3.7.4) + version: 0.17.4(prettier@3.6.2) rimraf: specifier: ~6.1.2 version: 6.1.2 @@ -170,37 +170,37 @@ importers: specifier: ^13.0.3 version: 13.0.4(typescript@5.9.3) tsx: - specifier: ^4.21.0 + specifier: ^4.19.3 version: 4.21.0 typescript: specifier: ~5.9.2 version: 5.9.3 typescript-eslint: - specifier: ^8.49.0 + specifier: ^8.27.0 version: 8.49.0(eslint@9.39.2)(typescript@5.9.3) vite-plugin-node-polyfills: specifier: ^0.24.0 - version: 0.24.0(rollup@4.49.0)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.24.0(rollup@4.49.0)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) yaml: - specifier: ~2.8.2 + specifier: ~2.8.0 version: 2.8.2 core/packages/asset-emitter: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -212,8 +212,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/astro-utils: dependencies: @@ -221,8 +221,8 @@ importers: specifier: ^0.9.4 version: 0.9.6(prettier-plugin-astro@0.14.1)(prettier@3.7.4)(typescript@5.9.3) '@astrojs/starlight': - specifier: ^0.37.0 - version: 0.37.1(astro@5.16.5(@azure/identity@4.13.0)(@azure/storage-blob@12.29.1)(@types/node@25.0.2)(rollup@4.49.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + specifier: ^0.36.1 + version: 0.36.3(astro@5.16.5(@azure/identity@4.13.0)(@azure/storage-blob@12.29.1)(@types/node@25.0.2)(rollup@4.49.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) '@expressive-code/core': specifier: ^0.41.2 version: 0.41.4 @@ -243,25 +243,25 @@ importers: version: 5.9.3 devDependencies: '@types/react': - specifier: ~19.2.7 + specifier: ~19.2.2 version: 19.2.7 astro: - specifier: ^5.16.5 + specifier: ^5.5.6 version: 5.16.5(@azure/identity@4.13.0)(@azure/storage-blob@12.29.1)(@types/node@25.0.2)(rollup@4.49.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) core/packages/best-practices: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -273,8 +273,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/bundle-uploader: dependencies: @@ -286,7 +286,7 @@ importers: version: 12.29.1 '@pnpm/workspace.find-packages': specifier: ^1000.0.24 - version: 1000.0.49(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0) + version: 1000.0.49(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) '@typespec/bundler': specifier: workspace:^ version: link:../bundler @@ -301,16 +301,16 @@ importers: version: 7.7.3 devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/semver': specifier: ^7.5.8 version: 7.7.1 '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -322,8 +322,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/bundler: dependencies: @@ -347,16 +347,16 @@ importers: version: 18.0.0 devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/yargs': specifier: ~17.0.33 version: 17.0.35 '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -368,11 +368,11 @@ importers: specifier: ~5.9.2 version: 5.9.3 vite: - specifier: ^7.2.7 - version: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^7.0.5 + version: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/compiler: dependencies: @@ -381,7 +381,7 @@ importers: version: 7.27.1 '@inquirer/prompts': specifier: ^8.0.1 - version: 8.1.0(@types/node@25.0.2) + version: 8.1.0(@types/node@24.10.4) ajv: specifier: ~8.17.1 version: 8.17.1 @@ -404,8 +404,8 @@ importers: specifier: ~1.1.1 version: 1.1.1 prettier: - specifier: ~3.7.4 - version: 3.7.4 + specifier: ~3.6.2 + version: 3.6.2 semver: specifier: ^7.7.1 version: 7.7.3 @@ -422,7 +422,7 @@ importers: specifier: ~1.0.12 version: 1.0.12 yaml: - specifier: ~2.8.2 + specifier: ~2.8.0 version: 2.8.2 yargs: specifier: ~18.0.0 @@ -435,8 +435,8 @@ importers: specifier: ~4.2.5 version: 4.2.6 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/semver': specifier: ^7.5.8 version: 7.7.1 @@ -447,10 +447,10 @@ importers: specifier: workspace:^ version: link:../internal-build-utils '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -474,33 +474,33 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) vscode-oniguruma: specifier: ~2.0.1 version: 2.0.1 vscode-textmate: - specifier: ~9.3.0 - version: 9.3.0 + specifier: ~9.2.0 + version: 9.2.1 core/packages/emitter-framework: dependencies: '@alloy-js/csharp': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 devDependencies: '@alloy-js/cli': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@alloy-js/core': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@alloy-js/rollup-plugin': specifier: ^0.1.0 version: 0.1.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@4.49.0) '@alloy-js/typescript': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -511,8 +511,8 @@ importers: specifier: ^2.0.3 version: 2.0.3 prettier: - specifier: ~3.7.4 - version: 3.7.4 + specifier: ~3.6.2 + version: 3.6.2 tree-sitter-c-sharp: specifier: ^0.23.0 version: 0.23.1 @@ -532,11 +532,11 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) web-tree-sitter: - specifier: ^0.26.3 - version: 0.26.3 + specifier: ^0.25.4 + version: 0.25.10(@types/emscripten@1.41.5) core/packages/eslint-plugin-typespec: dependencies: @@ -545,28 +545,28 @@ importers: version: 8.49.0(eslint@9.39.2)(typescript@5.9.3) devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typescript-eslint/parser': - specifier: ^8.49.0 + specifier: ^8.27.0 version: 8.49.0(eslint@9.39.2)(typescript@5.9.3) '@typescript-eslint/rule-tester': - specifier: ^8.49.0 + specifier: ^8.27.0 version: 8.49.0(eslint@9.39.2)(typescript@5.9.3) '@typescript-eslint/types': - specifier: ^8.49.0 + specifier: ^8.27.0 version: 8.49.0 '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 version: 10.1.3 eslint: - specifier: ^9.39.2 + specifier: ^9.23.0 version: 9.39.2 rimraf: specifier: ~6.1.2 @@ -575,14 +575,14 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/events: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -593,10 +593,10 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -608,8 +608,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/html-program-viewer: dependencies: @@ -645,10 +645,10 @@ importers: specifier: ^16.2.0 version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/react': - specifier: ~19.2.7 + specifier: ~19.2.2 version: 19.2.7 '@types/react-dom': specifier: ~19.2.2 @@ -660,13 +660,13 @@ importers: specifier: workspace:^ version: link:../react-components '@vitejs/plugin-react': - specifier: ~5.1.2 - version: 5.1.2(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ~5.1.0 + version: 5.1.2(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -678,26 +678,26 @@ importers: specifier: ~5.9.2 version: 5.9.3 vite: - specifier: ^7.2.7 - version: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^7.0.5 + version: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-checker: - specifier: ^0.12.0 - version: 0.12.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ^0.11.0 + version: 0.11.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-dts: specifier: 4.5.4 - version: 4.5.4(@types/node@25.0.2)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.5.4(@types/node@24.10.4)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-node-polyfills: specifier: ^0.24.0 - version: 0.24.0(rollup@4.49.0)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.24.0(rollup@4.49.0)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/http: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -711,10 +711,10 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -726,17 +726,14 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/http-canonicalization: dependencies: '@typespec/compiler': specifier: workspace:^ version: link:../compiler - '@typespec/emitter-framework': - specifier: workspace:^ - version: link:../emitter-framework '@typespec/http': specifier: workspace:^ version: link:../http @@ -745,32 +742,32 @@ importers: version: link:../mutator-framework devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 concurrently: specifier: ^9.1.2 version: 9.2.1 prettier: - specifier: ~3.7.4 - version: 3.7.4 + specifier: ~3.6.2 + version: 3.6.2 core/packages/http-client: devDependencies: '@alloy-js/cli': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@alloy-js/core': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@alloy-js/rollup-plugin': specifier: ^0.1.0 version: 0.1.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@4.49.0) '@alloy-js/typescript': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -787,26 +784,26 @@ importers: specifier: workspace:^ version: link:../tspd eslint: - specifier: ^9.39.2 + specifier: ^9.23.0 version: 9.39.2 prettier: - specifier: ~3.7.4 - version: 3.7.4 + specifier: ~3.6.2 + version: 3.6.2 typescript: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/http-client-js: dependencies: '@alloy-js/core': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@alloy-js/typescript': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -820,12 +817,12 @@ importers: specifier: workspace:^ version: link:../rest prettier: - specifier: ~3.7.4 - version: 3.7.4 + specifier: ~3.6.2 + version: 3.6.2 devDependencies: '@alloy-js/cli': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@alloy-js/rollup-plugin': specifier: ^0.1.0 version: 0.1.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@4.49.0) @@ -851,7 +848,7 @@ importers: specifier: workspace:^ version: link:../versioning '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) change-case: specifier: ~5.4.4 @@ -863,7 +860,7 @@ importers: specifier: ~10.1.0 version: 10.1.0 execa: - specifier: ^9.6.1 + specifier: ^9.5.2 version: 9.6.1 fs-extra: specifier: ^11.2.0 @@ -872,7 +869,7 @@ importers: specifier: ~16.0.0 version: 16.0.0 inquirer: - specifier: ^13.1.0 + specifier: ^13.0.1 version: 13.1.0(@types/node@25.0.2) ora: specifier: ^9.0.0 @@ -890,7 +887,7 @@ importers: specifier: ^2.0.0 version: 2.0.0 vitest: - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) yargs: specifier: ~18.0.0 @@ -911,7 +908,7 @@ importers: specifier: ~1.1.1 version: 1.1.1 yaml: - specifier: ~2.8.2 + specifier: ~2.8.0 version: 2.8.2 yargs: specifier: ~18.0.0 @@ -921,8 +918,8 @@ importers: specifier: ~6.0.6 version: 6.0.6 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/yargs': specifier: ~17.0.33 version: 17.0.35 @@ -960,10 +957,10 @@ importers: specifier: workspace:^ version: link:../versioning '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) fs-extra: specifier: ^11.2.0 @@ -972,8 +969,8 @@ importers: specifier: ~16.0.0 version: 16.0.0 inquirer: - specifier: ^13.1.0 - version: 13.1.0(@types/node@25.0.2) + specifier: ^13.0.1 + version: 13.1.0(@types/node@24.10.4) ora: specifier: ^9.0.0 version: 9.0.0 @@ -987,27 +984,27 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/http-server-js: dependencies: prettier: - specifier: ~3.7.4 - version: 3.7.4 + specifier: ~3.6.2 + version: 3.6.2 yaml: - specifier: ~2.8.2 + specifier: ~2.8.0 version: 2.8.2 devDependencies: '@types/express': - specifier: ^5.0.6 + specifier: ^5.0.1 version: 5.0.6 '@types/morgan': specifier: ^1.9.9 version: 1.9.10 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/swagger-ui-express': specifier: ^4.1.8 version: 4.1.8 @@ -1033,16 +1030,16 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) decimal.js: specifier: ^10.5.0 version: 10.6.0 express: - specifier: ^5.2.1 + specifier: ^5.1.0 version: 5.2.1 fs-extra: specifier: ^11.2.0 @@ -1051,8 +1048,8 @@ importers: specifier: ~16.0.0 version: 16.0.0 inquirer: - specifier: ^13.1.0 - version: 13.1.0(@types/node@25.0.2) + specifier: ^13.0.1 + version: 13.1.0(@types/node@24.10.4) morgan: specifier: ^1.10.0 version: 1.10.1 @@ -1075,14 +1072,14 @@ importers: specifier: ^0.3.0 version: 0.3.0 tsx: - specifier: ^4.21.0 + specifier: ^4.19.3 version: 4.21.0 typescript: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) yargs: specifier: ~18.0.0 version: 18.0.0 @@ -1121,8 +1118,8 @@ importers: specifier: ^2.0.0 version: 2.0.0 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/json-schema': specifier: workspace:^ version: link:../json-schema @@ -1146,12 +1143,12 @@ importers: dependencies: '@pnpm/workspace.find-packages': specifier: ^1000.0.24 - version: 1000.0.49(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0) + version: 1000.0.49(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) cross-spawn: specifier: ^7.0.6 version: 7.0.6 cspell: - specifier: ^9.4.0 + specifier: ^9.0.1 version: 9.4.0 semver: specifier: ^7.7.1 @@ -1167,8 +1164,8 @@ importers: specifier: ~6.0.6 version: 6.0.6 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/semver': specifier: ^7.5.8 version: 7.7.1 @@ -1176,17 +1173,17 @@ importers: specifier: ~17.0.33 version: 17.0.35 '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 version: 10.1.3 chokidar: - specifier: ~5.0.0 - version: 5.0.0 + specifier: ~4.0.3 + version: 4.0.3 rimraf: specifier: ~6.1.2 version: 6.1.2 @@ -1194,8 +1191,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/json-schema: dependencies: @@ -1203,12 +1200,12 @@ importers: specifier: workspace:^ version: link:../asset-emitter yaml: - specifier: ~2.8.2 + specifier: ~2.8.0 version: 2.8.2 devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -1222,10 +1219,10 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) ajv: specifier: ~8.17.1 @@ -1243,22 +1240,22 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/library-linter: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -1270,8 +1267,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/monarch: dependencies: @@ -1280,19 +1277,19 @@ importers: version: 0.55.1 devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 version: 10.1.3 happy-dom: - specifier: ^20.0.11 + specifier: ^20.0.8 version: 20.0.11 rimraf: specifier: ~6.1.2 @@ -1301,14 +1298,14 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/mutator-framework: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -1316,14 +1313,14 @@ importers: specifier: ^9.1.2 version: 9.2.1 prettier: - specifier: ~3.7.4 - version: 3.7.4 + specifier: ~3.6.2 + version: 3.6.2 core/packages/openapi: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -1340,10 +1337,10 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -1355,8 +1352,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/openapi3: dependencies: @@ -1373,12 +1370,12 @@ importers: specifier: workspace:^ version: link:../asset-emitter yaml: - specifier: ~2.8.2 + specifier: ~2.8.0 version: 2.8.2 devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/yargs': specifier: ~17.0.33 version: 17.0.35 @@ -1419,10 +1416,10 @@ importers: specifier: workspace:^ version: link:../xml '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -1437,8 +1434,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/pack: dependencies: @@ -1450,13 +1447,13 @@ importers: version: 1.1.1 devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -1471,11 +1468,11 @@ importers: specifier: ~5.9.2 version: 5.9.3 vite: - specifier: ^7.2.7 - version: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^7.0.5 + version: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/playground: dependencies: @@ -1547,22 +1544,22 @@ importers: specifier: ^7.26.10 version: 7.28.5 '@playwright/test': - specifier: ^1.57.0 + specifier: ^1.51.1 version: 1.57.0 '@storybook/cli': - specifier: ^10.1.8 + specifier: ^10.0.8 version: 10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/react-vite': - specifier: ^10.1.8 - version: 10.1.8(esbuild@0.27.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ^10.0.8 + version: 10.1.8(esbuild@0.27.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) '@types/debounce': specifier: ~1.2.4 version: 1.2.4 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/react': - specifier: ~19.2.7 + specifier: ~19.2.2 version: 19.2.7 '@types/react-dom': specifier: ~19.2.2 @@ -1574,8 +1571,8 @@ importers: specifier: workspace:^ version: link:../react-components '@vitejs/plugin-react': - specifier: ~5.1.2 - version: 5.1.2(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ~5.1.0 + version: 5.1.2(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) c8: specifier: ^10.1.3 version: 10.1.3 @@ -1583,26 +1580,26 @@ importers: specifier: ~10.1.0 version: 10.1.0 es-module-shims: - specifier: ~2.7.0 - version: 2.7.0 + specifier: ~2.6.0 + version: 2.6.2 rimraf: specifier: ~6.1.2 version: 6.1.2 storybook: - specifier: ^10.1.8 + specifier: ^10.0.8 version: 10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) typescript: specifier: ~5.9.2 version: 5.9.3 vite: - specifier: ^7.2.7 - version: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^7.0.5 + version: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-checker: - specifier: ^0.12.0 - version: 0.12.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ^0.11.0 + version: 0.11.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-dts: specifier: 4.5.4 - version: 4.5.4(@types/node@25.0.2)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.5.4(@types/node@24.10.4)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) core/packages/playground-website: dependencies: @@ -1658,8 +1655,8 @@ importers: specifier: workspace:^ version: link:../xml es-module-shims: - specifier: ~2.7.0 - version: 2.7.0 + specifier: ~2.6.0 + version: 2.6.2 react: specifier: ~18.3.1 version: 18.3.1 @@ -1671,16 +1668,16 @@ importers: specifier: ^7.26.10 version: 7.28.5 '@playwright/test': - specifier: ^1.57.0 + specifier: ^1.51.1 version: 1.57.0 '@types/debounce': specifier: ~1.2.4 version: 1.2.4 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/react': - specifier: ~19.2.7 + specifier: ~19.2.2 version: 19.2.7 '@types/react-dom': specifier: ~19.2.2 @@ -1689,13 +1686,13 @@ importers: specifier: ~5.21.1 version: 5.21.1 '@vitejs/plugin-react': - specifier: ~5.1.2 - version: 5.1.2(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ~5.1.0 + version: 5.1.2(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -1713,23 +1710,23 @@ importers: specifier: ~5.9.2 version: 5.9.3 vite: - specifier: ^7.2.7 - version: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^7.0.5 + version: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-dts: specifier: 4.5.4 - version: 4.5.4(@types/node@25.0.2)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.5.4(@types/node@24.10.4)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-node-polyfills: specifier: ^0.24.0 - version: 0.24.0(rollup@4.49.0)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.24.0(rollup@4.49.0)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/prettier-plugin-typespec: dependencies: prettier: - specifier: ~3.7.4 - version: 3.7.4 + specifier: ~3.6.2 + version: 3.6.2 devDependencies: '@typespec/compiler': specifier: workspace:^ @@ -1741,7 +1738,7 @@ importers: specifier: ^0.27.0 version: 0.27.1 vitest: - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/protobuf: @@ -1750,8 +1747,8 @@ importers: specifier: ^4.0.9 version: 4.0.10 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -1759,10 +1756,10 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -1777,8 +1774,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/react-components: dependencies: @@ -1808,22 +1805,22 @@ importers: specifier: ^16.2.0 version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/react': - specifier: ~19.2.7 + specifier: ~19.2.2 version: 19.2.7 '@types/react-dom': specifier: ~19.2.2 version: 19.2.3(@types/react@19.2.7) '@vitejs/plugin-react': - specifier: ~5.1.2 - version: 5.1.2(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ~5.1.0 + version: 5.1.2(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -1835,23 +1832,23 @@ importers: specifier: ~5.9.2 version: 5.9.3 vite: - specifier: ^7.2.7 - version: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^7.0.5 + version: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-checker: - specifier: ^0.12.0 - version: 0.12.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ^0.11.0 + version: 0.11.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-dts: specifier: 4.5.4 - version: 4.5.4(@types/node@25.0.2)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.5.4(@types/node@24.10.4)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/rest: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -1865,10 +1862,10 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -1880,8 +1877,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/samples: dependencies: @@ -1932,16 +1929,16 @@ importers: version: link:../versioning devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/internal-build-utils': specifier: workspace:^ version: link:../internal-build-utils '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) cross-env: specifier: ~10.1.0 @@ -1953,14 +1950,14 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/spec: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/internal-build-utils': specifier: workspace:^ version: link:../internal-build-utils @@ -1974,7 +1971,7 @@ importers: specifier: ^2.2.0 version: 2.2.3 express: - specifier: ^5.2.1 + specifier: ^5.1.0 version: 5.2.1 xml2js: specifier: ^0.6.2 @@ -1984,22 +1981,22 @@ importers: specifier: ^1.0.1 version: 1.0.4 '@types/express': - specifier: ^5.0.6 + specifier: ^5.0.1 version: 5.0.6 '@types/multer': specifier: ^2.0.0 version: 2.0.0 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/xml2js': specifier: ^0.4.11 version: 0.4.14 '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) rimraf: specifier: ~6.1.2 @@ -2008,8 +2005,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/spec-coverage-sdk: dependencies: @@ -2020,8 +2017,8 @@ importers: specifier: ~12.29.1 version: 12.29.1 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 devDependencies: rimraf: specifier: ~6.1.2 @@ -2055,13 +2052,13 @@ importers: version: 10.1.0(@types/react@19.2.7)(react@18.3.1) devDependencies: '@types/react': - specifier: ~19.2.7 + specifier: ~19.2.2 version: 19.2.7 '@types/react-dom': specifier: ~19.2.2 version: 19.2.3(@types/react@19.2.7) '@vitejs/plugin-react': - specifier: ~5.1.2 + specifier: ~5.1.0 version: 5.1.2(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) rimraf: specifier: ~6.1.2 @@ -2073,11 +2070,11 @@ importers: specifier: ~5.9.2 version: 5.9.3 vite: - specifier: ^7.2.7 + specifier: ^7.0.5 version: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-checker: - specifier: ^0.12.0 - version: 0.12.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ^0.11.0 + version: 0.11.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-dts: specifier: 4.5.4 version: 4.5.4(@types/node@25.0.2)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) @@ -2115,7 +2112,7 @@ importers: specifier: ^2.2.0 version: 2.2.3 express: - specifier: ^5.2.1 + specifier: ^5.1.0 version: 5.2.1 globby: specifier: ~16.0.0 @@ -2139,7 +2136,7 @@ importers: specifier: ^0.6.2 version: 0.6.2 yaml: - specifier: ~2.8.2 + specifier: ~2.8.0 version: 2.8.2 yargs: specifier: ~18.0.0 @@ -2152,7 +2149,7 @@ importers: specifier: ^1.0.1 version: 1.0.4 '@types/express': - specifier: ^5.0.6 + specifier: ^5.0.1 version: 5.0.6 '@types/micromatch': specifier: ^4.0.9 @@ -2164,8 +2161,8 @@ importers: specifier: ^2.0.0 version: 2.0.0 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/xml2js': specifier: ^0.4.11 version: 0.4.14 @@ -2185,8 +2182,8 @@ importers: core/packages/sse: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -2206,10 +2203,10 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -2221,8 +2218,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/standalone: dependencies: @@ -2243,13 +2240,13 @@ importers: version: 4.1.3(@yarnpkg/cli@4.12.0(@types/react@19.2.7)(@yarnpkg/core@4.5.0(typanion@3.14.0)))(@yarnpkg/core@4.5.0(typanion@3.14.0))(typanion@3.14.0) devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -2258,7 +2255,7 @@ importers: specifier: ^0.27.0 version: 0.27.1 execa: - specifier: ^9.6.1 + specifier: ^9.5.2 version: 9.6.1 ora: specifier: ^9.0.0 @@ -2270,20 +2267,20 @@ importers: specifier: ~6.1.2 version: 6.1.2 tsx: - specifier: ^4.21.0 + specifier: ^4.19.3 version: 4.21.0 typescript: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/streams: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -2294,10 +2291,10 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -2309,8 +2306,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/tmlanguage-generator: dependencies: @@ -2322,8 +2319,8 @@ importers: version: 3.1.0 devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/plist': specifier: ~3.0.5 version: 3.0.5 @@ -2337,20 +2334,20 @@ importers: core/packages/tspd: dependencies: '@alloy-js/core': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@alloy-js/markdown': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@alloy-js/typescript': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@microsoft/api-extractor': - specifier: ^7.55.2 - version: 7.55.2(@types/node@25.0.2) + specifier: ^7.52.1 + version: 7.55.2(@types/node@24.10.4) '@microsoft/api-extractor-model': specifier: ^7.30.6 - version: 7.32.2(@types/node@25.0.2) + version: 7.32.2(@types/node@24.10.4) '@microsoft/tsdoc': specifier: ^0.16.0 version: 0.16.0 @@ -2364,8 +2361,8 @@ importers: specifier: ~1.1.1 version: 1.1.1 prettier: - specifier: ~3.7.4 - version: 3.7.4 + specifier: ~3.6.2 + version: 3.6.2 typedoc: specifier: ^0.28.1 version: 0.28.15(typescript@5.9.3) @@ -2373,21 +2370,21 @@ importers: specifier: ^4.5.2 version: 4.9.0(typedoc@0.28.15(typescript@5.9.3)) yaml: - specifier: ~2.8.2 + specifier: ~2.8.0 version: 2.8.2 yargs: specifier: ~18.0.0 version: 18.0.0 devDependencies: '@alloy-js/cli': - specifier: ^0.22.0 - version: 0.22.0 + specifier: ^0.21.0 + version: 0.21.0 '@alloy-js/rollup-plugin': specifier: ^0.1.0 version: 0.1.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@4.49.0) '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/yargs': specifier: ~17.0.33 version: 17.0.35 @@ -2395,10 +2392,10 @@ importers: specifier: workspace:^ version: link:../prettier-plugin-typespec '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -2413,8 +2410,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/typespec-vs: devDependencies: @@ -2434,14 +2431,14 @@ importers: specifier: ^10.0.9 version: 10.0.10 '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@types/semver': specifier: ^7.5.8 version: 7.7.1 '@types/vscode': - specifier: ~1.107.0 - version: 1.107.0 + specifier: ~1.106.1 + version: 1.106.1 '@types/which': specifier: ^3.0.4 version: 3.0.4 @@ -2452,10 +2449,10 @@ importers: specifier: workspace:^ version: link:../internal-build-utils '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vscode/extension-telemetry': specifier: ^1.0.0 @@ -2464,10 +2461,10 @@ importers: specifier: ^2.3.9 version: 2.5.2 '@vscode/test-web': - specifier: ^0.0.77 - version: 0.0.77 + specifier: ^0.0.75 + version: 0.0.75 '@vscode/vsce': - specifier: ~3.7.1 + specifier: ~3.7.0 version: 3.7.1 ajv: specifier: ~8.17.1 @@ -2485,7 +2482,7 @@ importers: specifier: ^11.1.0 version: 11.7.5 playwright: - specifier: ^1.57.0 + specifier: ^1.51.1 version: 1.57.0 rimraf: specifier: ~6.1.2 @@ -2500,8 +2497,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) vscode-languageclient: specifier: ~9.0.1 version: 9.0.1 @@ -2509,14 +2506,14 @@ importers: specifier: ^6.0.0 version: 6.0.0 yaml: - specifier: ~2.8.2 + specifier: ~2.8.0 version: 2.8.2 core/packages/versioning: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -2527,10 +2524,10 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -2542,14 +2539,14 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) core/packages/xml: devDependencies: '@types/node': - specifier: ~25.0.2 - version: 25.0.2 + specifier: ~24.10.1 + version: 24.10.4 '@typespec/compiler': specifier: workspace:^ version: link:../compiler @@ -2560,10 +2557,10 @@ importers: specifier: workspace:^ version: link:../tspd '@vitest/coverage-v8': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^4.0.15 + specifier: ^4.0.4 version: 4.0.15(vitest@4.0.15) c8: specifier: ^10.1.3 @@ -2575,8 +2572,8 @@ importers: specifier: ~5.9.2 version: 5.9.3 vitest: - specifier: ^4.0.15 - version: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^4.0.4 + version: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) eng/feeds: devDependencies: @@ -3459,29 +3456,29 @@ packages: '@alloy-js/babel-preset@0.2.1': resolution: {integrity: sha512-vz9kvQwx5qBzHIw4ryqUaQqpgNOMBmkdDcV3e2zZfMq8Pp16ePFtvviHh6RwyLcvXQQClex3ZZy8ON9TifMnxw==} - '@alloy-js/cli@0.22.0': - resolution: {integrity: sha512-M9XeHxdSRIZnwCZrYkOIuLrQQfxyTuc7tJrMjJdOFgvShBjwZJG21iFhvvYp5Reeq+GFEbuGlviho3GSxd7szA==} + '@alloy-js/cli@0.21.0': + resolution: {integrity: sha512-k1Rf6kbYPdMKYJ1pFmhbk0NpW7p/aL/HbmxpJxmF/tbXAhZmNO62f9JM4qF64jNnq9byq31PMBSOIAIZFLqa1A==} engines: {node: '>=18.0.0'} hasBin: true - '@alloy-js/core@0.22.0': - resolution: {integrity: sha512-cqa6CL2m3zfPXF64Zr7WIqOpSWyqFi7ojQJVzpMjOsb1zJhoQzKt28/FCI6++Na4QDeSynOmWGEvHZ7CDYXn4w==} + '@alloy-js/core@0.21.0': + resolution: {integrity: sha512-eIBllm+Lgk/AcV6QdipZAVlYPIp6RHmgz046GXBQeXZnTZXmPHURVFI18/FVuaK7K+uUt0eriPXIYXs4/Ja5rQ==} - '@alloy-js/csharp@0.22.0': - resolution: {integrity: sha512-3m0HveXIgR3hScVMZbG1y264YTgvDuSeZqR1ARTsk05RR6YUD/7MFxJd5IiT4fOYePgROWO7CuBllrTexfj0Yg==} + '@alloy-js/csharp@0.21.0': + resolution: {integrity: sha512-Tw3AQaHjwRTZB6L6QPoXFJOmjDQyyGb2gwwAKGnea7q/J6BmwNkBHvCSuVe21Nkhgb4/upivWFyP8zbtdVAE5A==} - '@alloy-js/markdown@0.22.0': - resolution: {integrity: sha512-VslLzyk9780MaEAKH/9LE7dPcxIxHEx/V3+MsoZ8nHK+rvpmnTblxFJpbkLvmhUf8Oq2hmgsvfv7jIauBGI0rQ==} + '@alloy-js/markdown@0.21.0': + resolution: {integrity: sha512-Er2aqWdolajWUrHxeqZoiK/Grdet2zaEr8ZtIbvv/M0sMz975p0ltijZNF3OnMde0wFlk1Jg14hkiitI9wFVgQ==} - '@alloy-js/msbuild@0.22.0': - resolution: {integrity: sha512-Zi4bezFzQveW4u78qwSlIlscZd8y5OKCRitSOAiw0qLfF95L4+3wgQ6QpbYuqeRRZIa5kimhbogKTSrSxycrUg==} + '@alloy-js/msbuild@0.21.0': + resolution: {integrity: sha512-QmMwF7eoYMdR5mX+8cIKb5F3Mgi3uQlFYrGYq92ht6BOc/XKyBXIwCXq6zqPMAT7nd2BHDD2hvgbL6nLS4QcGg==} '@alloy-js/rollup-plugin@0.1.0': resolution: {integrity: sha512-MXR8mBdSh/pxMP8kIXAcMYKsm5yOWZ+igxcaRX1vBXFiHU4eK7gE/5q6Fk8Vdydh+MItWtgekwIhUWvcszdNFQ==} engines: {node: '>=18.0.0'} - '@alloy-js/typescript@0.22.0': - resolution: {integrity: sha512-jARBNxAA5aEhysleFFd7cGfjckkEXLCH9kDaJSH5xBOu4cU0v7q5TvAqgPlEIkhfOh2983XLX0nVtZu01p0UjQ==} + '@alloy-js/typescript@0.21.0': + resolution: {integrity: sha512-SsxdYkXhrP8jjO2gENav9bHPHaonNrreW469RaOot3cRqhsHPA1RmBrzNPJov37YknzTg4Wlk0JsEFT4Qibgfg==} '@arcanis/slice-ansi@1.1.1': resolution: {integrity: sha512-xguP2WR2Dv0gQ7Ykbdb7BNCnPnIPB94uTi0Z2NvkRBEnhbwjOQ7QyQKJXrVQg4qDpiD9hA5l5cCwy/z2OXgc3w==} @@ -3538,6 +3535,11 @@ packages: '@astrojs/sitemap@3.6.0': resolution: {integrity: sha512-4aHkvcOZBWJigRmMIAJwRQXBS+ayoP5z40OklTXYXhUDhwusz+DyDl+nSshY6y9DvkVEavwNcFO8FD81iGhXjg==} + '@astrojs/starlight@0.36.3': + resolution: {integrity: sha512-5cm4QVQHUP6ZE52O43TtUpsTvLKdZa9XEs4l3suzuY7Ymsbz4ojtoL9NhistbMqM+/qk6fm6SmxbOL6hQ/LfNA==} + peerDependencies: + astro: ^5.5.0 + '@astrojs/starlight@0.37.1': resolution: {integrity: sha512-STNsR5PaDoiW4IgcX17Fp42FfyqwuweWPts/EWEMcFPAeg9Nvpu3UvVCorasYrgfJgaJTeydsOV++0ACA1KYDA==} peerDependencies: @@ -5460,11 +5462,10 @@ packages: resolution: {integrity: sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==} engines: {node: '>= 14.0.0'} - '@koa/router@15.1.0': - resolution: {integrity: sha512-0zCmuapmgBHrfVSFjBfCdgnkBnXwRGcG5qHnxVs8ZoTNEJiwSSspgJ5+2NugiqLJS/S0d96KMeNntLqTNWaioQ==} + '@koa/router@14.0.0': + resolution: {integrity: sha512-LBSu5K0qAaaQcXX/0WIB9PGDevyCxxpnc1uq13vV/CgObaVxuis5hKl3Eboq/8gcb6ebnkAStW9NB/Em2eYyFA==} engines: {node: '>= 20'} - peerDependencies: - koa: ^2.0.0 || ^3.0.0 + deprecated: Please upgrade to v15 or higher. All reported bugs in this version are fixed in newer releases, dependencies have been updated, and security has been improved. '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} @@ -6948,6 +6949,9 @@ packages: '@types/node@20.19.27': resolution: {integrity: sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==} + '@types/node@24.10.4': + resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==} + '@types/node@25.0.2': resolution: {integrity: sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==} @@ -7025,6 +7029,9 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/vscode@1.106.1': + resolution: {integrity: sha512-R/HV8u2h8CAddSbX8cjpdd7B8/GnE4UjgjpuGuHcbp1xV6yh4OeqU4L1pKjlwujCrSFS0MOpwJAIs/NexMB1fQ==} + '@types/vscode@1.107.0': resolution: {integrity: sha512-XS8YE1jlyTIowP64+HoN30OlC1H9xqSlq1eoLZUgFEC8oUTO6euYZxti1xRiLSfZocs4qytTzR6xCBYtioQTCg==} @@ -7270,8 +7277,8 @@ packages: resolution: {integrity: sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==} engines: {node: '>=16'} - '@vscode/test-web@0.0.77': - resolution: {integrity: sha512-jeHvZn2crMdX6ICX7vZYeDx6DLxyW07b9EU3cV8zT+coEVQpf4C8zIN6uEBV67xFOUmOi4C1bzFZF5oUkDD7+w==} + '@vscode/test-web@0.0.75': + resolution: {integrity: sha512-/V+wPN2jDUrUxoT1nDbGTghwhKU6AlfLrnkq0lNvBqX3ka5QImmRnDTHFu1JKfwkCCp3WJEQgFZVrcpKmC+n2g==} engines: {node: '>=20'} hasBin: true @@ -8242,10 +8249,6 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chokidar@5.0.0: - resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} - engines: {node: '>= 20.19.0'} - chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -9024,6 +9027,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-shims@2.6.2: + resolution: {integrity: sha512-50HiheXiMg28GQagXXYMqzUuVPKsAhFLuWIxBxDbfnmT+hFTU8AyfAJaWjDaWmQbjNiPwTuuPqq7NAKFRdLaow==} + es-module-shims@2.7.0: resolution: {integrity: sha512-rXcorgujAVSIGppDd6QEM2kPiwHJmtPbCtrj1bPnoo8zo3MWgEIABfOZEtuM7XrywOXzTPyGzgVEZR/pqIM57A==} @@ -11696,6 +11702,11 @@ packages: peerDependencies: prettier: ^3.0.3 + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + prettier@3.7.4: resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} engines: {node: '>=14'} @@ -11948,10 +11959,6 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} - readdirp@5.0.0: - resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} - engines: {node: '>= 20.19.0'} - readline-sync@1.4.9: resolution: {integrity: sha512-mp5h1N39kuKbCRGebLPIKTBOhuDw55GaNg5S+K9TW9uDAS1wIHpGUc2YokdUMZJb8GqS49sWmWEDijaESYh0Hg==} engines: {node: '>= 0.8.0'} @@ -13418,18 +13425,18 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-plugin-checker@0.12.0: - resolution: {integrity: sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg==} + vite-plugin-checker@0.11.0: + resolution: {integrity: sha512-iUdO9Pl9UIBRPAragwi3as/BXXTtRu4G12L3CMrjx+WVTd9g/MsqNakreib9M/2YRVkhZYiTEwdH2j4Dm0w7lw==} engines: {node: '>=16.11'} peerDependencies: '@biomejs/biome': '>=1.7' - eslint: '>=9.39.1' + eslint: '>=7' meow: ^13.2.0 optionator: ^0.9.4 oxlint: '>=1' stylelint: '>=16' typescript: '*' - vite: '>=5.4.21' + vite: '>=5.4.20' vls: '*' vti: '*' vue-tsc: ~2.2.10 || ^3.0.0 @@ -13690,8 +13697,8 @@ packages: vscode-oniguruma@2.0.1: resolution: {integrity: sha512-poJU8iHIWnC3vgphJnrLZyI3YdqRlR27xzqDmpPXYzA93R4Gk8z7T6oqDzDoHjoikA2aS82crdXFkjELCdJsjQ==} - vscode-textmate@9.3.0: - resolution: {integrity: sha512-zHiZZOdb9xqj5/X1C4a29sbgT2HngdWxPLSl3PyHRQF+5visI4uNM020OHiLJjsMxUssyk/pGVAg/9LCIobrVg==} + vscode-textmate@9.2.1: + resolution: {integrity: sha512-eXiUi2yYFv9bdvgrYtJynA7UemCEkpVNE50S9iBBA08LYG5t9+/TB+8IRS/YoYOubCez2OkSyZ1Q12eQMwzbrw==} vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} @@ -13706,8 +13713,13 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - web-tree-sitter@0.26.3: - resolution: {integrity: sha512-JIVgIKFS1w6lejxSntCtsS/QsE/ecTS00en809cMxMPxaor6MvUnQ+ovG8uTTTvQCFosSh4MeDdI5bSGw5SoBw==} + web-tree-sitter@0.25.10: + resolution: {integrity: sha512-Y09sF44/13XvgVKgO2cNDw5rGk6s26MgoZPXLESvMXeefBf7i6/73eFurre0IsTW6E14Y0ArIzhUMmjoc7xyzA==} + peerDependencies: + '@types/emscripten': ^1.40.0 + peerDependenciesMeta: + '@types/emscripten': + optional: true webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} @@ -14105,7 +14117,7 @@ snapshots: - '@babel/core' - supports-color - '@alloy-js/cli@0.22.0': + '@alloy-js/cli@0.21.0': dependencies: '@alloy-js/babel-preset': 0.2.1(@babel/core@7.28.5) '@babel/core': 7.28.5 @@ -14115,30 +14127,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@alloy-js/core@0.22.0': + '@alloy-js/core@0.21.0': dependencies: '@vue/reactivity': 3.5.25 cli-table3: 0.6.5 pathe: 2.0.3 picocolors: 1.1.1 - prettier: 3.7.4 + prettier: 3.6.2 - '@alloy-js/csharp@0.22.0': + '@alloy-js/csharp@0.21.0': dependencies: - '@alloy-js/core': 0.22.0 - '@alloy-js/msbuild': 0.22.0 + '@alloy-js/core': 0.21.0 + '@alloy-js/msbuild': 0.21.0 change-case: 5.4.4 marked: 16.4.2 pathe: 2.0.3 - '@alloy-js/markdown@0.22.0': + '@alloy-js/markdown@0.21.0': dependencies: - '@alloy-js/core': 0.22.0 + '@alloy-js/core': 0.21.0 yaml: 2.8.2 - '@alloy-js/msbuild@0.22.0': + '@alloy-js/msbuild@0.21.0': dependencies: - '@alloy-js/core': 0.22.0 + '@alloy-js/core': 0.21.0 change-case: 5.4.4 marked: 16.4.2 pathe: 2.0.3 @@ -14154,9 +14166,9 @@ snapshots: - rollup - supports-color - '@alloy-js/typescript@0.22.0': + '@alloy-js/typescript@0.21.0': dependencies: - '@alloy-js/core': 0.22.0 + '@alloy-js/core': 0.21.0 change-case: 5.4.4 pathe: 2.0.3 @@ -14270,26 +14282,59 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) ultrahtml: 1.6.0 - vite: 6.4.1(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.1(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + '@astrojs/sitemap@3.6.0': + dependencies: + sitemap: 8.0.2 + stream-replace-string: 2.0.0 + zod: 3.25.76 + + '@astrojs/starlight@0.36.3(astro@5.16.5(@azure/identity@4.13.0)(@azure/storage-blob@12.29.1)(@types/node@25.0.2)(rollup@4.49.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))': + dependencies: + '@astrojs/markdown-remark': 6.3.10 + '@astrojs/mdx': 4.3.13(astro@5.16.5(@azure/identity@4.13.0)(@azure/storage-blob@12.29.1)(@types/node@25.0.2)(rollup@4.49.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + '@astrojs/sitemap': 3.6.0 + '@pagefind/default-ui': 1.4.0 + '@types/hast': 3.0.4 + '@types/js-yaml': 4.0.9 + '@types/mdast': 4.0.4 + astro: 5.16.5(@azure/identity@4.13.0)(@azure/storage-blob@12.29.1)(@types/node@25.0.2)(rollup@4.49.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + astro-expressive-code: 0.41.4(astro@5.16.5(@azure/identity@4.13.0)(@azure/storage-blob@12.29.1)(@types/node@25.0.2)(rollup@4.49.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + bcp-47: 2.1.0 + hast-util-from-html: 2.0.3 + hast-util-select: 6.0.4 + hast-util-to-string: 3.0.1 + hastscript: 9.0.1 + i18next: 23.16.8 + js-yaml: 4.1.1 + klona: 2.0.6 + mdast-util-directive: 3.1.0 + mdast-util-to-markdown: 2.1.2 + mdast-util-to-string: 4.0.0 + pagefind: 1.4.0 + rehype: 13.0.2 + rehype-format: 5.0.1 + remark-directive: 3.0.1 + ultrahtml: 1.6.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.3 transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - supports-color - - terser - - tsx - - yaml - - '@astrojs/sitemap@3.6.0': - dependencies: - sitemap: 8.0.2 - stream-replace-string: 2.0.0 - zod: 3.25.76 '@astrojs/starlight@0.37.1(astro@5.16.5(@azure/identity@4.13.0)(@azure/storage-blob@12.29.1)(@types/node@25.0.2)(rollup@4.49.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))': dependencies: @@ -16686,6 +16731,15 @@ snapshots: '@inquirer/ansi@2.0.2': {} + '@inquirer/checkbox@5.0.3(@types/node@24.10.4)': + dependencies: + '@inquirer/ansi': 2.0.2 + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/checkbox@5.0.3(@types/node@25.0.2)': dependencies: '@inquirer/ansi': 2.0.2 @@ -16695,6 +16749,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/confirm@6.0.3(@types/node@24.10.4)': + dependencies: + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/type': 4.0.2(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/confirm@6.0.3(@types/node@25.0.2)': dependencies: '@inquirer/core': 11.1.0(@types/node@25.0.2) @@ -16702,6 +16763,18 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/core@11.1.0(@types/node@24.10.4)': + dependencies: + '@inquirer/ansi': 2.0.2 + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@24.10.4) + cli-width: 4.1.0 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + wrap-ansi: 9.0.2 + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/core@11.1.0(@types/node@25.0.2)': dependencies: '@inquirer/ansi': 2.0.2 @@ -16714,6 +16787,14 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/editor@5.0.3(@types/node@24.10.4)': + dependencies: + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/external-editor': 2.0.2(@types/node@24.10.4) + '@inquirer/type': 4.0.2(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/editor@5.0.3(@types/node@25.0.2)': dependencies: '@inquirer/core': 11.1.0(@types/node@25.0.2) @@ -16722,6 +16803,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/expand@5.0.3(@types/node@24.10.4)': + dependencies: + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/type': 4.0.2(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/expand@5.0.3(@types/node@25.0.2)': dependencies: '@inquirer/core': 11.1.0(@types/node@25.0.2) @@ -16729,6 +16817,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/external-editor@2.0.2(@types/node@24.10.4)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.1 + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/external-editor@2.0.2(@types/node@25.0.2)': dependencies: chardet: 2.1.1 @@ -16738,6 +16833,13 @@ snapshots: '@inquirer/figures@2.0.2': {} + '@inquirer/input@5.0.3(@types/node@24.10.4)': + dependencies: + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/type': 4.0.2(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/input@5.0.3(@types/node@25.0.2)': dependencies: '@inquirer/core': 11.1.0(@types/node@25.0.2) @@ -16745,6 +16847,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/number@4.0.3(@types/node@24.10.4)': + dependencies: + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/type': 4.0.2(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/number@4.0.3(@types/node@25.0.2)': dependencies: '@inquirer/core': 11.1.0(@types/node@25.0.2) @@ -16752,6 +16861,14 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/password@5.0.3(@types/node@24.10.4)': + dependencies: + '@inquirer/ansi': 2.0.2 + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/type': 4.0.2(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/password@5.0.3(@types/node@25.0.2)': dependencies: '@inquirer/ansi': 2.0.2 @@ -16760,6 +16877,21 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/prompts@8.1.0(@types/node@24.10.4)': + dependencies: + '@inquirer/checkbox': 5.0.3(@types/node@24.10.4) + '@inquirer/confirm': 6.0.3(@types/node@24.10.4) + '@inquirer/editor': 5.0.3(@types/node@24.10.4) + '@inquirer/expand': 5.0.3(@types/node@24.10.4) + '@inquirer/input': 5.0.3(@types/node@24.10.4) + '@inquirer/number': 4.0.3(@types/node@24.10.4) + '@inquirer/password': 5.0.3(@types/node@24.10.4) + '@inquirer/rawlist': 5.1.0(@types/node@24.10.4) + '@inquirer/search': 4.0.3(@types/node@24.10.4) + '@inquirer/select': 5.0.3(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/prompts@8.1.0(@types/node@25.0.2)': dependencies: '@inquirer/checkbox': 5.0.3(@types/node@25.0.2) @@ -16775,6 +16907,13 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/rawlist@5.1.0(@types/node@24.10.4)': + dependencies: + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/type': 4.0.2(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/rawlist@5.1.0(@types/node@25.0.2)': dependencies: '@inquirer/core': 11.1.0(@types/node@25.0.2) @@ -16782,6 +16921,14 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/search@4.0.3(@types/node@24.10.4)': + dependencies: + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/search@4.0.3(@types/node@25.0.2)': dependencies: '@inquirer/core': 11.1.0(@types/node@25.0.2) @@ -16790,6 +16937,15 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/select@5.0.3(@types/node@24.10.4)': + dependencies: + '@inquirer/ansi': 2.0.2 + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@24.10.4) + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/select@5.0.3(@types/node@25.0.2)': dependencies: '@inquirer/ansi': 2.0.2 @@ -16799,6 +16955,10 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@inquirer/type@4.0.2(@types/node@24.10.4)': + optionalDependencies: + '@types/node': 24.10.4 + '@inquirer/type@4.0.2(@types/node@25.0.2)': optionalDependencies: '@types/node': 25.0.2 @@ -16824,11 +16984,11 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.3(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.3(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2))': dependencies: glob: 11.1.0 react-docgen-typescript: 2.4.0(typescript@5.9.3) - vite: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: typescript: 5.9.3 @@ -16857,11 +17017,10 @@ snapshots: dependencies: vary: 1.1.2 - '@koa/router@15.1.0(koa@3.1.1)': + '@koa/router@14.0.0': dependencies: debug: 4.4.3(supports-color@8.1.1) http-errors: 2.0.1 - koa: 3.1.1 koa-compose: 4.1.0 path-to-regexp: 8.3.0 transitivePeerDependencies: @@ -16925,6 +17084,14 @@ snapshots: transitivePeerDependencies: - tslib + '@microsoft/api-extractor-model@7.32.2(@types/node@24.10.4)': + dependencies: + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.0 + '@rushstack/node-core-library': 5.19.1(@types/node@24.10.4) + transitivePeerDependencies: + - '@types/node' + '@microsoft/api-extractor-model@7.32.2(@types/node@25.0.2)': dependencies: '@microsoft/tsdoc': 0.16.0 @@ -16933,6 +17100,25 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@microsoft/api-extractor@7.55.2(@types/node@24.10.4)': + dependencies: + '@microsoft/api-extractor-model': 7.32.2(@types/node@24.10.4) + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.0 + '@rushstack/node-core-library': 5.19.1(@types/node@24.10.4) + '@rushstack/rig-package': 0.6.0 + '@rushstack/terminal': 0.19.5(@types/node@24.10.4) + '@rushstack/ts-command-line': 5.1.5(@types/node@24.10.4) + diff: 8.0.2 + lodash: 4.17.21 + minimatch: 10.0.3 + resolve: 1.22.11 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.8.2 + transitivePeerDependencies: + - '@types/node' + '@microsoft/api-extractor@7.55.2(@types/node@25.0.2)': dependencies: '@microsoft/api-extractor-model': 7.32.2(@types/node@25.0.2) @@ -17360,6 +17546,29 @@ snapshots: '@pnpm/types': 1001.1.0 load-json-file: 6.2.0 + '@pnpm/cli-utils@1001.2.14(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0)': + dependencies: + '@pnpm/cli-meta': 1000.0.14 + '@pnpm/config': 1004.7.1(@pnpm/logger@1001.0.1) + '@pnpm/config.deps-installer': 1000.0.24(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4)) + '@pnpm/default-reporter': 1002.1.2(@pnpm/logger@1001.0.1) + '@pnpm/error': 1000.0.5 + '@pnpm/logger': 1001.0.1 + '@pnpm/manifest-utils': 1002.0.2(@pnpm/logger@1001.0.1) + '@pnpm/package-is-installable': 1000.0.18(@pnpm/logger@1001.0.1) + '@pnpm/pnpmfile': 1002.1.7(@pnpm/logger@1001.0.1) + '@pnpm/read-project-manifest': 1001.2.2(@pnpm/logger@1001.0.1) + '@pnpm/store-connection-manager': 1002.3.5(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/types': 1001.1.0 + '@pnpm/util.lex-comparator': 3.0.2 + chalk: 4.1.2 + load-json-file: 6.2.0 + transitivePeerDependencies: + - '@pnpm/worker' + - domexception + - supports-color + - typanion + '@pnpm/cli-utils@1001.2.14(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0)': dependencies: '@pnpm/cli-meta': 1000.0.14 @@ -17383,6 +17592,27 @@ snapshots: - supports-color - typanion + '@pnpm/client@1001.1.10(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0)': + dependencies: + '@pnpm/default-resolver': 1002.2.18(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/directory-fetcher': 1000.1.18(@pnpm/logger@1001.0.1) + '@pnpm/fetch': 1000.2.9(@pnpm/logger@1001.0.1) + '@pnpm/fetching-types': 1000.2.0 + '@pnpm/fetching.binary-fetcher': 1003.0.1(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4)) + '@pnpm/git-fetcher': 1004.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/network.auth-header': 1000.0.6 + '@pnpm/node.fetcher': 1001.0.14(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/resolver-base': 1005.3.2 + '@pnpm/tarball-fetcher': 1004.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/types': 1001.1.0 + ramda: '@pnpm/ramda@0.28.1' + transitivePeerDependencies: + - '@pnpm/logger' + - '@pnpm/worker' + - domexception + - supports-color + - typanion + '@pnpm/client@1001.1.10(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0)': dependencies: '@pnpm/default-resolver': 1002.2.18(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0) @@ -17413,6 +17643,28 @@ snapshots: transitivePeerDependencies: - '@pnpm/logger' + '@pnpm/config.deps-installer@1000.0.24(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))': + dependencies: + '@pnpm/config.config-writer': 1000.0.18(@pnpm/logger@1001.0.1) + '@pnpm/core-loggers': 1001.0.7(@pnpm/logger@1001.0.1) + '@pnpm/error': 1000.0.5 + '@pnpm/fetch': 1000.2.9(@pnpm/logger@1001.0.1) + '@pnpm/logger': 1001.0.1 + '@pnpm/network.auth-header': 1000.0.6 + '@pnpm/npm-resolver': 1005.0.0(@pnpm/logger@1001.0.1) + '@pnpm/package-store': 1005.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4)) + '@pnpm/parse-wanted-dependency': 1001.0.0 + '@pnpm/pick-registry-for-package': 1000.0.14 + '@pnpm/read-modules-dir': 1000.0.0 + '@pnpm/read-package-json': 1000.1.5 + '@pnpm/types': 1001.1.0 + '@zkochan/rimraf': 3.0.2 + get-npm-tarball-url: 2.1.0 + transitivePeerDependencies: + - '@pnpm/worker' + - domexception + - supports-color + '@pnpm/config.deps-installer@1000.0.24(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))': dependencies: '@pnpm/config.config-writer': 1000.0.18(@pnpm/logger@1001.0.1) @@ -17540,6 +17792,25 @@ snapshots: stacktracey: 2.1.8 string-length: 4.0.2 + '@pnpm/default-resolver@1002.2.18(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0)': + dependencies: + '@pnpm/error': 1000.0.5 + '@pnpm/fetching-types': 1000.2.0 + '@pnpm/git-resolver': 1001.1.9(@pnpm/logger@1001.0.1) + '@pnpm/local-resolver': 1002.1.8(@pnpm/logger@1001.0.1) + '@pnpm/node.resolver': 1001.0.11(@pnpm/logger@1001.0.1) + '@pnpm/npm-resolver': 1005.0.0(@pnpm/logger@1001.0.1) + '@pnpm/resolver-base': 1005.3.2 + '@pnpm/resolving.bun-resolver': 1003.0.2(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/resolving.deno-resolver': 1003.0.2(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/tarball-resolver': 1002.1.8 + transitivePeerDependencies: + - '@pnpm/logger' + - '@pnpm/worker' + - domexception + - supports-color + - typanion + '@pnpm/default-resolver@1002.2.18(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0)': dependencies: '@pnpm/error': 1000.0.5 @@ -17615,6 +17886,19 @@ snapshots: transitivePeerDependencies: - domexception + '@pnpm/fetching.binary-fetcher@1003.0.1(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))': + dependencies: + '@pnpm/error': 1000.0.5 + '@pnpm/fetcher-base': 1001.0.6 + '@pnpm/fetching-types': 1000.2.0 + '@pnpm/worker': 1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4) + adm-zip: 0.5.16 + rename-overwrite: 6.0.3 + ssri: 10.0.5 + tempy: 1.0.1 + transitivePeerDependencies: + - domexception + '@pnpm/fetching.binary-fetcher@1003.0.1(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))': dependencies: '@pnpm/error': 1000.0.5 @@ -17668,6 +17952,19 @@ snapshots: dependencies: npm-packlist: 5.1.3 + '@pnpm/git-fetcher@1004.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0)': + dependencies: + '@pnpm/fetcher-base': 1001.0.6 + '@pnpm/fs.packlist': 2.0.0 + '@pnpm/logger': 1001.0.1 + '@pnpm/prepare-package': 1000.0.30(@pnpm/logger@1001.0.1)(typanion@3.14.0) + '@pnpm/worker': 1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4) + '@zkochan/rimraf': 3.0.2 + execa: safe-execa@0.1.2 + transitivePeerDependencies: + - supports-color + - typanion + '@pnpm/git-fetcher@1004.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0)': dependencies: '@pnpm/fetcher-base': 1001.0.6 @@ -17821,6 +18118,23 @@ snapshots: transitivePeerDependencies: - domexception + '@pnpm/node.fetcher@1001.0.14(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0)': + dependencies: + '@pnpm/create-cafs-store': 1000.0.25(@pnpm/logger@1001.0.1) + '@pnpm/crypto.shasums-file': 1001.0.2 + '@pnpm/error': 1000.0.5 + '@pnpm/fetching-types': 1000.2.0 + '@pnpm/fetching.binary-fetcher': 1003.0.1(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4)) + '@pnpm/node.resolver': 1001.0.11(@pnpm/logger@1001.0.1) + '@pnpm/tarball-fetcher': 1004.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + detect-libc: 2.1.2 + transitivePeerDependencies: + - '@pnpm/logger' + - '@pnpm/worker' + - domexception + - supports-color + - typanion + '@pnpm/node.fetcher@1001.0.14(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0)': dependencies: '@pnpm/create-cafs-store': 1000.0.25(@pnpm/logger@1001.0.1) @@ -17934,6 +18248,31 @@ snapshots: mem: 8.1.1 semver: 7.7.3 + '@pnpm/package-requester@1009.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))': + dependencies: + '@pnpm/core-loggers': 1001.0.7(@pnpm/logger@1001.0.1) + '@pnpm/dependency-path': 1001.1.7 + '@pnpm/error': 1000.0.5 + '@pnpm/fetcher-base': 1001.0.6 + '@pnpm/graceful-fs': 1000.0.1 + '@pnpm/logger': 1001.0.1 + '@pnpm/package-is-installable': 1000.0.18(@pnpm/logger@1001.0.1) + '@pnpm/pick-fetcher': 1001.0.0 + '@pnpm/read-package-json': 1000.1.5 + '@pnpm/resolver-base': 1005.3.2 + '@pnpm/store-controller-types': 1004.3.2 + '@pnpm/store.cafs': 1000.0.23 + '@pnpm/types': 1001.1.0 + '@pnpm/worker': 1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4) + detect-libc: 2.1.2 + p-defer: 3.0.0 + p-limit: 3.1.0 + p-queue: 6.6.2 + promise-share: 1.0.0 + ramda: '@pnpm/ramda@0.28.1' + semver: 7.7.3 + ssri: 10.0.5 + '@pnpm/package-requester@1009.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))': dependencies: '@pnpm/core-loggers': 1001.0.7(@pnpm/logger@1001.0.1) @@ -17959,6 +18298,22 @@ snapshots: semver: 7.7.3 ssri: 10.0.5 + '@pnpm/package-store@1005.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))': + dependencies: + '@pnpm/create-cafs-store': 1000.0.25(@pnpm/logger@1001.0.1) + '@pnpm/fetcher-base': 1001.0.6 + '@pnpm/logger': 1001.0.1 + '@pnpm/package-requester': 1009.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4)) + '@pnpm/resolver-base': 1005.3.2 + '@pnpm/store-controller-types': 1004.3.2 + '@pnpm/store.cafs': 1000.0.23 + '@pnpm/types': 1001.1.0 + '@pnpm/worker': 1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4) + '@zkochan/rimraf': 3.0.2 + load-json-file: 6.2.0 + ramda: '@pnpm/ramda@0.28.1' + ssri: 10.0.5 + '@pnpm/package-store@1005.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))': dependencies: '@pnpm/create-cafs-store': 1000.0.25(@pnpm/logger@1001.0.1) @@ -18071,6 +18426,27 @@ snapshots: dependencies: '@pnpm/types': 1001.1.0 + '@pnpm/resolving.bun-resolver@1003.0.2(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0)': + dependencies: + '@pnpm/constants': 1001.3.1 + '@pnpm/crypto.shasums-file': 1001.0.2 + '@pnpm/error': 1000.0.5 + '@pnpm/fetcher-base': 1001.0.6 + '@pnpm/fetching-types': 1000.2.0 + '@pnpm/fetching.binary-fetcher': 1003.0.1(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4)) + '@pnpm/node.fetcher': 1001.0.14(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/npm-resolver': 1005.0.0(@pnpm/logger@1001.0.1) + '@pnpm/resolver-base': 1005.3.2 + '@pnpm/types': 1001.1.0 + '@pnpm/util.lex-comparator': 3.0.2 + '@pnpm/worker': 1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4) + semver: 7.7.3 + transitivePeerDependencies: + - '@pnpm/logger' + - domexception + - supports-color + - typanion + '@pnpm/resolving.bun-resolver@1003.0.2(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0)': dependencies: '@pnpm/constants': 1001.3.1 @@ -18092,6 +18468,27 @@ snapshots: - supports-color - typanion + '@pnpm/resolving.deno-resolver@1003.0.2(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0)': + dependencies: + '@pnpm/constants': 1001.3.1 + '@pnpm/crypto.shasums-file': 1001.0.2 + '@pnpm/error': 1000.0.5 + '@pnpm/fetcher-base': 1001.0.6 + '@pnpm/fetching-types': 1000.2.0 + '@pnpm/fetching.binary-fetcher': 1003.0.1(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4)) + '@pnpm/node.fetcher': 1001.0.14(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/npm-resolver': 1005.0.0(@pnpm/logger@1001.0.1) + '@pnpm/resolver-base': 1005.3.2 + '@pnpm/types': 1001.1.0 + '@pnpm/util.lex-comparator': 3.0.2 + '@pnpm/worker': 1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4) + semver: 7.7.3 + transitivePeerDependencies: + - '@pnpm/logger' + - domexception + - supports-color + - typanion + '@pnpm/resolving.deno-resolver@1003.0.2(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0)': dependencies: '@pnpm/constants': 1001.3.1 @@ -18130,6 +18527,25 @@ snapshots: - domexception - supports-color + '@pnpm/store-connection-manager@1002.3.5(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0)': + dependencies: + '@pnpm/cli-meta': 1000.0.14 + '@pnpm/client': 1001.1.10(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/config': 1004.7.1(@pnpm/logger@1001.0.1) + '@pnpm/error': 1000.0.5 + '@pnpm/logger': 1001.0.1 + '@pnpm/package-store': 1005.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4)) + '@pnpm/server': 1001.0.15(@pnpm/logger@1001.0.1) + '@pnpm/store-path': 1000.0.5 + '@zkochan/diable': 1.0.2 + delay: 5.0.0 + dir-is-case-sensitive: 2.0.0 + transitivePeerDependencies: + - '@pnpm/worker' + - domexception + - supports-color + - typanion + '@pnpm/store-connection-manager@1002.3.5(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0)': dependencies: '@pnpm/cli-meta': 1000.0.14 @@ -18185,6 +18601,28 @@ snapshots: '@pnpm/types': 1001.1.0 symlink-dir: 6.0.5 + '@pnpm/tarball-fetcher@1004.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0)': + dependencies: + '@pnpm/core-loggers': 1001.0.7(@pnpm/logger@1001.0.1) + '@pnpm/error': 1000.0.5 + '@pnpm/fetcher-base': 1001.0.6 + '@pnpm/fetching-types': 1000.2.0 + '@pnpm/fs.packlist': 2.0.0 + '@pnpm/graceful-fs': 1000.0.1 + '@pnpm/logger': 1001.0.1 + '@pnpm/prepare-package': 1000.0.30(@pnpm/logger@1001.0.1)(typanion@3.14.0) + '@pnpm/worker': 1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4) + '@zkochan/retry': 0.2.0 + lodash.throttle: 4.1.1 + p-map-values: 1.0.0 + path-temp: 2.1.0 + ramda: '@pnpm/ramda@0.28.1' + rename-overwrite: 6.0.3 + transitivePeerDependencies: + - domexception + - supports-color + - typanion + '@pnpm/tarball-fetcher@1004.0.1(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0)': dependencies: '@pnpm/core-loggers': 1001.0.7(@pnpm/logger@1001.0.1) @@ -18226,6 +18664,25 @@ snapshots: dependencies: isexe: 2.0.0 + '@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4)': + dependencies: + '@pnpm/cafs-types': 1000.0.0 + '@pnpm/create-cafs-store': 1000.0.25(@pnpm/logger@1001.0.1) + '@pnpm/crypto.polyfill': 1000.1.0 + '@pnpm/error': 1000.0.5 + '@pnpm/exec.pkg-requires-build': 1000.0.14 + '@pnpm/fs.hard-link-dir': 1000.0.5(@pnpm/logger@1001.0.1) + '@pnpm/graceful-fs': 1000.0.1 + '@pnpm/logger': 1001.0.1 + '@pnpm/store.cafs': 1000.0.23 + '@pnpm/symlink-dependency': 1000.0.15(@pnpm/logger@1001.0.1) + '@rushstack/worker-pool': 0.4.9(@types/node@24.10.4) + is-windows: 1.0.2 + load-json-file: 6.2.0 + p-limit: 3.1.0 + transitivePeerDependencies: + - '@types/node' + '@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2)': dependencies: '@pnpm/cafs-types': 1000.0.0 @@ -18245,6 +18702,20 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@pnpm/workspace.find-packages@1000.0.49(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0)': + dependencies: + '@pnpm/cli-utils': 1001.2.14(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@24.10.4))(typanion@3.14.0) + '@pnpm/constants': 1001.3.1 + '@pnpm/fs.find-packages': 1000.0.20(@pnpm/logger@1001.0.1) + '@pnpm/logger': 1001.0.1 + '@pnpm/types': 1001.1.0 + '@pnpm/util.lex-comparator': 3.0.2 + transitivePeerDependencies: + - '@pnpm/worker' + - domexception + - supports-color + - typanion + '@pnpm/workspace.find-packages@1000.0.49(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0)': dependencies: '@pnpm/cli-utils': 1001.2.14(@pnpm/logger@1001.0.1)(@pnpm/worker@1000.4.1(@pnpm/logger@1001.0.1)(@types/node@25.0.2))(typanion@3.14.0) @@ -18422,6 +18893,19 @@ snapshots: '@rtsao/scc@1.1.0': {} + '@rushstack/node-core-library@5.19.1(@types/node@24.10.4)': + dependencies: + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1(ajv@8.13.0) + fs-extra: 11.3.2 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.11 + semver: 7.5.4 + optionalDependencies: + '@types/node': 24.10.4 + '@rushstack/node-core-library@5.19.1(@types/node@25.0.2)': dependencies: ajv: 8.13.0 @@ -18435,6 +18919,10 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@rushstack/problem-matcher@0.1.1(@types/node@24.10.4)': + optionalDependencies: + '@types/node': 24.10.4 + '@rushstack/problem-matcher@0.1.1(@types/node@25.0.2)': optionalDependencies: '@types/node': 25.0.2 @@ -18444,6 +18932,14 @@ snapshots: resolve: 1.22.11 strip-json-comments: 3.1.1 + '@rushstack/terminal@0.19.5(@types/node@24.10.4)': + dependencies: + '@rushstack/node-core-library': 5.19.1(@types/node@24.10.4) + '@rushstack/problem-matcher': 0.1.1(@types/node@24.10.4) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 24.10.4 + '@rushstack/terminal@0.19.5(@types/node@25.0.2)': dependencies: '@rushstack/node-core-library': 5.19.1(@types/node@25.0.2) @@ -18452,6 +18948,15 @@ snapshots: optionalDependencies: '@types/node': 25.0.2 + '@rushstack/ts-command-line@5.1.5(@types/node@24.10.4)': + dependencies: + '@rushstack/terminal': 0.19.5(@types/node@24.10.4) + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' + '@rushstack/ts-command-line@5.1.5(@types/node@25.0.2)': dependencies: '@rushstack/terminal': 0.19.5(@types/node@25.0.2) @@ -18461,6 +18966,10 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@rushstack/worker-pool@0.4.9(@types/node@24.10.4)': + optionalDependencies: + '@types/node': 24.10.4 + '@rushstack/worker-pool@0.4.9(@types/node@25.0.2)': optionalDependencies: '@types/node': 25.0.2 @@ -18675,13 +19184,13 @@ snapshots: '@standard-schema/spec@1.0.0': {} - '@storybook/builder-vite@10.1.8(esbuild@0.27.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2))': + '@storybook/builder-vite@10.1.8(esbuild@0.27.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@storybook/csf-plugin': 10.1.8(esbuild@0.27.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/mocker': 3.2.4(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + '@storybook/csf-plugin': 10.1.8(esbuild@0.27.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) storybook: 10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ts-dedent: 2.2.0 - vite: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - esbuild - msw @@ -18726,14 +19235,14 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@10.1.8(esbuild@0.27.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2))': + '@storybook/csf-plugin@10.1.8(esbuild@0.27.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2))': dependencies: storybook: 10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) unplugin: 2.3.11 optionalDependencies: esbuild: 0.27.1 rollup: 4.49.0 - vite: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) '@storybook/global@5.0.0': {} @@ -18748,11 +19257,11 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/react-vite@10.1.8(esbuild@0.27.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2))': + '@storybook/react-vite@10.1.8(esbuild@0.27.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.3(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.3(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) '@rollup/pluginutils': 5.3.0(rollup@4.49.0) - '@storybook/builder-vite': 10.1.8(esbuild@0.27.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)) + '@storybook/builder-vite': 10.1.8(esbuild@0.27.1)(rollup@4.49.0)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) '@storybook/react': 10.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.3) empathic: 2.0.0 magic-string: 0.30.21 @@ -18762,7 +19271,7 @@ snapshots: resolve: 1.22.11 storybook: 10.1.8(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tsconfig-paths: 4.2.0 - vite: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - esbuild - msw @@ -18899,7 +19408,7 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/braces@3.0.5': {} @@ -18907,7 +19416,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/responselike': 1.0.3 '@types/chai@5.2.3': @@ -18917,11 +19426,11 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/debounce@1.2.4': {} @@ -18945,7 +19454,7 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -18978,7 +19487,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/mdast@4.0.4': dependencies: @@ -18994,7 +19503,7 @@ snapshots: '@types/morgan@1.9.10': dependencies: - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/ms@2.1.0': {} @@ -19018,6 +19527,10 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@24.10.4': + dependencies: + undici-types: 7.16.0 + '@types/node@25.0.2': dependencies: undici-types: 7.16.0 @@ -19028,7 +19541,7 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 25.0.2 + '@types/node': 24.10.4 xmlbuilder: 15.1.1 '@types/pluralize@0.0.33': {} @@ -19053,7 +19566,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/sarif@2.1.7': {} @@ -19065,16 +19578,16 @@ snapshots: '@types/send@1.2.1': dependencies: - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/ssri@7.1.5': dependencies: - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/swagger-ui-dist@3.30.6': {} @@ -19094,6 +19607,8 @@ snapshots: '@types/unist@3.0.3': {} + '@types/vscode@1.106.1': {} + '@types/vscode@1.107.0': {} '@types/whatwg-mimetype@3.0.2': {} @@ -19102,7 +19617,7 @@ snapshots: '@types/xml2js@0.4.14': dependencies: - '@types/node': 25.0.2 + '@types/node': 24.10.4 '@types/yargs-parser@21.0.3': {} @@ -19277,6 +19792,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@5.1.2(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) + '@rolldown/pluginutils': 1.0.0-beta.53 + '@types/babel__core': 7.20.5 + react-refresh: 0.18.0 + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) + transitivePeerDependencies: + - supports-color + '@vitejs/plugin-react@5.1.2(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.28.5 @@ -19302,7 +19829,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -19313,7 +19840,7 @@ snapshots: eslint: 9.39.2 optionalDependencies: typescript: 5.9.3 - vitest: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -19334,13 +19861,21 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) + + '@vitest/mocker@4.0.15(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@vitest/spy': 4.0.15 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) '@vitest/mocker@4.0.15(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2))': dependencies: @@ -19384,7 +19919,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/utils@3.2.4': dependencies: @@ -19465,10 +20000,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@vscode/test-web@0.0.77': + '@vscode/test-web@0.0.75': dependencies: '@koa/cors': 5.0.0 - '@koa/router': 15.1.0(koa@3.1.1) + '@koa/router': 14.0.0 '@playwright/browser-chromium': 1.57.0 gunzip-maybe: 1.4.2 http-proxy-agent: 7.0.2 @@ -19817,7 +20352,7 @@ snapshots: algoliasearch: 4.25.3 clipanion: 4.0.0-rc.4(typanion@3.14.0) diff: 5.2.0 - ink: 3.2.0(@types/react@19.2.7)(react@18.3.1) + ink: 3.2.0(@types/react@19.2.7)(react@17.0.2) ink-text-input: 4.0.3(ink@3.2.0(@types/react@19.2.7)(react@17.0.2))(react@17.0.2) react: 17.0.2 semver: 7.7.3 @@ -19967,7 +20502,7 @@ snapshots: '@yarnpkg/plugin-git': 3.1.4(@yarnpkg/core@4.5.0(typanion@3.14.0))(typanion@3.14.0) clipanion: 4.0.0-rc.4(typanion@3.14.0) es-toolkit: 1.43.0 - ink: 3.2.0(@types/react@19.2.7)(react@17.0.2) + ink: 3.2.0(@types/react@19.2.7)(react@18.3.1) react: 17.0.2 semver: 7.7.3 tslib: 2.8.1 @@ -20883,10 +21418,6 @@ snapshots: dependencies: readdirp: 4.1.2 - chokidar@5.0.0: - dependencies: - readdirp: 5.0.0 - chownr@1.1.4: optional: true @@ -21765,6 +22296,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-shims@2.6.2: {} + es-module-shims@2.7.0: {} es-object-atoms@1.1.1: @@ -23105,6 +23638,18 @@ snapshots: inline-style-parser@0.2.7: {} + inquirer@13.1.0(@types/node@24.10.4): + dependencies: + '@inquirer/ansi': 2.0.2 + '@inquirer/core': 11.1.0(@types/node@24.10.4) + '@inquirer/prompts': 8.1.0(@types/node@24.10.4) + '@inquirer/type': 4.0.2(@types/node@24.10.4) + mute-stream: 3.0.0 + run-async: 4.0.6 + rxjs: 7.8.2 + optionalDependencies: + '@types/node': 24.10.4 + inquirer@13.1.0(@types/node@25.0.2): dependencies: '@inquirer/ansi': 2.0.2 @@ -25230,17 +25775,30 @@ snapshots: prettier: 3.7.4 sass-formatter: 0.7.9 + prettier-plugin-organize-imports@4.3.0(prettier@3.6.2)(typescript@5.9.3): + dependencies: + prettier: 3.6.2 + typescript: 5.9.3 + prettier-plugin-organize-imports@4.3.0(prettier@3.7.4)(typescript@5.9.3): dependencies: prettier: 3.7.4 typescript: 5.9.3 + prettier-plugin-sh@0.17.4(prettier@3.6.2): + dependencies: + '@reteps/dockerfmt': 0.3.6 + prettier: 3.6.2 + sh-syntax: 0.5.8 + prettier-plugin-sh@0.17.4(prettier@3.7.4): dependencies: '@reteps/dockerfmt': 0.3.6 prettier: 3.7.4 sh-syntax: 0.5.8 + prettier@3.6.2: {} + prettier@3.7.4: {} pretty-bytes@5.6.0: {} @@ -25537,8 +26095,6 @@ snapshots: readdirp@4.1.2: {} - readdirp@5.0.0: {} - readline-sync@1.4.9: {} realpath-missing@1.1.0: {} @@ -27220,7 +27776,23 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-plugin-checker@0.12.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-checker@0.11.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)): + dependencies: + '@babel/code-frame': 7.27.1 + chokidar: 4.0.3 + npm-run-path: 6.0.0 + picocolors: 1.1.1 + picomatch: 4.0.3 + tiny-invariant: 1.3.3 + tinyglobby: 0.2.15 + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) + vscode-uri: 3.1.0 + optionalDependencies: + eslint: 9.39.2 + optionator: 0.9.4 + typescript: 5.9.3 + + vite-plugin-checker@0.11.0(eslint@9.39.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@babel/code-frame': 7.27.1 chokidar: 4.0.3 @@ -27236,6 +27808,25 @@ snapshots: optionator: 0.9.4 typescript: 5.9.3 + vite-plugin-dts@4.5.4(@types/node@24.10.4)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)): + dependencies: + '@microsoft/api-extractor': 7.55.2(@types/node@24.10.4) + '@rollup/pluginutils': 5.3.0(rollup@4.49.0) + '@volar/typescript': 2.4.27 + '@vue/language-core': 2.2.0(typescript@5.9.3) + compare-versions: 6.1.1 + debug: 4.4.3(supports-color@8.1.1) + kolorist: 1.8.0 + local-pkg: 1.1.2 + magic-string: 0.30.21 + typescript: 5.9.3 + optionalDependencies: + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + vite-plugin-dts@4.5.4(@types/node@25.0.2)(rollup@4.49.0)(typescript@5.9.3)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@microsoft/api-extractor': 7.55.2(@types/node@25.0.2) @@ -27255,11 +27846,11 @@ snapshots: - rollup - supports-color - vite-plugin-node-polyfills@0.24.0(rollup@4.49.0)(vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-node-polyfills@0.24.0(rollup@4.49.0)(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.49.0) node-stdlib-browser: 1.3.1 - vite: 7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - rollup @@ -27277,6 +27868,20 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 + vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.49.0 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.4 + fsevents: 2.3.3 + tsx: 4.21.0 + yaml: 2.8.2 + vite@7.2.7(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 @@ -27295,6 +27900,46 @@ snapshots: optionalDependencies: vite: 6.4.1(@types/node@25.0.2)(tsx@4.21.0)(yaml@2.8.2) + vitest@4.0.15(@types/node@24.10.4)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + '@vitest/expect': 4.0.15 + '@vitest/mocker': 4.0.15(vite@7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/pretty-format': 4.0.15 + '@vitest/runner': 4.0.15 + '@vitest/snapshot': 4.0.15 + '@vitest/spy': 4.0.15 + '@vitest/utils': 4.0.15 + es-module-lexer: 1.7.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.7(@types/node@24.10.4)(tsx@4.21.0)(yaml@2.8.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.10.4 + '@vitest/ui': 4.0.15(vitest@4.0.15) + happy-dom: 20.0.11 + jsdom: 25.0.1 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + vitest@4.0.15(@types/node@25.0.2)(@vitest/ui@4.0.15)(happy-dom@20.0.11)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.15 @@ -27440,7 +28085,7 @@ snapshots: vscode-oniguruma@2.0.1: {} - vscode-textmate@9.3.0: {} + vscode-textmate@9.2.1: {} vscode-uri@3.1.0: {} @@ -27454,7 +28099,9 @@ snapshots: web-namespaces@2.0.1: {} - web-tree-sitter@0.26.3: {} + web-tree-sitter@0.25.10(@types/emscripten@1.41.5): + optionalDependencies: + '@types/emscripten': 1.41.5 webidl-conversions@7.0.0: {} From 185fe48512be9687e6034382d7e05ee0785564ff Mon Sep 17 00:00:00 2001 From: ZiWei Chen <98569699+kazrael2119@users.noreply.github.com> Date: Thu, 25 Dec 2025 16:56:55 +0800 Subject: [PATCH 16/18] Add test cases for client initialization Add default nested test cases for client initialization. --- ...-cases-for-client-initialization-2025-11-25-8-34-24.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .chronus/changes/add-test-cases-for-client-initialization-2025-11-25-8-34-24.md diff --git a/.chronus/changes/add-test-cases-for-client-initialization-2025-11-25-8-34-24.md b/.chronus/changes/add-test-cases-for-client-initialization-2025-11-25-8-34-24.md new file mode 100644 index 0000000000..05878e54fb --- /dev/null +++ b/.chronus/changes/add-test-cases-for-client-initialization-2025-11-25-8-34-24.md @@ -0,0 +1,8 @@ +--- +# Change versionKind to one of: internal, fix, dependencies, feature, deprecation, breaking +changeKind: fix +packages: + - "@azure-tools/typespec-client-generator-core" +--- + +add default nested cases for client-initialization From 431480529de9591f127e1286143fcab4cd031ce6 Mon Sep 17 00:00:00 2001 From: ZiWei Chen Date: Thu, 25 Dec 2025 17:10:58 +0800 Subject: [PATCH 17/18] Delete client-initialization-scenarios-2025-8-5-comprehensive.md --- ...tialization-scenarios-2025-8-5-comprehensive.md | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 .chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md diff --git a/.chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md b/.chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md deleted file mode 100644 index dd905c946c..0000000000 --- a/.chronus/changes/client-initialization-scenarios-2025-8-5-comprehensive.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -changeKind: feature -packages: - - "@azure-tools/azure-http-specs" ---- - -Add comprehensive client initialization test scenarios for Azure Client Generator Core. Extended the existing test suite from 8 to 23 scenarios covering all combinations of `initializedBy` parameter values including default, individually, parent, and both modes. Added nested two-layer scenarios to test complex client initialization hierarchies. - -Features added: -- 4 basic initialization scenarios covering all `initializedBy` combinations -- 12 nested two-layer scenarios testing first-layer × second-layer combinations -- Comprehensive test matrix ensuring complete coverage of client initialization modes -- Mock API implementations for all new scenarios -- Detailed scenario documentation for each test case From 29ad064e2bcfc1f6a9436ecc311271e2f898d8b6 Mon Sep 17 00:00:00 2001 From: ZiWei Chen Date: Thu, 25 Dec 2025 17:11:29 +0800 Subject: [PATCH 18/18] Revert "format" This reverts commit b963d39f6c961e34906a64e41fe0d26ae3002d8e. --- .../src/interfaces.ts | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/packages/typespec-client-generator-core/src/interfaces.ts b/packages/typespec-client-generator-core/src/interfaces.ts index f24742798e..4bd61fe8b5 100644 --- a/packages/typespec-client-generator-core/src/interfaces.ts +++ b/packages/typespec-client-generator-core/src/interfaces.ts @@ -197,8 +197,9 @@ export interface DecoratorInfo { /** * Represents a client in the package. */ -export interface SdkClientType - extends DecoratedType { +export interface SdkClientType< + TServiceOperation extends SdkServiceOperation, +> extends DecoratedType { __raw: SdkClient | SdkOperationGroup; kind: "client"; /** Name of the client. */ @@ -261,8 +262,9 @@ export type SdkType = | SdkCredentialType | SdkEndpointType; -export interface SdkBuiltInType - extends SdkTypeBase { +export interface SdkBuiltInType< + TKind extends SdkBuiltInKinds = SdkBuiltInKinds, +> extends SdkTypeBase { kind: TKind; /** How to encode the type on wire. */ encode?: string; @@ -464,8 +466,9 @@ export interface SdkEnumType extends SdkTypeBase { isUnionAsEnum: boolean; } -export interface SdkEnumValueType - extends SdkTypeBase { +export interface SdkEnumValueType< + TValueType extends SdkTypeBase = SdkBuiltInType, +> extends SdkTypeBase { kind: "enumvalue"; name: string; value: string | number; @@ -570,8 +573,9 @@ export interface SdkEndpointType extends SdkTypeBase { templateArguments: SdkPathParameter[]; } -export interface SdkModelPropertyTypeBase - extends DecoratedType { +export interface SdkModelPropertyTypeBase< + TType extends SdkTypeBase = SdkType, +> extends DecoratedType { __raw?: ModelProperty; /** Parameter type. */ type: TType; @@ -663,8 +667,9 @@ export interface BinarySerializationOptions { /** * Endpoint parameter type for the client. */ -export interface SdkEndpointParameter - extends SdkModelPropertyTypeBase> { +export interface SdkEndpointParameter extends SdkModelPropertyTypeBase< + SdkEndpointType | SdkUnionType +> { kind: "endpoint"; /** Whether do url encode for the endpoint string. */ urlEncode: boolean; @@ -676,8 +681,9 @@ export interface SdkEndpointParameter serializedName?: string; } -export interface SdkCredentialParameter - extends SdkModelPropertyTypeBase> { +export interface SdkCredentialParameter extends SdkModelPropertyTypeBase< + SdkCredentialType | SdkUnionType +> { kind: "credential"; /** Credential parameter is always on client level. */ onClient: true; @@ -914,8 +920,9 @@ export interface SdkHttpOperation extends SdkServiceOperationBase { export type SdkServiceOperation = SdkHttpOperation; -interface SdkServiceMethodBase - extends DecoratedType { +interface SdkServiceMethodBase< + TServiceOperation extends SdkServiceOperation, +> extends DecoratedType { __raw?: Operation; name: string; /** Whether the type has public or private accessibility */ @@ -947,8 +954,9 @@ interface SdkServiceMethodBase /** * Basic method. */ -export interface SdkBasicServiceMethod - extends SdkServiceMethodBase { +export interface SdkBasicServiceMethod< + TServiceOperation extends SdkServiceOperation, +> extends SdkServiceMethodBase { kind: "basic"; } @@ -989,7 +997,8 @@ export interface SdkPagingServiceMetadata - extends SdkServiceMethodBase, + extends + SdkServiceMethodBase, SdkPagingServiceMethodOptions { kind: "paging"; } @@ -1154,8 +1163,7 @@ export interface SdkLroServiceFinalResponse { * Long running method. */ export interface SdkLroServiceMethod - extends SdkServiceMethodBase, - SdkLroServiceMethodOptions { + extends SdkServiceMethodBase, SdkLroServiceMethodOptions { kind: "lro"; } @@ -1163,7 +1171,8 @@ export interface SdkLroServiceMethod - extends SdkServiceMethodBase, + extends + SdkServiceMethodBase, SdkLroServiceMethodOptions, SdkPagingServiceMethodOptions { kind: "lropaging";