@autorest/typescript 6.0.0-beta.7 → 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 (437) hide show
  1. package/README.md +42 -5
  2. package/dist/{src/generators/static/README.md.hbs → hlcREADME.md.hbs} +41 -5
  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 +18 -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.d.ts.map +1 -1
  24. package/dist/src/generators/LROGenerator.js +5 -13
  25. package/dist/src/generators/LROGenerator.js.map +1 -1
  26. package/dist/src/generators/clientFileGenerator.d.ts.map +1 -1
  27. package/dist/src/generators/clientFileGenerator.js +303 -61
  28. package/dist/src/generators/clientFileGenerator.js.map +1 -1
  29. package/dist/src/generators/indexGenerator.d.ts +1 -1
  30. package/dist/src/generators/indexGenerator.d.ts.map +1 -1
  31. package/dist/src/generators/indexGenerator.js +143 -11
  32. package/dist/src/generators/indexGenerator.js.map +1 -1
  33. package/dist/src/generators/mappersGenerator.d.ts.map +1 -1
  34. package/dist/src/generators/mappersGenerator.js +93 -19
  35. package/dist/src/generators/mappersGenerator.js.map +1 -1
  36. package/dist/src/generators/modelsGenerator.d.ts.map +1 -1
  37. package/dist/src/generators/modelsGenerator.js +81 -82
  38. package/dist/src/generators/modelsGenerator.js.map +1 -1
  39. package/dist/src/generators/operationGenerator.d.ts.map +1 -1
  40. package/dist/src/generators/operationGenerator.js +92 -125
  41. package/dist/src/generators/operationGenerator.js.map +1 -1
  42. package/dist/src/generators/operationInterfaceGenerator.js +20 -20
  43. package/dist/src/generators/operationInterfaceGenerator.js.map +1 -1
  44. package/dist/src/generators/parametersGenerator.d.ts.map +1 -1
  45. package/dist/src/generators/parametersGenerator.js +7 -8
  46. package/dist/src/generators/parametersGenerator.js.map +1 -1
  47. package/dist/src/generators/samples/hlcSampleGenerator.d.ts +13 -0
  48. package/dist/src/generators/samples/hlcSampleGenerator.d.ts.map +1 -0
  49. package/dist/src/generators/samples/hlcSampleGenerator.js +43 -0
  50. package/dist/src/generators/samples/hlcSampleGenerator.js.map +1 -0
  51. package/dist/src/generators/samples/hlcSamples.ts.hbs +49 -0
  52. package/dist/src/generators/samples/rlcSampleGenerator.d.ts +4 -0
  53. package/dist/src/generators/samples/rlcSampleGenerator.d.ts.map +1 -0
  54. package/dist/src/generators/samples/rlcSampleGenerator.js +64 -0
  55. package/dist/src/generators/samples/rlcSampleGenerator.js.map +1 -0
  56. package/dist/src/generators/samples/rlcSamples.ts.hbs +28 -0
  57. package/dist/src/generators/samples/sampleEnv.hbs +4 -0
  58. package/dist/src/generators/samples/sampleEnvGenerator.d.ts +3 -0
  59. package/dist/src/generators/samples/sampleEnvGenerator.d.ts.map +1 -0
  60. package/dist/src/generators/samples/sampleEnvGenerator.js +17 -0
  61. package/dist/src/generators/samples/sampleEnvGenerator.js.map +1 -0
  62. package/dist/src/generators/static/apiExtractorConfig.js +3 -3
  63. package/dist/src/generators/static/apiExtractorConfig.js.map +1 -1
  64. package/dist/src/generators/static/esLintConfigGenerator.d.ts +3 -0
  65. package/dist/src/generators/static/esLintConfigGenerator.d.ts.map +1 -0
  66. package/dist/src/generators/static/esLintConfigGenerator.js +26 -0
  67. package/dist/src/generators/static/esLintConfigGenerator.js.map +1 -0
  68. package/{src/generators/static/README.md.hbs → dist/src/generators/static/hlcREADME.md.hbs} +41 -5
  69. package/dist/src/generators/static/karma.conf.js.hbs +126 -0
  70. package/dist/src/generators/static/karmaConfigFileGenerator.d.ts +3 -0
  71. package/dist/src/generators/static/karmaConfigFileGenerator.d.ts.map +1 -0
  72. package/dist/src/generators/static/karmaConfigFileGenerator.js +23 -0
  73. package/dist/src/generators/static/karmaConfigFileGenerator.js.map +1 -0
  74. package/dist/src/generators/static/licenseFileGenerator.js +1 -1
  75. package/dist/src/generators/static/licenseFileGenerator.js.map +1 -1
  76. package/dist/src/generators/static/packageFileGenerator.d.ts.map +1 -1
  77. package/dist/src/generators/static/packageFileGenerator.js +267 -79
  78. package/dist/src/generators/static/packageFileGenerator.js.map +1 -1
  79. package/dist/src/generators/static/readmeFileGenerator.d.ts +2 -2
  80. package/dist/src/generators/static/readmeFileGenerator.d.ts.map +1 -1
  81. package/dist/src/generators/static/readmeFileGenerator.js +54 -26
  82. package/dist/src/generators/static/readmeFileGenerator.js.map +1 -1
  83. package/dist/src/generators/static/rlcREADME.md.hbs +71 -0
  84. package/dist/src/generators/static/rollupConfigFileGenerator.d.ts.map +1 -1
  85. package/dist/src/generators/static/rollupConfigFileGenerator.js +12 -71
  86. package/dist/src/generators/static/rollupConfigFileGenerator.js.map +1 -1
  87. package/dist/src/generators/static/tsConfigFileGenerator.d.ts.map +1 -1
  88. package/dist/src/generators/static/tsConfigFileGenerator.js +47 -20
  89. package/dist/src/generators/static/tsConfigFileGenerator.js.map +1 -1
  90. package/dist/src/generators/test/envBrowserFileGenerator.d.ts +3 -0
  91. package/dist/src/generators/test/envBrowserFileGenerator.d.ts.map +1 -0
  92. package/dist/src/generators/test/envBrowserFileGenerator.js +15 -0
  93. package/dist/src/generators/test/envBrowserFileGenerator.js.map +1 -0
  94. package/dist/src/generators/test/envFileGenerator.d.ts +3 -0
  95. package/dist/src/generators/test/envFileGenerator.d.ts.map +1 -0
  96. package/dist/src/generators/test/envFileGenerator.js +23 -0
  97. package/dist/src/generators/test/envFileGenerator.js.map +1 -0
  98. package/dist/src/generators/test/recordedClientFileGenerator.d.ts +3 -0
  99. package/dist/src/generators/test/recordedClientFileGenerator.d.ts.map +1 -0
  100. package/dist/src/generators/test/recordedClientFileGenerator.js +23 -0
  101. package/dist/src/generators/test/recordedClientFileGenerator.js.map +1 -0
  102. package/dist/src/generators/test/rlcEnv.ts.hbs +3 -0
  103. package/dist/src/generators/test/rlcRecordedClient.ts.hbs +26 -0
  104. package/dist/src/generators/test/rlcSampleTest.spec.ts.hbs +20 -0
  105. package/dist/src/generators/test/sampleTest.ts.hbs +32 -0
  106. package/dist/src/generators/test/sampleTestGenerator.d.ts +3 -0
  107. package/dist/src/generators/test/sampleTestGenerator.d.ts.map +1 -0
  108. package/dist/src/generators/test/sampleTestGenerator.js +34 -0
  109. package/dist/src/generators/test/sampleTestGenerator.js.map +1 -0
  110. package/dist/src/generators/tracingFileGenerator.d.ts.map +1 -1
  111. package/dist/src/generators/tracingFileGenerator.js +7 -21
  112. package/dist/src/generators/tracingFileGenerator.js.map +1 -1
  113. package/dist/src/generators/utils/docsUtils.js +2 -2
  114. package/dist/src/generators/utils/docsUtils.js.map +1 -1
  115. package/dist/src/generators/utils/operationsUtils.js +1 -1
  116. package/dist/src/generators/utils/operationsUtils.js.map +1 -1
  117. package/dist/src/generators/utils/pagingOperations.d.ts +5 -0
  118. package/dist/src/generators/utils/pagingOperations.d.ts.map +1 -1
  119. package/dist/src/generators/utils/pagingOperations.js +15 -15
  120. package/dist/src/generators/utils/pagingOperations.js.map +1 -1
  121. package/dist/src/generators/utils/parameterUtils.js +9 -9
  122. package/dist/src/generators/utils/parameterUtils.js.map +1 -1
  123. package/dist/src/generators/utils/responseTypeUtils.js +2 -2
  124. package/dist/src/generators/utils/responseTypeUtils.js.map +1 -1
  125. package/dist/src/generators/utils/tracingUtils.d.ts.map +1 -1
  126. package/dist/src/generators/utils/tracingUtils.js +2 -6
  127. package/dist/src/generators/utils/tracingUtils.js.map +1 -1
  128. package/dist/src/lroImpl.d.ts +16 -0
  129. package/dist/src/lroImpl.d.ts.map +1 -0
  130. package/dist/src/lroImpl.js +45 -0
  131. package/dist/src/lroImpl.js.map +1 -0
  132. package/dist/src/main.d.ts +2 -2
  133. package/dist/src/main.d.ts.map +1 -1
  134. package/dist/src/main.js +8 -8
  135. package/dist/src/main.js.map +1 -1
  136. package/dist/src/models/clientDetails.d.ts +10 -1
  137. package/dist/src/models/clientDetails.d.ts.map +1 -1
  138. package/dist/src/models/modelDetails.d.ts +2 -2
  139. package/dist/src/models/modelDetails.d.ts.map +1 -1
  140. package/dist/src/models/operationDetails.d.ts +1 -0
  141. package/dist/src/models/operationDetails.d.ts.map +1 -1
  142. package/dist/src/models/sampleDetails.d.ts +22 -0
  143. package/dist/src/models/sampleDetails.d.ts.map +1 -0
  144. package/dist/src/models/sampleDetails.js +3 -0
  145. package/dist/src/models/sampleDetails.js.map +1 -0
  146. package/dist/src/restLevelClient/generateClient.d.ts +1 -1
  147. package/dist/src/restLevelClient/generateClient.d.ts.map +1 -1
  148. package/dist/src/restLevelClient/generateClient.js +108 -167
  149. package/dist/src/restLevelClient/generateClient.js.map +1 -1
  150. package/dist/src/restLevelClient/generateClientDefinition.d.ts +6 -0
  151. package/dist/src/restLevelClient/generateClientDefinition.d.ts.map +1 -0
  152. package/dist/src/restLevelClient/generateClientDefinition.js +261 -0
  153. package/dist/src/restLevelClient/generateClientDefinition.js.map +1 -0
  154. package/dist/src/restLevelClient/generateIsUnexpectedHelper.d.ts +8 -0
  155. package/dist/src/restLevelClient/generateIsUnexpectedHelper.d.ts.map +1 -0
  156. package/dist/src/restLevelClient/generateIsUnexpectedHelper.js +204 -0
  157. package/dist/src/restLevelClient/generateIsUnexpectedHelper.js.map +1 -0
  158. package/dist/src/restLevelClient/generateMethodShortcuts.d.ts +8 -0
  159. package/dist/src/restLevelClient/generateMethodShortcuts.d.ts.map +1 -0
  160. package/dist/src/restLevelClient/generateMethodShortcuts.js +70 -0
  161. package/dist/src/restLevelClient/generateMethodShortcuts.js.map +1 -0
  162. package/dist/src/restLevelClient/generateObjectTypes.d.ts +3 -3
  163. package/dist/src/restLevelClient/generateObjectTypes.d.ts.map +1 -1
  164. package/dist/src/restLevelClient/generateObjectTypes.js +43 -31
  165. package/dist/src/restLevelClient/generateObjectTypes.js.map +1 -1
  166. package/dist/src/restLevelClient/generatePagingHelper.d.ts +3 -0
  167. package/dist/src/restLevelClient/generatePagingHelper.d.ts.map +1 -0
  168. package/dist/src/restLevelClient/generatePagingHelper.js +54 -0
  169. package/dist/src/restLevelClient/generatePagingHelper.js.map +1 -0
  170. package/dist/src/restLevelClient/generateParameterTypes.d.ts.map +1 -1
  171. package/dist/src/restLevelClient/generateParameterTypes.js +247 -43
  172. package/dist/src/restLevelClient/generateParameterTypes.js.map +1 -1
  173. package/dist/src/restLevelClient/generatePollingHelper.d.ts +3 -0
  174. package/dist/src/restLevelClient/generatePollingHelper.d.ts.map +1 -0
  175. package/dist/src/restLevelClient/generatePollingHelper.js +20 -0
  176. package/dist/src/restLevelClient/generatePollingHelper.js.map +1 -0
  177. package/dist/src/restLevelClient/generateResponseTypes.d.ts.map +1 -1
  178. package/dist/src/restLevelClient/generateResponseTypes.js +45 -29
  179. package/dist/src/restLevelClient/generateResponseTypes.js.map +1 -1
  180. package/dist/src/restLevelClient/generateRestLevel.d.ts.map +1 -1
  181. package/dist/src/restLevelClient/generateRestLevel.js +64 -15
  182. package/dist/src/restLevelClient/generateRestLevel.js.map +1 -1
  183. package/dist/src/restLevelClient/generateSchemaTypes.d.ts.map +1 -1
  184. package/dist/src/restLevelClient/generateSchemaTypes.js +29 -7
  185. package/dist/src/restLevelClient/generateSchemaTypes.js.map +1 -1
  186. package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts +4 -0
  187. package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts.map +1 -0
  188. package/dist/src/restLevelClient/generateTopLevelIndexFile.js +37 -0
  189. package/dist/src/restLevelClient/generateTopLevelIndexFile.js.map +1 -0
  190. package/dist/src/restLevelClient/getPropertySignature.d.ts +3 -2
  191. package/dist/src/restLevelClient/getPropertySignature.d.ts.map +1 -1
  192. package/dist/src/restLevelClient/getPropertySignature.js +23 -7
  193. package/dist/src/restLevelClient/getPropertySignature.js.map +1 -1
  194. package/dist/src/restLevelClient/helpers/hasPollingOperations.d.ts +4 -0
  195. package/dist/src/restLevelClient/helpers/hasPollingOperations.d.ts.map +1 -0
  196. package/dist/src/restLevelClient/helpers/hasPollingOperations.js +12 -0
  197. package/dist/src/restLevelClient/helpers/hasPollingOperations.js.map +1 -0
  198. package/dist/src/restLevelClient/helpers/modelHelpers.d.ts +4 -0
  199. package/dist/src/restLevelClient/helpers/modelHelpers.d.ts.map +1 -0
  200. package/dist/src/restLevelClient/helpers/modelHelpers.js +19 -0
  201. package/dist/src/restLevelClient/helpers/modelHelpers.js.map +1 -0
  202. package/dist/src/restLevelClient/helpers/operationHelpers.d.ts +10 -0
  203. package/dist/src/restLevelClient/helpers/operationHelpers.d.ts.map +1 -0
  204. package/dist/src/restLevelClient/helpers/operationHelpers.js +64 -0
  205. package/dist/src/restLevelClient/helpers/operationHelpers.js.map +1 -0
  206. package/dist/src/restLevelClient/interfaces.d.ts +33 -0
  207. package/dist/src/restLevelClient/interfaces.d.ts.map +1 -0
  208. package/dist/src/restLevelClient/interfaces.js +3 -0
  209. package/dist/src/restLevelClient/interfaces.js.map +1 -0
  210. package/dist/src/restLevelClient/mutateCodeModel.js +2 -2
  211. package/dist/src/restLevelClient/mutateCodeModel.js.map +1 -1
  212. package/dist/src/restLevelClient/operationHelpers.d.ts +4 -0
  213. package/dist/src/restLevelClient/operationHelpers.d.ts.map +1 -1
  214. package/dist/src/restLevelClient/operationHelpers.js +21 -10
  215. package/dist/src/restLevelClient/operationHelpers.js.map +1 -1
  216. package/dist/src/restLevelClient/paginateHelper.ts.hbs +208 -0
  217. package/dist/src/restLevelClient/pollingHelper.ts.hbs +72 -0
  218. package/dist/src/restLevelClient/samples/generateSamples.d.ts +23 -0
  219. package/dist/src/restLevelClient/samples/generateSamples.d.ts.map +1 -0
  220. package/dist/src/restLevelClient/samples/generateSamples.js +3 -0
  221. package/dist/src/restLevelClient/samples/generateSamples.js.map +1 -0
  222. package/dist/src/restLevelClient/samples/samples.ts.hbs +0 -0
  223. package/dist/src/restLevelClient/schemaHelpers.d.ts +12 -2
  224. package/dist/src/restLevelClient/schemaHelpers.d.ts.map +1 -1
  225. package/dist/src/restLevelClient/schemaHelpers.js +48 -14
  226. package/dist/src/restLevelClient/schemaHelpers.js.map +1 -1
  227. package/dist/src/transforms/extensions.js +10 -10
  228. package/dist/src/transforms/extensions.js.map +1 -1
  229. package/dist/src/transforms/groupTransforms.js +2 -2
  230. package/dist/src/transforms/groupTransforms.js.map +1 -1
  231. package/dist/src/transforms/mapperTransforms.d.ts +1 -1
  232. package/dist/src/transforms/mapperTransforms.d.ts.map +1 -1
  233. package/dist/src/transforms/mapperTransforms.js +30 -27
  234. package/dist/src/transforms/mapperTransforms.js.map +1 -1
  235. package/dist/src/transforms/objectTransforms.d.ts.map +1 -1
  236. package/dist/src/transforms/objectTransforms.js +42 -26
  237. package/dist/src/transforms/objectTransforms.js.map +1 -1
  238. package/dist/src/transforms/operationTransforms.d.ts.map +1 -1
  239. package/dist/src/transforms/operationTransforms.js +29 -26
  240. package/dist/src/transforms/operationTransforms.js.map +1 -1
  241. package/dist/src/transforms/optionsTransforms.js +1 -1
  242. package/dist/src/transforms/optionsTransforms.js.map +1 -1
  243. package/dist/src/transforms/parameterTransforms.d.ts.map +1 -1
  244. package/dist/src/transforms/parameterTransforms.js +43 -27
  245. package/dist/src/transforms/parameterTransforms.js.map +1 -1
  246. package/dist/src/transforms/samplesTransforms.d.ts +7 -0
  247. package/dist/src/transforms/samplesTransforms.d.ts.map +1 -0
  248. package/dist/src/transforms/samplesTransforms.js +293 -0
  249. package/dist/src/transforms/samplesTransforms.js.map +1 -0
  250. package/dist/src/transforms/transforms.d.ts +1 -2
  251. package/dist/src/transforms/transforms.d.ts.map +1 -1
  252. package/dist/src/transforms/transforms.js +26 -24
  253. package/dist/src/transforms/transforms.js.map +1 -1
  254. package/dist/src/transforms/urlTransforms.js +3 -3
  255. package/dist/src/transforms/urlTransforms.js.map +1 -1
  256. package/dist/src/typescriptGenerator.d.ts +2 -2
  257. package/dist/src/typescriptGenerator.d.ts.map +1 -1
  258. package/dist/src/typescriptGenerator.js +46 -40
  259. package/dist/src/typescriptGenerator.js.map +1 -1
  260. package/dist/src/utils/autorestOptions.d.ts +2 -2
  261. package/dist/src/utils/autorestOptions.d.ts.map +1 -1
  262. package/dist/src/utils/autorestOptions.js +148 -61
  263. package/dist/src/utils/autorestOptions.js.map +1 -1
  264. package/dist/src/utils/cloneOperation.js +2 -2
  265. package/dist/src/utils/cloneOperation.js.map +1 -1
  266. package/dist/src/utils/copyFiles.d.ts +2 -0
  267. package/dist/src/utils/copyFiles.d.ts.map +1 -0
  268. package/dist/src/utils/copyFiles.js +33 -0
  269. package/dist/src/utils/copyFiles.js.map +1 -0
  270. package/dist/src/utils/extractHeaders.js +4 -4
  271. package/dist/src/utils/extractHeaders.js.map +1 -1
  272. package/dist/src/utils/extractPaginationDetails.d.ts +5 -1
  273. package/dist/src/utils/extractPaginationDetails.d.ts.map +1 -1
  274. package/dist/src/utils/extractPaginationDetails.js +23 -10
  275. package/dist/src/utils/extractPaginationDetails.js.map +1 -1
  276. package/dist/src/utils/headersToSchema.js +1 -1
  277. package/dist/src/utils/headersToSchema.js.map +1 -1
  278. package/dist/src/utils/logger.js +1 -1
  279. package/dist/src/utils/logger.js.map +1 -1
  280. package/dist/src/utils/nameUtils.d.ts +6 -2
  281. package/dist/src/utils/nameUtils.d.ts.map +1 -1
  282. package/dist/src/utils/nameUtils.js +13 -8
  283. package/dist/src/utils/nameUtils.js.map +1 -1
  284. package/dist/src/utils/schemaHelpers.d.ts +6 -1
  285. package/dist/src/utils/schemaHelpers.d.ts.map +1 -1
  286. package/dist/src/utils/schemaHelpers.js +50 -7
  287. package/dist/src/utils/schemaHelpers.js.map +1 -1
  288. package/dist/src/utils/sortObjectSchemasHierarchically.js +1 -1
  289. package/dist/src/utils/sortObjectSchemasHierarchically.js.map +1 -1
  290. package/dist/src/utils/valueHelpers.d.ts.map +1 -1
  291. package/dist/src/utils/valueHelpers.js +2 -1
  292. package/dist/src/utils/valueHelpers.js.map +1 -1
  293. package/package.json +59 -39
  294. package/src/autorestSession.ts +26 -18
  295. package/src/conflictResolver.ts +61 -0
  296. package/src/generators/LROGenerator.ts +2 -16
  297. package/src/generators/clientFileGenerator.ts +400 -50
  298. package/src/generators/indexGenerator.ts +166 -14
  299. package/src/generators/mappersGenerator.ts +108 -8
  300. package/src/generators/modelsGenerator.ts +101 -98
  301. package/src/generators/operationGenerator.ts +63 -122
  302. package/src/generators/parametersGenerator.ts +2 -3
  303. package/src/generators/samples/hlcSampleGenerator.ts +50 -0
  304. package/src/generators/samples/hlcSamples.ts.hbs +49 -0
  305. package/src/generators/samples/rlcSampleGenerator.ts +72 -0
  306. package/src/generators/samples/rlcSamples.ts.hbs +28 -0
  307. package/src/generators/samples/sampleEnv.hbs +4 -0
  308. package/src/generators/samples/sampleEnvGenerator.ts +14 -0
  309. package/src/generators/static/apiExtractorConfig.ts +3 -3
  310. package/src/generators/static/esLintConfigGenerator.ts +24 -0
  311. package/src/generators/static/hlcREADME.md.hbs +144 -0
  312. package/src/generators/static/karma.conf.js.hbs +126 -0
  313. package/src/generators/static/karmaConfigFileGenerator.ts +20 -0
  314. package/src/generators/static/packageFileGenerator.ts +305 -82
  315. package/src/generators/static/readmeFileGenerator.ts +85 -42
  316. package/src/generators/static/rlcREADME.md.hbs +71 -0
  317. package/src/generators/static/rollupConfigFileGenerator.ts +13 -71
  318. package/src/generators/static/tsConfigFileGenerator.ts +55 -21
  319. package/src/generators/test/envBrowserFileGenerator.ts +14 -0
  320. package/src/generators/test/envFileGenerator.ts +22 -0
  321. package/src/generators/test/recordedClientFileGenerator.ts +22 -0
  322. package/src/generators/test/rlcEnv.ts.hbs +3 -0
  323. package/src/generators/test/rlcRecordedClient.ts.hbs +26 -0
  324. package/src/generators/test/rlcSampleTest.spec.ts.hbs +20 -0
  325. package/src/generators/test/sampleTest.ts.hbs +32 -0
  326. package/src/generators/test/sampleTestGenerator.ts +32 -0
  327. package/src/generators/tracingFileGenerator.ts +6 -24
  328. package/src/generators/utils/pagingOperations.ts +1 -2
  329. package/src/generators/utils/tracingUtils.ts +1 -5
  330. package/src/lroImpl.ts +26 -0
  331. package/src/main.ts +8 -5
  332. package/src/models/clientDetails.ts +11 -1
  333. package/src/models/modelDetails.ts +2 -2
  334. package/src/models/operationDetails.ts +1 -0
  335. package/src/models/sampleDetails.ts +22 -0
  336. package/src/restLevelClient/generateClient.ts +134 -244
  337. package/src/restLevelClient/generateClientDefinition.ts +386 -0
  338. package/src/restLevelClient/generateIsUnexpectedHelper.ts +224 -0
  339. package/src/restLevelClient/generateMethodShortcuts.ts +121 -0
  340. package/src/restLevelClient/generateObjectTypes.ts +62 -21
  341. package/src/restLevelClient/generatePagingHelper.ts +69 -0
  342. package/src/restLevelClient/generateParameterTypes.ts +377 -55
  343. package/src/restLevelClient/generatePollingHelper.ts +19 -0
  344. package/src/restLevelClient/generateResponseTypes.ts +53 -22
  345. package/src/restLevelClient/generateRestLevel.ts +65 -8
  346. package/src/restLevelClient/generateSchemaTypes.ts +43 -8
  347. package/src/restLevelClient/generateTopLevelIndexFile.ts +37 -0
  348. package/src/restLevelClient/getPropertySignature.ts +31 -6
  349. package/src/restLevelClient/helpers/hasPollingOperations.ts +15 -0
  350. package/src/restLevelClient/helpers/modelHelpers.ts +15 -0
  351. package/src/restLevelClient/helpers/operationHelpers.ts +93 -0
  352. package/src/restLevelClient/interfaces.ts +39 -0
  353. package/src/restLevelClient/operationHelpers.ts +23 -9
  354. package/src/restLevelClient/paginateHelper.ts.hbs +208 -0
  355. package/src/restLevelClient/pollingHelper.ts.hbs +72 -0
  356. package/src/restLevelClient/samples/generateSamples.ts +23 -0
  357. package/src/restLevelClient/samples/samples.ts.hbs +0 -0
  358. package/src/restLevelClient/schemaHelpers.ts +51 -9
  359. package/src/transforms/mapperTransforms.ts +12 -6
  360. package/src/transforms/objectTransforms.ts +26 -6
  361. package/src/transforms/operationTransforms.ts +6 -1
  362. package/src/transforms/parameterTransforms.ts +26 -7
  363. package/src/transforms/samplesTransforms.ts +349 -0
  364. package/src/transforms/transforms.ts +14 -9
  365. package/src/typescriptGenerator.ts +41 -45
  366. package/src/utils/autorestOptions.ts +203 -86
  367. package/src/utils/copyFiles.ts +36 -0
  368. package/src/utils/extractPaginationDetails.ts +19 -1
  369. package/src/utils/nameUtils.ts +18 -9
  370. package/src/utils/schemaHelpers.ts +51 -4
  371. package/src/utils/valueHelpers.ts +1 -0
  372. package/CHANGELOG.md +0 -44
  373. package/dist/src/coreClientLro.d.ts +0 -26
  374. package/dist/src/coreClientLro.d.ts.map +0 -1
  375. package/dist/src/coreClientLro.js +0 -207
  376. package/dist/src/coreClientLro.js.map +0 -1
  377. package/dist/src/coreHttpLro.d.ts +0 -26
  378. package/dist/src/coreHttpLro.d.ts.map +0 -1
  379. package/dist/src/coreHttpLro.js +0 -186
  380. package/dist/src/coreHttpLro.js.map +0 -1
  381. package/dist/src/generators/clientContextFileGenerator.d.ts +0 -5
  382. package/dist/src/generators/clientContextFileGenerator.d.ts.map +0 -1
  383. package/dist/src/generators/clientContextFileGenerator.js +0 -263
  384. package/dist/src/generators/clientContextFileGenerator.js.map +0 -1
  385. package/dist/src/lro/azureAsyncPolling.d.ts +0 -3
  386. package/dist/src/lro/azureAsyncPolling.d.ts.map +0 -1
  387. package/dist/src/lro/azureAsyncPolling.js +0 -71
  388. package/dist/src/lro/azureAsyncPolling.js.map +0 -1
  389. package/dist/src/lro/bodyPolling.d.ts +0 -8
  390. package/dist/src/lro/bodyPolling.d.ts.map +0 -1
  391. package/dist/src/lro/bodyPolling.js +0 -34
  392. package/dist/src/lro/bodyPolling.js.map +0 -1
  393. package/dist/src/lro/index.d.ts +0 -4
  394. package/dist/src/lro/index.d.ts.map +0 -1
  395. package/dist/src/lro/index.js +0 -10
  396. package/dist/src/lro/index.js.map +0 -1
  397. package/dist/src/lro/locationPolling.d.ts +0 -3
  398. package/dist/src/lro/locationPolling.d.ts.map +0 -1
  399. package/dist/src/lro/locationPolling.js +0 -18
  400. package/dist/src/lro/locationPolling.js.map +0 -1
  401. package/dist/src/lro/lroEngine.d.ts +0 -14
  402. package/dist/src/lro/lroEngine.d.ts.map +0 -1
  403. package/dist/src/lro/lroEngine.js +0 -38
  404. package/dist/src/lro/lroEngine.js.map +0 -1
  405. package/dist/src/lro/models.d.ts +0 -138
  406. package/dist/src/lro/models.d.ts.map +0 -1
  407. package/dist/src/lro/models.js +0 -12
  408. package/dist/src/lro/models.js.map +0 -1
  409. package/dist/src/lro/operation.d.ts +0 -36
  410. package/dist/src/lro/operation.d.ts.map +0 -1
  411. package/dist/src/lro/operation.js +0 -89
  412. package/dist/src/lro/operation.js.map +0 -1
  413. package/dist/src/lro/passthrough.d.ts +0 -3
  414. package/dist/src/lro/passthrough.d.ts.map +0 -1
  415. package/dist/src/lro/passthrough.js +0 -14
  416. package/dist/src/lro/passthrough.js.map +0 -1
  417. package/dist/src/lro/requestUtils.d.ts +0 -16
  418. package/dist/src/lro/requestUtils.d.ts.map +0 -1
  419. package/dist/src/lro/requestUtils.js +0 -76
  420. package/dist/src/lro/requestUtils.js.map +0 -1
  421. package/dist/src/lro/stateMachine.d.ts +0 -18
  422. package/dist/src/lro/stateMachine.d.ts.map +0 -1
  423. package/dist/src/lro/stateMachine.js +0 -90
  424. package/dist/src/lro/stateMachine.js.map +0 -1
  425. package/src/coreClientLro.ts +0 -315
  426. package/src/coreHttpLro.ts +0 -268
  427. package/src/generators/clientContextFileGenerator.ts +0 -405
  428. package/src/lro/azureAsyncPolling.ts +0 -82
  429. package/src/lro/bodyPolling.ts +0 -34
  430. package/src/lro/index.ts +0 -18
  431. package/src/lro/locationPolling.ts +0 -20
  432. package/src/lro/lroEngine.ts +0 -53
  433. package/src/lro/models.ts +0 -165
  434. package/src/lro/operation.ts +0 -112
  435. package/src/lro/passthrough.ts +0 -15
  436. package/src/lro/requestUtils.ts +0 -94
  437. package/src/lro/stateMachine.ts +0 -108
