@azure-tools/typespec-ts 0.14.0 → 0.15.0-alpha.20230822.1

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 (141) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/src/index.d.ts +1 -5
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +148 -78
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/lib.d.ts.map +1 -1
  7. package/dist/src/lib.js +4 -2
  8. package/dist/src/lib.js.map +1 -1
  9. package/dist/src/modular/buildClassicalClient.d.ts +1 -1
  10. package/dist/src/modular/buildClassicalClient.d.ts.map +1 -1
  11. package/dist/src/modular/buildClassicalClient.js +27 -15
  12. package/dist/src/modular/buildClassicalClient.js.map +1 -1
  13. package/dist/src/modular/buildClientContext.d.ts +1 -1
  14. package/dist/src/modular/buildClientContext.d.ts.map +1 -1
  15. package/dist/src/modular/buildClientContext.js +16 -7
  16. package/dist/src/modular/buildClientContext.js.map +1 -1
  17. package/dist/src/modular/buildCodeModel.d.ts.map +1 -1
  18. package/dist/src/modular/buildCodeModel.js +59 -12
  19. package/dist/src/modular/buildCodeModel.js.map +1 -1
  20. package/dist/src/modular/buildOperations.d.ts +2 -1
  21. package/dist/src/modular/buildOperations.d.ts.map +1 -1
  22. package/dist/src/modular/buildOperations.js +25 -29
  23. package/dist/src/modular/buildOperations.js.map +1 -1
  24. package/dist/src/modular/buildProjectFiles.d.ts +2 -2
  25. package/dist/src/modular/buildProjectFiles.d.ts.map +1 -1
  26. package/dist/src/modular/buildProjectFiles.js +284 -145
  27. package/dist/src/modular/buildProjectFiles.js.map +1 -1
  28. package/dist/src/modular/buildRootIndex.d.ts.map +1 -1
  29. package/dist/src/modular/buildRootIndex.js +5 -5
  30. package/dist/src/modular/buildRootIndex.js.map +1 -1
  31. package/dist/src/modular/buildSubpathIndex.d.ts.map +1 -1
  32. package/dist/src/modular/buildSubpathIndex.js +9 -2
  33. package/dist/src/modular/buildSubpathIndex.js.map +1 -1
  34. package/dist/src/modular/emitModels.d.ts +3 -2
  35. package/dist/src/modular/emitModels.d.ts.map +1 -1
  36. package/dist/src/modular/emitModels.js +40 -7
  37. package/dist/src/modular/emitModels.js.map +1 -1
  38. package/dist/src/modular/helpers/clientHelpers.d.ts.map +1 -1
  39. package/dist/src/modular/helpers/clientHelpers.js +5 -3
  40. package/dist/src/modular/helpers/clientHelpers.js.map +1 -1
  41. package/dist/src/modular/helpers/docsHelpers.d.ts +3 -0
  42. package/dist/src/modular/helpers/docsHelpers.d.ts.map +1 -0
  43. package/dist/src/modular/helpers/docsHelpers.js +10 -0
  44. package/dist/src/modular/helpers/docsHelpers.js.map +1 -0
  45. package/dist/src/modular/helpers/operationHelpers.d.ts +11 -4
  46. package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -1
  47. package/dist/src/modular/helpers/operationHelpers.js +197 -56
  48. package/dist/src/modular/helpers/operationHelpers.js.map +1 -1
  49. package/dist/src/modular/helpers/typeHelpers.d.ts.map +1 -1
  50. package/dist/src/modular/helpers/typeHelpers.js +6 -0
  51. package/dist/src/modular/helpers/typeHelpers.js.map +1 -1
  52. package/dist/src/modular/modularCodeModel.d.ts +2 -0
  53. package/dist/src/modular/modularCodeModel.d.ts.map +1 -1
  54. package/dist/src/transform/transform.d.ts +5 -8
  55. package/dist/src/transform/transform.d.ts.map +1 -1
  56. package/dist/src/transform/transform.js +23 -13
  57. package/dist/src/transform/transform.js.map +1 -1
  58. package/dist/src/transform/transformApiVersionInfo.d.ts +2 -1
  59. package/dist/src/transform/transformApiVersionInfo.d.ts.map +1 -1
  60. package/dist/src/transform/transformApiVersionInfo.js.map +1 -1
  61. package/dist/src/transform/transformHelperFunctionDetails.d.ts +2 -1
  62. package/dist/src/transform/transformHelperFunctionDetails.d.ts.map +1 -1
  63. package/dist/src/transform/transformHelperFunctionDetails.js +4 -10
  64. package/dist/src/transform/transformHelperFunctionDetails.js.map +1 -1
  65. package/dist/src/transform/transformParameters.d.ts +2 -12
  66. package/dist/src/transform/transformParameters.d.ts.map +1 -1
  67. package/dist/src/transform/transformParameters.js +6 -47
  68. package/dist/src/transform/transformParameters.js.map +1 -1
  69. package/dist/src/transform/transformPaths.d.ts +2 -2
  70. package/dist/src/transform/transformPaths.d.ts.map +1 -1
  71. package/dist/src/transform/transformPaths.js.map +1 -1
  72. package/dist/src/transform/transformResponses.d.ts +2 -2
  73. package/dist/src/transform/transformResponses.d.ts.map +1 -1
  74. package/dist/src/transform/transformResponses.js +5 -1
  75. package/dist/src/transform/transformResponses.js.map +1 -1
  76. package/dist/src/transform/transformSchemas.d.ts +2 -2
  77. package/dist/src/transform/transformSchemas.d.ts.map +1 -1
  78. package/dist/src/transform/transformSchemas.js.map +1 -1
  79. package/dist/src/transform/transformTelemetryInfo.d.ts +4 -0
  80. package/dist/src/transform/transformTelemetryInfo.d.ts.map +1 -0
  81. package/dist/src/transform/transformTelemetryInfo.js +42 -0
  82. package/dist/src/transform/transformTelemetryInfo.js.map +1 -0
  83. package/dist/src/transform/transfromRLCOptions.d.ts +4 -2
  84. package/dist/src/transform/transfromRLCOptions.d.ts.map +1 -1
  85. package/dist/src/transform/transfromRLCOptions.js +72 -19
  86. package/dist/src/transform/transfromRLCOptions.js.map +1 -1
  87. package/dist/src/utils/clientUtils.d.ts +2 -1
  88. package/dist/src/utils/clientUtils.d.ts.map +1 -1
  89. package/dist/src/utils/clientUtils.js.map +1 -1
  90. package/dist/src/utils/interfaces.d.ts +13 -0
  91. package/dist/src/utils/interfaces.d.ts.map +1 -0
  92. package/dist/src/utils/interfaces.js +2 -0
  93. package/dist/src/utils/interfaces.js.map +1 -0
  94. package/dist/src/utils/modelUtils.d.ts +1 -1
  95. package/dist/src/utils/modelUtils.d.ts.map +1 -1
  96. package/dist/src/utils/modelUtils.js +25 -20
  97. package/dist/src/utils/modelUtils.js.map +1 -1
  98. package/dist/src/utils/operationUtil.d.ts +15 -4
  99. package/dist/src/utils/operationUtil.d.ts.map +1 -1
  100. package/dist/src/utils/operationUtil.js +65 -1
  101. package/dist/src/utils/operationUtil.js.map +1 -1
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +28 -18
  104. package/src/index.ts +231 -129
  105. package/src/lib.ts +4 -2
  106. package/src/modular/buildClassicalClient.ts +33 -16
  107. package/src/modular/buildClientContext.ts +18 -8
  108. package/src/modular/buildCodeModel.ts +71 -13
  109. package/src/modular/buildOperations.ts +31 -36
  110. package/src/modular/buildProjectFiles.ts +329 -162
  111. package/src/modular/buildRootIndex.ts +5 -7
  112. package/src/modular/buildSubpathIndex.ts +9 -2
  113. package/src/modular/emitModels.ts +55 -9
  114. package/src/modular/helpers/clientHelpers.ts +5 -3
  115. package/src/modular/helpers/docsHelpers.ts +10 -0
  116. package/src/modular/helpers/operationHelpers.ts +328 -75
  117. package/src/modular/helpers/typeHelpers.ts +6 -0
  118. package/src/modular/modularCodeModel.ts +2 -0
  119. package/src/transform/transform.ts +24 -31
  120. package/src/transform/transformApiVersionInfo.ts +1 -1
  121. package/src/transform/transformHelperFunctionDetails.ts +12 -11
  122. package/src/transform/transformParameters.ts +20 -63
  123. package/src/transform/transformPaths.ts +5 -5
  124. package/src/transform/transformResponses.ts +10 -6
  125. package/src/transform/transformSchemas.ts +2 -2
  126. package/src/transform/transformTelemetryInfo.ts +72 -0
  127. package/src/transform/transfromRLCOptions.ts +100 -23
  128. package/src/utils/clientUtils.ts +2 -4
  129. package/src/utils/interfaces.ts +14 -0
  130. package/src/utils/modelUtils.ts +18 -11
  131. package/src/utils/operationUtil.ts +92 -6
  132. package/dist/src/modular/helpers/fixmeHelpers.d.ts +0 -2
  133. package/dist/src/modular/helpers/fixmeHelpers.d.ts.map +0 -1
  134. package/dist/src/modular/helpers/fixmeHelpers.js +0 -4
  135. package/dist/src/modular/helpers/fixmeHelpers.js.map +0 -1
  136. package/dist/src/modular/helpers/parameterHelpers.d.ts +0 -3
  137. package/dist/src/modular/helpers/parameterHelpers.d.ts.map +0 -1
  138. package/dist/src/modular/helpers/parameterHelpers.js +0 -16
  139. package/dist/src/modular/helpers/parameterHelpers.js.map +0 -1
  140. package/src/modular/helpers/fixmeHelpers.ts +0 -3
  141. package/src/modular/helpers/parameterHelpers.ts +0 -17
