@azure-tools/typespec-java 0.11.1 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/src/code-model-builder.d.ts +2 -0
  2. package/dist/src/code-model-builder.d.ts.map +1 -1
  3. package/dist/src/code-model-builder.js +59 -46
  4. package/dist/src/code-model-builder.js.map +1 -1
  5. package/dist/src/common/client.d.ts +6 -1
  6. package/dist/src/common/client.d.ts.map +1 -1
  7. package/dist/src/common/client.js +6 -1
  8. package/dist/src/common/client.js.map +1 -1
  9. package/dist/src/common/code-model.js.map +1 -1
  10. package/dist/src/common/operation.d.ts +1 -0
  11. package/dist/src/common/operation.d.ts.map +1 -1
  12. package/dist/src/common/operation.js.map +1 -1
  13. package/dist/src/common/schemas/choice.d.ts +2 -0
  14. package/dist/src/common/schemas/choice.d.ts.map +1 -1
  15. package/dist/src/common/schemas/choice.js +1 -0
  16. package/dist/src/common/schemas/choice.js.map +1 -1
  17. package/dist/src/common/schemas/usage.d.ts +3 -1
  18. package/dist/src/common/schemas/usage.d.ts.map +1 -1
  19. package/dist/src/common/schemas/usage.js +2 -0
  20. package/dist/src/common/schemas/usage.js.map +1 -1
  21. package/dist/src/emitter.js +1 -1
  22. package/dist/src/emitter.js.map +1 -1
  23. package/dist/src/models.d.ts.map +1 -1
  24. package/dist/src/models.js +9 -2
  25. package/dist/src/models.js.map +1 -1
  26. package/dist/src/operation-utils.js.map +1 -1
  27. package/dist/src/prenamer/formatter.js.map +1 -1
  28. package/dist/src/prenamer/naming-utils.js.map +1 -1
  29. package/dist/src/prenamer/prenamer.js.map +1 -1
  30. package/dist/src/type-utils.js.map +1 -1
  31. package/dist/src/utils.js.map +1 -1
  32. package/dist/tsconfig.tsbuildinfo +1 -1
  33. package/package.json +11 -11
  34. package/readme.md +5 -5
  35. package/target/azure-typespec-extension-jar-with-dependencies.jar +0 -0
