@autorest/typescript 6.0.0-beta.9 → 6.0.0-rc.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 (366) hide show
  1. package/README.md +42 -5
  2. package/dist/{src/generators/static/README.md.hbs → hlcREADME.md.hbs} +35 -3
  3. package/dist/hlcSamples.ts.hbs +49 -0
  4. package/dist/karma.conf.js.hbs +126 -0
  5. package/dist/paginateHelper.ts.hbs +208 -0
  6. package/dist/pollingHelper.ts.hbs +72 -0
  7. package/dist/rlcEnv.ts.hbs +3 -0
  8. package/dist/rlcREADME.md.hbs +71 -0
  9. package/dist/rlcRecordedClient.ts.hbs +26 -0
  10. package/dist/rlcSampleTest.spec.ts.hbs +20 -0
  11. package/dist/rlcSamples.ts.hbs +28 -0
  12. package/dist/sampleEnv.hbs +4 -0
  13. package/dist/sampleTest.ts.hbs +32 -0
  14. package/dist/samples.ts.hbs +0 -0
  15. package/dist/src/autorestSession.d.ts +17 -6
  16. package/dist/src/autorestSession.d.ts.map +1 -1
  17. package/dist/src/autorestSession.js +3 -9
  18. package/dist/src/autorestSession.js.map +1 -1
  19. package/dist/src/conflictResolver.d.ts +3 -0
  20. package/dist/src/conflictResolver.d.ts.map +1 -0
  21. package/dist/src/conflictResolver.js +43 -0
  22. package/dist/src/conflictResolver.js.map +1 -0
  23. package/dist/src/generators/LROGenerator.js +4 -4
  24. package/dist/src/generators/LROGenerator.js.map +1 -1
  25. package/dist/src/generators/clientFileGenerator.d.ts.map +1 -1
  26. package/dist/src/generators/clientFileGenerator.js +300 -46
  27. package/dist/src/generators/clientFileGenerator.js.map +1 -1
  28. package/dist/src/generators/indexGenerator.d.ts.map +1 -1
  29. package/dist/src/generators/indexGenerator.js +106 -14
  30. package/dist/src/generators/indexGenerator.js.map +1 -1
  31. package/dist/src/generators/mappersGenerator.d.ts.map +1 -1
  32. package/dist/src/generators/mappersGenerator.js +93 -19
  33. package/dist/src/generators/mappersGenerator.js.map +1 -1
  34. package/dist/src/generators/modelsGenerator.d.ts.map +1 -1
  35. package/dist/src/generators/modelsGenerator.js +80 -81
  36. package/dist/src/generators/modelsGenerator.js.map +1 -1
  37. package/dist/src/generators/operationGenerator.d.ts.map +1 -1
  38. package/dist/src/generators/operationGenerator.js +85 -96
  39. package/dist/src/generators/operationGenerator.js.map +1 -1
  40. package/dist/src/generators/operationInterfaceGenerator.js +20 -20
  41. package/dist/src/generators/operationInterfaceGenerator.js.map +1 -1
  42. package/dist/src/generators/parametersGenerator.d.ts.map +1 -1
  43. package/dist/src/generators/parametersGenerator.js +7 -8
  44. package/dist/src/generators/parametersGenerator.js.map +1 -1
  45. package/dist/src/generators/samples/hlcSampleGenerator.d.ts +13 -0
  46. package/dist/src/generators/samples/hlcSampleGenerator.d.ts.map +1 -0
  47. package/dist/src/generators/samples/hlcSampleGenerator.js +43 -0
  48. package/dist/src/generators/samples/hlcSampleGenerator.js.map +1 -0
  49. package/dist/src/generators/samples/hlcSamples.ts.hbs +49 -0
  50. package/dist/src/generators/samples/rlcSampleGenerator.d.ts +4 -0
  51. package/dist/src/generators/samples/rlcSampleGenerator.d.ts.map +1 -0
  52. package/dist/src/generators/samples/rlcSampleGenerator.js +64 -0
  53. package/dist/src/generators/samples/rlcSampleGenerator.js.map +1 -0
  54. package/dist/src/generators/samples/rlcSamples.ts.hbs +28 -0
  55. package/dist/src/generators/samples/sampleEnv.hbs +4 -0
  56. package/dist/src/generators/samples/sampleEnvGenerator.d.ts +3 -0
  57. package/dist/src/generators/samples/sampleEnvGenerator.d.ts.map +1 -0
  58. package/dist/src/generators/samples/sampleEnvGenerator.js +17 -0
  59. package/dist/src/generators/samples/sampleEnvGenerator.js.map +1 -0
  60. package/dist/src/generators/static/apiExtractorConfig.js +2 -2
  61. package/dist/src/generators/static/apiExtractorConfig.js.map +1 -1
  62. package/dist/src/generators/static/esLintConfigGenerator.d.ts +3 -0
  63. package/dist/src/generators/static/esLintConfigGenerator.d.ts.map +1 -0
  64. package/dist/src/generators/static/esLintConfigGenerator.js +26 -0
  65. package/dist/src/generators/static/esLintConfigGenerator.js.map +1 -0
  66. package/{src/generators/static/README.md.hbs → dist/src/generators/static/hlcREADME.md.hbs} +35 -3
  67. package/dist/src/generators/static/karma.conf.js.hbs +126 -0
  68. package/dist/src/generators/static/karmaConfigFileGenerator.d.ts +3 -0
  69. package/dist/src/generators/static/karmaConfigFileGenerator.d.ts.map +1 -0
  70. package/dist/src/generators/static/karmaConfigFileGenerator.js +23 -0
  71. package/dist/src/generators/static/karmaConfigFileGenerator.js.map +1 -0
  72. package/dist/src/generators/static/licenseFileGenerator.js +1 -1
  73. package/dist/src/generators/static/licenseFileGenerator.js.map +1 -1
  74. package/dist/src/generators/static/packageFileGenerator.d.ts.map +1 -1
  75. package/dist/src/generators/static/packageFileGenerator.js +255 -67
  76. package/dist/src/generators/static/packageFileGenerator.js.map +1 -1
  77. package/dist/src/generators/static/readmeFileGenerator.d.ts +2 -2
  78. package/dist/src/generators/static/readmeFileGenerator.d.ts.map +1 -1
  79. package/dist/src/generators/static/readmeFileGenerator.js +50 -23
  80. package/dist/src/generators/static/readmeFileGenerator.js.map +1 -1
  81. package/dist/src/generators/static/rlcREADME.md.hbs +71 -0
  82. package/dist/src/generators/static/rollupConfigFileGenerator.d.ts.map +1 -1
  83. package/dist/src/generators/static/rollupConfigFileGenerator.js +12 -71
  84. package/dist/src/generators/static/rollupConfigFileGenerator.js.map +1 -1
  85. package/dist/src/generators/static/tsConfigFileGenerator.d.ts.map +1 -1
  86. package/dist/src/generators/static/tsConfigFileGenerator.js +46 -18
  87. package/dist/src/generators/static/tsConfigFileGenerator.js.map +1 -1
  88. package/dist/src/generators/test/envBrowserFileGenerator.d.ts +3 -0
  89. package/dist/src/generators/test/envBrowserFileGenerator.d.ts.map +1 -0
  90. package/dist/src/generators/test/envBrowserFileGenerator.js +15 -0
  91. package/dist/src/generators/test/envBrowserFileGenerator.js.map +1 -0
  92. package/dist/src/generators/test/envFileGenerator.d.ts +3 -0
  93. package/dist/src/generators/test/envFileGenerator.d.ts.map +1 -0
  94. package/dist/src/generators/test/envFileGenerator.js +23 -0
  95. package/dist/src/generators/test/envFileGenerator.js.map +1 -0
  96. package/dist/src/generators/test/recordedClientFileGenerator.d.ts +3 -0
  97. package/dist/src/generators/test/recordedClientFileGenerator.d.ts.map +1 -0
  98. package/dist/src/generators/test/recordedClientFileGenerator.js +23 -0
  99. package/dist/src/generators/test/recordedClientFileGenerator.js.map +1 -0
  100. package/dist/src/generators/test/rlcEnv.ts.hbs +3 -0
  101. package/dist/src/generators/test/rlcRecordedClient.ts.hbs +26 -0
  102. package/dist/src/generators/test/rlcSampleTest.spec.ts.hbs +20 -0
  103. package/dist/src/generators/test/sampleTest.ts.hbs +32 -0
  104. package/dist/src/generators/test/sampleTestGenerator.d.ts +3 -0
  105. package/dist/src/generators/test/sampleTestGenerator.d.ts.map +1 -0
  106. package/dist/src/generators/test/sampleTestGenerator.js +34 -0
  107. package/dist/src/generators/test/sampleTestGenerator.js.map +1 -0
  108. package/dist/src/generators/tracingFileGenerator.d.ts.map +1 -1
  109. package/dist/src/generators/tracingFileGenerator.js +7 -21
  110. package/dist/src/generators/tracingFileGenerator.js.map +1 -1
  111. package/dist/src/generators/utils/docsUtils.js +2 -2
  112. package/dist/src/generators/utils/docsUtils.js.map +1 -1
  113. package/dist/src/generators/utils/operationsUtils.js +1 -1
  114. package/dist/src/generators/utils/operationsUtils.js.map +1 -1
  115. package/dist/src/generators/utils/pagingOperations.d.ts +5 -0
  116. package/dist/src/generators/utils/pagingOperations.d.ts.map +1 -1
  117. package/dist/src/generators/utils/pagingOperations.js +15 -15
  118. package/dist/src/generators/utils/pagingOperations.js.map +1 -1
  119. package/dist/src/generators/utils/parameterUtils.js +9 -9
  120. package/dist/src/generators/utils/parameterUtils.js.map +1 -1
  121. package/dist/src/generators/utils/responseTypeUtils.js +2 -2
  122. package/dist/src/generators/utils/responseTypeUtils.js.map +1 -1
  123. package/dist/src/generators/utils/tracingUtils.d.ts.map +1 -1
  124. package/dist/src/generators/utils/tracingUtils.js +2 -6
  125. package/dist/src/generators/utils/tracingUtils.js.map +1 -1
  126. package/dist/src/main.d.ts +2 -2
  127. package/dist/src/main.d.ts.map +1 -1
  128. package/dist/src/main.js +8 -8
  129. package/dist/src/main.js.map +1 -1
  130. package/dist/src/models/clientDetails.d.ts +10 -1
  131. package/dist/src/models/clientDetails.d.ts.map +1 -1
  132. package/dist/src/models/modelDetails.d.ts +2 -2
  133. package/dist/src/models/modelDetails.d.ts.map +1 -1
  134. package/dist/src/models/operationDetails.d.ts +1 -0
  135. package/dist/src/models/operationDetails.d.ts.map +1 -1
  136. package/dist/src/models/sampleDetails.d.ts +22 -0
  137. package/dist/src/models/sampleDetails.d.ts.map +1 -0
  138. package/dist/src/models/sampleDetails.js +3 -0
  139. package/dist/src/models/sampleDetails.js.map +1 -0
  140. package/dist/src/restLevelClient/generateClient.d.ts +1 -1
  141. package/dist/src/restLevelClient/generateClient.d.ts.map +1 -1
  142. package/dist/src/restLevelClient/generateClient.js +108 -167
  143. package/dist/src/restLevelClient/generateClient.js.map +1 -1
  144. package/dist/src/restLevelClient/generateClientDefinition.d.ts +6 -0
  145. package/dist/src/restLevelClient/generateClientDefinition.d.ts.map +1 -0
  146. package/dist/src/restLevelClient/generateClientDefinition.js +261 -0
  147. package/dist/src/restLevelClient/generateClientDefinition.js.map +1 -0
  148. package/dist/src/restLevelClient/generateIsUnexpectedHelper.d.ts +8 -0
  149. package/dist/src/restLevelClient/generateIsUnexpectedHelper.d.ts.map +1 -0
  150. package/dist/src/restLevelClient/generateIsUnexpectedHelper.js +204 -0
  151. package/dist/src/restLevelClient/generateIsUnexpectedHelper.js.map +1 -0
  152. package/dist/src/restLevelClient/generateMethodShortcuts.d.ts +8 -0
  153. package/dist/src/restLevelClient/generateMethodShortcuts.d.ts.map +1 -0
  154. package/dist/src/restLevelClient/generateMethodShortcuts.js +70 -0
  155. package/dist/src/restLevelClient/generateMethodShortcuts.js.map +1 -0
  156. package/dist/src/restLevelClient/generateObjectTypes.d.ts +3 -3
  157. package/dist/src/restLevelClient/generateObjectTypes.d.ts.map +1 -1
  158. package/dist/src/restLevelClient/generateObjectTypes.js +43 -31
  159. package/dist/src/restLevelClient/generateObjectTypes.js.map +1 -1
  160. package/dist/src/restLevelClient/generatePagingHelper.d.ts +3 -0
  161. package/dist/src/restLevelClient/generatePagingHelper.d.ts.map +1 -0
  162. package/dist/src/restLevelClient/generatePagingHelper.js +54 -0
  163. package/dist/src/restLevelClient/generatePagingHelper.js.map +1 -0
  164. package/dist/src/restLevelClient/generateParameterTypes.d.ts.map +1 -1
  165. package/dist/src/restLevelClient/generateParameterTypes.js +247 -44
  166. package/dist/src/restLevelClient/generateParameterTypes.js.map +1 -1
  167. package/dist/src/restLevelClient/generatePollingHelper.d.ts +3 -0
  168. package/dist/src/restLevelClient/generatePollingHelper.d.ts.map +1 -0
  169. package/dist/src/restLevelClient/generatePollingHelper.js +20 -0
  170. package/dist/src/restLevelClient/generatePollingHelper.js.map +1 -0
  171. package/dist/src/restLevelClient/generateResponseTypes.d.ts.map +1 -1
  172. package/dist/src/restLevelClient/generateResponseTypes.js +35 -23
  173. package/dist/src/restLevelClient/generateResponseTypes.js.map +1 -1
  174. package/dist/src/restLevelClient/generateRestLevel.d.ts.map +1 -1
  175. package/dist/src/restLevelClient/generateRestLevel.js +63 -16
  176. package/dist/src/restLevelClient/generateRestLevel.js.map +1 -1
  177. package/dist/src/restLevelClient/generateSchemaTypes.d.ts.map +1 -1
  178. package/dist/src/restLevelClient/generateSchemaTypes.js +29 -7
  179. package/dist/src/restLevelClient/generateSchemaTypes.js.map +1 -1
  180. package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts +4 -0
  181. package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts.map +1 -0
  182. package/dist/src/restLevelClient/generateTopLevelIndexFile.js +37 -0
  183. package/dist/src/restLevelClient/generateTopLevelIndexFile.js.map +1 -0
  184. package/dist/src/restLevelClient/getPropertySignature.d.ts +2 -2
  185. package/dist/src/restLevelClient/getPropertySignature.d.ts.map +1 -1
  186. package/dist/src/restLevelClient/getPropertySignature.js +10 -7
  187. package/dist/src/restLevelClient/getPropertySignature.js.map +1 -1
  188. package/dist/src/restLevelClient/helpers/hasPollingOperations.d.ts +4 -0
  189. package/dist/src/restLevelClient/helpers/hasPollingOperations.d.ts.map +1 -0
  190. package/dist/src/restLevelClient/helpers/hasPollingOperations.js +12 -0
  191. package/dist/src/restLevelClient/helpers/hasPollingOperations.js.map +1 -0
  192. package/dist/src/restLevelClient/helpers/modelHelpers.d.ts +4 -0
  193. package/dist/src/restLevelClient/helpers/modelHelpers.d.ts.map +1 -0
  194. package/dist/src/restLevelClient/helpers/modelHelpers.js +19 -0
  195. package/dist/src/restLevelClient/helpers/modelHelpers.js.map +1 -0
  196. package/dist/src/restLevelClient/helpers/operationHelpers.d.ts +10 -0
  197. package/dist/src/restLevelClient/helpers/operationHelpers.d.ts.map +1 -0
  198. package/dist/src/restLevelClient/helpers/operationHelpers.js +64 -0
  199. package/dist/src/restLevelClient/helpers/operationHelpers.js.map +1 -0
  200. package/dist/src/restLevelClient/interfaces.d.ts +33 -0
  201. package/dist/src/restLevelClient/interfaces.d.ts.map +1 -0
  202. package/dist/src/restLevelClient/interfaces.js +3 -0
  203. package/dist/src/restLevelClient/interfaces.js.map +1 -0
  204. package/dist/src/restLevelClient/mutateCodeModel.js +2 -2
  205. package/dist/src/restLevelClient/mutateCodeModel.js.map +1 -1
  206. package/dist/src/restLevelClient/operationHelpers.d.ts +4 -0
  207. package/dist/src/restLevelClient/operationHelpers.d.ts.map +1 -1
  208. package/dist/src/restLevelClient/operationHelpers.js +21 -10
  209. package/dist/src/restLevelClient/operationHelpers.js.map +1 -1
  210. package/dist/src/restLevelClient/paginateHelper.ts.hbs +208 -0
  211. package/dist/src/restLevelClient/pollingHelper.ts.hbs +72 -0
  212. package/dist/src/restLevelClient/samples/generateSamples.d.ts +23 -0
  213. package/dist/src/restLevelClient/samples/generateSamples.d.ts.map +1 -0
  214. package/dist/src/restLevelClient/samples/generateSamples.js +3 -0
  215. package/dist/src/restLevelClient/samples/generateSamples.js.map +1 -0
  216. package/dist/src/restLevelClient/samples/samples.ts.hbs +0 -0
  217. package/dist/src/restLevelClient/schemaHelpers.d.ts +8 -2
  218. package/dist/src/restLevelClient/schemaHelpers.d.ts.map +1 -1
  219. package/dist/src/restLevelClient/schemaHelpers.js +27 -12
  220. package/dist/src/restLevelClient/schemaHelpers.js.map +1 -1
  221. package/dist/src/transforms/extensions.js +10 -10
  222. package/dist/src/transforms/extensions.js.map +1 -1
  223. package/dist/src/transforms/groupTransforms.js +2 -2
  224. package/dist/src/transforms/groupTransforms.js.map +1 -1
  225. package/dist/src/transforms/mapperTransforms.d.ts.map +1 -1
  226. package/dist/src/transforms/mapperTransforms.js +29 -26
  227. package/dist/src/transforms/mapperTransforms.js.map +1 -1
  228. package/dist/src/transforms/objectTransforms.d.ts.map +1 -1
  229. package/dist/src/transforms/objectTransforms.js +42 -26
  230. package/dist/src/transforms/objectTransforms.js.map +1 -1
  231. package/dist/src/transforms/operationTransforms.d.ts.map +1 -1
  232. package/dist/src/transforms/operationTransforms.js +29 -26
  233. package/dist/src/transforms/operationTransforms.js.map +1 -1
  234. package/dist/src/transforms/optionsTransforms.js +1 -1
  235. package/dist/src/transforms/optionsTransforms.js.map +1 -1
  236. package/dist/src/transforms/parameterTransforms.d.ts.map +1 -1
  237. package/dist/src/transforms/parameterTransforms.js +43 -27
  238. package/dist/src/transforms/parameterTransforms.js.map +1 -1
  239. package/dist/src/transforms/samplesTransforms.d.ts +7 -0
  240. package/dist/src/transforms/samplesTransforms.d.ts.map +1 -0
  241. package/dist/src/transforms/samplesTransforms.js +293 -0
  242. package/dist/src/transforms/samplesTransforms.js.map +1 -0
  243. package/dist/src/transforms/transforms.d.ts +1 -2
  244. package/dist/src/transforms/transforms.d.ts.map +1 -1
  245. package/dist/src/transforms/transforms.js +26 -24
  246. package/dist/src/transforms/transforms.js.map +1 -1
  247. package/dist/src/transforms/urlTransforms.js +3 -3
  248. package/dist/src/transforms/urlTransforms.js.map +1 -1
  249. package/dist/src/typescriptGenerator.d.ts +2 -2
  250. package/dist/src/typescriptGenerator.d.ts.map +1 -1
  251. package/dist/src/typescriptGenerator.js +46 -46
  252. package/dist/src/typescriptGenerator.js.map +1 -1
  253. package/dist/src/utils/autorestOptions.d.ts +2 -2
  254. package/dist/src/utils/autorestOptions.d.ts.map +1 -1
  255. package/dist/src/utils/autorestOptions.js +141 -62
  256. package/dist/src/utils/autorestOptions.js.map +1 -1
  257. package/dist/src/utils/cloneOperation.js +2 -2
  258. package/dist/src/utils/cloneOperation.js.map +1 -1
  259. package/dist/src/utils/copyFiles.d.ts +2 -0
  260. package/dist/src/utils/copyFiles.d.ts.map +1 -0
  261. package/dist/src/utils/copyFiles.js +33 -0
  262. package/dist/src/utils/copyFiles.js.map +1 -0
  263. package/dist/src/utils/extractHeaders.js +4 -4
  264. package/dist/src/utils/extractHeaders.js.map +1 -1
  265. package/dist/src/utils/extractPaginationDetails.d.ts +5 -1
  266. package/dist/src/utils/extractPaginationDetails.d.ts.map +1 -1
  267. package/dist/src/utils/extractPaginationDetails.js +23 -10
  268. package/dist/src/utils/extractPaginationDetails.js.map +1 -1
  269. package/dist/src/utils/headersToSchema.js +1 -1
  270. package/dist/src/utils/headersToSchema.js.map +1 -1
  271. package/dist/src/utils/logger.js +1 -1
  272. package/dist/src/utils/logger.js.map +1 -1
  273. package/dist/src/utils/nameUtils.d.ts +6 -2
  274. package/dist/src/utils/nameUtils.d.ts.map +1 -1
  275. package/dist/src/utils/nameUtils.js +13 -8
  276. package/dist/src/utils/nameUtils.js.map +1 -1
  277. package/dist/src/utils/schemaHelpers.d.ts +6 -1
  278. package/dist/src/utils/schemaHelpers.d.ts.map +1 -1
  279. package/dist/src/utils/schemaHelpers.js +50 -7
  280. package/dist/src/utils/schemaHelpers.js.map +1 -1
  281. package/dist/src/utils/sortObjectSchemasHierarchically.js +1 -1
  282. package/dist/src/utils/sortObjectSchemasHierarchically.js.map +1 -1
  283. package/dist/src/utils/valueHelpers.js +1 -1
  284. package/dist/src/utils/valueHelpers.js.map +1 -1
  285. package/package.json +58 -39
  286. package/src/autorestSession.ts +25 -18
  287. package/src/conflictResolver.ts +61 -0
  288. package/src/generators/clientFileGenerator.ts +397 -36
  289. package/src/generators/indexGenerator.ts +118 -12
  290. package/src/generators/mappersGenerator.ts +108 -8
  291. package/src/generators/modelsGenerator.ts +98 -97
  292. package/src/generators/operationGenerator.ts +54 -93
  293. package/src/generators/parametersGenerator.ts +2 -3
  294. package/src/generators/samples/hlcSampleGenerator.ts +50 -0
  295. package/src/generators/samples/hlcSamples.ts.hbs +49 -0
  296. package/src/generators/samples/rlcSampleGenerator.ts +72 -0
  297. package/src/generators/samples/rlcSamples.ts.hbs +28 -0
  298. package/src/generators/samples/sampleEnv.hbs +4 -0
  299. package/src/generators/samples/sampleEnvGenerator.ts +14 -0
  300. package/src/generators/static/apiExtractorConfig.ts +2 -2
  301. package/src/generators/static/esLintConfigGenerator.ts +24 -0
  302. package/src/generators/static/hlcREADME.md.hbs +144 -0
  303. package/src/generators/static/karma.conf.js.hbs +126 -0
  304. package/src/generators/static/karmaConfigFileGenerator.ts +20 -0
  305. package/src/generators/static/packageFileGenerator.ts +292 -71
  306. package/src/generators/static/readmeFileGenerator.ts +79 -42
  307. package/src/generators/static/rlcREADME.md.hbs +71 -0
  308. package/src/generators/static/rollupConfigFileGenerator.ts +13 -71
  309. package/src/generators/static/tsConfigFileGenerator.ts +54 -19
  310. package/src/generators/test/envBrowserFileGenerator.ts +14 -0
  311. package/src/generators/test/envFileGenerator.ts +22 -0
  312. package/src/generators/test/recordedClientFileGenerator.ts +22 -0
  313. package/src/generators/test/rlcEnv.ts.hbs +3 -0
  314. package/src/generators/test/rlcRecordedClient.ts.hbs +26 -0
  315. package/src/generators/test/rlcSampleTest.spec.ts.hbs +20 -0
  316. package/src/generators/test/sampleTest.ts.hbs +32 -0
  317. package/src/generators/test/sampleTestGenerator.ts +32 -0
  318. package/src/generators/tracingFileGenerator.ts +6 -24
  319. package/src/generators/utils/pagingOperations.ts +1 -2
  320. package/src/generators/utils/tracingUtils.ts +1 -5
  321. package/src/main.ts +8 -5
  322. package/src/models/clientDetails.ts +11 -1
  323. package/src/models/modelDetails.ts +2 -2
  324. package/src/models/operationDetails.ts +1 -0
  325. package/src/models/sampleDetails.ts +22 -0
  326. package/src/restLevelClient/generateClient.ts +134 -244
  327. package/src/restLevelClient/generateClientDefinition.ts +386 -0
  328. package/src/restLevelClient/generateIsUnexpectedHelper.ts +224 -0
  329. package/src/restLevelClient/generateMethodShortcuts.ts +121 -0
  330. package/src/restLevelClient/generateObjectTypes.ts +62 -21
  331. package/src/restLevelClient/generatePagingHelper.ts +69 -0
  332. package/src/restLevelClient/generateParameterTypes.ts +377 -56
  333. package/src/restLevelClient/generatePollingHelper.ts +19 -0
  334. package/src/restLevelClient/generateResponseTypes.ts +36 -17
  335. package/src/restLevelClient/generateRestLevel.ts +63 -8
  336. package/src/restLevelClient/generateSchemaTypes.ts +43 -8
  337. package/src/restLevelClient/generateTopLevelIndexFile.ts +37 -0
  338. package/src/restLevelClient/getPropertySignature.ts +12 -4
  339. package/src/restLevelClient/helpers/hasPollingOperations.ts +15 -0
  340. package/src/restLevelClient/helpers/modelHelpers.ts +15 -0
  341. package/src/restLevelClient/helpers/operationHelpers.ts +93 -0
  342. package/src/restLevelClient/interfaces.ts +39 -0
  343. package/src/restLevelClient/operationHelpers.ts +23 -9
  344. package/src/restLevelClient/paginateHelper.ts.hbs +208 -0
  345. package/src/restLevelClient/pollingHelper.ts.hbs +72 -0
  346. package/src/restLevelClient/samples/generateSamples.ts +23 -0
  347. package/src/restLevelClient/samples/samples.ts.hbs +0 -0
  348. package/src/restLevelClient/schemaHelpers.ts +30 -8
  349. package/src/transforms/mapperTransforms.ts +11 -5
  350. package/src/transforms/objectTransforms.ts +26 -6
  351. package/src/transforms/operationTransforms.ts +6 -1
  352. package/src/transforms/parameterTransforms.ts +26 -7
  353. package/src/transforms/samplesTransforms.ts +349 -0
  354. package/src/transforms/transforms.ts +14 -9
  355. package/src/typescriptGenerator.ts +40 -53
  356. package/src/utils/autorestOptions.ts +198 -88
  357. package/src/utils/copyFiles.ts +36 -0
  358. package/src/utils/extractPaginationDetails.ts +19 -1
  359. package/src/utils/nameUtils.ts +18 -9
  360. package/src/utils/schemaHelpers.ts +51 -4
  361. package/CHANGELOG.md +0 -56
  362. package/dist/src/generators/clientContextFileGenerator.d.ts +0 -5
  363. package/dist/src/generators/clientContextFileGenerator.d.ts.map +0 -1
  364. package/dist/src/generators/clientContextFileGenerator.js +0 -263
  365. package/dist/src/generators/clientContextFileGenerator.js.map +0 -1
  366. package/src/generators/clientContextFileGenerator.ts +0 -405
