@autorest/typescript 6.0.0-beta.13 → 6.0.0-beta.16

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 (246) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +41 -5
  3. package/dist/src/autorestSession.d.ts +8 -3
  4. package/dist/src/autorestSession.d.ts.map +1 -1
  5. package/dist/src/autorestSession.js +3 -9
  6. package/dist/src/autorestSession.js.map +1 -1
  7. package/dist/src/conflictResolver.d.ts +3 -0
  8. package/dist/src/conflictResolver.d.ts.map +1 -0
  9. package/dist/src/conflictResolver.js +43 -0
  10. package/dist/src/conflictResolver.js.map +1 -0
  11. package/dist/src/generators/clientFileGenerator.d.ts.map +1 -1
  12. package/dist/src/generators/clientFileGenerator.js +181 -31
  13. package/dist/src/generators/clientFileGenerator.js.map +1 -1
  14. package/dist/src/generators/indexGenerator.d.ts.map +1 -1
  15. package/dist/src/generators/indexGenerator.js +85 -12
  16. package/dist/src/generators/indexGenerator.js.map +1 -1
  17. package/dist/src/generators/mappersGenerator.d.ts.map +1 -1
  18. package/dist/src/generators/mappersGenerator.js +81 -7
  19. package/dist/src/generators/mappersGenerator.js.map +1 -1
  20. package/dist/src/generators/modelsGenerator.d.ts.map +1 -1
  21. package/dist/src/generators/modelsGenerator.js +20 -2
  22. package/dist/src/generators/modelsGenerator.js.map +1 -1
  23. package/dist/src/generators/operationGenerator.js +6 -6
  24. package/dist/src/generators/operationGenerator.js.map +1 -1
  25. package/dist/src/generators/samples/sampleEnv.hbs +4 -0
  26. package/dist/src/generators/samples/sampleEnvGenerator.d.ts +3 -0
  27. package/dist/src/generators/samples/sampleEnvGenerator.d.ts.map +1 -0
  28. package/dist/src/generators/samples/sampleEnvGenerator.js +17 -0
  29. package/dist/src/generators/samples/sampleEnvGenerator.js.map +1 -0
  30. package/dist/src/generators/samples/sampleGenerator.d.ts +13 -0
  31. package/dist/src/generators/samples/sampleGenerator.d.ts.map +1 -0
  32. package/dist/src/generators/samples/sampleGenerator.js +43 -0
  33. package/dist/src/generators/samples/sampleGenerator.js.map +1 -0
  34. package/dist/src/generators/static/README.md.hbs +23 -0
  35. package/dist/src/generators/static/karma.conf.js.hbs +141 -0
  36. package/dist/src/generators/static/karmaConfigFileGenerator.d.ts +3 -0
  37. package/dist/src/generators/static/karmaConfigFileGenerator.d.ts.map +1 -0
  38. package/dist/src/generators/static/karmaConfigFileGenerator.js +23 -0
  39. package/dist/src/generators/static/karmaConfigFileGenerator.js.map +1 -0
  40. package/dist/src/generators/static/packageFileGenerator.d.ts.map +1 -1
  41. package/dist/src/generators/static/packageFileGenerator.js +100 -25
  42. package/dist/src/generators/static/packageFileGenerator.js.map +1 -1
  43. package/dist/src/generators/static/readmeFileGenerator.d.ts.map +1 -1
  44. package/dist/src/generators/static/readmeFileGenerator.js +5 -1
  45. package/dist/src/generators/static/readmeFileGenerator.js.map +1 -1
  46. package/dist/src/generators/static/rollupConfigFileGenerator.d.ts.map +1 -1
  47. package/dist/src/generators/static/rollupConfigFileGenerator.js +7 -70
  48. package/dist/src/generators/static/rollupConfigFileGenerator.js.map +1 -1
  49. package/dist/src/generators/static/samples.ts.hbs +49 -0
  50. package/dist/src/generators/static/tsConfigFileGenerator.d.ts.map +1 -1
  51. package/dist/src/generators/static/tsConfigFileGenerator.js +9 -10
  52. package/dist/src/generators/static/tsConfigFileGenerator.js.map +1 -1
  53. package/dist/src/generators/test/envBrowserFileGenerator.d.ts +3 -0
  54. package/dist/src/generators/test/envBrowserFileGenerator.d.ts.map +1 -0
  55. package/dist/src/generators/test/envBrowserFileGenerator.js +15 -0
  56. package/dist/src/generators/test/envBrowserFileGenerator.js.map +1 -0
  57. package/dist/src/generators/test/envFileGenerator.d.ts +3 -0
  58. package/dist/src/generators/test/envFileGenerator.d.ts.map +1 -0
  59. package/dist/src/generators/test/envFileGenerator.js +23 -0
  60. package/dist/src/generators/test/envFileGenerator.js.map +1 -0
  61. package/dist/src/generators/test/recordedClientFileGenerator.d.ts +3 -0
  62. package/dist/src/generators/test/recordedClientFileGenerator.d.ts.map +1 -0
  63. package/dist/src/generators/test/recordedClientFileGenerator.js +23 -0
  64. package/dist/src/generators/test/recordedClientFileGenerator.js.map +1 -0
  65. package/dist/src/generators/test/rlcEnv.ts.hbs +3 -0
  66. package/dist/src/generators/test/rlcRecordedClient.ts.hbs +35 -0
  67. package/dist/src/generators/test/rlcSampleTest.spec.ts.hbs +19 -0
  68. package/dist/src/generators/{static → test}/sampleTest.ts.hbs +0 -0
  69. package/dist/src/generators/test/sampleTestGenerator.d.ts.map +1 -1
  70. package/dist/src/generators/test/sampleTestGenerator.js +23 -7
  71. package/dist/src/generators/test/sampleTestGenerator.js.map +1 -1
  72. package/dist/src/generators/utils/pagingOperations.d.ts +5 -0
  73. package/dist/src/generators/utils/pagingOperations.d.ts.map +1 -1
  74. package/dist/src/generators/utils/pagingOperations.js +2 -1
  75. package/dist/src/generators/utils/pagingOperations.js.map +1 -1
  76. package/dist/src/main.d.ts +2 -2
  77. package/dist/src/main.d.ts.map +1 -1
  78. package/dist/src/main.js +3 -3
  79. package/dist/src/main.js.map +1 -1
  80. package/dist/src/models/clientDetails.d.ts +3 -0
  81. package/dist/src/models/clientDetails.d.ts.map +1 -1
  82. package/dist/src/models/modelDetails.d.ts +2 -2
  83. package/dist/src/models/modelDetails.d.ts.map +1 -1
  84. package/dist/src/models/operationDetails.d.ts +1 -0
  85. package/dist/src/models/operationDetails.d.ts.map +1 -1
  86. package/dist/src/models/sampleDetails.d.ts +22 -0
  87. package/dist/src/models/sampleDetails.d.ts.map +1 -0
  88. package/dist/src/models/sampleDetails.js +3 -0
  89. package/dist/src/models/sampleDetails.js.map +1 -0
  90. package/dist/src/restLevelClient/generateClient.d.ts +1 -1
  91. package/dist/src/restLevelClient/generateClient.d.ts.map +1 -1
  92. package/dist/src/restLevelClient/generateClient.js +48 -159
  93. package/dist/src/restLevelClient/generateClient.js.map +1 -1
  94. package/dist/src/restLevelClient/generateClientDefinition.d.ts +6 -0
  95. package/dist/src/restLevelClient/generateClientDefinition.d.ts.map +1 -0
  96. package/dist/src/restLevelClient/generateClientDefinition.js +231 -0
  97. package/dist/src/restLevelClient/generateClientDefinition.js.map +1 -0
  98. package/dist/src/restLevelClient/generateMethodShortcuts.d.ts +8 -0
  99. package/dist/src/restLevelClient/generateMethodShortcuts.d.ts.map +1 -0
  100. package/dist/src/restLevelClient/generateMethodShortcuts.js +70 -0
  101. package/dist/src/restLevelClient/generateMethodShortcuts.js.map +1 -0
  102. package/dist/src/restLevelClient/generateObjectTypes.d.ts +3 -3
  103. package/dist/src/restLevelClient/generateObjectTypes.d.ts.map +1 -1
  104. package/dist/src/restLevelClient/generateObjectTypes.js +28 -20
  105. package/dist/src/restLevelClient/generateObjectTypes.js.map +1 -1
  106. package/dist/src/restLevelClient/generatePagingHelper.d.ts.map +1 -1
  107. package/dist/src/restLevelClient/generatePagingHelper.js +2 -1
  108. package/dist/src/restLevelClient/generatePagingHelper.js.map +1 -1
  109. package/dist/src/restLevelClient/generateParameterTypes.d.ts.map +1 -1
  110. package/dist/src/restLevelClient/generateParameterTypes.js +246 -36
  111. package/dist/src/restLevelClient/generateParameterTypes.js.map +1 -1
  112. package/dist/src/restLevelClient/generatePollingHelper.d.ts.map +1 -1
  113. package/dist/src/restLevelClient/generatePollingHelper.js +3 -1
  114. package/dist/src/restLevelClient/generatePollingHelper.js.map +1 -1
  115. package/dist/src/restLevelClient/generateResponseTypes.d.ts.map +1 -1
  116. package/dist/src/restLevelClient/generateResponseTypes.js +23 -14
  117. package/dist/src/restLevelClient/generateResponseTypes.js.map +1 -1
  118. package/dist/src/restLevelClient/generateRestLevel.d.ts.map +1 -1
  119. package/dist/src/restLevelClient/generateRestLevel.js +19 -3
  120. package/dist/src/restLevelClient/generateRestLevel.js.map +1 -1
  121. package/dist/src/restLevelClient/generateSchemaTypes.d.ts.map +1 -1
  122. package/dist/src/restLevelClient/generateSchemaTypes.js +29 -7
  123. package/dist/src/restLevelClient/generateSchemaTypes.js.map +1 -1
  124. package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts +4 -0
  125. package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts.map +1 -0
  126. package/dist/src/restLevelClient/generateTopLevelIndexFile.js +41 -0
  127. package/dist/src/restLevelClient/generateTopLevelIndexFile.js.map +1 -0
  128. package/dist/src/restLevelClient/getPropertySignature.d.ts +2 -2
  129. package/dist/src/restLevelClient/getPropertySignature.d.ts.map +1 -1
  130. package/dist/src/restLevelClient/getPropertySignature.js +2 -2
  131. package/dist/src/restLevelClient/getPropertySignature.js.map +1 -1
  132. package/dist/src/restLevelClient/helpers/modelHelpers.d.ts +4 -0
  133. package/dist/src/restLevelClient/helpers/modelHelpers.d.ts.map +1 -0
  134. package/dist/src/restLevelClient/helpers/modelHelpers.js +19 -0
  135. package/dist/src/restLevelClient/helpers/modelHelpers.js.map +1 -0
  136. package/dist/src/restLevelClient/helpers/operationHelpers.d.ts +10 -0
  137. package/dist/src/restLevelClient/helpers/operationHelpers.d.ts.map +1 -0
  138. package/dist/src/restLevelClient/helpers/operationHelpers.js +64 -0
  139. package/dist/src/restLevelClient/helpers/operationHelpers.js.map +1 -0
  140. package/dist/src/restLevelClient/interfaces.d.ts +24 -0
  141. package/dist/src/restLevelClient/interfaces.d.ts.map +1 -0
  142. package/dist/src/restLevelClient/interfaces.js +3 -0
  143. package/dist/src/restLevelClient/interfaces.js.map +1 -0
  144. package/dist/src/restLevelClient/operationHelpers.d.ts.map +1 -1
  145. package/dist/src/restLevelClient/operationHelpers.js +4 -1
  146. package/dist/src/restLevelClient/operationHelpers.js.map +1 -1
  147. package/dist/src/restLevelClient/schemaHelpers.d.ts +8 -2
  148. package/dist/src/restLevelClient/schemaHelpers.d.ts.map +1 -1
  149. package/dist/src/restLevelClient/schemaHelpers.js +19 -9
  150. package/dist/src/restLevelClient/schemaHelpers.js.map +1 -1
  151. package/dist/src/transforms/operationTransforms.d.ts.map +1 -1
  152. package/dist/src/transforms/operationTransforms.js +4 -1
  153. package/dist/src/transforms/operationTransforms.js.map +1 -1
  154. package/dist/src/transforms/parameterTransforms.d.ts.map +1 -1
  155. package/dist/src/transforms/parameterTransforms.js +1 -1
  156. package/dist/src/transforms/parameterTransforms.js.map +1 -1
  157. package/dist/src/transforms/samplesTransforms.d.ts +7 -0
  158. package/dist/src/transforms/samplesTransforms.d.ts.map +1 -0
  159. package/dist/src/transforms/samplesTransforms.js +283 -0
  160. package/dist/src/transforms/samplesTransforms.js.map +1 -0
  161. package/dist/src/transforms/transforms.d.ts +1 -2
  162. package/dist/src/transforms/transforms.d.ts.map +1 -1
  163. package/dist/src/transforms/transforms.js +4 -3
  164. package/dist/src/transforms/transforms.js.map +1 -1
  165. package/dist/src/typescriptGenerator.d.ts +2 -2
  166. package/dist/src/typescriptGenerator.d.ts.map +1 -1
  167. package/dist/src/typescriptGenerator.js +20 -29
  168. package/dist/src/typescriptGenerator.js.map +1 -1
  169. package/dist/src/utils/autorestOptions.d.ts +2 -2
  170. package/dist/src/utils/autorestOptions.d.ts.map +1 -1
  171. package/dist/src/utils/autorestOptions.js +70 -30
  172. package/dist/src/utils/autorestOptions.js.map +1 -1
  173. package/dist/src/utils/nameUtils.d.ts +6 -2
  174. package/dist/src/utils/nameUtils.d.ts.map +1 -1
  175. package/dist/src/utils/nameUtils.js +11 -6
  176. package/dist/src/utils/nameUtils.js.map +1 -1
  177. package/dist/src/utils/schemaHelpers.js +8 -3
  178. package/dist/src/utils/schemaHelpers.js.map +1 -1
  179. package/package.json +18 -12
  180. package/src/autorestSession.ts +16 -15
  181. package/src/conflictResolver.ts +61 -0
  182. package/src/generators/clientFileGenerator.ts +262 -33
  183. package/src/generators/indexGenerator.ts +98 -13
  184. package/src/generators/mappersGenerator.ts +108 -8
  185. package/src/generators/modelsGenerator.ts +21 -1
  186. package/src/generators/operationGenerator.ts +7 -7
  187. package/src/generators/samples/sampleEnv.hbs +4 -0
  188. package/src/generators/samples/sampleEnvGenerator.ts +14 -0
  189. package/src/generators/samples/sampleGenerator.ts +50 -0
  190. package/src/generators/static/README.md.hbs +23 -0
  191. package/src/generators/static/karma.conf.js.hbs +141 -0
  192. package/src/generators/static/karmaConfigFileGenerator.ts +20 -0
  193. package/src/generators/static/packageFileGenerator.ts +113 -28
  194. package/src/generators/static/readmeFileGenerator.ts +8 -2
  195. package/src/generators/static/rollupConfigFileGenerator.ts +7 -70
  196. package/src/generators/static/samples.ts.hbs +49 -0
  197. package/src/generators/static/tsConfigFileGenerator.ts +12 -12
  198. package/src/generators/test/envBrowserFileGenerator.ts +14 -0
  199. package/src/generators/test/envFileGenerator.ts +22 -0
  200. package/src/generators/test/recordedClientFileGenerator.ts +22 -0
  201. package/src/generators/test/rlcEnv.ts.hbs +3 -0
  202. package/src/generators/test/rlcRecordedClient.ts.hbs +35 -0
  203. package/src/generators/test/rlcSampleTest.spec.ts.hbs +19 -0
  204. package/src/generators/{static → test}/sampleTest.ts.hbs +0 -0
  205. package/src/generators/test/sampleTestGenerator.ts +23 -8
  206. package/src/generators/utils/pagingOperations.ts +1 -1
  207. package/src/main.ts +9 -5
  208. package/src/models/clientDetails.ts +3 -0
  209. package/src/models/modelDetails.ts +2 -2
  210. package/src/models/operationDetails.ts +1 -0
  211. package/src/models/sampleDetails.ts +22 -0
  212. package/src/restLevelClient/generateClient.ts +55 -243
  213. package/src/restLevelClient/generateClientDefinition.ts +343 -0
  214. package/src/restLevelClient/generateMethodShortcuts.ts +121 -0
  215. package/src/restLevelClient/generateObjectTypes.ts +57 -20
  216. package/src/restLevelClient/generatePagingHelper.ts +3 -2
  217. package/src/restLevelClient/generateParameterTypes.ts +377 -48
  218. package/src/restLevelClient/generatePollingHelper.ts +3 -3
  219. package/src/restLevelClient/generateResponseTypes.ts +30 -16
  220. package/src/restLevelClient/generateRestLevel.ts +24 -6
  221. package/src/restLevelClient/generateSchemaTypes.ts +43 -8
  222. package/src/restLevelClient/generateTopLevelIndexFile.ts +41 -0
  223. package/src/restLevelClient/getPropertySignature.ts +3 -2
  224. package/src/restLevelClient/helpers/modelHelpers.ts +15 -0
  225. package/src/restLevelClient/helpers/operationHelpers.ts +93 -0
  226. package/src/restLevelClient/interfaces.ts +26 -0
  227. package/src/restLevelClient/operationHelpers.ts +8 -2
  228. package/src/restLevelClient/schemaHelpers.ts +25 -7
  229. package/src/transforms/operationTransforms.ts +6 -1
  230. package/src/transforms/parameterTransforms.ts +3 -1
  231. package/src/transforms/samplesTransforms.ts +300 -0
  232. package/src/transforms/transforms.ts +6 -6
  233. package/src/typescriptGenerator.ts +22 -46
  234. package/src/utils/autorestOptions.ts +121 -58
  235. package/src/utils/nameUtils.ts +18 -9
  236. package/src/utils/schemaHelpers.ts +2 -2
  237. package/dist/src/generators/clientContextFileGenerator.d.ts +0 -5
  238. package/dist/src/generators/clientContextFileGenerator.d.ts.map +0 -1
  239. package/dist/src/generators/clientContextFileGenerator.js +0 -263
  240. package/dist/src/generators/clientContextFileGenerator.js.map +0 -1
  241. package/dist/src/restLevelClient/helpers/getOperationParameters.d.ts +0 -6
  242. package/dist/src/restLevelClient/helpers/getOperationParameters.d.ts.map +0 -1
  243. package/dist/src/restLevelClient/helpers/getOperationParameters.js +0 -29
  244. package/dist/src/restLevelClient/helpers/getOperationParameters.js.map +0 -1
  245. package/src/generators/clientContextFileGenerator.ts +0 -405
  246. package/src/restLevelClient/helpers/getOperationParameters.ts +0 -34
