@azure-tools/typespec-ts 0.15.0 → 0.16.0

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 (98) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +14 -17
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/lib.d.ts.map +1 -1
  6. package/dist/src/lib.js +3 -3
  7. package/dist/src/lib.js.map +1 -1
  8. package/dist/src/modular/buildClassicalClient.d.ts +2 -3
  9. package/dist/src/modular/buildClassicalClient.d.ts.map +1 -1
  10. package/dist/src/modular/buildClassicalClient.js +26 -12
  11. package/dist/src/modular/buildClassicalClient.js.map +1 -1
  12. package/dist/src/modular/buildClientContext.d.ts +3 -3
  13. package/dist/src/modular/buildClientContext.d.ts.map +1 -1
  14. package/dist/src/modular/buildClientContext.js +5 -4
  15. package/dist/src/modular/buildClientContext.js.map +1 -1
  16. package/dist/src/modular/buildCodeModel.d.ts +3 -2
  17. package/dist/src/modular/buildCodeModel.d.ts.map +1 -1
  18. package/dist/src/modular/buildCodeModel.js +141 -54
  19. package/dist/src/modular/buildCodeModel.js.map +1 -1
  20. package/dist/src/modular/buildOperations.d.ts +2 -2
  21. package/dist/src/modular/buildOperations.d.ts.map +1 -1
  22. package/dist/src/modular/buildOperations.js +15 -8
  23. package/dist/src/modular/buildOperations.js.map +1 -1
  24. package/dist/src/modular/buildProjectFiles.js +2 -2
  25. package/dist/src/modular/buildProjectFiles.js.map +1 -1
  26. package/dist/src/modular/buildRootIndex.d.ts +4 -4
  27. package/dist/src/modular/buildRootIndex.d.ts.map +1 -1
  28. package/dist/src/modular/buildRootIndex.js +12 -5
  29. package/dist/src/modular/buildRootIndex.js.map +1 -1
  30. package/dist/src/modular/buildSubpathIndex.d.ts +2 -2
  31. package/dist/src/modular/buildSubpathIndex.d.ts.map +1 -1
  32. package/dist/src/modular/buildSubpathIndex.js +7 -4
  33. package/dist/src/modular/buildSubpathIndex.js.map +1 -1
  34. package/dist/src/modular/emitModels.d.ts +3 -3
  35. package/dist/src/modular/emitModels.d.ts.map +1 -1
  36. package/dist/src/modular/emitModels.js +28 -18
  37. package/dist/src/modular/emitModels.js.map +1 -1
  38. package/dist/src/modular/helpers/clientHelpers.js +1 -1
  39. package/dist/src/modular/helpers/clientHelpers.js.map +1 -1
  40. package/dist/src/modular/helpers/operationHelpers.d.ts +1 -1
  41. package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -1
  42. package/dist/src/modular/helpers/operationHelpers.js +140 -77
  43. package/dist/src/modular/helpers/operationHelpers.js.map +1 -1
  44. package/dist/src/modular/helpers/typeHelpers.d.ts +2 -2
  45. package/dist/src/modular/helpers/typeHelpers.d.ts.map +1 -1
  46. package/dist/src/modular/helpers/typeHelpers.js +13 -7
  47. package/dist/src/modular/helpers/typeHelpers.js.map +1 -1
  48. package/dist/src/modular/modularCodeModel.d.ts +11 -0
  49. package/dist/src/modular/modularCodeModel.d.ts.map +1 -1
  50. package/dist/src/transform/transformHelperFunctionDetails.js +3 -4
  51. package/dist/src/transform/transformHelperFunctionDetails.js.map +1 -1
  52. package/dist/src/transform/transformParameters.d.ts +0 -10
  53. package/dist/src/transform/transformParameters.d.ts.map +1 -1
  54. package/dist/src/transform/transformParameters.js +7 -51
  55. package/dist/src/transform/transformParameters.js.map +1 -1
  56. package/dist/src/transform/transformResponses.js +3 -4
  57. package/dist/src/transform/transformResponses.js.map +1 -1
  58. package/dist/src/transform/transformSchemas.d.ts.map +1 -1
  59. package/dist/src/transform/transformSchemas.js +4 -8
  60. package/dist/src/transform/transformSchemas.js.map +1 -1
  61. package/dist/src/transform/transformTelemetryInfo.d.ts.map +1 -1
  62. package/dist/src/transform/transformTelemetryInfo.js +3 -10
  63. package/dist/src/transform/transformTelemetryInfo.js.map +1 -1
  64. package/dist/src/transform/transfromRLCOptions.d.ts.map +1 -1
  65. package/dist/src/transform/transfromRLCOptions.js +48 -9
  66. package/dist/src/transform/transfromRLCOptions.js.map +1 -1
  67. package/dist/src/utils/modelUtils.d.ts +2 -1
  68. package/dist/src/utils/modelUtils.d.ts.map +1 -1
  69. package/dist/src/utils/modelUtils.js +83 -73
  70. package/dist/src/utils/modelUtils.js.map +1 -1
  71. package/dist/src/utils/operationUtil.d.ts +15 -1
  72. package/dist/src/utils/operationUtil.d.ts.map +1 -1
  73. package/dist/src/utils/operationUtil.js +82 -3
  74. package/dist/src/utils/operationUtil.js.map +1 -1
  75. package/dist/tsconfig.tsbuildinfo +1 -1
  76. package/package.json +13 -11
  77. package/src/index.ts +24 -51
  78. package/src/lib.ts +3 -3
  79. package/src/modular/buildClassicalClient.ts +29 -16
  80. package/src/modular/buildClientContext.ts +8 -9
  81. package/src/modular/buildCodeModel.ts +183 -60
  82. package/src/modular/buildOperations.ts +16 -11
  83. package/src/modular/buildProjectFiles.ts +2 -2
  84. package/src/modular/buildRootIndex.ts +19 -12
  85. package/src/modular/buildSubpathIndex.ts +10 -8
  86. package/src/modular/emitModels.ts +35 -24
  87. package/src/modular/helpers/clientHelpers.ts +1 -1
  88. package/src/modular/helpers/operationHelpers.ts +231 -118
  89. package/src/modular/helpers/typeHelpers.ts +14 -7
  90. package/src/modular/modularCodeModel.ts +11 -0
  91. package/src/transform/transformHelperFunctionDetails.ts +10 -4
  92. package/src/transform/transformParameters.ts +15 -57
  93. package/src/transform/transformResponses.ts +2 -4
  94. package/src/transform/transformSchemas.ts +5 -9
  95. package/src/transform/transformTelemetryInfo.ts +4 -18
  96. package/src/transform/transfromRLCOptions.ts +67 -9
  97. package/src/utils/modelUtils.ts +81 -72
  98. package/src/utils/operationUtil.ts +121 -4