@@ -1,12 +1,26 @@
1
- import { CodeModel, Operation, Parameter } from "@autorest/codemodel";
1
+ import {
2
+ CodeModel,
3
+ Operation,
4
+ Parameter,
5
+ SchemaContext,
6
+ Request as OperationRequest,
7
+ ParameterLocation
8
+ } from "@autorest/codemodel";
2
9
  import {
3
10
  InterfaceDeclarationStructure,
4
11
  Project,
12
+ PropertySignatureStructure,
13
+ SourceFile,
5
14
  StructureKind
6
15
  } from "ts-morph";
16
+ import * as path from 'path';
7
17
  import { getLanguageMetadata } from "../utils/languageHelpers";
8
18
  import { NameType, normalizeName } from "../utils/nameUtils";
9
19
  import { getPropertySignature } from "./getPropertySignature";
20
+ import { primitiveSchemaToType } from "./schemaHelpers";
21
+ import { getOperationParameters } from "./helpers/operationHelpers";
22
+ import { hasInputModels } from "./helpers/modelHelpers";
23
+ import { getAutorestOptions } from "../autorestSession";
10
24
 
11
25
  /**
12
26
  * Generates the interfaces describing each operation parameters
@@ -15,8 +29,9 @@ export function generateParameterInterfaces(
15
29
  model: CodeModel,
16
30
  project: Project
17
31
  ) {
32
+ const { srcPath } = getAutorestOptions();
18
33
  const parametersFile = project.createSourceFile(
19
- `src/parameters.ts`,
34
+ path.join(srcPath, `parameters.ts`),
20
35
  undefined,
21
36
  {
22
37
  overwrite: true
@@ -28,42 +43,118 @@ export function generateParameterInterfaces(
28
43
  // Tracks the generated parameter types
29
44
 
30
45
  const operations = getAllOperations(model);
46
+ let hasHeaders = false;
31
47
 
32
48
  for (const operation of operations) {
33
- const internalReferences = new Set<string>();
34
49
  const operationName = normalizeName(
35
50
  getLanguageMetadata(operation.language).name,
36
51
  NameType.Interface
37
52
  );
38
- const parameterInterfaceName = `${operationName}Parameters`;
39
- const parameters = getOperationParameters(operation);
40
- const queryParameterDefinitions = buildQueryParameterDefinition(
41
- operationName,
42
- parameters,
43
- importedModels,
44
- internalReferences
45
- );
46
53
 
47
- const bodyParameterDefinition = buildBodyParametersDefinition(
48
- operationName,
49
- parameters,
50
- importedModels,
51
- internalReferences
52
- );
54
+ const requestCount = operation?.requests?.length ?? 0;
55
+ const topParamName = `${operationName}Parameters`;
56
+ const subParamNames: string[] = [];
53
57
 
54
- // Add interfaces for body and query parameters
55
- parametersFile.addInterfaces([
56
- ...(bodyParameterDefinition ? [bodyParameterDefinition] : []),
57
- ...(queryParameterDefinitions ?? [])
58
- ]);
58
+ // We need to loop the requests. An operation with multiple requests means that
59
+ // the operation can get different values for content-type and each value may
60
+ // have a different type associated to it.
61
+ for (let i = 0; i < requestCount; i++) {
62
+ const internalReferences = new Set<string>();
63
+ // In case we have more than one request to model we need to add a suffix to differentiate
64
+ const nameSuffix = i > 0 ? `${i}` : "";
65
+ const parameterInterfaceName =
66
+ requestCount > 1
67
+ ? `${operationName}RequestParameters${nameSuffix}`
68
+ : topParamName;
69
+ const parameters = getOperationParameters(operation, i);
70
+ const queryParameterDefinitions = buildQueryParameterDefinition(
71
+ operationName,
72
+ parameters,
73
+ [SchemaContext.Input],
74
+ importedModels,
75
+ internalReferences,
76
+ i
77
+ );
78
+
79
+ const request = operation.requests ? operation.requests[i] : undefined;
80
+
81
+ const pathParameterDefinitions = buildPathParameterDefinitions(
82
+ operationName,
83
+ parameters,
84
+ model,
85
+ parametersFile,
86
+ internalReferences,
87
+ i
88
+ )
89
+
90
+ const headerParameterDefinitions = buildHeaderParameterDefinitions(
91
+ operationName,
92
+ parameters,
93
+ parametersFile,
94
+ internalReferences,
95
+ i
96
+ );
97
+
98
+ const contentTypeParameterDefinition = buildContentTypeParametersDefinition(
99
+ operationName,
100
+ request,
101
+ internalReferences,
102
+ i
103
+ );
104
+
105
+ const bodyParameterDefinition = buildBodyParametersDefinition(
106
+ operationName,
107
+ parameters,
108
+ [SchemaContext.Input],
109
+ importedModels,
110
+ internalReferences,
111
+ i
112
+ );
113
+
114
+ // Add interfaces for body and query parameters
115
+ parametersFile.addInterfaces([
116
+ ...(bodyParameterDefinition ?? []),
117
+ ...(queryParameterDefinitions ?? []),
118
+ ...(pathParameterDefinitions ? [pathParameterDefinitions]: []),
119
+ ...(headerParameterDefinitions ? [headerParameterDefinitions] : []),
120
+ ...(contentTypeParameterDefinition
121
+ ? [contentTypeParameterDefinition]
122
+ : [])
123
+ ]);
124
+
125
+ // Add Operation parameters type alias which is composed of the types we generated above
126
+ // plus the common type RequestParameters
127
+ parametersFile.addTypeAlias({
128
+ name: parameterInterfaceName,
129
+ isExported: true,
130
+ type: [...internalReferences, "RequestParameters"].join(" & ")
131
+ });
132
+
133
+ subParamNames.push(parameterInterfaceName);
134
+
135
+ if (headerParameterDefinitions !== undefined) {
136
+ hasHeaders = true;
137
+ }
138
+ }
59
139
 
60
140
  // Add Operation parameters type alias which is composed of the types we generated above
61
141
  // plus the common type RequestParameters
62
- parametersFile.addTypeAlias({
63
- name: parameterInterfaceName,
64
- isExported: true,
65
- type: [...internalReferences, "RequestParameters"].join(" & ")
66
- });
142
+ if (requestCount > 1) {
143
+ parametersFile.addTypeAlias({
144
+ name: topParamName,
145
+ isExported: true,
146
+ type: [...subParamNames].join(" | ")
147
+ });
148
+ }
149
+ }
150
+
151
+ if (hasHeaders) {
152
+ parametersFile.addImportDeclarations([
153
+ {
154
+ namedImports: ["RawHttpHeadersInput"],
155
+ moduleSpecifier: "@azure/core-rest-pipeline"
156
+ }
157
+ ]);
67
158
  }
68
159
 
69
160
  parametersFile.addImportDeclarations([
@@ -73,43 +164,280 @@ export function generateParameterInterfaces(
73
164
  }
74
165
  ]);
75
166
 
76
- parametersFile.addImportDeclarations([
77
- {
78
- namedImports: [...importedModels],
79
- moduleSpecifier: "./models"
80
- }
81
- ]);
167
+ if (hasInputModels(model)) {
168
+ parametersFile.addImportDeclarations([
169
+ {
170
+ namedImports: [...importedModels],
171
+ moduleSpecifier: "./models"
172
+ }
173
+ ]);
174
+ }
175
+ }
176
+
177
+ function getRequestHeaderInterfaceDefinition(
178
+ parameters: Parameter[],
179
+ baseName: string
180
+ ): undefined | InterfaceDeclarationStructure {
181
+ // Check if there are any required headers
182
+ const headerParameters = parameters.filter(
183
+ p => p.protocol.http?.in === "header"
184
+ );
185
+ if (!headerParameters.length) {
186
+ return undefined;
187
+ }
188
+ const headersInterfaceName = `${baseName}Headers`;
189
+ return {
190
+ kind: StructureKind.Interface,
191
+ isExported: true,
192
+ name: headersInterfaceName,
193
+ properties: headerParameters.map((h: Parameter) => {
194
+ const description = getLanguageMetadata(h.language).description;
195
+ return {
196
+ name: `"${getLanguageMetadata(h.language).serializedName}"`,
197
+ ...(description && { docs: [{ description }] }),
198
+ type: primitiveSchemaToType(h.schema, [
199
+ SchemaContext.Input,
200
+ SchemaContext.Exception
201
+ ]),
202
+ hasQuestionToken: !h.required
203
+ };
204
+ })
205
+ };
206
+ }
207
+
208
+ function buildHeaderParameterDefinitions(
209
+ operationName: string,
210
+ parameters: Parameter[],
211
+ parametersFile: SourceFile,
212
+ internalReferences: Set<string>,
213
+ requestIndex: number
214
+ ): InterfaceDeclarationStructure | undefined {
215
+ const headerParameters = parameters.filter(
216
+ p => p.protocol.http?.in === "header"
217
+ );
218
+ if (!headerParameters.length) {
219
+ return undefined;
220
+ }
221
+
222
+ const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
223
+ const headerParameterInterfaceName = `${operationName}HeaderParam${nameSuffix}`;
224
+
225
+ const headersInterface = getRequestHeaderInterfaceDefinition(
226
+ headerParameters,
227
+ operationName
228
+ );
229
+
230
+ if (headersInterface) {
231
+ parametersFile.addInterface(headersInterface);
232
+ }
233
+
234
+ internalReferences.add(headerParameterInterfaceName);
235
+
236
+ return {
237
+ isExported: true,
238
+ kind: StructureKind.Interface,
239
+ name: headerParameterInterfaceName,
240
+ properties: [
241
+ {
242
+ name: "headers",
243
+ type: `RawHttpHeadersInput & ${operationName}Headers`,
244
+ kind: StructureKind.PropertySignature
245
+ }
246
+ ]
247
+ };
82
248
  }
83
249
 
250
+ function getPathInterfaceDefinition(
251
+ parameters: Parameter[],
252
+ baseName: string,
253
+ model: CodeModel
254
+ ): undefined | InterfaceDeclarationStructure {
255
+ // Check if there are any path parameters
256
+ const pathParameters = parameters.filter(
257
+ p => p.protocol.http?.in === ParameterLocation.Uri && model.globalParameters?.indexOf(p) === -1
258
+ );
259
+ if (!pathParameters.length) {
260
+ return undefined;
261
+ }
262
+ const pathInterfaceName = `${baseName}PathParameters`;
263
+ return {
264
+ kind: StructureKind.Interface,
265
+ isExported: true,
266
+ name: pathInterfaceName,
267
+ properties: pathParameters.map((h: Parameter) => {
268
+ const description = getLanguageMetadata(h.language).description;
269
+ return {
270
+ name: `"${getLanguageMetadata(h.language).serializedName}"`,
271
+ ...(description && { docs: [{ description }] }),
272
+ type: primitiveSchemaToType(h.schema, [
273
+ SchemaContext.Input,
274
+ SchemaContext.Exception
275
+ ]),
276
+ hasQuestionToken: !h.required
277
+ };
278
+ })
279
+ };
280
+ }
281
+
282
+ function buildPathParameterDefinitions(
283
+ operationName: string,
284
+ parameters: Parameter[],
285
+ model: CodeModel,
286
+ parametersFile: SourceFile,
287
+ internalReferences: Set<string>,
288
+ requestIndex: number
289
+ ): InterfaceDeclarationStructure | undefined {
290
+ const pathParameters = parameters.filter(
291
+ p => p.protocol.http?.in === ParameterLocation.Uri && model.globalParameters?.indexOf(p) === -1
292
+ );
293
+ if (!pathParameters.length) {
294
+ return undefined;
295
+ }
296
+
297
+ const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
298
+ const pathParameterInterfaceName = `${operationName}PathParam${nameSuffix}`;
299
+
300
+ const pathInterface = getPathInterfaceDefinition(
301
+ pathParameters,
302
+ operationName,
303
+ model
304
+ );
305
+
306
+ if (pathInterface) {
307
+ parametersFile.addInterface(pathInterface);
308
+ }
309
+
310
+ internalReferences.add(pathParameterInterfaceName);
311
+
312
+ return {
313
+ isExported: true,
314
+ kind: StructureKind.Interface,
315
+ name: pathParameterInterfaceName,
316
+ properties: [
317
+ {
318
+ name: "pathParameters",
319
+ type: `${operationName}PathParameters`,
320
+ kind: StructureKind.PropertySignature
321
+ }
322
+ ]
323
+ };
324
+ }
84
325
  /**
85
326
  * Gets the interface definition for an operation bodyParameters
86
327
  */
