@autorest/typescript 6.0.0-beta.14 → 6.0.0-beta.17

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 (235) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +41 -5
  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 +20 -2
  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} +23 -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 +174 -48
  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 +35 -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 -163
  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 +186 -36
  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 +13 -7
  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 +26 -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 +41 -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 +4 -1
  143. package/dist/src/restLevelClient/schemaHelpers.js.map +1 -1
  144. package/dist/src/transforms/operationTransforms.d.ts.map +1 -1
  145. package/dist/src/transforms/operationTransforms.js +1 -0
  146. package/dist/src/transforms/operationTransforms.js.map +1 -1
  147. package/dist/src/transforms/samplesTransforms.d.ts +7 -0
  148. package/dist/src/transforms/samplesTransforms.d.ts.map +1 -0
  149. package/dist/src/transforms/samplesTransforms.js +283 -0
  150. package/dist/src/transforms/samplesTransforms.js.map +1 -0
  151. package/dist/src/transforms/transforms.d.ts +1 -2
  152. package/dist/src/transforms/transforms.d.ts.map +1 -1
  153. package/dist/src/transforms/transforms.js +4 -3
  154. package/dist/src/transforms/transforms.js.map +1 -1
  155. package/dist/src/typescriptGenerator.d.ts +2 -2
  156. package/dist/src/typescriptGenerator.d.ts.map +1 -1
  157. package/dist/src/typescriptGenerator.js +19 -8
  158. package/dist/src/typescriptGenerator.js.map +1 -1
  159. package/dist/src/utils/autorestOptions.d.ts +2 -2
  160. package/dist/src/utils/autorestOptions.d.ts.map +1 -1
  161. package/dist/src/utils/autorestOptions.js +107 -30
  162. package/dist/src/utils/autorestOptions.js.map +1 -1
  163. package/dist/src/utils/nameUtils.d.ts +6 -2
  164. package/dist/src/utils/nameUtils.d.ts.map +1 -1
  165. package/dist/src/utils/nameUtils.js +9 -5
  166. package/dist/src/utils/nameUtils.js.map +1 -1
  167. package/dist/src/utils/schemaHelpers.js +8 -3
  168. package/dist/src/utils/schemaHelpers.js.map +1 -1
  169. package/package.json +16 -10
  170. package/src/autorestSession.ts +20 -16
  171. package/src/conflictResolver.ts +0 -1
  172. package/src/generators/clientFileGenerator.ts +264 -33
  173. package/src/generators/indexGenerator.ts +78 -9
  174. package/src/generators/modelsGenerator.ts +21 -1
  175. package/src/generators/operationGenerator.ts +11 -9
  176. package/src/generators/samples/sampleEnv.hbs +4 -0
  177. package/src/generators/samples/sampleEnvGenerator.ts +14 -0
  178. package/src/generators/samples/sampleGenerator.ts +50 -0
  179. package/src/generators/static/apiExtractorConfig.ts +2 -2
  180. package/src/generators/static/esLintConfigGenerator.ts +24 -0
  181. package/src/generators/static/{README.md.hbs → hlcREADME.md.hbs} +23 -0
  182. package/src/generators/static/karma.conf.js.hbs +141 -0
  183. package/src/generators/static/karmaConfigFileGenerator.ts +20 -0
  184. package/src/generators/static/packageFileGenerator.ts +187 -48
  185. package/src/generators/static/readmeFileGenerator.ts +64 -35
  186. package/src/generators/static/rlcREADME.md.hbs +71 -0
  187. package/src/generators/static/rollupConfigFileGenerator.ts +13 -71
  188. package/src/generators/static/samples.ts.hbs +49 -0
  189. package/src/generators/static/tsConfigFileGenerator.ts +47 -20
  190. package/src/generators/test/envBrowserFileGenerator.ts +14 -0
  191. package/src/generators/test/envFileGenerator.ts +22 -0
  192. package/src/generators/test/recordedClientFileGenerator.ts +22 -0
  193. package/src/generators/test/rlcEnv.ts.hbs +3 -0
  194. package/src/generators/test/rlcRecordedClient.ts.hbs +35 -0
  195. package/src/generators/test/rlcSampleTest.spec.ts.hbs +19 -0
  196. package/src/generators/{static → test}/sampleTest.ts.hbs +0 -0
  197. package/src/generators/test/sampleTestGenerator.ts +23 -8
  198. package/src/generators/utils/pagingOperations.ts +1 -1
  199. package/src/main.ts +8 -5
  200. package/src/models/clientDetails.ts +8 -0
  201. package/src/models/modelDetails.ts +2 -2
  202. package/src/models/operationDetails.ts +1 -0
  203. package/src/models/sampleDetails.ts +22 -0
  204. package/src/restLevelClient/generateClient.ts +99 -250
  205. package/src/restLevelClient/generateClientDefinition.ts +343 -0
  206. package/src/restLevelClient/generateMethodShortcuts.ts +121 -0
  207. package/src/restLevelClient/generateObjectTypes.ts +1 -3
  208. package/src/restLevelClient/generatePagingHelper.ts +3 -2
  209. package/src/restLevelClient/generateParameterTypes.ts +295 -70
  210. package/src/restLevelClient/generatePollingHelper.ts +3 -3
  211. package/src/restLevelClient/generateResponseTypes.ts +13 -7
  212. package/src/restLevelClient/generateRestLevel.ts +32 -7
  213. package/src/restLevelClient/generateSchemaTypes.ts +5 -3
  214. package/src/restLevelClient/generateTopLevelIndexFile.ts +41 -0
  215. package/src/restLevelClient/helpers/operationHelpers.ts +93 -0
  216. package/src/restLevelClient/interfaces.ts +26 -0
  217. package/src/restLevelClient/operationHelpers.ts +8 -2
  218. package/src/restLevelClient/schemaHelpers.ts +4 -2
  219. package/src/transforms/operationTransforms.ts +1 -0
  220. package/src/transforms/samplesTransforms.ts +300 -0
  221. package/src/transforms/transforms.ts +6 -6
  222. package/src/typescriptGenerator.ts +20 -11
  223. package/src/utils/autorestOptions.ts +170 -59
  224. package/src/utils/nameUtils.ts +16 -8
  225. package/src/utils/schemaHelpers.ts +2 -2
  226. package/dist/src/generators/clientContextFileGenerator.d.ts +0 -5
  227. package/dist/src/generators/clientContextFileGenerator.d.ts.map +0 -1
  228. package/dist/src/generators/clientContextFileGenerator.js +0 -263
  229. package/dist/src/generators/clientContextFileGenerator.js.map +0 -1
  230. package/dist/src/restLevelClient/helpers/getOperationParameters.d.ts +0 -6
  231. package/dist/src/restLevelClient/helpers/getOperationParameters.d.ts.map +0 -1
  232. package/dist/src/restLevelClient/helpers/getOperationParameters.js +0 -29
  233. package/dist/src/restLevelClient/helpers/getOperationParameters.js.map +0 -1
  234. package/src/generators/clientContextFileGenerator.ts +0 -405
  235. package/src/restLevelClient/helpers/getOperationParameters.ts +0 -34
@@ -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,34 +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(operation: Operation): Parameter[] {
11
- const operationParams = [
12
- ...(operation.parameters ?? []),
13
- ...(operation.signatureParameters ?? [])
14
- ];
15
-
16
- const distinctParams = new Set(operationParams);
17
-
18
- if (operation.requests) {
19
- [
20
- ...(operation.requests[0].parameters ?? []),
21
- ...(operation.requests[0].signatureParameters ?? [])
22
- ].forEach(p => distinctParams.add(p));
23
- }
24
-
25
- return [...distinctParams].filter(filterMethodNotSynthetic);
26
- }
27
-
28
- function filterMethodNotSynthetic(parameter: Parameter) {
29
- // Origin is added by M4 on synthetic parameters
30
- return (
31
- !parameter.origin &&
32
- parameter.implementation === ImplementationLocation.Method
33
- );
34
- }