@@ -1,20 +1,22 @@
1
1
  import { join } from "path";
2
- import { Project } from "ts-morph";
2
+ import { Client, ModularCodeModel } from "./modularCodeModel.js";
3
3
 
4
4
  export function buildSubpathIndexFile(
5
- project: Project,
6
- srcPath: string,
7
- subpath: string,
8
- subfolder: string
5
+ codeModel: ModularCodeModel,
6
+ client: Client,
7
+ subpath: string
9
8
  ) {
10
- const apiFilePattern = join(srcPath, subfolder, subpath);
11
- const apiFiles = project.getSourceFiles().filter((file) => {
9
+ const { subfolder } = client;
10
+ const srcPath = codeModel.modularOptions.sourceRoot;
11
+
12
+ const apiFilePattern = join(srcPath, client.subfolder ?? "", subpath);
13
+ const apiFiles = codeModel.project.getSourceFiles().filter((file) => {
12
14
  return file
13
15
  .getFilePath()
14
16
  .replace(/\\/g, "/")
15
17
  .startsWith(apiFilePattern.replace(/\\/g, "/"));
16
18
  });
17
- const indexFile = project.createSourceFile(
19
+ const indexFile = codeModel.project.createSourceFile(
18
20
  `${srcPath}/${subfolder}/${subpath}/index.ts`
19
21
  );
20
22
  for (const file of apiFiles) {
@@ -1,4 +1,4 @@
1
- import { Project, SourceFile } from "ts-morph";
1
+ import { SourceFile } from "ts-morph";
2
2
  import { getType } from "./helpers/typeHelpers.js";
3
3
  import { Client, ModularCodeModel, Type } from "./modularCodeModel.js";
4
4
  import * as path from "path";
@@ -10,18 +10,22 @@ import { buildOperationOptions } from "./buildOperations.js";
10
10
  */
11
11
  export function buildModels(
12
12
  codeModel: ModularCodeModel,
13
- project: Project,
14
- srcPath: string = "src",
15
- subfolder: string = ""
16
- ): SourceFile {
17
- const modelsFile = project.createSourceFile(
18
- path.join(`${srcPath}/`, subfolder, `models/models.ts`)
19
- );
20
-
13
+ subClient: Client
14
+ ): SourceFile | undefined {
21
15
  // We are generating both models and enums here
22
16
  const coreClientTypes = new Set<string>();
23
17
  const models = codeModel.types.filter(
24
- (t) => (t.type === "model" || t.type === "enum") && !isAzureCoreError(t)
18
+ (t) =>
19
+ (t.type === "model" || t.type === "enum") && !isAzureCoreErrorSdkType(t)
20
+ );
21
+
22
+ // Skip to generate models.ts if there is no any models
23
+ if (models.length === 0) {
24
+ return;
25
+ }
26
+ const srcPath = codeModel.modularOptions.sourceRoot;
27
+ const modelsFile = codeModel.project.createSourceFile(
28
+ path.join(`${srcPath}/`, subClient.subfolder ?? "", `models/models.ts`)
25
29
  );
26
30
 
27
31
  for (const model of codeModel.types) {
@@ -36,7 +40,7 @@ export function buildModels(
36
40
 
37
41
  for (const model of models) {
38
42
  const properties = model.properties ?? [];
39
- const typeMetadata = getType(model);
43
+ const typeMetadata = getType(model, model.format);
40
44
  let typeName = typeMetadata.name;
41
45
  if (typeMetadata.modifier === "Array") {
42
46
  typeName = `${typeName}[]`;
@@ -67,15 +71,16 @@ export function buildModels(
67
71
  if (!model.name) {
68
72
  throw new Error("Can't generate a model that has no name");
69
73
  }
70
- modelsFile.addInterface({
74
+ const modelInterface = {
71
75
  name: model.name,
72
76
  isExported: true,
73
77
  docs: getDocsFromDescription(model.description),
78
+ extends: [] as string[],
74
79
  properties: properties.map((p) => {
75
- const propertyMetadata = getType(p.type);
80
+ const propertyMetadata = getType(p.type, p.format);
76
81
  let propertyTypeName = propertyMetadata.name;
77
- if (isAzureCoreError(p.type)) {
78
- propertyTypeName = isAzureCoreError(p.type)
82
+ if (isAzureCoreErrorSdkType(p.type)) {
83
+ propertyTypeName = isAzureCoreErrorSdkType(p.type)
79
84
  ? getCoreClientErrorType(propertyTypeName)
80
85
  : propertyTypeName;
81
86
  }
@@ -90,7 +95,13 @@ export function buildModels(
90
95
  type: propertyTypeName
91
96
  };
92
97
  })
93
- });
98
+ };
99
+ model.type === "model"
100
+ ? model.parents?.forEach((p) =>
101
+ modelInterface.extends.push(getType(p, p.format).name)
102
+ )
103
+ : undefined;
104
+ modelsFile.addInterface(modelInterface);
94
105
  }
95
106
  }
96
107
 
@@ -112,22 +123,22 @@ export function buildModels(
112
123
  return modelsFile;
113
124
  }
114
125
 
115
- function isAzureCoreError(t: Type) {
126
+ function isAzureCoreErrorSdkType(t: Type) {
116
127
  return (
117
128
  t.name &&
118
- ["Error", "InnerError"].includes(t.name) &&
129
+ ["error", "errormodel", "innererror", "errorresponse"].includes(
130
+ t.name.toLowerCase()
131
+ ) &&
119
132
  t.isCoreErrorType === true
120
133
  );
121
134
  }
122
135
 
123
136
  export function buildModelsOptions(
124
- client: Client,
125
- project: Project,
126
- srcPath: string = "src",
127
- subfolder: string = ""
137
+ codeModel: ModularCodeModel,
138
+ client: Client
128
139
  ) {
129
- const modelOptionsFile = project.createSourceFile(
130
- `${srcPath}/${subfolder}/models/options.ts`,
140
+ const modelOptionsFile = codeModel.project.createSourceFile(
141
+ `${codeModel.modularOptions.sourceRoot}/${client.subfolder}/models/options.ts`,
131
142
  undefined,
132
143
  {
133
144
  overwrite: true
@@ -24,7 +24,7 @@ export function getClientParameters(
24
24
  .map<OptionalKind<ParameterDeclarationStructure>>((p) => {
25
25
  return {
26
26
  name: p.clientName,
27
- type: getType(p.type).name
27
+ type: getType(p.type, p.format).name
28
28
  };
29
29
  }),
30
30
  optionsParam