87
328
  function buildBodyParametersDefinition(
88
329
  operationName: string,
89
330
  parameters: Parameter[],
331
+ schemaUsage: SchemaContext[],
90
332
  importedModels: Set<string>,
91
- internalReferences: Set<string>
92
- ): InterfaceDeclarationStructure | undefined {
333
+ internalReferences: Set<string>,
334
+ requestIndex: number
335
+ ): InterfaceDeclarationStructure[] {
93
336
  const bodyParameters = parameters.filter(p => p.protocol.http?.in === "body");
94
337
  if (!bodyParameters.length) {
338
+ return [];
339
+ }
340
+
341
+ const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
342
+ const bodyParameterInterfaceName = `${operationName}BodyParam${nameSuffix}`;
343
+ internalReferences.add(bodyParameterInterfaceName);
344
+
345
+ // In case of formData we'd get multiple properties in body marked as partialBody
346
+ if (bodyParameters.some(p => p.isPartialBody)) {
347
+ let allOptionalParts = true;
348
+ const propertiesDefinitions: PropertySignatureStructure[] = [];
349
+ for (const param of bodyParameters) {
350
+ if (param.required) {
351
+ allOptionalParts = false;
352
+ }
353
+
354
+ propertiesDefinitions.push(
355
+ getPropertySignature(param, schemaUsage, importedModels)
356
+ );
357
+ }
358
+
359
+ const formBodyName = `${operationName}FormBody`;
360
+ const formBodyInterface: InterfaceDeclarationStructure = {
361
+ isExported: true,
362
+ kind: StructureKind.Interface,
363
+ name: formBodyName,
364
+ properties: propertiesDefinitions
365
+ };
366
+
367
+ return [
368
+ {
369
+ isExported: true,
370
+ kind: StructureKind.Interface,
371
+ name: bodyParameterInterfaceName,
372
+ properties: [
373
+ {
374
+ name: "body",
375
+ type: formBodyName,
376
+ hasQuestionToken: allOptionalParts
377
+ }
378
+ ]
379
+ },
380
+ formBodyInterface
381
+ ];
382
+ } else {
383
+ const bodySignature = getPropertySignature(
384
+ bodyParameters[0],
385
+ schemaUsage,
386
+ importedModels
387
+ );
388
+
389
+ return [
390
+ {
391
+ isExported: true,
392
+ kind: StructureKind.Interface,
393
+ name: bodyParameterInterfaceName,
394
+ properties: [
395
+ {
396
+ docs: bodySignature.docs,
397
+ name: "body",
398
+ type: bodySignature.type,
399
+ hasQuestionToken: bodySignature.hasQuestionToken
400
+ }
401
+ ]
402
+ }
403
+ ];
404
+ }
405
+ }
406
+
407
+ /**
408
+ * Gets the interface definition for an operation bodyParameters
409
+ */
410
+ function buildContentTypeParametersDefinition(
411
+ operationName: string,
412
+ request: OperationRequest | undefined,
413
+ internalReferences: Set<string>,
414
+ requestIndex: number
415
+ ): InterfaceDeclarationStructure | undefined {
416
+ if (!request) {
95
417
  return undefined;
96
418
  }
419
+ const mediaTypes: string[] = request.protocol.http?.mediaTypes ?? [];
97
420
 
98
- const bodyParameterInterfaceName = `${operationName}BodyParam`;
99
- // There is only one body parameter can't be more than one so we can safely take the first
100
- const bodySignature = getPropertySignature(bodyParameters[0], importedModels);
421
+ if (!mediaTypes.length) {
422
+ return undefined;
423
+ }
101
424
 
102
- internalReferences.add(bodyParameterInterfaceName);
425
+ const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
426
+ const mediaTypesParameterInterfaceName = `${operationName}MediaTypesParam${nameSuffix}`;
427
+
428
+ // Mark the queryParameter interface for importing
429
+ internalReferences.add(mediaTypesParameterInterfaceName);
103
430
 
104
431
  return {
105
432
  isExported: true,
106
433
  kind: StructureKind.Interface,
107
- name: bodyParameterInterfaceName,
434
+ name: mediaTypesParameterInterfaceName,
108
435
  properties: [
109
436
  {
110
- name: "body",
111
- type: bodySignature.type,
112
- hasQuestionToken: bodySignature.hasQuestionToken
437
+ docs: ["Request content type"],
438
+ name: "contentType",
439
+ type: mediaTypes.map(mt => `"${mt}"`).join(" | "),
440
+ hasQuestionToken: true
113
441
  }
114
442
  ]
115
443
  };
@@ -121,8 +449,10 @@ function buildBodyParametersDefinition(
121
449
  function buildQueryParameterDefinition(
122
450
  operationName: string,
123
451
  parameters: Parameter[],
452
+ schemaUsage: SchemaContext[],
124
453
  importedModels: Set<string>,
125
- internalReferences: Set<string>
454
+ internalReferences: Set<string>,
455
+ requestIndex: number
126
456
  ): InterfaceDeclarationStructure[] | undefined {
127
457
  const queryParameters = parameters.filter(
128
458
  p => p.protocol.http?.in === "query"
@@ -132,12 +462,13 @@ function buildQueryParameterDefinition(
132
462
  return undefined;
133
463
  }
134
464
 
135
- const queryParameterInterfaceName = `${operationName}QueryParam`;
465
+ const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
466
+ const queryParameterInterfaceName = `${operationName}QueryParam${nameSuffix}`;
136
467
  const queryParameterPropertiesName = `${operationName}QueryParamProperties`;
137
468
 
138
469
  // Get the property signature for each query parameter
139
470
  const propertiesDefinition = queryParameters.map(qp =>
140
- getPropertySignature(qp, importedModels)
471
+ getPropertySignature(qp, schemaUsage, importedModels)
141
472
  );
142
473
 
143
474
  const hasRequiredParameters = propertiesDefinition.some(
@@ -182,12 +513,3 @@ function getAllOperations(model: CodeModel): Operation[] {
182
513
 
183
514
  return operations;
184
515
  }
185
-
186
- function getOperationParameters(operation: Operation): Parameter[] {
187
- const signatureParameters = operation.signatureParameters ?? [];
188
- // Extract parameters from the operation request
189
- const request = operation.requests ? operation.requests[0] : undefined;
190
- const requestParameters = request?.signatureParameters ?? [];
191
-
192
- return [...signatureParameters, ...requestParameters];
193
- }
@@ -0,0 +1,19 @@
1
+ import { readFileSync } from "fs";
2
+ import * as path from "path";
3
+ import * as hbs from "handlebars";
4
+ import { Project } from "ts-morph";
5
+ import { getAutorestOptions } from "../autorestSession";
6
+
7
+ export function generatePollingHelper(project: Project) {
8
+ let file: string = "";
9
+
10
+ file = readFileSync(path.join(__dirname, "pollingHelper.ts.hbs"), {
11
+ encoding: "utf-8"
12
+ });
13
+
14
+ const readmeFileContents = hbs.compile(file, { noEscape: true });
15
+ const { srcPath } = getAutorestOptions();
16
+ project.createSourceFile(path.join(srcPath, "pollingHelper.ts"), readmeFileContents({}), {
17
+ overwrite: true
18
+ });
19
+ }
@@ -3,6 +3,7 @@ import {
3
3
  HttpHeader,
4
4
  Operation,
5
5
  Response,
6
+ SchemaContext,
6
7
  SchemaResponse
7
8
  } from "@autorest/codemodel";
8
9
  import {
@@ -14,15 +15,24 @@ import {
14
15
  InterfaceDeclarationStructure,
15
16
  OptionalKind,
16
17
  Project,
18
+ PropertySignatureStructure,
17
19
  StructureKind
18
20
  } from "ts-morph";
19
21
  import { NameType, normalizeName } from "../utils/nameUtils";
20
- import { getElementType } from "./schemaHelpers";
22
+ import {
23
+ getElementType,
24
+ getFormatDocs,
25
+ primitiveSchemaToType
26
+ } from "./schemaHelpers";
21
27
  import { getLanguageMetadata } from "../utils/languageHelpers";
28
+ import { hasOutputModels } from "./helpers/modelHelpers";
29
+ import { getAutorestOptions } from "../autorestSession";
30
+ import * as path from "path";
22
31
 
23
32
  export function generateResponseInterfaces(model: CodeModel, project: Project) {
33
+ const { srcPath } = getAutorestOptions();
24
34
  const responsesFile = project.createSourceFile(
25
- `src/responses.ts`,
35
+ path.join(srcPath, `responses.ts`),
26
36
  undefined,
27
37
  {
28
38
  overwrite: true
@@ -63,9 +73,11 @@ export function generateResponseInterfaces(model: CodeModel, project: Project) {
63
73
 
64
74
  if (headersInterface) {
65
75
  hasHeaders = true;
76
+ responsesFile.addInterface(headersInterface);
66
77
  }
67
78
 
68
79
  const bodyType = getBodyTypeName(schemaResponse, importedModels);
80
+ const bodyDescription = getFormatDocs(schemaResponse.schema);
69
81
 
70
82
  // Get the information to build the Response Interface
71
83
  const responseTypeName = getResponseTypeName(operation, schemaResponse);
@@ -73,7 +85,8 @@ export function generateResponseInterfaces(model: CodeModel, project: Project) {
73
85
  const responseProperties = getResponseInterfaceProperties(
74
86
  schemaResponse,
75
87
  bodyType,
76
- headersInterface?.name
88
+ headersInterface?.name,
89
+ bodyDescription
77
90
  );
78
91
 
79
92
  const responseInterfaceDefinition: OptionalKind<InterfaceDeclarationStructure> = {
@@ -96,6 +109,14 @@ export function generateResponseInterfaces(model: CodeModel, project: Project) {
96
109
  }
97
110
  }
98
111
 
112
+ if (hasHeaders) {
113
+ responsesFile.addImportDeclarations([
114
+ {
115
+ namedImports: ["RawHttpHeaders"],
116
+ moduleSpecifier: "@azure/core-rest-pipeline"
117
+ }
118
+ ]);
119
+ }
99
120
  responsesFile.addImportDeclarations([
100
121
  {
101
122
  namedImports: ["HttpResponse"],
@@ -103,19 +124,14 @@ export function generateResponseInterfaces(model: CodeModel, project: Project) {
103
124
  }
104
125
  ]);
105
126
 
106
- if (hasHeaders) {
107
- responsesFile.addImportDeclaration({
108
- namedImports: ["RawHttpHeaders"],
109
- moduleSpecifier: "@azure/core-rest-pipeline"
110
- });
127
+ if (hasOutputModels(model)) {
128
+ responsesFile.addImportDeclarations([
129
+ {
130
+ namedImports: [...importedModels],
131
+ moduleSpecifier: "./outputModels"
132
+ }
133
+ ]);
111
134
  }
112
-
113
- responsesFile.addImportDeclarations([
114
- {
115
- namedImports: [...importedModels],
116
- moduleSpecifier: "./models"
117
- }
118
- ]);
119
135
  }
120
136
 
121
137
  /**
@@ -124,24 +140,32 @@ export function generateResponseInterfaces(model: CodeModel, project: Project) {
124
140
  function getResponseInterfaceProperties(
125
141
  response: Response,
126
142
  bodyTypeName?: string,
127
- headersInterfaceName?: string
143
+ headersInterfaceName?: string,
144
+ bodyDescription?: string
128
145
  ) {
129
146
  const statusCode = getStatusCode(response);
130
- const responseProperties = [
131
- { name: "status", type: statusCode === `"default"` ? `"500"` : statusCode }
147
+ const responseProperties: PropertySignatureStructure[] = [
148
+ {
149
+ name: "status",
150
+ type: statusCode === `"default"` ? `string` : statusCode,
151
+ kind: StructureKind.PropertySignature
152
+ }
132
153
  ];
133
154
 
134
155
  if (bodyTypeName) {
135
156
  responseProperties.push({
136
157
  name: "body",
137
- type: bodyTypeName
158
+ type: bodyTypeName,
159
+ kind: StructureKind.PropertySignature,
160
+ ...(bodyDescription && { docs: [{ description: bodyDescription }] })
138
161
  });
139
162
  }
140
163
 
141
164
  if (headersInterfaceName) {
142
165
  responseProperties.push({
143
166
  name: "headers",
144
- type: `RawHttpHeaders & ${headersInterfaceName}`
167
+ type: `RawHttpHeaders & ${headersInterfaceName}`,
168
+ kind: StructureKind.PropertySignature
145
169
  });
146
170
  }
147
171
 
@@ -159,7 +183,11 @@ function getBodyTypeName(
159
183
  response: SchemaResponse,
160
184
  importedModels: Set<string>
161
185
  ): string | undefined {
162
- return getElementType(response.schema, importedModels);
186
+ return getElementType(
187
+ response.schema,
188
+ [SchemaContext.Output, SchemaContext.Exception],
189
+ importedModels
190
+ );
163
191
  }
164
192
 
165
193
  function getResponseHeaderInterfaceDefinition(
@@ -182,7 +210,10 @@ function getResponseHeaderInterfaceDefinition(
182
210
  return {
183
211
  name: `"${h.header.toLowerCase()}"`,
184
212
  ...(description && { docs: [{ description }] }),
185
- type: "string",
213
+ type: primitiveSchemaToType(h.schema, [
214
+ SchemaContext.Output,
215
+ SchemaContext.Exception
216
+ ]),
186
217
  hasQuestionToken: true
187
218
  };
188
219
  })