@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
@@ -0,0 +1,386 @@
1
+ import {
2
+ CodeModel,
3
+ Operation,
4
+ ParameterLocation,
5
+ ImplementationLocation,
6
+ Response
7
+ } from "@autorest/codemodel";
8
+ import { isEqual } from "lodash";
9
+
10
+ import {
11
+ gerOperationSuccessStatus,
12
+ getResponseTypeName
13
+ } from "./operationHelpers";
14
+
15
+ import {
16
+ CallSignatureDeclarationStructure,
17
+ Project,
18
+ SourceFile,
19
+ StructureKind,
20
+ Writers
21
+ } from "ts-morph";
22
+ import * as path from "path";
23
+
24
+ import { getAutorestOptions } from "../autorestSession";
25
+ import { CasingConvention, NameType, normalizeName } from "../utils/nameUtils";
26
+ import { getLanguageMetadata } from "../utils/languageHelpers";
27
+ import {
28
+ buildMethodDefinitions,
29
+ getOperationParameters,
30
+ getPathParamDefinitions
31
+ } from "./helpers/operationHelpers";
32
+ import {
33
+ generateMethodShortcuts,
34
+ REST_CLIENT_RESERVED
35
+ } from "./generateMethodShortcuts";
36
+ import { Methods, PathParameter, Paths, ResponseTypes } from "./interfaces";
37
+ import { isLongRunningOperation } from "./helpers/hasPollingOperations";
38
+ export let pathDictionary: Paths = {};
39
+
40
+ export function generatePathFirstClient(model: CodeModel, project: Project) {
41
+ const name = normalizeName(
42
+ getLanguageMetadata(model.language).name,
43
+ NameType.File
44
+ );
45
+ const { srcPath } = getAutorestOptions();
46
+ const clientFile = project.createSourceFile(
47
+ path.join(srcPath, `clientDefinitions.ts`),
48
+ undefined,
49
+ {
50
+ overwrite: true
51
+ }
52
+ );
53
+
54
+ // Get all paths
55
+ const importedParameters = new Set<string>();
56
+ const importedResponses = new Set<string>();
57
+ const clientImports = new Set<string>();
58
+ pathDictionary = {};
59
+ for (const operationGroup of model.operationGroups) {
60
+ for (const operation of operationGroup.operations) {
61
+ const operationName = getLanguageMetadata(operation.language).name;
62
+ const operationDescription = getLanguageMetadata(operation.language)
63
+ .description;
64
+ const pathParameters: PathParameter[] =
65
+ operation.parameters
66
+ ?.filter(p => p.protocol.http?.in === ParameterLocation.Path)
67
+ .map(p => {
68
+ const languageMetadata = getLanguageMetadata(p.language);
69
+ return {
70
+ name: languageMetadata.serializedName || languageMetadata.name,
71
+ schema: p.schema,
72
+ description: languageMetadata.description
73
+ };
74
+ }) || [];
75
+ const path: string = operation.requests?.[0].protocol.http?.path;
76
+ pathParameters.sort(function compare(a: PathParameter, b: PathParameter) {
77
+ return path.indexOf(a.name) - path.indexOf(b.name);
78
+ });
79
+
80
+ for (const request of operation.requests || []) {
81
+ const path: string = (request.protocol.http?.path as string) || "";
82
+ const method = request.protocol.http?.method;
83
+
84
+ if (path && method) {
85
+ if (!pathDictionary[path]) {
86
+ pathDictionary[path] = {
87
+ pathParameters,
88
+ methods: {},
89
+ name: operationName,
90
+ annotations: {
91
+ isLongRunning: isLongRunningOperation(operation)
92
+ }
93
+ };
94
+ }
95
+ const hasOptionalOptions = !hasRequiredOptions(operation);
96
+
97
+ const newMethod = {
98
+ description: operationDescription,
99
+ optionsName: getOperationOptionsType(operation, importedParameters),
100
+ hasOptionalOptions,
101
+ returnType: `StreamableMethod<${getOperationReturnType(
102
+ operation,
103
+ importedResponses,
104
+ clientImports
105
+ )}>`,
106
+ responseTypes: getResponseTypes(operation),
107
+ successStatus: gerOperationSuccessStatus(operation)
108
+ };
109
+
110
+ if (
111
+ pathDictionary[path].methods[`${method}`] &&
112
+ !pathDictionary[path].methods[`${method}`].some(m =>
113
+ isEqual(m, newMethod)
114
+ )
115
+ ) {
116
+ pathDictionary[path].methods[`${method}`].push(newMethod);
117
+ } else {
118
+ pathDictionary[path].methods[`${method}`] = [newMethod];
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
124
+
125
+ writeShortcutInterface(model, pathDictionary, clientFile);
126
+ clientFile.addInterface({
127
+ name: "Routes",
128
+ isExported: true,
129
+ callSignatures: getPathFirstRoutesInterfaceDefinition(
130
+ pathDictionary,
131
+ clientFile
132
+ )
133
+ });
134
+
135
+ const clientName = getLanguageMetadata(model.language).name;
136
+
137
+ const clientInterfaceName = clientName.endsWith("Client")
138
+ ? `${clientName}`
139
+ : `${clientName}Client`;
140
+
141
+ const { rlcShortcut } = getAutorestOptions();
142
+
143
+ let shortcutElements = !rlcShortcut
144
+ ? []
145
+ : model.operationGroups.map(og => {
146
+ const groupName = og.language.default.name;
147
+ const name = normalizeName(
148
+ groupName,
149
+ NameType.OperationGroup,
150
+ true,
151
+ REST_CLIENT_RESERVED,
152
+ CasingConvention.Camel
153
+ );
154
+ const interfaceName = normalizeName(
155
+ `${name}Operations`,
156
+ NameType.Interface,
157
+ true,
158
+ REST_CLIENT_RESERVED
159
+ );
160
+ return { name, type: interfaceName };
161
+ });
162
+
163
+ // There may be operations without an operation group, those shortcut
164
+ // methods need to be handled differently.
165
+ const shortcutsInOperationGroup = shortcutElements.filter(s => s.name);
166
+
167
+ clientFile.addTypeAlias({
168
+ isExported: true,
169
+ name: clientInterfaceName,
170
+ type: Writers.intersectionType(
171
+ "Client",
172
+ Writers.objectType({
173
+ properties: [
174
+ { name: "path", type: "Routes" },
175
+ ...shortcutsInOperationGroup
176
+ ]
177
+ }),
178
+ // If the length of shortcutMethods in operation group and all shortcutMethods
179
+ // is the same, then we don't have any operations at the client level
180
+ // Otherwise we need to make the client interface name an union with the
181
+ // definition of all client level shortcut methods
182
+ ...(shortcutsInOperationGroup.length !== shortcutElements.length
183
+ ? [`ClientOperations`]
184
+ : [])
185
+ )
186
+ });
187
+
188
+ if (importedParameters.size) {
189
+ clientFile.addImportDeclaration({
190
+ namedImports: [...importedParameters],
191
+ moduleSpecifier: "./parameters"
192
+ });
193
+ }
194
+
195
+ if (importedResponses.size) {
196
+ clientFile.addImportDeclaration({
197
+ namedImports: [...importedResponses],
198
+ moduleSpecifier: "./responses"
199
+ });
200
+ }
201
+
202
+ clientImports.add("Client");
203
+ clientImports.add("StreamableMethod");
204
+ clientFile.addImportDeclarations([
205
+ {
206
+ namedImports: [...clientImports],
207
+ moduleSpecifier: "@azure-rest/core-client"
208
+ }
209
+ ]);
210
+ }
211
+
212
+ function writeShortcutInterface(
213
+ model: CodeModel,
214
+ pathDictionary: Paths,
215
+ clientFile: SourceFile
216
+ ) {
217
+ const { rlcShortcut } = getAutorestOptions();
218
+ if (!rlcShortcut) {
219
+ return;
220
+ }
221
+
222
+ // Create a map of Operation group descriptions
223
+ const descriptions = model.operationGroups.reduce((map, current) => {
224
+ const { name, description } = current.language.default;
225
+ map.set(name, description);
226
+
227
+ return map;
228
+ }, new Map<string, string>());
229
+
230
+ const shortcuts = generateMethodShortcuts(model, pathDictionary);
231
+
232
+ for (const group of Object.keys(shortcuts)) {
233
+ const groupName =
234
+ normalizeName(group, NameType.Interface, true, REST_CLIENT_RESERVED) ||
235
+ "Client";
236
+ const groupOperations = shortcuts[group];
237
+
238
+ clientFile.addInterface({
239
+ docs: [
240
+ descriptions.get(group) ||
241
+ `Contains operations for ${groupName} operations`
242
+ ],
243
+ name: `${groupName}Operations`,
244
+ isExported: true,
245
+ methods: groupOperations
246
+ });
247
+ }
248
+ }
249
+
250
+ function hasRequiredOptions(operation: Operation) {
251
+ return getOperationParameters(operation)
252
+ .filter(p => p.implementation === ImplementationLocation.Method)
253
+ .filter(p => ["query", "body", "headers"].includes(p.protocol.http?.in))
254
+ .some(p => p.required);
255
+ }
256
+
257
+ function getOperationOptionsType(
258
+ operation: Operation,
259
+ importedParameters = new Set<string>()
260
+ ) {
261
+ const paramsName = `${
262
+ getLanguageMetadata(operation.language).name
263
+ }Parameters`;
264
+ importedParameters.add(paramsName);
265
+
266
+ return paramsName;
267
+ }
268
+
269
+ function getOperationReturnType(
270
+ operation: Operation,
271
+ importedResponses = new Set<string>(),
272
+ coreClientImports = new Set<string>()
273
+ ) {
274
+ let returnType: string = "HttpResponse";
275
+ if (
276
+ (operation.responses && operation.responses.length) ||
277
+ (operation.exceptions && operation.exceptions.length)
278
+ ) {
279
+ const responses = [
280
+ ...(operation.responses ?? []),
281
+ ...(operation.exceptions ?? [])
282
+ ];
283
+ const responseTypes = responses
284
+ .filter(
285
+ r => r.protocol.http?.statusCodes && r.protocol.http?.statusCodes.length
286
+ )
287
+ .map(r => {
288
+ const responseName = getResponseTypeName(operation, r);
289
+ importedResponses.add(responseName);
290
+ return responseName;
291
+ });
292
+
293
+ if (responseTypes.length) {
294
+ if (
295
+ responseTypes.indexOf("HttpResponse") > -1 &&
296
+ !coreClientImports.has(returnType)
297
+ ) {
298
+ coreClientImports.add("HttpResponse");
299
+ }
300
+ returnType = responseTypes.join(" | ");
301
+ }
302
+ }
303
+ if (returnType === "HttpResponse" && !coreClientImports.has(returnType)) {
304
+ coreClientImports.add(returnType);
305
+ }
306
+ return returnType;
307
+ }
308
+
309
+ function getPathFirstRoutesInterfaceDefinition(
310
+ paths: Paths,
311
+ sourcefile: SourceFile
312
+ ): CallSignatureDeclarationStructure[] {
313
+ const signatures: CallSignatureDeclarationStructure[] = [];
314
+ for (const key of Object.keys(paths)) {
315
+ generatePathFirstRouteMethodsDefinition(
316
+ paths[key].name,
317
+ paths[key].methods,
318
+ sourcefile
319
+ );
320
+ const pathParams = paths[key].pathParameters;
321
+ signatures.push({
322
+ docs: [
323
+ `Resource for '${key
324
+ .replace(/}/g, "\\}")
325
+ .replace(
326
+ /{/g,
327
+ "\\{"
328
+ )}' has methods for the following verbs: ${Object.keys(
329
+ paths[key].methods
330
+ ).join(", ")}`
331
+ ],
332
+ parameters: [
333
+ { name: "path", type: `"${key}"` },
334
+ ...getPathParamDefinitions(pathParams)
335
+ ],
336
+ returnType: paths[key].name,
337
+ kind: StructureKind.CallSignature
338
+ });
339
+ }
340
+ return signatures;
341
+ }
342
+
343
+ function generatePathFirstRouteMethodsDefinition(
344
+ operationName: string,
345
+ methods: Methods,
346
+ file: SourceFile
347
+ ): void {
348
+ const methodDefinitions = buildMethodDefinitions(methods);
349
+
350
+ file.addInterface({
351
+ methods: methodDefinitions,
352
+ name: operationName,
353
+ isExported: true
354
+ });
355
+ }
356
+
357
+ /**
358
+ * This function computes all the response types error and success
359
+ * an operation can end up returning.
360
+ */
361
+ function getResponseTypes(operation: Operation): ResponseTypes {
362
+ let returnTypes: ResponseTypes = {
363
+ error: [],
364
+ success: []
365
+ };
366
+ if (
367
+ (operation.responses && operation.responses.length) ||
368
+ (operation.exceptions && operation.exceptions.length)
369
+ ) {
370
+ function getResponseType(responses: Response[]) {
371
+ return responses
372
+ .filter(
373
+ r =>
374
+ r.protocol.http?.statusCodes && r.protocol.http?.statusCodes.length
375
+ )
376
+ .map(r => {
377
+ const responseName = getResponseTypeName(operation, r);
378
+ return responseName;
379
+ });
380
+ }
381
+
382
+ returnTypes.error = getResponseType(operation.exceptions ?? []);
383
+ returnTypes.success = getResponseType(operation.responses ?? []);
384
+ }
385
+ return returnTypes;
386
+ }
@@ -0,0 +1,224 @@
1
+ import { getAutorestOptions } from "../autorestSession";
2
+ import * as path from "path";
3
+ import {
4
+ FunctionDeclarationOverloadStructure,
5
+ OptionalKind,
6
+ Project,
7
+ VariableDeclarationKind
8
+ } from "ts-morph";
9
+ import { pathDictionary } from "./generateClientDefinition";
10
+
11
+ /**
12
+ * Generates a helper function `isUnexpected` which takes a response
13
+ * and checks if the status code matches any of the success status codes
14
+ * defined in the API spec. This aids with type narrowing down.
15
+ */
16
+ export function generateIsUnexpectedHelper(project: Project) {
17
+ const { srcPath } = getAutorestOptions();
18
+ const isErrorHelper = project.createSourceFile(
19
+ path.join(srcPath, `isUnexpected.ts`),
20
+ undefined,
21
+ {
22
+ overwrite: true
23
+ }
24
+ );
25
+
26
+ let map: Record<string, string[]> = {};
27
+ let allResponseTypes: Set<string> = new Set();
28
+ let allErrorTypes: Set<string> = new Set();
29
+ let overloads: OptionalKind<FunctionDeclarationOverloadStructure>[] = [];
30
+
31
+ for (const [path, details] of Object.entries(pathDictionary)) {
32
+ for (const [methodName, methodDetails] of Object.entries(details.methods)) {
33
+ const originalMethod = methodName.toUpperCase();
34
+ const operation = `${originalMethod} ${path}`;
35
+ const success = methodDetails[0].successStatus;
36
+ map = { ...map, ...{ [operation]: success } };
37
+
38
+ // LROs may call the same path but with GET
39
+ // to get the operation status.
40
+ if (details.annotations?.isLongRunning && originalMethod !== "GET") {
41
+ const operation = `GET ${path}`;
42
+ const success = methodDetails[0].successStatus;
43
+ map = { ...map, ...{ [operation]: success } };
44
+ }
45
+
46
+ const successTypes = methodDetails[0].responseTypes.success;
47
+ const errorTypes = methodDetails[0].responseTypes.error;
48
+
49
+ if (!successTypes.length || !errorTypes.length || !errorTypes[0]) {
50
+ continue;
51
+ }
52
+
53
+ successTypes.forEach(t => allResponseTypes.add(t));
54
+ errorTypes.forEach(t => {
55
+ allResponseTypes.add(t);
56
+ allErrorTypes.add(t);
57
+ });
58
+
59
+ overloads.push({
60
+ isExported: true,
61
+ parameters: [
62
+ {
63
+ name: "response",
64
+ type: [...successTypes, ...errorTypes].join(" | ")
65
+ }
66
+ ],
67
+ returnType: `response is ${errorTypes[0]}`
68
+ });
69
+ }
70
+ }
71
+
72
+ isErrorHelper.addImportDeclaration({
73
+ namedImports: [...allResponseTypes],
74
+ moduleSpecifier: "./responses"
75
+ });
76
+
77
+ isErrorHelper.addVariableStatement({
78
+ declarations: [
79
+ {
80
+ name: "responseMap",
81
+ initializer: JSON.stringify(map),
82
+ type: "Record<string, string[]>"
83
+ }
84
+ ],
85
+ declarationKind: VariableDeclarationKind.Const
86
+ });
87
+
88
+ if (allErrorTypes.size) {
89
+ const hasTemplate = hasParametrizedPath();
90
+ isErrorHelper.addFunction({
91
+ overloads,
92
+ isExported: true,
93
+ name: "isUnexpected",
94
+ parameters: [
95
+ {
96
+ name: "response",
97
+ type: [...allResponseTypes].join(" | ")
98
+ }
99
+ ],
100
+ returnType: `response is ${[...allErrorTypes].join(" | ")}`,
101
+ statements: [
102
+ `
103
+ const lroOriginal = response.headers["x-ms-original-url"];
104
+ const url = new URL(lroOriginal ?? response.request.url);
105
+ const method = response.request.method;
106
+ ${
107
+ hasTemplate ? "let" : "const"
108
+ } pathDetails = responseMap[\`\${method} \${url.pathname}\`];
109
+ if (!pathDetails) {`,
110
+ hasTemplate
111
+ ? "pathDetails = geParametrizedPathSuccess(url.pathname);"
112
+ : `return true;`,
113
+ ` }
114
+ return !pathDetails.includes(response.status);
115
+ `
116
+ ]
117
+ });
118
+ if (hasTemplate) {
119
+ isErrorHelper.addFunction({
120
+ isExported: false,
121
+ name: "geParametrizedPathSuccess",
122
+ parameters: [
123
+ {
124
+ name: "path",
125
+ type: "string"
126
+ }
127
+ ],
128
+ returnType: `string[]`,
129
+ statements: [
130
+ `
131
+ const pathParts = path.split("/");
132
+
133
+ // Iterate the responseMap to find a match
134
+ for (const [key, value] of Object.entries(responseMap)) {
135
+ // Extracting the path from the map key which is in format
136
+ // GET /path/foo
137
+ const candidatePath = getPathFromMapKey(key);
138
+ // Get each part of the url path
139
+ const candidateParts = candidatePath.split("/");
140
+
141
+ // If the candidate and actual paths don't match in size
142
+ // we move on to the next candidate path
143
+ if (
144
+ candidateParts.length === pathParts.length &&
145
+ hasParametrizedPath(key)
146
+ ) {
147
+ // track if we have found a match to return the values found.
148
+ let found = true;
149
+ for (let i = 0; i < candidateParts.length; i++) {
150
+ if (
151
+ candidateParts[i].startsWith("{") &&
152
+ candidateParts[i].endsWith("}")
153
+ ) {
154
+ // If the current part of the candidate is a "template" part
155
+ // it is a match with the actual path part on hand
156
+ // skip as the parameterized part can match anything
157
+ continue;
158
+ }
159
+
160
+ // If the candidate part is not a template and
161
+ // the parts don't match mark the candidate as not found
162
+ // to move on with the next candidate path.
163
+ if (candidateParts[i] !== pathParts[i]) {
164
+ found = false;
165
+ break;
166
+ }
167
+ }
168
+
169
+ // We finished evaluating the current candidate parts
170
+ // if all parts matched we return the success values form
171
+ // the path mapping.
172
+ if (found) {
173
+ return value;
174
+ }
175
+ }
176
+ }
177
+
178
+ // No match was found, return an empty array.
179
+ return [];
180
+ `
181
+ ]
182
+ });
183
+
184
+ isErrorHelper.addFunction({
185
+ isExported: false,
186
+ name: "hasParametrizedPath",
187
+ parameters: [
188
+ {
189
+ name: "path",
190
+ type: "string"
191
+ }
192
+ ],
193
+ returnType: `boolean`,
194
+ statements: [`return path.includes("/{");`]
195
+ });
196
+
197
+ isErrorHelper.addFunction({
198
+ isExported: false,
199
+ name: "getPathFromMapKey",
200
+ parameters: [
201
+ {
202
+ name: "mapKey",
203
+ type: "string"
204
+ }
205
+ ],
206
+ returnType: `string`,
207
+ statements: [
208
+ `const pathStart = mapKey.indexOf("/");
209
+ return mapKey.slice(pathStart);`
210
+ ]
211
+ });
212
+ }
213
+ }
214
+ }
215
+
216
+ function hasParametrizedPath(): boolean {
217
+ for (const [path] of Object.entries(pathDictionary)) {
218
+ if (path.includes("/{") && path.includes("}")) {
219
+ return true;
220
+ }
221
+ }
222
+
223
+ return false;
224
+ }