@@ -20,6 +20,7 @@ export declare class CodeModelBuilder {
20
20
  private isInternal;
21
21
  private processModels;
22
22
  private processSchemaUsage;
23
+ private deduplicateSchemaName;
23
24
  private resolveSchemaUsage;
24
25
  private processClients;
25
26
  private needToSkipProcessingOperation;
@@ -43,6 +44,7 @@ export declare class CodeModelBuilder {
43
44
  private processByteArraySchema;
44
45
  private processIntegerSchema;
45
46
  private processNumberSchema;
47
+ private processDecimalSchema;
46
48
  private processBooleanSchema;
47
49
  private processArraySchema;
48
50
  private processDictionarySchema;
@@ -1 +1 @@
1
- {"version":3,"file":"code-model-builder.d.ts","sourceRoot":"","sources":["../../src/code-model-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code-model-builder.d.ts","sourceRoot":"","sources":["../../src/code-model-builder.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,11 @@ import { getResourceOperation, getSegment } from "@typespec/rest";
3
3
  import { getAuthentication, getServers, getStatusCodeDescription, getHttpOperation, getQueryParamOptions, getHeaderFieldOptions, } from "@typespec/http";
4
4
  import { getAddedOnVersions, getVersion } from "@typespec/versioning";
5
5
  import { isPollingLocation, getPagedResult, isFixed, getLroMetadata } from "@azure-tools/typespec-azure-core";
6
- import { listClients, listOperationGroups, listOperationsInOperationGroup, isApiVersion, shouldGenerateConvenient, createSdkContext, shouldGenerateProtocol, isInternal, } from "@azure-tools/typespec-client-generator-core";
6
+ import { listClients, listOperationGroups, listOperationsInOperationGroup, isApiVersion, shouldGenerateConvenient, createSdkContext, shouldGenerateProtocol, isInternal, getCrossLanguageDefinitionId, } from "@azure-tools/typespec-client-generator-core";
7
7
  import { fail } from "assert";
8
8
  import { AnySchema, ArraySchema, BinaryResponse, BinarySchema, BooleanSchema, ByteArraySchema, ChoiceValue, DateTimeSchema, DateSchema, DictionarySchema, Discriminator, HttpHeader, HttpParameter, ImplementationLocation, NumberSchema, ObjectSchema, Parameter, ParameterLocation, Property, Relations, Response, SchemaResponse, SchemaType, StringSchema, TimeSchema, Security, OAuth2SecurityScheme, KeySecurityScheme, OperationGroup, UriSchema, VirtualParameter, GroupSchema, GroupProperty, ApiVersion, SerializationStyle, Metadata, UnixTimeSchema, Language, } from "@autorest/codemodel";
9
9
  import { CodeModel } from "./common/code-model.js";
10
- import { Client as CodeModelClient } from "./common/client.js";
10
+ import { Client as CodeModelClient, ObjectScheme } from "./common/client.js";
11
11
  import { ConvenienceApi, Operation as CodeModelOperation, Request } from "./common/operation.js";
12
12
  import { SchemaContext } from "./common/schemas/usage.js";
13
13
  import { ChoiceSchema, SealedChoiceSchema } from "./common/schemas/choice.js";
@@ -86,6 +86,7 @@ export class CodeModelBuilder {
86
86
  if (this.options.namer) {
87
87
  this.codeModel = new PreNamer(this.codeModel).init().process();
88
88
  }
89
+ this.deduplicateSchemaName();
89
90
  return this.codeModel;
90
91
  }
91
92
  processHost(server) {
@@ -250,7 +251,7 @@ export class CodeModelBuilder {
250
251
  }
251
252
  }
252
253
  processSchemaUsage() {
253
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
254
+ var _a, _b, _c, _d, _e, _f, _g;
254
255
  (_a = this.codeModel.schemas.objects) === null || _a === void 0 ? void 0 : _a.forEach((it) => this.propagateSchemaUsage(it));
255
256
  // post process for schema usage
256
257
  (_b = this.codeModel.schemas.objects) === null || _b === void 0 ? void 0 : _b.forEach((it) => this.resolveSchemaUsage(it));
@@ -259,13 +260,16 @@ export class CodeModelBuilder {
259
260
  (_e = this.codeModel.schemas.sealedChoices) === null || _e === void 0 ? void 0 : _e.forEach((it) => this.resolveSchemaUsage(it));
260
261
  (_f = this.codeModel.schemas.ors) === null || _f === void 0 ? void 0 : _f.forEach((it) => this.resolveSchemaUsage(it));
261
262
  (_g = this.codeModel.schemas.constants) === null || _g === void 0 ? void 0 : _g.forEach((it) => this.resolveSchemaUsage(it));
263
+ }
264
+ deduplicateSchemaName() {
265
+ var _a, _b, _c, _d, _e, _f;
262
266
  // deduplicate model name
263
267
  const nameCount = new Map();
264
268
  const deduplicateName = (schema) => {
265
- var _a;
269
+ var _a, _b;
266
270
  const name = schema.language.default.name;
267
271
  // skip models under "com.azure.core."
268
- if (schema.language.default.name && ((_a = schema.language.default.namespace) === null || _a === void 0 ? void 0 : _a.startsWith("com.azure.core."))) {
272
+ if (name && !((_b = (_a = schema.language.java) === null || _a === void 0 ? void 0 : _a.namespace) === null || _b === void 0 ? void 0 : _b.startsWith("com.azure.core."))) {
269
273
  if (!nameCount.has(name)) {
270
274
  nameCount.set(name, 1);
271
275
  }
@@ -276,11 +280,12 @@ export class CodeModelBuilder {
276
280
  }
277
281
  }
278
282
  };
279
- (_h = this.codeModel.schemas.objects) === null || _h === void 0 ? void 0 : _h.forEach((it) => deduplicateName(it));
280
- (_j = this.codeModel.schemas.groups) === null || _j === void 0 ? void 0 : _j.forEach((it) => deduplicateName(it)); // it has RequestConditions
281
- (_k = this.codeModel.schemas.choices) === null || _k === void 0 ? void 0 : _k.forEach((it) => deduplicateName(it));
282
- (_l = this.codeModel.schemas.sealedChoices) === null || _l === void 0 ? void 0 : _l.forEach((it) => deduplicateName(it));
283
- (_m = this.codeModel.schemas.ors) === null || _m === void 0 ? void 0 : _m.forEach((it) => deduplicateName(it));
283
+ (_a = this.codeModel.schemas.objects) === null || _a === void 0 ? void 0 : _a.forEach((it) => deduplicateName(it));
284
+ (_b = this.codeModel.schemas.groups) === null || _b === void 0 ? void 0 : _b.forEach((it) => deduplicateName(it)); // it may contain RequestConditions under "com.azure.core."
285
+ (_c = this.codeModel.schemas.choices) === null || _c === void 0 ? void 0 : _c.forEach((it) => deduplicateName(it));
286
+ (_d = this.codeModel.schemas.sealedChoices) === null || _d === void 0 ? void 0 : _d.forEach((it) => deduplicateName(it));
287
+ (_e = this.codeModel.schemas.ors) === null || _e === void 0 ? void 0 : _e.forEach((it) => deduplicateName(it));
288
+ (_f = this.codeModel.schemas.constants) === null || _f === void 0 ? void 0 : _f.forEach((it) => deduplicateName(it));
284
289
  }
285
290
  resolveSchemaUsage(schema) {
286
291
  if (schema instanceof ObjectSchema ||
@@ -311,6 +316,7 @@ export class CodeModelBuilder {
311
316
  // at present, use global security definition
312
317
  security: this.codeModel.security,
313
318
  });
319
+ codeModelClient.crossLanguageDefinitionId = client.crossLanguageDefinitionId;
314
320
  // versioning
315
321
  const versioning = getVersion(this.program, client.service);
316
322
  if (versioning && versioning.getVersions()) {
@@ -433,6 +439,7 @@ export class CodeModelBuilder {
433
439
  : undefined,
434
440
  },
435
441
  });
442
+ codeModelOperation.crossLanguageDefinitionId = getCrossLanguageDefinitionId(operation);
436
443
  codeModelOperation.internalApi = this.isInternal(this.sdkContext, operation);
437
444
  const convenienceApiName = this.getConvenienceApiName(operation);
438
445
  let generateConvenienceApi = Boolean(convenienceApiName);
@@ -928,7 +935,7 @@ export class CodeModelBuilder {
928
935
  else {
929
936
  schema = this.processSchema(body, body.name);
930
937
  }
931
- const parameter = new Parameter(body.name, this.getDoc(body), schema, {
938
+ const parameter = new Parameter(this.getName(body), this.getDoc(body), schema, {
932
939
  summary: this.getSummary(body),
933
940
  implementation: ImplementationLocation.Method,
934
941
  required: body.kind === "Model" || !body.optional,
@@ -945,6 +952,9 @@ export class CodeModelBuilder {
945
952
  else if (op.convenienceApi) {
946
953
  this.trackSchemaUsage(schema, { usage: [SchemaContext.Public] });
947
954
  }
955
+ if (operationIsJsonMergePatch(httpOperation)) {
956
+ this.trackSchemaUsage(schema, { usage: [SchemaContext.JsonMergePatch] });
957
+ }
948
958
  if (!schema.language.default.name && schema instanceof ObjectSchema) {
949
959
  // anonymous model
950
960
  // name the schema for documentation
@@ -1285,10 +1295,12 @@ export class CodeModelBuilder {
1285
1295
  return this.processDurationSchema(type, nameHint);
1286
1296
  case "url":
1287
1297
  return this.processUrlSchema(type, nameHint);
1288
- case "decimal":
1289
- return this.processNumberSchema(type, nameHint);
1290
1298
  }
1291
- if (scalarName.startsWith("int") || scalarName.startsWith("uint") || scalarName === "safeint") {
1299
+ if (scalarName.startsWith("decimal")) {
1300
+ // decimal
1301
+ return this.processDecimalSchema(type, nameHint);
1302
+ }
1303
+ else if (scalarName.startsWith("int") || scalarName.startsWith("uint") || scalarName === "safeint") {
1292
1304
  // integer
1293
1305
  const integerSize = scalarName === "safeint" || scalarName.includes("int64") ? 64 : 32;
1294
1306
  return this.processIntegerSchema(type, nameHint, integerSize);
@@ -1370,6 +1382,12 @@ export class CodeModelBuilder {
1370
1382
  summary: this.getSummary(type),
1371
1383
  }));
1372
1384
  }
1385
+ processDecimalSchema(type, name) {
1386
+ // "Infinity" maps to "BigDecimal" in Java
1387
+ return this.codeModel.schemas.add(new NumberSchema(name, this.getDoc(type), SchemaType.Number, Infinity, {
1388
+ summary: this.getSummary(type),
1389
+ }));
1390
+ }
1373
1391
  processBooleanSchema(type, name) {
1374
1392
  return this.codeModel.schemas.add(new BooleanSchema(name, this.getDoc(type), {
1375
1393
  summary: this.getSummary(type),
@@ -1404,36 +1422,22 @@ export class CodeModelBuilder {
1404
1422
  : this.stringSchema;
1405
1423
  const choices = [];
1406
1424
  type.members.forEach((it) => { var _a; return choices.push(new ChoiceValue(it.name, this.getDoc(it), (_a = it.value) !== null && _a !== void 0 ? _a : it.name)); });
1407
- if (sealed) {
1408
- return this.codeModel.schemas.add(new SealedChoiceSchema(name, this.getDoc(type), {
1409
- summary: this.getSummary(type),
1410
- choiceType: valueType,
1411
- choices: choices,
1412
- language: {
1413
- default: {
1414
- namespace: namespace,
1415
- },
1416
- java: {
1417
- namespace: getJavaNamespace(namespace),
1418
- },
1425
+ const schemaType = sealed ? SealedChoiceSchema : ChoiceSchema;
1426
+ const schema = new schemaType(name, this.getDoc(type), {
1427
+ summary: this.getSummary(type),
1428
+ choiceType: valueType,
1429
+ choices: choices,
1430
+ language: {
1431
+ default: {
1432
+ namespace: namespace,
1419
1433
  },
1420
- }));
1421
- }
1422
- else {
1423
- return this.codeModel.schemas.add(new ChoiceSchema(name, this.getDoc(type), {
1424
- summary: this.getSummary(type),
1425
- choiceType: valueType,
1426
- choices: choices,
1427
- language: {
1428
- default: {
1429
- namespace: namespace,
1430
- },
1431
- java: {
1432
- namespace: getJavaNamespace(namespace),
1433
- },
1434
+ java: {
1435
+ namespace: getJavaNamespace(namespace),
1434
1436
  },
1435
- }));
1436
- }
1437
+ },
1438
+ });
1439
+ schema.crossLanguageDefinitionId = getCrossLanguageDefinitionId(type);
1440
+ return this.codeModel.schemas.add(schema);
1437
1441
  }
1438
1442
  processConstantSchemaForLiteral(type, name) {
1439
1443
  const valueType = type.kind === "String"
@@ -1460,6 +1464,10 @@ export class CodeModelBuilder {
1460
1464
  }
1461
1465
  processChoiceSchemaForUnion(type, variants, name) {
1462
1466
  // variants is Literal
1467
+ const kindSet = new Set(variants.map((it) => it.type.kind));
1468
+ // "choice1" | "choice2" is sealed
1469
+ // "choice1" | "choice2" | string is extensible
1470
+ const sealed = kindSet.size === 1;
1463
1471
  variants = variants.filter((it) => it.type.kind === "String" || it.type.kind === "Number" || it.type.kind === "Boolean");
1464
1472
  const kind = variants[0].type.kind;
1465
1473
  const valueType = kind === "String"
@@ -1472,7 +1480,8 @@ export class CodeModelBuilder {
1472
1480
  const choices = [];
1473
1481
  variants.forEach((it) => choices.push(new ChoiceValue(it.type.value.toString(), this.getDoc(it), it.type.value)));
1474
1482
  const namespace = getNamespace(type);
1475
- return this.codeModel.schemas.add(new ChoiceSchema(name, this.getDoc(type), {
1483
+ const schemaType = sealed ? SealedChoiceSchema : ChoiceSchema;
1484
+ const schema = new schemaType(name, this.getDoc(type), {
1476
1485
  summary: this.getSummary(type),
1477
1486
  choiceType: valueType,
1478
1487
  choices: choices,
@@ -1484,7 +1493,9 @@ export class CodeModelBuilder {
1484
1493
  namespace: getJavaNamespace(namespace),
1485
1494
  },
1486
1495
  },
1487
- }));
1496
+ });
1497
+ // schema.crossLanguageDefinitionId = getCrossLanguageDefinitionId(type);
1498
+ return this.codeModel.schemas.add(schema);
1488
1499
  }
1489
1500
  processUnixTimeSchema(type, name) {
1490
1501
  return this.codeModel.schemas.add(new UnixTimeSchema(name, this.getDoc(type), {
@@ -1521,7 +1532,7 @@ export class CodeModelBuilder {
1521
1532
  processObjectSchema(type, name) {
1522
1533
  var _a, _b;
1523
1534
  const namespace = getNamespace(type);
1524
- const objectSchema = this.codeModel.schemas.add(new ObjectSchema(name, this.getDoc(type), {
1535
+ const objectSchema = new ObjectScheme(name, this.getDoc(type), {
1525
1536
  summary: this.getSummary(type),
1526
1537
  language: {
1527
1538
  default: {
@@ -1531,7 +1542,9 @@ export class CodeModelBuilder {
1531
1542
  namespace: getJavaNamespace(namespace),
1532
1543
  },
1533
1544
  },
1534
- }));
1545
+ });
1546
+ objectSchema.crossLanguageDefinitionId = getCrossLanguageDefinitionId(type);
1547
+ this.codeModel.schemas.add(objectSchema);
1535
1548
  // cache this now before we accidentally recurse on this type.
1536
1549
  this.schemaCache.set(type, objectSchema);
1537
1550
  // discriminator