@@ -1,6 +1,6 @@
1
- import { Channel, Host } from "@autorest/extension-base";
1
+ import { Channel, AutorestExtensionHost } from "@autorest/extension-base";
2
2
  import { AutorestOptions, getHost, getSession } from "../autorestSession";
3
- import { TracingInfo } from "../models/clientDetails";
3
+ import { DependencyInfo, TracingInfo } from "../models/clientDetails";
4
4
  import { PackageDetails } from "../models/packageDetails";
5
5
  import { NameType, normalizeName } from "./nameUtils";
6
6
 
@@ -11,12 +11,14 @@ export async function extractAutorestOptions(): Promise<AutorestOptions> {
11
11
  const host = getHost();
12
12
  const useCoreV2 = await getUseCoreV2(host);
13
13
  const restLevelClient = await getRestLevelClient(host);
14
+ const rlcShortcut = await getHasShortcutMethods(host);
14
15
  const azureArm = await getIsAzureArm(host);
15
16
  const addCredentials = await getAddCredentials(host);
16
- const credentialKeyHeaderName = await getKeyCredentialHeaderName(host);
17
+ const security = await getSecurity(host);
18
+ const securityHeaderName = await getSecurityHeaderName(host);
17
19
  const srcPath = await getSrcPath(host);
18
20
  const outputPath = await getOutputPath(host);
19
- const credentialScopes = await getCredentialScopes(host);
21
+ const securityScopes = await getSecurityScopes(host);
20
22
  const packageDetails = await getPackageDetails(host);
21
23
  const licenseHeader = await getLicenseHeader(host);
22
24
  const generateMetadata = await getGenerateMetadata(host);
@@ -31,13 +33,23 @@ export async function extractAutorestOptions(): Promise<AutorestOptions> {
31
33
  const azureOutputDirectory = await getAzureOutputDirectoryPath(host);
32
34
  const headAsBoolean = await getHeadAsBoolean(host);
33
35
  const isTestPackage = await getIsTestPackage(host);
36
+ const generateSample = await getGenerateSample(host);
37
+ const generateTest = await getGenerateTest(host);
38
+ const batch = await getBatch(host);
39
+ const multiClient = await getMultiClient(host);
40
+ const productDocLink = await getProductDocLink(host);
41
+ const coreHttpCompatMode = await getCoreHttpCompatMode(host);
42
+ const azureSdkForJs = await getAzureSdkForJs(host);
43
+ const dependencyInfo = await getDependencyInfo(host);
34
44
 
35
45
  return {
36
46
  azureArm,
37
47
  addCredentials,
38
- credentialKeyHeaderName,
39
- credentialScopes,
48
+ security,
49
+ securityHeaderName,
50
+ securityScopes,
40
51
  restLevelClient,
52
+ rlcShortcut,
41
53
  srcPath,
42
54
  outputPath,
43
55
  packageDetails,
@@ -53,73 +65,126 @@ export async function extractAutorestOptions(): Promise<AutorestOptions> {
53
65
  title,
54
66
  azureOutputDirectory,
55
67
  headAsBoolean,
56
- isTestPackage
68
+ isTestPackage,
69
+ generateTest,
70
+ batch,
71
+ multiClient,
72
+ generateSample,
73
+ azureSdkForJs,
74
+ productDocLink,
75
+ coreHttpCompatMode,
76
+ dependencyInfo
57
77
  };
58
78
  }
59
79
 
60
- async function getHeadAsBoolean(host: Host): Promise<boolean> {
61
- const headAsBoolean = await host.GetValue("head-as-boolean");
80
+ async function getHasShortcutMethods(
81
+ host: AutorestExtensionHost
82
+ ): Promise<boolean> {
83
+ const headAsBoolean = await host.getValue("rlc-shortcut");
62
84
 
63
85
  return Boolean(headAsBoolean);
64
86
  }
65
87
 
66
- async function getIsTestPackage(host: Host): Promise<boolean> {
67
- const isTestPackage: boolean = await host.GetValue("is-test-package");
88
+ async function getHeadAsBoolean(host: AutorestExtensionHost): Promise<boolean> {
89
+ const headAsBoolean = await host.getValue("head-as-boolean");
90
+
91
+ return Boolean(headAsBoolean);
92
+ }
93
+
94
+ async function getIsTestPackage(host: AutorestExtensionHost): Promise<boolean> {
95
+ const isTestPackage = await host.getValue("is-test-package");
68
96
  return isTestPackage === null ? false : Boolean(isTestPackage);
69
97
  }
70
98
 
71
- async function getSkipEnumValidation(host: Host): Promise<boolean> {
72
- const skipEnumValidation = await host.GetValue("skip-enum-validation");
99
+ async function getGenerateSample(
100
+ host: AutorestExtensionHost
101
+ ): Promise<boolean> {
102
+ const generateSample = await host.getValue("generate-sample");
103
+ return generateSample === undefined || generateSample === null ? false : Boolean(generateSample);
104
+ }
105
+
106
+ async function getGenerateTest(host: AutorestExtensionHost): Promise<boolean> {
107
+ const generateTest = await host.getValue("generate-test");
108
+ return generateTest === null ? false : Boolean(generateTest);
109
+ }
110
+
111
+ async function getAzureSdkForJs(host: AutorestExtensionHost): Promise<boolean> {
112
+ const azureSdkForJs = await host.getValue("azure-sdk-for-js");
113
+ return azureSdkForJs === undefined || azureSdkForJs === null
114
+ ? true
115
+ : Boolean(azureSdkForJs);
116
+ }
117
+
118
+ async function getSkipEnumValidation(
119
+ host: AutorestExtensionHost
120
+ ): Promise<boolean> {
121
+ const skipEnumValidation = await host.getValue("skip-enum-validation");
73
122
 
74
123
  return skipEnumValidation === true;
75
124
  }
76
125
 
77
- async function getAllowInsecureConnection(host: Host): Promise<boolean> {
78
- return (await host.GetValue("allow-insecure-connection")) || false;
126
+ async function getAllowInsecureConnection(
127
+ host: AutorestExtensionHost
128
+ ): Promise<boolean> {
129
+ return (await host.getValue("allow-insecure-connection")) || false;
79
130
  }
80
131
 
81
- async function getIgnoreNullableOnOptional(host: Host): Promise<boolean> {
132
+ async function getIgnoreNullableOnOptional(
133
+ host: AutorestExtensionHost
134
+ ): Promise<boolean> {
82
135
  const isAzureArm = await getIsAzureArm(host);
83
- return (await host.GetValue("ignore-nullable-on-optional"))
136
+ return (await host.getValue("ignore-nullable-on-optional"))
84
137
  ? true
85
138
  : isAzureArm;
86
139
  }
87
140
 
88
- async function getDisableAsyncOperators(host: Host): Promise<boolean> {
89
- return (await host.GetValue("disable-async-iterators")) === true;
141
+ async function getDisableAsyncOperators(
142
+ host: AutorestExtensionHost
143
+ ): Promise<boolean> {
144
+ return (await host.getValue("disable-async-iterators")) === true;
90
145
  }
91
146
 
92
- async function getHideClients(host: Host): Promise<boolean> {
93
- return (await host.GetValue("hide-clients")) || false;
147
+ async function getHideClients(host: AutorestExtensionHost): Promise<boolean> {
148
+ return (await host.getValue("hide-clients")) || false;
94
149
  }
95
- async function getGenerateMetadata(host: Host) {
96
- return (await host.GetValue("generate-metadata")) !== false;
150
+ async function getGenerateMetadata(host: AutorestExtensionHost) {
151
+ return (await host.getValue("generate-metadata")) !== false;
97
152
  }
98
153
 
99
- async function getLicenseHeader(host: Host): Promise<boolean> {
100
- return (await host.GetValue("license-header")) || false;
154
+ async function getLicenseHeader(host: AutorestExtensionHost): Promise<boolean> {
155
+ const license: boolean | undefined = await host.getValue("license-header");
156
+ if (license === undefined) {
157
+ return true;
158
+ }
159
+ return license;
101
160
  }
102
161
 
103
- async function getTitle(host: Host): Promise<string | undefined> {
104
- return (await host.GetValue("title")) || undefined;
162
+ async function getTitle(
163
+ host: AutorestExtensionHost
164
+ ): Promise<string | undefined> {
165
+ return (await host.getValue("title")) || undefined;
105
166
  }
106
167
 
107
- async function getSrcPath(host: Host): Promise<string> {
108
- return ((await host.GetValue("source-code-folder-path")) as string) || "src";
168
+ async function getSrcPath(host: AutorestExtensionHost): Promise<string> {
169
+ return ((await host.getValue("source-code-folder-path")) as string) || "src";
109
170
  }
110
171
 
111
- async function getOutputPath(host: Host): Promise<string | undefined> {
112
- return (await host.GetValue("output-folder")) || undefined;
172
+ async function getOutputPath(
173
+ host: AutorestExtensionHost
174
+ ): Promise<string | undefined> {
175
+ return (await host.getValue("output-folder")) || undefined;
113
176
  }
114
177
 
115
- async function getKeyCredentialHeaderName(
116
- host: Host
178
+ async function getSecurityHeaderName(
179
+ host: AutorestExtensionHost
117
180
  ): Promise<string | undefined> {
118
- return (await host.GetValue("credential-key-header-name")) || undefined;
181
+ return (await host.getValue("security-header-name")) || undefined;
119
182
  }
120
183
 
121
- async function getAddCredentials(host: Host): Promise<boolean> {
122
- const addCredentials = await host.GetValue("add-credentials");
184
+ async function getAddCredentials(
185
+ host: AutorestExtensionHost
186
+ ): Promise<boolean> {
187
+ const addCredentials = await host.getValue("add-credentials");
123
188
 
124
189
  // Only set addCredentials to false if explicitly set to false
125
190
  // otherwise default to true
@@ -129,34 +194,46 @@ async function getAddCredentials(host: Host): Promise<boolean> {
129
194
  return true;
130
195
  }
131
196
  }
132
- async function getIsAzureArm(host: Host): Promise<boolean> {
133
- const flag = (await host.GetValue("azure-arm")) === true;
134
- const openapi = (await host.GetValue("openapi-type")) === "arm";
197
+
198
+ async function getSecurity(
199
+ host: AutorestExtensionHost
200
+ ): Promise<string | undefined> {
201
+ const security: string | undefined = await host.getValue("security");
202
+ return security
203
+ }
204
+
205
+ async function getIsAzureArm(host: AutorestExtensionHost): Promise<boolean> {
206
+ const flag = (await host.getValue("azure-arm")) === true;
207
+ const openapi = (await host.getValue("openapi-type")) === "arm";
135
208
 
136
209
  return flag || openapi;
137
210
  }
138
211
 
139
- async function getRestLevelClient(host: Host): Promise<boolean> {
140
- return (await host.GetValue("rest-level-client")) === true;
212
+ async function getRestLevelClient(
213
+ host: AutorestExtensionHost
214
+ ): Promise<boolean> {
215
+ return (await host.getValue("rest-level-client")) === true;
141
216
  }
142
217
 
143
- async function getUseCoreV2(host: Host): Promise<boolean> {
144
- const useCoreV2Option: boolean = await host.GetValue("use-core-v2");
218
+ async function getUseCoreV2(host: AutorestExtensionHost): Promise<boolean> {
219
+ const useCoreV2Option = await host.getValue("use-core-v2");
145
220
  return useCoreV2Option === null ? true : Boolean(useCoreV2Option);
146
221
  }
147
222
 
148
- async function getTracingInfo(host: Host): Promise<TracingInfo | undefined> {
223
+ async function getTracingInfo(
224
+ host: AutorestExtensionHost
225
+ ): Promise<TracingInfo | undefined> {
149
226
  const tracing: TracingInfo | undefined =
150
- (await host.GetValue("tracing-info")) || undefined;
227
+ (await host.getValue("tracing-info")) || undefined;
151
228
 
152
- if (tracing && tracing.namespace && tracing.packagePrefix) {
229
+ if (tracing && tracing.namespace) {
153
230
  return tracing;
154
231
  }
155
232
 
156
- const namespace =
157
- (await host.GetValue("tracing-info.namespace")) || undefined;
158
- const packagePrefix =
159
- (await host.GetValue("tracing-info.packagePrefix")) || undefined;
233
+ const namespace: string | undefined =
234
+ (await host.getValue<string>("tracing-info.namespace")) || undefined;
235
+ const packagePrefix: string | undefined =
236
+ (await host.getValue("tracing-info.packagePrefix")) || undefined;
160
237
 
161
238
  if (packagePrefix && namespace) {
162
239
  return {
@@ -174,13 +251,17 @@ async function getTracingInfo(host: Host): Promise<TracingInfo | undefined> {
174
251
  );
175
252
  }
176
253
 
177
- async function getPackageDetails(host: Host): Promise<PackageDetails> {
254
+ async function getPackageDetails(
255
+ host: AutorestExtensionHost
256
+ ): Promise<PackageDetails> {
178
257
  const { model } = getSession();
179
258
  const name = normalizeName(model.language.default.name, NameType.File);
180
259
  // TODO: Look for an existing package.json and
181
- const packageName = (await host.GetValue("package-name")) || name;
182
- const packageNameParts = packageName.match(/(^@(.*)\/)?(.*)/);
183
- const version = (await host.GetValue("package-version")) || "1.0.0-beta.1";
260
+ const packageName: string = (await host.getValue("package-name")) || name;
261
+ const packageNameParts: RegExpMatchArray =
262
+ packageName.match(/(^@(.*)\/)?(.*)/) ?? [];
263
+ const version: string =
264
+ (await host.getValue("package-version")) || "1.0.0-beta.1";
184
265
 
185
266
  return {
186
267
  name: packageName,
@@ -191,46 +272,20 @@ async function getPackageDetails(host: Host): Promise<PackageDetails> {
191
272
  };
192
273
  }
193
274
 
194
- export async function getCredentialScopes(
195
- host: Host
275
+ export async function getSecurityScopes(
276
+ host: AutorestExtensionHost
196
277
  ): Promise<string[] | undefined> {
197
- const addCredentials = await host.GetValue("add-credentials");
198
- const credentialScopes = await host.GetValue("credential-scopes");
199
- const azureArm = await host.GetValue("azure-arm");
200
-
201
- if (credentialScopes && !addCredentials) {
202
- throw new Error(
203
- "--credential-scopes must be used with the --add-credentials flag"
204
- );
278
+ const securityScopes: string | undefined = await host.getValue("security-scopes");
279
+ if(securityScopes !== undefined && typeof securityScopes === "string") {
280
+ return securityScopes.split(",");
205
281
  }
206
-
207
- if (!credentialScopes) {
208
- if (azureArm) {
209
- return ["https://management.azure.com/.default"];
210
- } else if (addCredentials) {
211
- host.Message({
212
- Channel: Channel.Warning,
213
- Text: `You have default credential policy BearerTokenCredentialPolicy
214
- but not the --credential-scopes flag set while generating non-management plane code.
215
- This is not recommended because it forces the customer to pass credential scopes
216
- through kwargs if they want to authenticate.`
217
- });
218
- }
219
- }
220
-
221
- if (typeof credentialScopes === "string") {
222
- return credentialScopes.split(",");
223
- }
224
-
225
- return undefined;
282
+ return securityScopes;
226
283
  }
227
284
 
228
285
  async function getAzureOutputDirectoryPath(
229
- host: Host
286
+ host: AutorestExtensionHost
230
287
  ): Promise<string | undefined> {
231
- const outputDirectoryPath: string | null = await host.GetValue(
232
- "outputFolderUri"
233
- );
288
+ const outputDirectoryPath = await host.getValue<string>("outputFolderUri");
234
289
  const outputDirectoryRelativePath: string | undefined = outputDirectoryPath
235
290
  ?.replace(/\/$/, "")
236
291
  .split("/")
@@ -240,3 +295,58 @@ async function getAzureOutputDirectoryPath(
240
295
  ? outputDirectoryRelativePath
241
296
  : undefined;
242
297
  }
298
+
299
+ async function getBatch(
300
+ host: AutorestExtensionHost
301
+ ): Promise<[string, any][] | undefined> {
302
+ const batch = await host.getValue<[string, any][]>("batch");
303
+ return batch;
304
+ }
305
+
306
+ async function getProductDocLink(
307
+ host: AutorestExtensionHost
308
+ ): Promise<string | undefined> {
309
+ return (await host.getValue("product-doc-link")) || undefined;
310
+ }
311
+
312
+ async function getMultiClient(host: AutorestExtensionHost): Promise<boolean> {
313
+ const multiClient = (await host.getValue("multi-client")) || undefined;
314
+ return !!multiClient;
315
+ }
316
+
317
+ async function getCoreHttpCompatMode(
318
+ host: AutorestExtensionHost
319
+ ): Promise<boolean> {
320
+ return (await host.getValue("core-http-compat-mode")) || false;
321
+ }
322
+
323
+ async function getDependencyInfo(
324
+ host: AutorestExtensionHost
325
+ ): Promise<DependencyInfo | undefined> {
326
+ const dependency: DependencyInfo | undefined =
327
+ (await host.getValue("dependency-info")) || undefined;
328
+
329
+ if (dependency && dependency.description && dependency.link) {
330
+ return dependency;
331
+ }
332
+
333
+ const link: string | undefined =
334
+ (await host.getValue<string>("dependency-info.link")) || undefined;
335
+ const description: string | undefined =
336
+ (await host.getValue("dependency-info.description")) || undefined;
337
+
338
+ if (description && link) {
339
+ return {
340
+ link,
341
+ description
342
+ };
343
+ }
344
+
345
+ if (!dependency && !description && !link) {
346
+ return undefined;
347
+ }
348
+
349
+ throw new Error(
350
+ "Invalid dependency-info. Make sure that link and description are defined"
351
+ );
352
+ }
@@ -0,0 +1,36 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+
4
+ import * as fsextra from "fs-extra";
5
+
6
+ export function copyFiles(srcDir: string, destDir: string[]) {
7
+ const dirContents: string[] = fsextra.readdirSync(srcDir);
8
+ dirContents.forEach((dirEntry: string) => {
9
+ if (dirEntry.endsWith(".hbs")) {
10
+ destDir.forEach((destDirEntry: string) => {
11
+ console.log(
12
+ `Copying ${srcDir}/${dirEntry} to ${destDirEntry}/${dirEntry}`
13
+ );
14
+ fsextra.copyFileSync(
15
+ `${srcDir}/${dirEntry}`,
16
+ `${destDirEntry}/${dirEntry}`
17
+ );
18
+ });
19
+ }
20
+ });
21
+ }
22
+
23
+ copyFiles("./src/restLevelClient", ["./dist/src/restLevelClient", "./dist"]);
24
+ copyFiles("./src/generators/test", ["./dist/src/generators/test", "./dist"]);
25
+ copyFiles("./src/generators/static", [
26
+ "./dist/src/generators/static",
27
+ "./dist"
28
+ ]);
29
+ copyFiles("./src/generators/samples", [
30
+ "./dist/src/generators/samples",
31
+ "./dist"
32
+ ]);
33
+ copyFiles("./src/restLevelClient/samples", [
34
+ "./dist/src/restLevelClient/samples",
35
+ "./dist"
36
+ ]);
@@ -2,7 +2,8 @@ import {
2
2
  Operation,
3
3
  SchemaResponse,
4
4
  SchemaType,
5
- ObjectSchema
5
+ ObjectSchema,
6
+ CodeModel
6
7
  } from "@autorest/codemodel";
7
8
  import { isEqual } from "lodash";
8
9
  import { PaginationDetails } from "../models/operationDetails";
@@ -152,6 +153,23 @@ function getResponseItemType(
152
153
  return getTypeForSchema(itemProperty.schema);
153
154
  }
154
155
 
156
+ /**
157
+ * Function to determine if any of the operations in the code model has at least one pageable operatio
158
+ */
159
+ export function hasPagingOperations(model: CodeModel) {
160
+ for (const group of model.operationGroups) {
161
+ const hasAnyPageable = group.operations.some(
162
+ o => o.extensions && o.extensions["x-ms-pageable"]
163
+ );
164
+
165
+ if (hasAnyPageable) {
166
+ return true;
167
+ }
168
+ }
169
+
170
+ return false;
171
+ }
172
+
155
173
  function isObjectSchema(schema: any): schema is ObjectSchema {
156
174
  return schema && schema.type === SchemaType.Object;
157
175
  }
@@ -4,7 +4,7 @@ import { Operation, OperationGroup } from "@autorest/codemodel";
4
4
  import { getLanguageMetadata } from "./languageHelpers";
5
5
  import { TypeDetails, PropertyKind } from "../models/modelDetails";
6
6
 
7
- interface ReservedName {
7
+ export interface ReservedName {
8
8
  name: string;
9
9
  reservedFor: NameType[];
10
10
  }
@@ -84,7 +84,8 @@ const ReservedModelNames: ReservedName[] = [
84
84
  { name: "void", reservedFor: [NameType.Parameter] },
85
85
  { name: "while", reservedFor: [NameType.Parameter] },
86
86
  { name: "with", reservedFor: [NameType.Parameter] },
87
- { name: "yield", reservedFor: [NameType.Parameter] }
87
+ { name: "yield", reservedFor: [NameType.Parameter] },
88
+ { name: "arguments", reservedFor: [NameType.Parameter] }
88
89
  ];
89
90
 
90
91
  export enum CasingConvention {
@@ -92,11 +93,15 @@ export enum CasingConvention {
92
93
  Camel
93
94
  }
94
95
 
95
- export function guardReservedNames(name: string, nameType: NameType): string {
96
+ export function guardReservedNames(
97
+ name: string,
98
+ nameType: NameType,
99
+ customReservedNames: ReservedName[] = []
100
+ ): string {
96
101
  const suffix = getSuffix(nameType);
97
- return ReservedModelNames.filter(r => r.reservedFor.includes(nameType)).find(
98
- r => r.name === name.toLowerCase()
99
- )
102
+ return [...ReservedModelNames, ...customReservedNames]
103
+ .filter(r => r.reservedFor.includes(nameType))
104
+ .find(r => r.name === name.toLowerCase())
100
105
  ? `${name}${suffix}`
101
106
  : name;
102
107
  }
@@ -135,12 +140,14 @@ export function normalizeTypeName({ kind, typeName }: TypeDetails) {
135
140
  export function normalizeName(
136
141
  name: string,
137
142
  nameType: NameType,
138
- shouldGuard?: boolean
143
+ shouldGuard?: boolean,
144
+ customReservedNames: ReservedName[] = [],
145
+ casingOverride?: CasingConvention
139
146
  ): string {
140
147
  if (name.startsWith("$DO_NOT_NORMALIZE$")) {
141
148
  return name.replace("$DO_NOT_NORMALIZE$", "");
142
149
  }
143
- const casingConvention = getCasingConvention(nameType);
150
+ const casingConvention = casingOverride ?? getCasingConvention(nameType);
144
151
  const sanitizedName = sanitizeName(name);
145
152
  const parts = getNameParts(sanitizedName);
146
153
  const [firstPart, ...otherParts] = parts;
@@ -152,7 +159,9 @@ export function normalizeName(
152
159
  .join("");
153
160
 
154
161
  const normalized = checkBeginning(`${normalizedFirstPart}${normalizedParts}`);
155
- return shouldGuard ? guardReservedNames(normalized, nameType) : normalized;
162
+ return shouldGuard
163
+ ? guardReservedNames(normalized, nameType, customReservedNames)
164
+ : normalized;
156
165
  }
157
166
 
158
167
  function checkBeginning(name: string): string {
@@ -11,11 +11,17 @@ import {
11
11
  ArraySchema,
12
12
  DictionarySchema,
13
13
  SchemaResponse,
14
- ComplexSchema
14
+ ComplexSchema,
15
+ OAuth2SecurityScheme,
16
+ KeySecurityScheme,
17
+ ParameterLocation,
18
+ Security
15
19
  } from "@autorest/codemodel";
16
20
  import { getStringForValue } from "./valueHelpers";
17
21
  import { getLanguageMetadata } from "./languageHelpers";
18
- import { normalizeName, NameType, normalizeTypeName } from "./nameUtils";
22
+ import { normalizeName, NameType } from "./nameUtils";
23
+ import { logger } from "./logger";
24
+ import { getAutorestOptions } from "../autorestSession";
19
25
 
20
26
  /**
21
27
  * Extracts parents from an ObjectSchema
@@ -68,7 +74,7 @@ export function getTypeForSchema(
68
74
  ): TypeDetails {
69
75
  let typeName: string = "";
70
76
  let usedModels: string[] = [];
71
- let defaultValue: string = "";
77
+ let defaultValue = undefined;
72
78
  let kind: PropertyKind = PropertyKind.Primitive;
73
79
  switch (schema.type) {
74
80
  case SchemaType.Any:
@@ -194,7 +200,7 @@ export function getTypeForSchema(
194
200
  usedModels,
195
201
  isConstant: schema.type === SchemaType.Constant,
196
202
  nullable: isNullable,
197
- ...(defaultValue && { defaultValue })
203
+ defaultValue
198
204
  };
199
205
  }
200
206
 
@@ -221,3 +227,44 @@ export function getSchemaTypeDocumentation(schema: Schema) {
221
227
  return "";
222
228
  }
223
229
  }
230
+
231
+ export function getSecurityInfoFromModel(security: Security) {
232
+ const { addCredentials } = getAutorestOptions();
233
+ const credentialScopes: Set<string> = new Set<string>();
234
+ let credentialKeyHeaderName: string = "";
235
+ for (const securitySchema of security.schemes) {
236
+ if (securitySchema.type === "OAuth2") {
237
+ (securitySchema as OAuth2SecurityScheme).scopes.forEach(scope => {
238
+ const scopes = scope.split(',');
239
+ for(const scope of scopes) {
240
+ credentialScopes.add(scope);
241
+ }
242
+ });
243
+ } else if (
244
+ credentialKeyHeaderName === "" &&
245
+ securitySchema.type === "Key" &&
246
+ (securitySchema as KeySecurityScheme).in === ParameterLocation.Header
247
+ ) {
248
+ credentialKeyHeaderName = (securitySchema as KeySecurityScheme).name;
249
+ } else if (
250
+ credentialKeyHeaderName !== "" &&
251
+ credentialKeyHeaderName !== (securitySchema as KeySecurityScheme).name &&
252
+ securitySchema.type === "Key" &&
253
+ (securitySchema as KeySecurityScheme).in === ParameterLocation.Header
254
+ ) {
255
+ logger.warning(
256
+ `Set multiple headers for key credential has not been supported yet`
257
+ );
258
+ }
259
+ }
260
+ const scopes: string[] = [];
261
+ credentialScopes.forEach(item => {
262
+ scopes.push(item);
263
+ });
264
+ return {
265
+ addCredentials:
266
+ addCredentials === false ? false : security.authenticationRequired,
267
+ credentialScopes: scopes,
268
+ credentialKeyHeaderName: credentialKeyHeaderName
269
+ };
270
+ }