@@ -1,9 +1,11 @@
1
- import { CodeModel } from "@autorest/codemodel";
1
+ import { CodeModel, SchemaContext } from "@autorest/codemodel";
2
2
  import { Project } from "ts-morph";
3
+ import * as path from 'path';
3
4
  import {
4
5
  buildObjectInterfaces,
5
6
  buildPolymorphicAliases
6
7
  } from "./generateObjectTypes";
8
+ import { getAutorestOptions } from "../autorestSession";
7
9
 
8
10
  /**
9
11
  * Generates types to represent schema definitions in the swagger
@@ -11,12 +13,45 @@ import {
11
13
  export function generateSchemaTypes(model: CodeModel, project: Project) {
12
14
  // Track models that need to be imported
13
15
  const importedModels = new Set<string>();
14
- const modelsFile = project.createSourceFile(`src/models.ts`, undefined, {
15
- overwrite: true
16
- });
17
16
 
18
- const objectsDefinitions = buildObjectInterfaces(model, importedModels);
19
- const objectTypeAliases = buildPolymorphicAliases(model);
20
- modelsFile.addInterfaces(objectsDefinitions);
21
- modelsFile.addTypeAliases(objectTypeAliases);
17
+ const objectsDefinitions = buildObjectInterfaces(model, importedModels, [
18
+ SchemaContext.Input
19
+ ]);
20
+ const objectTypeAliases = buildPolymorphicAliases(model, [
21
+ SchemaContext.Input
22
+ ]);
23
+ const { srcPath } = getAutorestOptions();
24
+ if (objectTypeAliases.length || objectsDefinitions.length) {
25
+ const inputModelsFile = project.createSourceFile(
26
+ path.join(srcPath, `models.ts`),
27
+ undefined,
28
+ {
29
+ overwrite: true
30
+ }
31
+ );
32
+ inputModelsFile.addInterfaces(objectsDefinitions);
33
+ inputModelsFile.addTypeAliases(objectTypeAliases);
34
+ }
35
+ const outputObjectsDefinitions = buildObjectInterfaces(
36
+ model,
37
+ importedModels,
38
+ [SchemaContext.Output, SchemaContext.Exception]
39
+ );
40
+ const outputObjectTypeAliases = buildPolymorphicAliases(model, [
41
+ SchemaContext.Output,
42
+ SchemaContext.Exception
43
+ ]);
44
+
45
+ if (outputObjectTypeAliases.length || outputObjectsDefinitions.length) {
46
+ const outputModelsFile = project.createSourceFile(
47
+ path.join(srcPath, `outputModels.ts`),
48
+ undefined,
49
+ {
50
+ overwrite: true
51
+ }
52
+ );
53
+
54
+ outputModelsFile.addInterfaces(outputObjectsDefinitions);
55
+ outputModelsFile.addTypeAliases(outputObjectTypeAliases);
56
+ }
22
57
  }
@@ -0,0 +1,41 @@
1
+ import { Project } from 'ts-morph';
2
+ import * as path from 'path';
3
+ import { getAutorestOptions } from '../autorestSession';
4
+ import { CodeModel } from '@autorest/codemodel';
5
+ import { NameType, normalizeName } from '../utils/nameUtils';
6
+
7
+ const batchOutputFolder: [string, string, string][] = [];
8
+
9
+ export function generateTopLevelIndexFile(model: CodeModel, project: Project) {
10
+ const { multiClient, batch, srcPath } = getAutorestOptions();
11
+ if (srcPath) {
12
+ const clientName = model.language.default.name;
13
+ const moduleName = normalizeName(clientName, NameType.File);
14
+ const relativePath = srcPath.replace('/src', '');
15
+ batchOutputFolder.push([relativePath, clientName, moduleName]);
16
+ }
17
+
18
+ if (multiClient && batch && batch.length > 1 && batchOutputFolder.length === batch.length) {
19
+ const { srcPath } = getAutorestOptions();
20
+ const fileDirectory= path.join(srcPath as string, '../../');
21
+ const file = project.createSourceFile('/src/index.ts', undefined, {
22
+ overwrite: true
23
+ });
24
+ file.moveToDirectory(fileDirectory);
25
+ const allModules: string[] = [];
26
+ batchOutputFolder.forEach(item => {
27
+ file.addImportDeclaration({
28
+ namespaceImport: item[1],
29
+ moduleSpecifier: `${item[0]}`
30
+ });
31
+ file.addExportDeclaration({
32
+ moduleSpecifier: `${item[0]}/${item[2]}`,
33
+ namedExports: [`${item[1]} as ${item[1]}Client`]
34
+ })
35
+ allModules.push(item[1]);
36
+ });
37
+ file.addExportDeclaration({
38
+ namedExports: [...allModules]
39
+ });
40
+ }
41
+ }
@@ -1,4 +1,4 @@
1
- import { Parameter, Property } from "@autorest/codemodel";
1
+ import { Parameter, Property, SchemaContext } from "@autorest/codemodel";
2
2
  import { PropertySignatureStructure, StructureKind } from "ts-morph";
3
3
  import { getLanguageMetadata } from "../utils/languageHelpers";
4
4
  import { getElementType, getFormatDocs } from "./schemaHelpers";
@@ -11,6 +11,7 @@ import { getElementType, getFormatDocs } from "./schemaHelpers";
11
11
  */
