@autorest/typescript 6.0.0-beta.15 → 6.0.0-beta.18

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 (245) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +37 -3
  3. package/dist/src/autorestSession.d.ts +12 -4
  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.map +1 -1
  8. package/dist/src/conflictResolver.js.map +1 -1
  9. package/dist/src/generators/clientFileGenerator.d.ts.map +1 -1
  10. package/dist/src/generators/clientFileGenerator.js +181 -31
  11. package/dist/src/generators/clientFileGenerator.js.map +1 -1
  12. package/dist/src/generators/indexGenerator.d.ts.map +1 -1
  13. package/dist/src/generators/indexGenerator.js +70 -9
  14. package/dist/src/generators/indexGenerator.js.map +1 -1
  15. package/dist/src/generators/modelsGenerator.d.ts.map +1 -1
  16. package/dist/src/generators/modelsGenerator.js +21 -3
  17. package/dist/src/generators/modelsGenerator.js.map +1 -1
  18. package/dist/src/generators/operationGenerator.d.ts.map +1 -1
  19. package/dist/src/generators/operationGenerator.js +10 -8
  20. package/dist/src/generators/operationGenerator.js.map +1 -1
  21. package/dist/src/generators/samples/sampleEnv.hbs +4 -0
  22. package/dist/src/generators/samples/sampleEnvGenerator.d.ts +3 -0
  23. package/dist/src/generators/samples/sampleEnvGenerator.d.ts.map +1 -0
  24. package/dist/src/generators/samples/sampleEnvGenerator.js +17 -0
  25. package/dist/src/generators/samples/sampleEnvGenerator.js.map +1 -0
  26. package/dist/src/generators/samples/sampleGenerator.d.ts +13 -0
  27. package/dist/src/generators/samples/sampleGenerator.d.ts.map +1 -0
  28. package/dist/src/generators/samples/sampleGenerator.js +43 -0
  29. package/dist/src/generators/samples/sampleGenerator.js.map +1 -0
  30. package/dist/src/generators/static/apiExtractorConfig.js +2 -2
  31. package/dist/src/generators/static/apiExtractorConfig.js.map +1 -1
  32. package/dist/src/generators/static/esLintConfigGenerator.d.ts +3 -0
  33. package/dist/src/generators/static/esLintConfigGenerator.d.ts.map +1 -0
  34. package/dist/src/generators/static/esLintConfigGenerator.js +26 -0
  35. package/dist/src/generators/static/esLintConfigGenerator.js.map +1 -0
  36. package/dist/src/generators/static/{README.md.hbs → hlcREADME.md.hbs} +19 -0
  37. package/dist/src/generators/static/karma.conf.js.hbs +141 -0
  38. package/dist/src/generators/static/karmaConfigFileGenerator.d.ts +3 -0
  39. package/dist/src/generators/static/karmaConfigFileGenerator.d.ts.map +1 -0
  40. package/dist/src/generators/static/karmaConfigFileGenerator.js +23 -0
  41. package/dist/src/generators/static/karmaConfigFileGenerator.js.map +1 -0
  42. package/dist/src/generators/static/packageFileGenerator.d.ts.map +1 -1
  43. package/dist/src/generators/static/packageFileGenerator.js +171 -46
  44. package/dist/src/generators/static/packageFileGenerator.js.map +1 -1
  45. package/dist/src/generators/static/readmeFileGenerator.d.ts +2 -2
  46. package/dist/src/generators/static/readmeFileGenerator.d.ts.map +1 -1
  47. package/dist/src/generators/static/readmeFileGenerator.js +31 -17
  48. package/dist/src/generators/static/readmeFileGenerator.js.map +1 -1
  49. package/dist/src/generators/static/rlcREADME.md.hbs +71 -0
  50. package/dist/src/generators/static/rollupConfigFileGenerator.d.ts.map +1 -1
  51. package/dist/src/generators/static/rollupConfigFileGenerator.js +12 -71
  52. package/dist/src/generators/static/rollupConfigFileGenerator.js.map +1 -1
  53. package/dist/src/generators/static/samples.ts.hbs +49 -0
  54. package/dist/src/generators/static/tsConfigFileGenerator.d.ts.map +1 -1
  55. package/dist/src/generators/static/tsConfigFileGenerator.js +40 -18
  56. package/dist/src/generators/static/tsConfigFileGenerator.js.map +1 -1
  57. package/dist/src/generators/test/envBrowserFileGenerator.d.ts +3 -0
  58. package/dist/src/generators/test/envBrowserFileGenerator.d.ts.map +1 -0
  59. package/dist/src/generators/test/envBrowserFileGenerator.js +15 -0
  60. package/dist/src/generators/test/envBrowserFileGenerator.js.map +1 -0
  61. package/dist/src/generators/test/envFileGenerator.d.ts +3 -0
  62. package/dist/src/generators/test/envFileGenerator.d.ts.map +1 -0
  63. package/dist/src/generators/test/envFileGenerator.js +23 -0
  64. package/dist/src/generators/test/envFileGenerator.js.map +1 -0
  65. package/dist/src/generators/test/recordedClientFileGenerator.d.ts +3 -0
  66. package/dist/src/generators/test/recordedClientFileGenerator.d.ts.map +1 -0
  67. package/dist/src/generators/test/recordedClientFileGenerator.js +23 -0
  68. package/dist/src/generators/test/recordedClientFileGenerator.js.map +1 -0
  69. package/dist/src/generators/test/rlcEnv.ts.hbs +3 -0
  70. package/dist/src/generators/test/rlcRecordedClient.ts.hbs +35 -0
  71. package/dist/src/generators/test/rlcSampleTest.spec.ts.hbs +19 -0
  72. package/dist/src/generators/{static → test}/sampleTest.ts.hbs +0 -0
  73. package/dist/src/generators/test/sampleTestGenerator.d.ts.map +1 -1
  74. package/dist/src/generators/test/sampleTestGenerator.js +23 -7
  75. package/dist/src/generators/test/sampleTestGenerator.js.map +1 -1
  76. package/dist/src/generators/utils/pagingOperations.d.ts +5 -0
  77. package/dist/src/generators/utils/pagingOperations.d.ts.map +1 -1
  78. package/dist/src/generators/utils/pagingOperations.js +2 -1
  79. package/dist/src/generators/utils/pagingOperations.js.map +1 -1
  80. package/dist/src/main.d.ts +2 -2
  81. package/dist/src/main.d.ts.map +1 -1
  82. package/dist/src/main.js +3 -3
  83. package/dist/src/main.js.map +1 -1
  84. package/dist/src/models/clientDetails.d.ts +7 -0
  85. package/dist/src/models/clientDetails.d.ts.map +1 -1
  86. package/dist/src/models/modelDetails.d.ts +2 -2
  87. package/dist/src/models/modelDetails.d.ts.map +1 -1
  88. package/dist/src/models/operationDetails.d.ts +1 -0
  89. package/dist/src/models/operationDetails.d.ts.map +1 -1
  90. package/dist/src/models/sampleDetails.d.ts +22 -0
  91. package/dist/src/models/sampleDetails.d.ts.map +1 -0
  92. package/dist/src/models/sampleDetails.js +3 -0
  93. package/dist/src/models/sampleDetails.js.map +1 -0
  94. package/dist/src/restLevelClient/generateClient.d.ts +1 -1
  95. package/dist/src/restLevelClient/generateClient.d.ts.map +1 -1
  96. package/dist/src/restLevelClient/generateClient.js +81 -168
  97. package/dist/src/restLevelClient/generateClient.js.map +1 -1
  98. package/dist/src/restLevelClient/generateClientDefinition.d.ts +6 -0
  99. package/dist/src/restLevelClient/generateClientDefinition.d.ts.map +1 -0
  100. package/dist/src/restLevelClient/generateClientDefinition.js +231 -0
  101. package/dist/src/restLevelClient/generateClientDefinition.js.map +1 -0
  102. package/dist/src/restLevelClient/generateMethodShortcuts.d.ts +8 -0
  103. package/dist/src/restLevelClient/generateMethodShortcuts.d.ts.map +1 -0
  104. package/dist/src/restLevelClient/generateMethodShortcuts.js +70 -0
  105. package/dist/src/restLevelClient/generateMethodShortcuts.js.map +1 -0
  106. package/dist/src/restLevelClient/generateObjectTypes.d.ts.map +1 -1
  107. package/dist/src/restLevelClient/generateObjectTypes.js.map +1 -1
  108. package/dist/src/restLevelClient/generatePagingHelper.d.ts.map +1 -1
  109. package/dist/src/restLevelClient/generatePagingHelper.js +2 -1
  110. package/dist/src/restLevelClient/generatePagingHelper.js.map +1 -1
  111. package/dist/src/restLevelClient/generateParameterTypes.d.ts.map +1 -1
  112. package/dist/src/restLevelClient/generateParameterTypes.js +104 -18
  113. package/dist/src/restLevelClient/generateParameterTypes.js.map +1 -1
  114. package/dist/src/restLevelClient/generatePollingHelper.d.ts.map +1 -1
  115. package/dist/src/restLevelClient/generatePollingHelper.js +3 -1
  116. package/dist/src/restLevelClient/generatePollingHelper.js.map +1 -1
  117. package/dist/src/restLevelClient/generateResponseTypes.d.ts.map +1 -1
  118. package/dist/src/restLevelClient/generateResponseTypes.js +4 -1
  119. package/dist/src/restLevelClient/generateResponseTypes.js.map +1 -1
  120. package/dist/src/restLevelClient/generateRestLevel.d.ts.map +1 -1
  121. package/dist/src/restLevelClient/generateRestLevel.js +31 -4
  122. package/dist/src/restLevelClient/generateRestLevel.js.map +1 -1
  123. package/dist/src/restLevelClient/generateSchemaTypes.d.ts.map +1 -1
  124. package/dist/src/restLevelClient/generateSchemaTypes.js +5 -2
  125. package/dist/src/restLevelClient/generateSchemaTypes.js.map +1 -1
  126. package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts +4 -0
  127. package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts.map +1 -0
  128. package/dist/src/restLevelClient/generateTopLevelIndexFile.js +37 -0
  129. package/dist/src/restLevelClient/generateTopLevelIndexFile.js.map +1 -0
  130. package/dist/src/restLevelClient/helpers/operationHelpers.d.ts +10 -0
  131. package/dist/src/restLevelClient/helpers/operationHelpers.d.ts.map +1 -0
  132. package/dist/src/restLevelClient/helpers/operationHelpers.js +64 -0
  133. package/dist/src/restLevelClient/helpers/operationHelpers.js.map +1 -0
  134. package/dist/src/restLevelClient/interfaces.d.ts +24 -0
  135. package/dist/src/restLevelClient/interfaces.d.ts.map +1 -0
  136. package/dist/src/restLevelClient/interfaces.js +3 -0
  137. package/dist/src/restLevelClient/interfaces.js.map +1 -0
  138. package/dist/src/restLevelClient/operationHelpers.d.ts.map +1 -1
  139. package/dist/src/restLevelClient/operationHelpers.js +4 -1
  140. package/dist/src/restLevelClient/operationHelpers.js.map +1 -1
  141. package/dist/src/restLevelClient/schemaHelpers.d.ts.map +1 -1
  142. package/dist/src/restLevelClient/schemaHelpers.js +10 -2
  143. package/dist/src/restLevelClient/schemaHelpers.js.map +1 -1
  144. package/dist/src/transforms/mapperTransforms.js +1 -1
  145. package/dist/src/transforms/mapperTransforms.js.map +1 -1
  146. package/dist/src/transforms/objectTransforms.js +1 -1
  147. package/dist/src/transforms/objectTransforms.js.map +1 -1
  148. package/dist/src/transforms/operationTransforms.d.ts.map +1 -1
  149. package/dist/src/transforms/operationTransforms.js +1 -0
  150. package/dist/src/transforms/operationTransforms.js.map +1 -1
  151. package/dist/src/transforms/parameterTransforms.d.ts.map +1 -1
  152. package/dist/src/transforms/parameterTransforms.js +20 -4
  153. package/dist/src/transforms/parameterTransforms.js.map +1 -1
  154. package/dist/src/transforms/samplesTransforms.d.ts +7 -0
  155. package/dist/src/transforms/samplesTransforms.d.ts.map +1 -0
  156. package/dist/src/transforms/samplesTransforms.js +283 -0
  157. package/dist/src/transforms/samplesTransforms.js.map +1 -0
  158. package/dist/src/transforms/transforms.d.ts +1 -2
  159. package/dist/src/transforms/transforms.d.ts.map +1 -1
  160. package/dist/src/transforms/transforms.js +5 -4
  161. package/dist/src/transforms/transforms.js.map +1 -1
  162. package/dist/src/typescriptGenerator.d.ts +2 -2
  163. package/dist/src/typescriptGenerator.d.ts.map +1 -1
  164. package/dist/src/typescriptGenerator.js +19 -8
  165. package/dist/src/typescriptGenerator.js.map +1 -1
  166. package/dist/src/utils/autorestOptions.d.ts +2 -2
  167. package/dist/src/utils/autorestOptions.d.ts.map +1 -1
  168. package/dist/src/utils/autorestOptions.js +107 -30
  169. package/dist/src/utils/autorestOptions.js.map +1 -1
  170. package/dist/src/utils/nameUtils.d.ts +6 -2
  171. package/dist/src/utils/nameUtils.d.ts.map +1 -1
  172. package/dist/src/utils/nameUtils.js +9 -5
  173. package/dist/src/utils/nameUtils.js.map +1 -1
  174. package/dist/src/utils/schemaHelpers.js +8 -3
  175. package/dist/src/utils/schemaHelpers.js.map +1 -1
  176. package/package.json +26 -10
  177. package/src/autorestSession.ts +20 -16
  178. package/src/conflictResolver.ts +0 -1
  179. package/src/generators/clientFileGenerator.ts +264 -33
  180. package/src/generators/indexGenerator.ts +78 -9
  181. package/src/generators/modelsGenerator.ts +22 -2
  182. package/src/generators/operationGenerator.ts +11 -9
  183. package/src/generators/samples/sampleEnv.hbs +4 -0
  184. package/src/generators/samples/sampleEnvGenerator.ts +14 -0
  185. package/src/generators/samples/sampleGenerator.ts +50 -0
  186. package/src/generators/static/apiExtractorConfig.ts +2 -2
  187. package/src/generators/static/esLintConfigGenerator.ts +24 -0
  188. package/src/generators/static/{README.md.hbs → hlcREADME.md.hbs} +19 -0
  189. package/src/generators/static/karma.conf.js.hbs +141 -0
  190. package/src/generators/static/karmaConfigFileGenerator.ts +20 -0
  191. package/src/generators/static/packageFileGenerator.ts +183 -46
  192. package/src/generators/static/readmeFileGenerator.ts +57 -34
  193. package/src/generators/static/rlcREADME.md.hbs +71 -0
  194. package/src/generators/static/rollupConfigFileGenerator.ts +13 -71
  195. package/src/generators/static/samples.ts.hbs +49 -0
  196. package/src/generators/static/tsConfigFileGenerator.ts +47 -20
  197. package/src/generators/test/envBrowserFileGenerator.ts +14 -0
  198. package/src/generators/test/envFileGenerator.ts +22 -0
  199. package/src/generators/test/recordedClientFileGenerator.ts +22 -0
  200. package/src/generators/test/rlcEnv.ts.hbs +3 -0
  201. package/src/generators/test/rlcRecordedClient.ts.hbs +35 -0
  202. package/src/generators/test/rlcSampleTest.spec.ts.hbs +19 -0
  203. package/src/generators/{static → test}/sampleTest.ts.hbs +0 -0
  204. package/src/generators/test/sampleTestGenerator.ts +23 -8
  205. package/src/generators/utils/pagingOperations.ts +1 -1
  206. package/src/main.ts +8 -5
  207. package/src/models/clientDetails.ts +8 -0
  208. package/src/models/modelDetails.ts +2 -2
  209. package/src/models/operationDetails.ts +1 -0
  210. package/src/models/sampleDetails.ts +22 -0
  211. package/src/restLevelClient/generateClient.ts +101 -260
  212. package/src/restLevelClient/generateClientDefinition.ts +343 -0
  213. package/src/restLevelClient/generateMethodShortcuts.ts +121 -0
  214. package/src/restLevelClient/generateObjectTypes.ts +1 -3
  215. package/src/restLevelClient/generatePagingHelper.ts +3 -2
  216. package/src/restLevelClient/generateParameterTypes.ts +155 -25
  217. package/src/restLevelClient/generatePollingHelper.ts +3 -3
  218. package/src/restLevelClient/generateResponseTypes.ts +4 -1
  219. package/src/restLevelClient/generateRestLevel.ts +36 -8
  220. package/src/restLevelClient/generateSchemaTypes.ts +5 -3
  221. package/src/restLevelClient/generateTopLevelIndexFile.ts +37 -0
  222. package/src/restLevelClient/helpers/operationHelpers.ts +93 -0
  223. package/src/restLevelClient/interfaces.ts +26 -0
  224. package/src/restLevelClient/operationHelpers.ts +8 -2
  225. package/src/restLevelClient/schemaHelpers.ts +10 -3
  226. package/src/transforms/mapperTransforms.ts +1 -1
  227. package/src/transforms/objectTransforms.ts +1 -1
  228. package/src/transforms/operationTransforms.ts +1 -0
  229. package/src/transforms/parameterTransforms.ts +20 -4
  230. package/src/transforms/samplesTransforms.ts +300 -0
  231. package/src/transforms/transforms.ts +6 -6
  232. package/src/typescriptGenerator.ts +20 -11
  233. package/src/utils/autorestOptions.ts +170 -59
  234. package/src/utils/nameUtils.ts +16 -8
  235. package/src/utils/schemaHelpers.ts +2 -2
  236. package/dist/src/generators/clientContextFileGenerator.d.ts +0 -5
  237. package/dist/src/generators/clientContextFileGenerator.d.ts.map +0 -1
  238. package/dist/src/generators/clientContextFileGenerator.js +0 -263
  239. package/dist/src/generators/clientContextFileGenerator.js.map +0 -1
  240. package/dist/src/restLevelClient/helpers/getOperationParameters.d.ts +0 -6
  241. package/dist/src/restLevelClient/helpers/getOperationParameters.d.ts.map +0 -1
  242. package/dist/src/restLevelClient/helpers/getOperationParameters.js +0 -29
  243. package/dist/src/restLevelClient/helpers/getOperationParameters.js.map +0 -1
  244. package/src/generators/clientContextFileGenerator.ts +0 -405
  245. package/src/restLevelClient/helpers/getOperationParameters.ts +0 -37