@@ -1,7 +1,9 @@
1
1
  import { Project, SourceFile } from "ts-morph";
2
2
  import { getType } from "./helpers/typeHelpers.js";
3
- import { ModularCodeModel, Type } from "./modularCodeModel.js";
3
+ import { Client, ModularCodeModel, Type } from "./modularCodeModel.js";
4
4
  import * as path from "path";
5
+ import { getDocsFromDescription } from "./helpers/docsHelpers.js";
6
+ import { buildOperationOptions } from "./buildOperations.js";
5
7
 
6
8
  /**
7
9
  * This function creates the file containing all the models defined in TypeSpec
@@ -11,17 +13,21 @@ export function buildModels(
11
13
  project: Project,
12
14
  srcPath: string = "src",
13
15
  subfolder: string = ""
14
- ): SourceFile {
15
- const modelsFile = project.createSourceFile(
16
- path.join(`${srcPath}/src/`, subfolder, `models/models.ts`)
17
- );
18
-
16
+ ): SourceFile | undefined {
19
17
  // We are generating both models and enums here
20
18
  const coreClientTypes = new Set<string>();
21
19
  const models = codeModel.types.filter(
22
20
  (t) => (t.type === "model" || t.type === "enum") && !isAzureCoreError(t)
23
21
  );
24
22
 
23
+ // Skip to generate models.ts if there is no any models
24
+ if (models.length === 0) {
25
+ return;
26
+ }
27
+ const modelsFile = project.createSourceFile(
28
+ path.join(`${srcPath}/`, subfolder, `models/models.ts`)
29
+ );
30
+
25
31
  for (const model of codeModel.types) {
26
32
  if (model.type === "combined" && model.nullable) {
27
33
  for (const unionModel of model.types ?? []) {
@@ -48,7 +54,7 @@ export function buildModels(
48
54
  name: model.name!,
49
55
  isExported: true,
50
56
  docs: [
51
- model.description ?? "",
57
+ ...getDocsFromDescription(model.description),
52
58
  // If it is a fixed enum we don't need to list the known values in the docs as the
53
59
  // output will be a literal union which is self documenting
54
60
  model.isFixed
@@ -68,7 +74,7 @@ export function buildModels(
68
74
  modelsFile.addInterface({
69
75
  name: model.name,
70
76
  isExported: true,
71
- docs: [model.description ?? ""],
77
+ docs: getDocsFromDescription(model.description),
72
78
  properties: properties.map((p) => {
73
79
  const propertyMetadata = getType(p.type);
74
80
  let propertyTypeName = propertyMetadata.name;
@@ -82,7 +88,7 @@ export function buildModels(
82
88
  }
83
89
  return {
84
90
  name: `"${p.clientName}"`,
85
- docs: [p.description],
91
+ docs: getDocsFromDescription(p.description),
86
92
  hasQuestionToken: p.optional,
87
93
  isReadonly: p.readonly,
88
94
  type: propertyTypeName
@@ -117,3 +123,43 @@ function isAzureCoreError(t: Type) {
117
123
  t.isCoreErrorType === true
118
124
  );
119
125
  }
126
+
127
+ export function buildModelsOptions(
128
+ client: Client,
129
+ project: Project,
130
+ srcPath: string = "src",
131
+ subfolder: string = ""
132
+ ) {
133
+ const modelOptionsFile = project.createSourceFile(
134
+ `${srcPath}/${subfolder}/models/options.ts`,
135
+ undefined,
136
+ {
137
+ overwrite: true
138
+ }
139
+ );
140
+ for (const operationGroup of client.operationGroups) {
141
+ operationGroup.operations.forEach((o) => {
142
+ buildOperationOptions(o, modelOptionsFile);
143
+ });
144
+ }
145
+ modelOptionsFile.addImportDeclarations([
146
+ {
147
+ moduleSpecifier: "@azure-rest/core-client",
148
+ namedImports: ["OperationOptions"]
149
+ }
150
+ ]);
151
+
152
+ modelOptionsFile.fixMissingImports();
153
+ modelOptionsFile
154
+ .getImportDeclarations()
155
+ .filter((id) => {
156
+ return (
157
+ id.isModuleSpecifierRelative() &&
158
+ !id.getModuleSpecifierValue().endsWith(".js")
159
+ );
160
+ })
161
+ .map((id) => {
162
+ id.setModuleSpecifier(id.getModuleSpecifierValue() + ".js");
163
+ return id;
164
+ });
165
+ }
@@ -1,11 +1,13 @@
1
1
  import { OptionalKind, ParameterDeclarationStructure } from "ts-morph";
2
2
  import { Client } from "../modularCodeModel.js";
3
- import { getParameterType } from "./parameterHelpers.js";
3
+ import { getType } from "./typeHelpers.js";
4
+ import { getClientName } from "./namingHelpers.js";
4
5
 
5
6
  export function getClientParameters(
6
7
  client: Client
7
8
  ): OptionalKind<ParameterDeclarationStructure>[] {
8
- const { name, parameters } = client;
9
+ const { parameters } = client;
10
+ const name = getClientName(client);
9
11
  const optionsParam = {
10
12
  name: "options",
11
13
  type: `${name}ClientOptions`,
@@ -22,7 +24,7 @@ export function getClientParameters(
22
24
  .map<OptionalKind<ParameterDeclarationStructure>>((p) => {
23
25
  return {
24
26
  name: p.clientName,
25
- type: getParameterType(p)
27
+ type: getType(p.type).name
26
28
  };
27
29
  }),
28
30
  optionsParam
@@ -0,0 +1,10 @@
1
+ export function getFixmeForMultilineDocs(fixme: string[]): string[] {
2
+ return fixme.map((fixme) => ` @fixme ${fixme}`);
3
+ }
4
+
5
+ export function getDocsFromDescription(description?: string): string[] {
6
+ if (!description || description.trim().length === 0) {
7
+ return [];
8
+ }
9
+ return [description];
10
+ }