12
12
  export function getPropertySignature(
13
13
  property: Property | Parameter,
14
+ schemaUsage: SchemaContext[],
14
15
  importedModels = new Set<string>()
15
16
  ): PropertySignatureStructure {
16
17
  const propertyLangMetadata = getLanguageMetadata(property.language);
@@ -24,7 +25,7 @@ export function getPropertySignature(
24
25
  }
25
26
 
26
27
  const description = getDocs(property);
27
- const type = getElementType(property.schema, importedModels);
28
+ const type = getElementType(property.schema, schemaUsage, importedModels);
28
29
  return {
29
30
  name: propertyName,
30
31
  ...(description && { docs: [{ description }] }),
@@ -0,0 +1,15 @@
1
+ import { CodeModel, SchemaContext } from "@autorest/codemodel";
2
+
3
+ export function hasInputModels(model: CodeModel) {
4
+ return model.schemas.objects?.some(o =>
5
+ o.usage?.includes(SchemaContext.Input)
6
+ );
7
+ }
8
+
9
+ export function hasOutputModels(model: CodeModel) {
10
+ return model.schemas.objects?.some(
11
+ o =>
12
+ o.usage?.includes(SchemaContext.Output) ||
13
+ o.usage?.includes(SchemaContext.Exception)
14
+ );
15
+ }
@@ -0,0 +1,93 @@
1
+ import {
2
+ ImplementationLocation,
3
+ Operation,
4
+ Parameter,
5
+ SchemaContext
6
+ } from "@autorest/codemodel";
7
+ import {
8
+ OptionalKind,
9
+ MethodSignatureStructure,
10
+ ParameterDeclarationStructure
11
+ } from "ts-morph";
12
+ import { Methods, PathParameter } from "../interfaces";
13
+ import { getElementType } from "../schemaHelpers";
14
+
15
+ /**
16
+ * Given an operation, extract all its parameters
17
+ */
18
+ export function getOperationParameters(
19
+ operation: Operation,
20
+ requestIndex = 0
21
+ ): Parameter[] {
22
+ const operationParams = [
23
+ ...(operation.parameters ?? []),
24
+ ...(operation.signatureParameters ?? [])
25
+ ];
26
+
27
+ const distinctParams = new Set(operationParams);
28
+
29
+ if (operation.requests) {
30
+ [
31
+ ...(operation.requests[requestIndex].parameters ?? []),
32
+ ...(operation.requests[requestIndex].signatureParameters ?? [])
33
+ ].forEach(p => distinctParams.add(p));
34
+ }
35
+
36
+ return [...distinctParams].filter(filterMethodNotSynthetic);
37
+ }
38
+
39
+ function filterMethodNotSynthetic(parameter: Parameter) {
40
+ const isApiVersion =
41
+ parameter.origin &&
42
+ parameter.language.default.serializedName === "api-version" &&
43
+ parameter.implementation === ImplementationLocation.Method;
44
+ // Origin is added by M4 on synthetic parameters
45
+ return (
46
+ (!parameter.origin || isApiVersion) &&
47
+ parameter.implementation === ImplementationLocation.Method
48
+ );
49
+ }
50
+
51
+ export function buildMethodDefinitions(
52
+ methods: Methods,
53
+ pathParams: PathParameter[] = []
54
+ ): OptionalKind<MethodSignatureStructure>[] {
55
+ const methodDefinitions: OptionalKind<MethodSignatureStructure>[] = [];
56
+ for (const key of Object.keys(methods)) {
57
+ const method = methods[key];
58
+ const description = methods[key][0].description;
59
+
60
+ let areAllOptional = methods[key][0].hasOptionalOptions;
61
+
62
+ methodDefinitions.push({
63
+ name: key,
64
+ ...(description && { docs: [{ description }] }),
65
+ parameters: [
66
+ ...getPathParamDefinitions(pathParams),
67
+ {
68
+ name: "options",
69
+ hasQuestionToken: areAllOptional,
70
+ type: method.map(m => m.optionsName).join(" | ")
71
+ }
72
+ ],
73
+ returnType: method.map(m => m.returnType).join(" | ")
74
+ });
75
+ }
76
+
77
+ return methodDefinitions;
78
+ }
79
+
80
+ export function getPathParamDefinitions(
81
+ pathParams: PathParameter[]
82
+ ): OptionalKind<ParameterDeclarationStructure>[] {
83
+ return pathParams.map(p => {
84
+ return {
85
+ name: p.name,
86
+ type: getElementType(p.schema, [
87
+ SchemaContext.Input,
88
+ SchemaContext.Exception
89
+ ]),
90
+ description: p.description
91
+ };
92
+ });
93
+ }
@@ -0,0 +1,26 @@
1
+ import { Schema } from "@autorest/codemodel";
2
+
3
+ export type PathParameter = {
4
+ name: string;
5
+ schema: Schema;
6
+ description?: string;
7
+ };
8
+
9
+ export type Methods = {
10
+ [key: string]: [
11
+ {
12
+ optionsName: string;
13
+ description: string;
14
+ hasOptionalOptions: boolean;
15
+ returnType: string;
16
+ }
17
+ ];
18
+ };
19
+
20
+ export type Paths = {
21
+ [key: string]: {
22
+ name: string;
23
+ pathParameters: PathParameter[];
24
+ methods: Methods;
25
+ };
26
+ };
@@ -2,7 +2,9 @@ import {
2
2
  AnyObjectSchema,
3
3
  Operation,
4
4
  SchemaResponse,
5
- Response
5
+ Response,
6
+ Schema,
7
+ BinarySchema
6
8
  } from "@autorest/codemodel";
7
9
  import { getLanguageMetadata } from "../utils/languageHelpers";
8
10
  import { NameType, normalizeName } from "../utils/nameUtils";
@@ -22,7 +24,11 @@ export function getResponseTypeName(
22
24
 
23
25
  export function responseToSchemaResponse(response: Response | SchemaResponse) {
24
26
  if (!isSchemaResponse(response)) {
25
- return new SchemaResponse(new AnyObjectSchema("AnyObject schema"), {
27
+ let schema: Schema = (response as any).binary
28
+ ? new BinarySchema("Binary schema")
29
+ : new AnyObjectSchema("AnyObject schema");
30
+
31
+ return new SchemaResponse(schema, {
26
32
  ...response
27
33
  });
28
34
  } else {
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  AnyObjectSchema,
3
3
  ArraySchema,
4
- ByteArraySchema,
5
4
  ChoiceSchema,
6
5
  ConstantSchema,
7
6
  DictionarySchema,
@@ -9,6 +8,7 @@ import {
9
8
  ObjectSchema,
10
9
  PrimitiveSchema,
11
10
  Schema,
11
+ SchemaContext,
12
12
  SchemaType
13
13
  } from "@autorest/codemodel";
14
14
  import { getLanguageMetadata } from "../utils/languageHelpers";
@@ -21,15 +21,20 @@ import { NameType, normalizeName } from "../utils/nameUtils";
21
21
  */
22
22
  export function getElementType(
23
23
  schema: Schema,
24
+ schemaUsage: SchemaContext[],
24
25
  importedModels = new Set<string>()
25
26
  ): string {
26
27
  if (isArraySchema(schema)) {
27
28
  // Recursively find out the type for the elements in the array.
28
- return `Array<${getElementType(schema.elementType, importedModels)}>`;
29
+ return `Array<${getElementType(
30
+ schema.elementType,
31
+ schemaUsage,
32
+ importedModels
33
+ )}>`;
29
34
  }
30
35
 
31
36
  if (isPrimitiveSchema(schema)) {
32
- return `${primitiveSchemaToType(schema)}`;
37
+ return `${primitiveSchemaToType(schema, schemaUsage)}`;
33
38
  }
34
39
 
35
40
  if (isAnyObjectSchema(schema)) {
@@ -37,7 +42,11 @@ export function getElementType(
37
42
  }
38
43
 
39
44
  if (isObjectSchema(schema)) {
40
- const { name } = getObjectInfo(schema);
45
+ const nameSuffix = schemaUsage.includes(SchemaContext.Output)
46
+ ? "Output"
47
+ : "";
48
+ const schemaInfo = getObjectInfo(schema);
49
+ const name = `${schemaInfo.name}${nameSuffix}`;
41
50
  importedModels.add(name);
42
51
  return `${name}`;
43
52
  }
@@ -45,6 +54,7 @@ export function getElementType(
45
54
  if (isDictionarySchema(schema)) {
46
55
  return `Record<string, ${getElementType(
47
56
  schema.elementType,
57
+ schemaUsage,
48
58
  importedModels
49
59
  )}>`;
50
60
  }
@@ -85,7 +95,10 @@ function isPrimitiveSchema(schema: Schema): boolean {
85
95
  * @param schema - Schema to generate a type for
86
96
  * @returns a string with the Typescript type to generate for the given schema
87
97
  */
88
- function primitiveSchemaToType(schema: PrimitiveSchema): string {
98
+ export function primitiveSchemaToType(
99
+ schema: PrimitiveSchema,
100
+ schemaUse: SchemaContext[]
101
+ ): string {
89
102
  switch (schema.type) {
90
103
  case SchemaType.Any:
91
104
  return "any";
@@ -95,11 +108,12 @@ function primitiveSchemaToType(schema: PrimitiveSchema): string {
95
108
  case SchemaType.Date:
96
109
  case SchemaType.Time:
97
110
  case SchemaType.DateTime:
98
- return "Date";
111
+ return schemaUse.includes(SchemaContext.Output)
112
+ ? "string"
113
+ : "Date | string";
99
114
  case SchemaType.Char:
100
115
  return "string";
101
116
  case SchemaType.ByteArray:
102
- case SchemaType.Binary:
103
117
  case SchemaType.Duration:
104
118
  case SchemaType.Credential:
105
119
  case SchemaType.UnixTime:
@@ -107,6 +121,10 @@ function primitiveSchemaToType(schema: PrimitiveSchema): string {
107
121
  case SchemaType.Uuid:
108
122
  case SchemaType.String:
109
123
  return "string";
124
+ case SchemaType.Binary:
125
+ return schemaUse.includes(SchemaContext.Output)
126
+ ? "Uint8Array"
127
+ : "string | Uint8Array";
110
128
  case SchemaType.Boolean:
111
129
  return "boolean";
112
130
  case SchemaType.Choice:
@@ -388,7 +388,11 @@ export async function transformOperation(
388
388
  NameType.Interface,
389
389
  true /** shouldGuard */
390
390
  );
391
- const typeName = `${normalizedOperationGroupName}${normalizedOperationName}`;
391
+
392
+ const typeName =
393
+ normalizedOperationGroupName === clientName
394
+ ? `${normalizedOperationName}`
395
+ : `${normalizedOperationGroupName}${normalizedOperationName}`;
392
396
 
393
397
  const typeDetails: TypeDetails = {
394
398
  typeName,
@@ -487,6 +491,7 @@ export async function transformOperationGroup(
487
491
  return {
488
492
  name: operationGroupClassName,
489
493
  key: operationGroup.$key,
494
+ originalKey: operationGroup.$key,
490
495
  operations,
491
496
  isTopLevel,
492
497
  mediaTypes
@@ -236,7 +236,9 @@ export function populateOperationParameters(
236
236
  true /** shouldGuard */
237
237
  );
238
238
 
239
- const sameNameParams = operationParameters.filter(p => p.name === name);
239
+ const sameNameParams = operationParameters.filter(
240
+ p => p.name === name || p.nameRef === name
241
+ );
240
242
  description += getSchemaTypeDocumentation(parameter.schema);
241
243
  const isRequired = getParameterRequired(parameter);
242
244
  const isNullable = !!parameter.nullable;