@@ -1,405 +0,0 @@
1
- // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT License.
3
-
4
- import {
5
- Project,
6
- PropertyDeclarationStructure,
7
- ConstructorDeclaration,
8
- CodeBlockWriter,
9
- ClassDeclaration,
10
- SourceFile
11
- } from "ts-morph";
12
- import { normalizeName, NameType } from "../utils/nameUtils";
13
- import { ClientDetails } from "../models/clientDetails";
14
- import { PackageDetails } from "../models/packageDetails";
15
- import { ParameterDetails } from "../models/parameterDetails";
16
- import { ImplementationLocation, SchemaType } from "@autorest/codemodel";
17
- import { EndpointDetails } from "../transforms/urlTransforms";
18
- import { formatJsDocParam } from "./utils/parameterUtils";
19
- import { getAutorestOptions } from "../autorestSession";
20
-
21
- export function generateClientContext(
22
- clientDetails: ClientDetails,
23
- packageDetails: PackageDetails,
24
- project: Project
25
- ) {
26
- const {
27
- useCoreV2,
28
- hideClients,
29
- addCredentials,
30
- srcPath
31
- } = getAutorestOptions();
32
-
33
- const importedModels = new Set<string>();
34
- const clientParams = clientDetails.parameters.filter(
35
- param => param.implementationLocation === ImplementationLocation.Client
36
- );
37
-
38
- const hasLro = clientDetails.operationGroups.some(og =>
39
- og.operations.some(o => o.isLro)
40
- );
41
-
42
- const clientContextClassName = `${clientDetails.className}Context`;
43
- const clientContextFileName = normalizeName(
44
- clientContextClassName,
45
- NameType.File
46
- );
47
-
48
- const sourceFile = project.createSourceFile(
49
- `${srcPath}/${clientContextFileName}.ts`,
50
- undefined,
51
- {
52
- overwrite: true
53
- }
54
- );
55
-
56
- !useCoreV2 && writePackageInfo(sourceFile, packageDetails);
57
-
58
- const contextClass = buildClass(sourceFile, clientContextClassName);
59
-
60
- if (hideClients) {
61
- contextClass.addJsDoc({
62
- tags: [
63
- {
64
- tagName: "internal"
65
- }
66
- ]
67
- });
68
- }
69
-
70
- writeClassProperties(contextClass, clientParams, importedModels);
71
-
72
- const classConstructor = buildConstructor(contextClass, {
73
- clientContextClassName,
74
- clientClassName: clientDetails.className,
75
- clientParams,
76
- importedModels
77
- });
78
-
79
- writeConstructorBody(
80
- classConstructor,
81
- {
82
- clientParams,
83
- clientDetails
84
- },
85
- hasLro
86
- );
87
-
88
- const hasCredentials = !!addCredentials;
89
- writeImports(sourceFile, hasLro, importedModels, hasCredentials);
90
- sourceFile.fixUnusedIdentifiers();
91
- }
92
-
93
- interface WriteConstructorBodyParameters {
94
- clientParams: ParameterDetails[];
95
- clientDetails: ClientDetails;
96
- }
97
-
98
- function writeImports(
99
- sourceFile: SourceFile,
100
- hasLro: boolean,
101
- importedModels: Set<string>,
102
- hasCredentials: boolean
103
- ) {
104
- const { useCoreV2 } = getAutorestOptions();
105
-
106
- if (!useCoreV2) {
107
- sourceFile.addImportDeclaration({
108
- namespaceImport: "coreHttp",
109
- moduleSpecifier: "@azure/core-http"
110
- });
111
- } else {
112
- sourceFile.addImportDeclaration({
113
- namespaceImport: "coreClient",
114
- moduleSpecifier: "@azure/core-client"
115
- });
116
- if (hasCredentials) {
117
- sourceFile.addImportDeclaration({
118
- namespaceImport: "coreAuth",
119
- moduleSpecifier: "@azure/core-auth"
120
- });
121
- }
122
- }
123
-
124
- if (importedModels.size) {
125
- sourceFile.addImportDeclaration({
126
- namedImports: [...importedModels],
127
- moduleSpecifier: "./models"
128
- });
129
- }
130
- }
131
-
132
- function writePackageInfo(
133
- sourceFile: SourceFile,
134
- packageDetails: PackageDetails
135
- ) {
136
- sourceFile.addStatements([
137
- `\n\n`,
138
- `const packageName = "${packageDetails.name || ""}";`,
139
- `const packageVersion = "${packageDetails.version || ""}";`
140
- ]);
141
- }
142
-
143
- function writeClassProperties(
144
- contextClass: ClassDeclaration,
145
- clientParams: ParameterDetails[],
146
- importedModels: Set<string>
147
- ) {
148
- const params = clientParams.filter(p => !p.isSynthetic);
149
- params.forEach(({ typeDetails }) =>
150
- typeDetails.usedModels.forEach(model => importedModels.add(model))
151
- );
152
- contextClass.addProperties(
153
- params.map(param => {
154
- return {
155
- name: param.name,
156
- type: param.typeDetails.typeName,
157
- hasQuestionToken: !param.required
158
- } as PropertyDeclarationStructure;
159
- })
160
- );
161
- }
162
-
163
- function writeConstructorBody(
164
- classConstructor: ConstructorDeclaration,
165
- { clientParams, clientDetails }: WriteConstructorBodyParameters,
166
- hasLro: boolean
167
- ) {
168
- const { useCoreV2 } = getAutorestOptions();
169
-
170
- const requiredParams = getRequiredParameters(clientParams);
171
- const addBlankLine = true;
172
- const requiredParameters = getRequiredParamAssignments(requiredParams);
173
- const constantParameters = getConstantClientParamAssignments(clientParams);
174
- classConstructor.addStatements([
175
- writeStatements(getRequiredParamChecks(requiredParams), addBlankLine),
176
- writeStatement(
177
- writeDefaultOptions(
178
- clientParams.some(p => p.name === "credentials"),
179
- hasLro,
180
- clientDetails
181
- )
182
- )
183
- ]);
184
-
185
- !useCoreV2 &&
186
- classConstructor.addStatements([
187
- writeStatement(getEndpointStatement(clientDetails.endpoint), addBlankLine)
188
- ]);
189
-
190
- classConstructor.addStatements([
191
- requiredParameters.length ? "// Parameter assignments" : "",
192
- writeStatements(getRequiredParamAssignments(requiredParams), addBlankLine),
193
- constantParameters.length
194
- ? "// Assigning values to Constant parameters"
195
- : "",
196
- writeStatements(constantParameters, addBlankLine)
197
- ]);
198
- }
199
-
200
- const writeStatement = (content: string, shouldAddBlankLine = false) => (
201
- writer: CodeBlockWriter
202
- ) => {
203
- if (content) {
204
- writer.writeLine(content);
205
- shouldAddBlankLine && writer.blankLine();
206
- }
207
- };
208
-
209
- const writeStatements = (lines: string[], shouldAddBlankLine = false) => (
210
- writer: CodeBlockWriter
211
- ) => {
212
- lines.forEach(line => writer.writeLine(line));
213
- shouldAddBlankLine && writer.blankLine();
214
- };
215
-
216
- function getCredentialScopesValue(credentialScopes?: string | string[]) {
217
- if (Array.isArray(credentialScopes)) {
218
- return `[${credentialScopes.map(scope => `"${scope}"`).join()}]`;
219
- } else if (typeof credentialScopes === "string") {
220
- return `"${credentialScopes}"`;
221
- }
222
-
223
- return credentialScopes;
224
- }
225
-
226
- function writeDefaultOptions(
227
- hasCredentials: boolean,
228
- hasLro: boolean,
229
- clientDetails: ClientDetails
230
- ) {
231
- const { useCoreV2, credentialScopes, packageDetails } = getAutorestOptions();
232
-
233
- const credentialScopesValues = getCredentialScopesValue(credentialScopes);
234
- const addScopes = credentialScopes
235
- ? `if(!options.credentialScopes) {
236
- options.credentialScopes = ${credentialScopesValues}
237
- }`
238
- : "";
239
-
240
- const defaults = !hasCredentials
241
- ? `const defaults: ${clientDetails.className}OptionalParams = {
242
- requestContentType: "application/json; charset=utf-8"
243
- };`
244
- : `const defaults: ${clientDetails.className}OptionalParams = {
245
- requestContentType: "application/json; charset=utf-8",
246
- credential: credentials
247
- };`;
248
-
249
- return !useCoreV2
250
- ? `// Initializing default values for options
251
- if (!options) {
252
- options = {};
253
- }
254
-
255
- const defaultUserAgent = \`azsdk-js-\${packageName.replace(/@.*\\//,"")}/\${packageVersion} \${coreHttp.getDefaultUserAgentValue()}\`;
256
-
257
- ${addScopes}
258
-
259
- super(${hasCredentials ? "credentials" : `undefined`}, {
260
- ...options,
261
- userAgent: options.userAgent
262
- ? \`\${options.userAgent} \${defaultUserAgent}\`
263
- : \`\${defaultUserAgent}\`
264
- });
265
-
266
- this.requestContentType = "application/json; charset=utf-8";
267
-
268
- `
269
- : `// Initializing default values for options
270
- if (!options) {
271
- options = {};
272
- }
273
- ${defaults}
274
-
275
- const packageDetails = \`azsdk-js-${packageDetails.name.replace(
276
- /@.*\//,
277
- ""
278
- )}/${packageDetails.version}\`;
279
- const userAgentPrefix =
280
- options.userAgentOptions && options.userAgentOptions.userAgentPrefix
281
- ? \`\${options.userAgentOptions.userAgentPrefix} \${packageDetails}\`
282
- : \`\${packageDetails}\`;
283
-
284
- ${addScopes}
285
- const optionsWithDefaults = {
286
- ...defaults,
287
- ...options,
288
- userAgentOptions: {
289
- userAgentPrefix
290
- },
291
- baseUri: ${getEndpoint(clientDetails.endpoint)}
292
- };
293
- super(optionsWithDefaults);
294
- `;
295
- }
296
-
297
- function buildClass(sourceFile: SourceFile, clientContextClassName: string) {
298
- const { useCoreV2 } = getAutorestOptions();
299
-
300
- return sourceFile.addClass({
301
- name: clientContextClassName,
302
- extends: !useCoreV2 ? "coreHttp.ServiceClient" : "coreClient.ServiceClient",
303
- isExported: true
304
- });
305
- }
306
-
307
- interface BuildContructorParams {
308
- clientContextClassName: string;
309
- clientClassName: string;
310
- clientParams: ParameterDetails[];
311
- importedModels: Set<string>;
312
- }
313
-
314
- function buildConstructor(
315
- contextClass: ClassDeclaration,
316
- {
317
- clientContextClassName,
318
- clientParams,
319
- clientClassName,
320
- importedModels
321
- }: BuildContructorParams
322
- ) {
323
- const requiredParams = getRequiredParameters(clientParams);
324
- const hasClientOptionalParams = clientParams.some(p => !p.required);
325
- const docs = [
326
- `Initializes a new instance of the ${clientContextClassName} class.`,
327
- ...formatJsDocParam(requiredParams),
328
- `@param options The parameter options`
329
- ]
330
- .filter(d => !!d)
331
- .join("\n");
332
-
333
- let clientOptionsParameterType = "coreHttp.ServiceClientOptions";
334
-
335
- if (hasClientOptionalParams) {
336
- const typeName = `${clientClassName}OptionalParams`;
337
- importedModels.add(typeName);
338
- clientOptionsParameterType = typeName;
339
- }
340
-
341
- requiredParams.forEach(({ typeDetails }) =>
342
- typeDetails.usedModels.forEach(model => importedModels.add(model))
343
- );
344
-
345
- return contextClass.addConstructor({
346
- docs: [docs],
347
- parameters: [
348
- ...requiredParams.map(p => ({
349
- name: p.name,
350
- type: p.typeDetails.typeName
351
- })),
352
- {
353
- name: "options",
354
- hasQuestionToken: true,
355
- type: clientOptionsParameterType
356
- }
357
- ]
358
- });
359
- }
360
-
361
- function getRequiredParameters(parameters: ParameterDetails[]) {
362
- /**
363
- * Getting parameters that are marked as required, and also don't have a defaultValue.
364
- * Constants are also exluded since they have defined value
365
- */
366
- return parameters.filter(
367
- p => p.required && p.schemaType !== SchemaType.Constant && !p.defaultValue
368
- );
369
- }
370
-
371
- function getEndpointStatement({ endpoint }: EndpointDetails) {
372
- return `this.baseUri = options.endpoint ${
373
- endpoint ? ` || "${endpoint}"` : ""
374
- };`;
375
- }
376
-
377
- function getConstantClientParamAssignments(
378
- clientParameters: ParameterDetails[]
379
- ) {
380
- return clientParameters
381
- .filter(p => !!p.defaultValue || p.schemaType === SchemaType.Constant)
382
- .map(
383
- ({ name, defaultValue }) =>
384
- `this.${name} = options.${name} || ${defaultValue}`
385
- );
386
- }
387
-
388
- function getRequiredParamChecks(requiredParameters: ParameterDetails[]) {
389
- return requiredParameters.map(
390
- ({ name }) => `if(${name} === undefined) {
391
- throw new Error("'${name}' cannot be null");
392
- }`
393
- );
394
- }
395
-
396
- function getRequiredParamAssignments(requiredParameters: ParameterDetails[]) {
397
- const disallowedClientParameters = ["credentials"];
398
- return requiredParameters
399
- .filter(({ name }) => !disallowedClientParameters.includes(name))
400
- .map(({ name }) => `this.${name} = ${name};`);
401
- }
402
-
403
- function getEndpoint({ endpoint }: EndpointDetails) {
404
- return `options.endpoint ${endpoint ? ` || "${endpoint}"` : ""}`;
405
- }
@@ -1,37 +0,0 @@
1
- import {
2
- ImplementationLocation,
3
- Operation,
4
- Parameter
5
- } from "@autorest/codemodel";
6
-
7
- /**
8
- * Given an operation, extract all its parameters
9
- */
10
- export function getOperationParameters(
11
- operation: Operation,
12
- requestIndex = 0
13
- ): Parameter[] {
14
- const operationParams = [
15
- ...(operation.parameters ?? []),
16
- ...(operation.signatureParameters ?? [])
17
- ];
18
-
19
- const distinctParams = new Set(operationParams);
20
-
21
- if (operation.requests) {
22
- [
23
- ...(operation.requests[requestIndex].parameters ?? []),
24
- ...(operation.requests[requestIndex].signatureParameters ?? [])
25
- ].forEach(p => distinctParams.add(p));
26
- }
27
-
28
- return [...distinctParams].filter(filterMethodNotSynthetic);
29
- }
30
-
31
- function filterMethodNotSynthetic(parameter: Parameter) {
32
- // Origin is added by M4 on synthetic parameters
33
- return (
34
- !parameter.origin &&
35
- parameter.implementation === ImplementationLocation.Method
36
- );
37
- }