Skip to content

Commit ccee119

Browse files
Merge branch 'main' into net-iso
2 parents ac6a6bd + 924435b commit ccee119

8 files changed

Lines changed: 839 additions & 804 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
changeKind: dependencies
3+
packages:
4+
- "@typespec/http-client-java"
5+
---
6+
7+
Update http-client-java Node.js dependencies

packages/http-client-java/emitter/src/code-model-builder.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ import {
172172
getFilteredApiVersions,
173173
getServiceApiVersions,
174174
isStableApiVersionString,
175+
resolveApiVersionOption,
175176
} from "./versioning-utils.js";
176177
const { isEqual } = pkg;
177178

@@ -698,14 +699,15 @@ export class CodeModelBuilder {
698699
const versions = getServiceApiVersions(this.program, client);
699700
if (Array.isArray(versions) && versions.length > 0) {
700701
// consistent api-versions
701-
if (!this.sdkContext.apiVersion || ["all", "latest"].includes(this.sdkContext.apiVersion)) {
702+
const apiVersionOption = resolveApiVersionOption(this.sdkContext.apiVersion);
703+
if (!apiVersionOption || ["all", "latest"].includes(apiVersionOption)) {
702704
this.apiVersion = versions[versions.length - 1].value;
703705
} else {
704-
this.apiVersion = versions.find((it) => it.value === this.sdkContext.apiVersion)?.value;
706+
this.apiVersion = versions.find((it) => it.value === apiVersionOption)?.value;
705707
if (!this.apiVersion) {
706708
reportDiagnostic(this.program, {
707709
code: "invalid-api-version",
708-
format: { apiVersion: this.sdkContext.apiVersion },
710+
format: { apiVersion: apiVersionOption },
709711
target: NoTarget,
710712
});
711713
}

packages/http-client-java/emitter/src/versioning-utils.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,30 @@ export function isVersionEarlierThan(version: string, compareTo: string): boolea
187187
return false;
188188
}
189189

190+
/**
191+
* Resolves the emitter "api-version" option to a single string.
192+
*
193+
* TCGC supports a per-service api-version map (`Record<string, string>`), but the Java
194+
* emitter currently only supports a single api-version, "latest", or "all". A map value
195+
* is therefore rejected.
196+
*
197+
* TODO(xiaofei): support the per-service api-version map in a future PR.
198+
*
199+
* @param apiVersion the api-version option from TCGC, a string, a per-service map, or undefined
200+
* @returns the api-version string, or undefined when not set
201+
* @throws if the api-version option is a per-service map
202+
*/
203+
export function resolveApiVersionOption(
204+
apiVersion: string | Record<string, string> | undefined,
205+
): string | undefined {
206+
if (apiVersion !== undefined && typeof apiVersion !== "string") {
207+
throw new Error(
208+
"A per-service api-version map is not supported. The 'api-version' option must be a single api-version, 'latest', or 'all'.",
209+
);
210+
}
211+
return apiVersion;
212+
}
213+
190214
function isSdkClientVersioned(client: SdkClientType<SdkHttpOperation>): boolean {
191215
// on TCGC, the difference of versioned client and not versioned client is on the existence of "apiVersion" parameter in clientInitialization
192216
return client.clientInitialization.parameters.some((p) => p.name === "apiVersion");

packages/http-client-java/emitter/test/utils.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
isStableApiVersionString,
1414
isVersionEarlierThan,
1515
isVersionedByDate,
16+
resolveApiVersionOption,
1617
} from "../src/versioning-utils.js";
1718

1819
function createMockVersion(value: string, index: number): Version {
@@ -60,6 +61,16 @@ describe("versioning-utils", () => {
6061
expect(isStableApiVersionString("2023-12-01-preview")).toBe(false);
6162
});
6263

64+
it("resolveApiVersionOption", () => {
65+
expect(resolveApiVersionOption(undefined)).toBe(undefined);
66+
expect(resolveApiVersionOption("latest")).toBe("latest");
67+
expect(resolveApiVersionOption("all")).toBe("all");
68+
expect(resolveApiVersionOption("2024-06-01")).toBe("2024-06-01");
69+
expect(() => resolveApiVersionOption({ service: "2024-06-01" })).toThrow(
70+
/per-service api-version map is not supported/,
71+
);
72+
});
73+
6374
it("filterApiVersionsByStability filters preview versions for stable target", () => {
6475
const versions = [
6576
createMockVersion("2024-01-01-preview", 0),

packages/http-client-java/generator/http-client-generator-clientcore-test/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"@typespec/sse": "0.83.0",
3131
"@typespec/streams": "0.83.0",
3232
"@azure-tools/typespec-azure-core": "0.69.0",
33-
"@azure-tools/typespec-client-generator-core": "0.69.0",
33+
"@azure-tools/typespec-client-generator-core": "0.69.1",
3434
"@azure-tools/typespec-azure-resource-manager": "0.69.1",
3535
"@azure-tools/typespec-autorest": "0.69.1"
3636
},

packages/http-client-java/generator/http-client-generator-test/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"@typespec/sse": "0.83.0",
3131
"@typespec/streams": "0.83.0",
3232
"@azure-tools/typespec-azure-core": "0.69.0",
33-
"@azure-tools/typespec-client-generator-core": "0.69.0",
33+
"@azure-tools/typespec-client-generator-core": "0.69.1",
3434
"@azure-tools/typespec-azure-resource-manager": "0.69.1",
3535
"@azure-tools/typespec-autorest": "0.69.1"
3636
},

0 commit comments

Comments
 (0)