@autorest/typescript 6.0.0-beta.9 → 6.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/README.md +42 -5
  2. package/dist/{src/generators/static/README.md.hbs → hlcREADME.md.hbs} +35 -3
  3. package/dist/hlcSamples.ts.hbs +49 -0
  4. package/dist/karma.conf.js.hbs +126 -0
  5. package/dist/paginateHelper.ts.hbs +208 -0
  6. package/dist/pollingHelper.ts.hbs +72 -0
  7. package/dist/rlcEnv.ts.hbs +3 -0
  8. package/dist/rlcREADME.md.hbs +71 -0
  9. package/dist/rlcRecordedClient.ts.hbs +26 -0
  10. package/dist/rlcSampleTest.spec.ts.hbs +20 -0
  11. package/dist/rlcSamples.ts.hbs +28 -0
  12. package/dist/sampleEnv.hbs +4 -0
  13. package/dist/sampleTest.ts.hbs +32 -0
  14. package/dist/samples.ts.hbs +0 -0
  15. package/dist/src/autorestSession.d.ts +17 -6
  16. package/dist/src/autorestSession.d.ts.map +1 -1
  17. package/dist/src/autorestSession.js +3 -9
  18. package/dist/src/autorestSession.js.map +1 -1
  19. package/dist/src/conflictResolver.d.ts +3 -0
  20. package/dist/src/conflictResolver.d.ts.map +1 -0
  21. package/dist/src/conflictResolver.js +43 -0
  22. package/dist/src/conflictResolver.js.map +1 -0
  23. package/dist/src/generators/LROGenerator.js +4 -4
  24. package/dist/src/generators/LROGenerator.js.map +1 -1
  25. package/dist/src/generators/clientFileGenerator.d.ts.map +1 -1
  26. package/dist/src/generators/clientFileGenerator.js +300 -46
  27. package/dist/src/generators/clientFileGenerator.js.map +1 -1
  28. package/dist/src/generators/indexGenerator.d.ts.map +1 -1
  29. package/dist/src/generators/indexGenerator.js +106 -14
  30. package/dist/src/generators/indexGenerator.js.map +1 -1
  31. package/dist/src/generators/mappersGenerator.d.ts.map +1 -1
  32. package/dist/src/generators/mappersGenerator.js +93 -19
  33. package/dist/src/generators/mappersGenerator.js.map +1 -1
  34. package/dist/src/generators/modelsGenerator.d.ts.map +1 -1
  35. package/dist/src/generators/modelsGenerator.js +80 -81
  36. package/dist/src/generators/modelsGenerator.js.map +1 -1
  37. package/dist/src/generators/operationGenerator.d.ts.map +1 -1
  38. package/dist/src/generators/operationGenerator.js +85 -96
  39. package/dist/src/generators/operationGenerator.js.map +1 -1
  40. package/dist/src/generators/operationInterfaceGenerator.js +20 -20
  41. package/dist/src/generators/operationInterfaceGenerator.js.map +1 -1
  42. package/dist/src/generators/parametersGenerator.d.ts.map +1 -1
  43. package/dist/src/generators/parametersGenerator.js +7 -8
  44. package/dist/src/generators/parametersGenerator.js.map +1 -1
  45. package/dist/src/generators/samples/hlcSampleGenerator.d.ts +13 -0
  46. package/dist/src/generators/samples/hlcSampleGenerator.d.ts.map +1 -0
  47. package/dist/src/generators/samples/hlcSampleGenerator.js +43 -0
  48. package/dist/src/generators/samples/hlcSampleGenerator.js.map +1 -0
  49. package/dist/src/generators/samples/hlcSamples.ts.hbs +49 -0
  50. package/dist/src/generators/samples/rlcSampleGenerator.d.ts +4 -0
  51. package/dist/src/generators/samples/rlcSampleGenerator.d.ts.map +1 -0
  52. package/dist/src/generators/samples/rlcSampleGenerator.js +64 -0
  53. package/dist/src/generators/samples/rlcSampleGenerator.js.map +1 -0
  54. package/dist/src/generators/samples/rlcSamples.ts.hbs +28 -0
  55. package/dist/src/generators/samples/sampleEnv.hbs +4 -0
  56. package/dist/src/generators/samples/sampleEnvGenerator.d.ts +3 -0
  57. package/dist/src/generators/samples/sampleEnvGenerator.d.ts.map +1 -0
  58. package/dist/src/generators/samples/sampleEnvGenerator.js +17 -0
  59. package/dist/src/generators/samples/sampleEnvGenerator.js.map +1 -0
  60. package/dist/src/generators/static/apiExtractorConfig.js +2 -2
  61. package/dist/src/generators/static/apiExtractorConfig.js.map +1 -1
  62. package/dist/src/generators/static/esLintConfigGenerator.d.ts +3 -0
  63. package/dist/src/generators/static/esLintConfigGenerator.d.ts.map +1 -0
  64. package/dist/src/generators/static/esLintConfigGenerator.js +26 -0
  65. package/dist/src/generators/static/esLintConfigGenerator.js.map +1 -0
  66. package/{src/generators/static/README.md.hbs → dist/src/generators/static/hlcREADME.md.hbs} +35 -3
  67. package/dist/src/generators/static/karma.conf.js.hbs +126 -0
  68. package/dist/src/generators/static/karmaConfigFileGenerator.d.ts +3 -0
  69. package/dist/src/generators/static/karmaConfigFileGenerator.d.ts.map +1 -0
  70. package/dist/src/generators/static/karmaConfigFileGenerator.js +23 -0
  71. package/dist/src/generators/static/karmaConfigFileGenerator.js.map +1 -0
  72. package/dist/src/generators/static/licenseFileGenerator.js +1 -1
  73. package/dist/src/generators/static/licenseFileGenerator.js.map +1 -1
  74. package/dist/src/generators/static/packageFileGenerator.d.ts.map +1 -1
  75. package/dist/src/generators/static/packageFileGenerator.js +255 -67
  76. package/dist/src/generators/static/packageFileGenerator.js.map +1 -1
  77. package/dist/src/generators/static/readmeFileGenerator.d.ts +2 -2
  78. package/dist/src/generators/static/readmeFileGenerator.d.ts.map +1 -1
  79. package/dist/src/generators/static/readmeFileGenerator.js +50 -23
  80. package/dist/src/generators/static/readmeFileGenerator.js.map +1 -1
  81. package/dist/src/generators/static/rlcREADME.md.hbs +71 -0
  82. package/dist/src/generators/static/rollupConfigFileGenerator.d.ts.map +1 -1
  83. package/dist/src/generators/static/rollupConfigFileGenerator.js +12 -71
  84. package/dist/src/generators/static/rollupConfigFileGenerator.js.map +1 -1
  85. package/dist/src/generators/static/tsConfigFileGenerator.d.ts.map +1 -1
  86. package/dist/src/generators/static/tsConfigFileGenerator.js +46 -18
  87. package/dist/src/generators/static/tsConfigFileGenerator.js.map +1 -1
  88. package/dist/src/generators/test/envBrowserFileGenerator.d.ts +3 -0
  89. package/dist/src/generators/test/envBrowserFileGenerator.d.ts.map +1 -0
  90. package/dist/src/generators/test/envBrowserFileGenerator.js +15 -0
  91. package/dist/src/generators/test/envBrowserFileGenerator.js.map +1 -0
  92. package/dist/src/generators/test/envFileGenerator.d.ts +3 -0
  93. package/dist/src/generators/test/envFileGenerator.d.ts.map +1 -0
  94. package/dist/src/generators/test/envFileGenerator.js +23 -0
  95. package/dist/src/generators/test/envFileGenerator.js.map +1 -0
  96. package/dist/src/generators/test/recordedClientFileGenerator.d.ts +3 -0
  97. package/dist/src/generators/test/recordedClientFileGenerator.d.ts.map +1 -0
  98. package/dist/src/generators/test/recordedClientFileGenerator.js +23 -0
  99. package/dist/src/generators/test/recordedClientFileGenerator.js.map +1 -0
  100. package/dist/src/generators/test/rlcEnv.ts.hbs +3 -0
  101. package/dist/src/generators/test/rlcRecordedClient.ts.hbs +26 -0
  102. package/dist/src/generators/test/rlcSampleTest.spec.ts.hbs +20 -0
  103. package/dist/src/generators/test/sampleTest.ts.hbs +32 -0
  104. package/dist/src/generators/test/sampleTestGenerator.d.ts +3 -0
  105. package/dist/src/generators/test/sampleTestGenerator.d.ts.map +1 -0
  106. package/dist/src/generators/test/sampleTestGenerator.js +34 -0
  107. package/dist/src/generators/test/sampleTestGenerator.js.map +1 -0
  108. package/dist/src/generators/tracingFileGenerator.d.ts.map +1 -1
  109. package/dist/src/generators/tracingFileGenerator.js +7 -21
  110. package/dist/src/generators/tracingFileGenerator.js.map +1 -1
  111. package/dist/src/generators/utils/docsUtils.js +2 -2
  112. package/dist/src/generators/utils/docsUtils.js.map +1 -1
  113. package/dist/src/generators/utils/operationsUtils.js +1 -1
  114. package/dist/src/generators/utils/operationsUtils.js.map +1 -1
  115. package/dist/src/generators/utils/pagingOperations.d.ts +5 -0
  116. package/dist/src/generators/utils/pagingOperations.d.ts.map +1 -1
  117. package/dist/src/generators/utils/pagingOperations.js +15 -15
  118. package/dist/src/generators/utils/pagingOperations.js.map +1 -1
  119. package/dist/src/generators/utils/parameterUtils.js +9 -9
  120. package/dist/src/generators/utils/parameterUtils.js.map +1 -1
  121. package/dist/src/generators/utils/responseTypeUtils.js +2 -2
  122. package/dist/src/generators/utils/responseTypeUtils.js.map +1 -1
  123. package/dist/src/generators/utils/tracingUtils.d.ts.map +1 -1
  124. package/dist/src/generators/utils/tracingUtils.js +2 -6
  125. package/dist/src/generators/utils/tracingUtils.js.map +1 -1
  126. package/dist/src/main.d.ts +2 -2
  127. package/dist/src/main.d.ts.map +1 -1
  128. package/dist/src/main.js +8 -8
  129. package/dist/src/main.js.map +1 -1
  130. package/dist/src/models/clientDetails.d.ts +10 -1
  131. package/dist/src/models/clientDetails.d.ts.map +1 -1
  132. package/dist/src/models/modelDetails.d.ts +2 -2
  133. package/dist/src/models/modelDetails.d.ts.map +1 -1
  134. package/dist/src/models/operationDetails.d.ts +1 -0
  135. package/dist/src/models/operationDetails.d.ts.map +1 -1
  136. package/dist/src/models/sampleDetails.d.ts +22 -0
  137. package/dist/src/models/sampleDetails.d.ts.map +1 -0
  138. package/dist/src/models/sampleDetails.js +3 -0
  139. package/dist/src/models/sampleDetails.js.map +1 -0
  140. package/dist/src/restLevelClient/generateClient.d.ts +1 -1
  141. package/dist/src/restLevelClient/generateClient.d.ts.map +1 -1
  142. package/dist/src/restLevelClient/generateClient.js +108 -167
  143. package/dist/src/restLevelClient/generateClient.js.map +1 -1
  144. package/dist/src/restLevelClient/generateClientDefinition.d.ts +6 -0
  145. package/dist/src/restLevelClient/generateClientDefinition.d.ts.map +1 -0
  146. package/dist/src/restLevelClient/generateClientDefinition.js +261 -0
  147. package/dist/src/restLevelClient/generateClientDefinition.js.map +1 -0
  148. package/dist/src/restLevelClient/generateIsUnexpectedHelper.d.ts +8 -0
  149. package/dist/src/restLevelClient/generateIsUnexpectedHelper.d.ts.map +1 -0
  150. package/dist/src/restLevelClient/generateIsUnexpectedHelper.js +204 -0
  151. package/dist/src/restLevelClient/generateIsUnexpectedHelper.js.map +1 -0
  152. package/dist/src/restLevelClient/generateMethodShortcuts.d.ts +8 -0
  153. package/dist/src/restLevelClient/generateMethodShortcuts.d.ts.map +1 -0
  154. package/dist/src/restLevelClient/generateMethodShortcuts.js +70 -0
  155. package/dist/src/restLevelClient/generateMethodShortcuts.js.map +1 -0
  156. package/dist/src/restLevelClient/generateObjectTypes.d.ts +3 -3
  157. package/dist/src/restLevelClient/generateObjectTypes.d.ts.map +1 -1
  158. package/dist/src/restLevelClient/generateObjectTypes.js +43 -31
  159. package/dist/src/restLevelClient/generateObjectTypes.js.map +1 -1
  160. package/dist/src/restLevelClient/generatePagingHelper.d.ts +3 -0
  161. package/dist/src/restLevelClient/generatePagingHelper.d.ts.map +1 -0
  162. package/dist/src/restLevelClient/generatePagingHelper.js +54 -0
  163. package/dist/src/restLevelClient/generatePagingHelper.js.map +1 -0
  164. package/dist/src/restLevelClient/generateParameterTypes.d.ts.map +1 -1
  165. package/dist/src/restLevelClient/generateParameterTypes.js +247 -44
  166. package/dist/src/restLevelClient/generateParameterTypes.js.map +1 -1
  167. package/dist/src/restLevelClient/generatePollingHelper.d.ts +3 -0
  168. package/dist/src/restLevelClient/generatePollingHelper.d.ts.map +1 -0
  169. package/dist/src/restLevelClient/generatePollingHelper.js +20 -0
  170. package/dist/src/restLevelClient/generatePollingHelper.js.map +1 -0
  171. package/dist/src/restLevelClient/generateResponseTypes.d.ts.map +1 -1
  172. package/dist/src/restLevelClient/generateResponseTypes.js +35 -23
  173. package/dist/src/restLevelClient/generateResponseTypes.js.map +1 -1
  174. package/dist/src/restLevelClient/generateRestLevel.d.ts.map +1 -1
  175. package/dist/src/restLevelClient/generateRestLevel.js +63 -16
  176. package/dist/src/restLevelClient/generateRestLevel.js.map +1 -1
  177. package/dist/src/restLevelClient/generateSchemaTypes.d.ts.map +1 -1
  178. package/dist/src/restLevelClient/generateSchemaTypes.js +29 -7
  179. package/dist/src/restLevelClient/generateSchemaTypes.js.map +1 -1
  180. package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts +4 -0
  181. package/dist/src/restLevelClient/generateTopLevelIndexFile.d.ts.map +1 -0
  182. package/dist/src/restLevelClient/generateTopLevelIndexFile.js +37 -0
  183. package/dist/src/restLevelClient/generateTopLevelIndexFile.js.map +1 -0
  184. package/dist/src/restLevelClient/getPropertySignature.d.ts +2 -2
  185. package/dist/src/restLevelClient/getPropertySignature.d.ts.map +1 -1
  186. package/dist/src/restLevelClient/getPropertySignature.js +10 -7
  187. package/dist/src/restLevelClient/getPropertySignature.js.map +1 -1
  188. package/dist/src/restLevelClient/helpers/hasPollingOperations.d.ts +4 -0
  189. package/dist/src/restLevelClient/helpers/hasPollingOperations.d.ts.map +1 -0
  190. package/dist/src/restLevelClient/helpers/hasPollingOperations.js +12 -0
  191. package/dist/src/restLevelClient/helpers/hasPollingOperations.js.map +1 -0
  192. package/dist/src/restLevelClient/helpers/modelHelpers.d.ts +4 -0
  193. package/dist/src/restLevelClient/helpers/modelHelpers.d.ts.map +1 -0
  194. package/dist/src/restLevelClient/helpers/modelHelpers.js +19 -0
  195. package/dist/src/restLevelClient/helpers/modelHelpers.js.map +1 -0
  196. package/dist/src/restLevelClient/helpers/operationHelpers.d.ts +10 -0
  197. package/dist/src/restLevelClient/helpers/operationHelpers.d.ts.map +1 -0
  198. package/dist/src/restLevelClient/helpers/operationHelpers.js +64 -0
  199. package/dist/src/restLevelClient/helpers/operationHelpers.js.map +1 -0
  200. package/dist/src/restLevelClient/interfaces.d.ts +33 -0
  201. package/dist/src/restLevelClient/interfaces.d.ts.map +1 -0
  202. package/dist/src/restLevelClient/interfaces.js +3 -0
  203. package/dist/src/restLevelClient/interfaces.js.map +1 -0
  204. package/dist/src/restLevelClient/mutateCodeModel.js +2 -2
  205. package/dist/src/restLevelClient/mutateCodeModel.js.map +1 -1
  206. package/dist/src/restLevelClient/operationHelpers.d.ts +4 -0
  207. package/dist/src/restLevelClient/operationHelpers.d.ts.map +1 -1
  208. package/dist/src/restLevelClient/operationHelpers.js +21 -10
  209. package/dist/src/restLevelClient/operationHelpers.js.map +1 -1
  210. package/dist/src/restLevelClient/paginateHelper.ts.hbs +208 -0
  211. package/dist/src/restLevelClient/pollingHelper.ts.hbs +72 -0
  212. package/dist/src/restLevelClient/samples/generateSamples.d.ts +23 -0
  213. package/dist/src/restLevelClient/samples/generateSamples.d.ts.map +1 -0
  214. package/dist/src/restLevelClient/samples/generateSamples.js +3 -0
  215. package/dist/src/restLevelClient/samples/generateSamples.js.map +1 -0
  216. package/dist/src/restLevelClient/samples/samples.ts.hbs +0 -0
  217. package/dist/src/restLevelClient/schemaHelpers.d.ts +8 -2
  218. package/dist/src/restLevelClient/schemaHelpers.d.ts.map +1 -1
  219. package/dist/src/restLevelClient/schemaHelpers.js +27 -12
  220. package/dist/src/restLevelClient/schemaHelpers.js.map +1 -1
  221. package/dist/src/transforms/extensions.js +10 -10
  222. package/dist/src/transforms/extensions.js.map +1 -1
  223. package/dist/src/transforms/groupTransforms.js +2 -2
  224. package/dist/src/transforms/groupTransforms.js.map +1 -1
  225. package/dist/src/transforms/mapperTransforms.d.ts.map +1 -1
  226. package/dist/src/transforms/mapperTransforms.js +29 -26
  227. package/dist/src/transforms/mapperTransforms.js.map +1 -1
  228. package/dist/src/transforms/objectTransforms.d.ts.map +1 -1
  229. package/dist/src/transforms/objectTransforms.js +42 -26
  230. package/dist/src/transforms/objectTransforms.js.map +1 -1
  231. package/dist/src/transforms/operationTransforms.d.ts.map +1 -1
  232. package/dist/src/transforms/operationTransforms.js +29 -26
  233. package/dist/src/transforms/operationTransforms.js.map +1 -1
  234. package/dist/src/transforms/optionsTransforms.js +1 -1
  235. package/dist/src/transforms/optionsTransforms.js.map +1 -1
  236. package/dist/src/transforms/parameterTransforms.d.ts.map +1 -1
  237. package/dist/src/transforms/parameterTransforms.js +43 -27
  238. package/dist/src/transforms/parameterTransforms.js.map +1 -1
  239. package/dist/src/transforms/samplesTransforms.d.ts +7 -0
  240. package/dist/src/transforms/samplesTransforms.d.ts.map +1 -0
  241. package/dist/src/transforms/samplesTransforms.js +293 -0
  242. package/dist/src/transforms/samplesTransforms.js.map +1 -0
  243. package/dist/src/transforms/transforms.d.ts +1 -2
  244. package/dist/src/transforms/transforms.d.ts.map +1 -1
  245. package/dist/src/transforms/transforms.js +26 -24
  246. package/dist/src/transforms/transforms.js.map +1 -1
  247. package/dist/src/transforms/urlTransforms.js +3 -3
  248. package/dist/src/transforms/urlTransforms.js.map +1 -1
  249. package/dist/src/typescriptGenerator.d.ts +2 -2
  250. package/dist/src/typescriptGenerator.d.ts.map +1 -1
  251. package/dist/src/typescriptGenerator.js +46 -46
  252. package/dist/src/typescriptGenerator.js.map +1 -1
  253. package/dist/src/utils/autorestOptions.d.ts +2 -2
  254. package/dist/src/utils/autorestOptions.d.ts.map +1 -1
  255. package/dist/src/utils/autorestOptions.js +141 -62
  256. package/dist/src/utils/autorestOptions.js.map +1 -1
  257. package/dist/src/utils/cloneOperation.js +2 -2
  258. package/dist/src/utils/cloneOperation.js.map +1 -1
  259. package/dist/src/utils/copyFiles.d.ts +2 -0
  260. package/dist/src/utils/copyFiles.d.ts.map +1 -0
  261. package/dist/src/utils/copyFiles.js +33 -0
  262. package/dist/src/utils/copyFiles.js.map +1 -0
  263. package/dist/src/utils/extractHeaders.js +4 -4
  264. package/dist/src/utils/extractHeaders.js.map +1 -1
  265. package/dist/src/utils/extractPaginationDetails.d.ts +5 -1
  266. package/dist/src/utils/extractPaginationDetails.d.ts.map +1 -1
  267. package/dist/src/utils/extractPaginationDetails.js +23 -10
  268. package/dist/src/utils/extractPaginationDetails.js.map +1 -1
  269. package/dist/src/utils/headersToSchema.js +1 -1
  270. package/dist/src/utils/headersToSchema.js.map +1 -1
  271. package/dist/src/utils/logger.js +1 -1
  272. package/dist/src/utils/logger.js.map +1 -1
  273. package/dist/src/utils/nameUtils.d.ts +6 -2
  274. package/dist/src/utils/nameUtils.d.ts.map +1 -1
  275. package/dist/src/utils/nameUtils.js +13 -8
  276. package/dist/src/utils/nameUtils.js.map +1 -1
  277. package/dist/src/utils/schemaHelpers.d.ts +6 -1
  278. package/dist/src/utils/schemaHelpers.d.ts.map +1 -1
  279. package/dist/src/utils/schemaHelpers.js +50 -7
  280. package/dist/src/utils/schemaHelpers.js.map +1 -1
  281. package/dist/src/utils/sortObjectSchemasHierarchically.js +1 -1
  282. package/dist/src/utils/sortObjectSchemasHierarchically.js.map +1 -1
  283. package/dist/src/utils/valueHelpers.js +1 -1
  284. package/dist/src/utils/valueHelpers.js.map +1 -1
  285. package/package.json +58 -39
  286. package/src/autorestSession.ts +25 -18
  287. package/src/conflictResolver.ts +61 -0
  288. package/src/generators/clientFileGenerator.ts +397 -36
  289. package/src/generators/indexGenerator.ts +118 -12
  290. package/src/generators/mappersGenerator.ts +108 -8
  291. package/src/generators/modelsGenerator.ts +98 -97
  292. package/src/generators/operationGenerator.ts +54 -93
  293. package/src/generators/parametersGenerator.ts +2 -3
  294. package/src/generators/samples/hlcSampleGenerator.ts +50 -0
  295. package/src/generators/samples/hlcSamples.ts.hbs +49 -0
  296. package/src/generators/samples/rlcSampleGenerator.ts +72 -0
  297. package/src/generators/samples/rlcSamples.ts.hbs +28 -0
  298. package/src/generators/samples/sampleEnv.hbs +4 -0
  299. package/src/generators/samples/sampleEnvGenerator.ts +14 -0
  300. package/src/generators/static/apiExtractorConfig.ts +2 -2
  301. package/src/generators/static/esLintConfigGenerator.ts +24 -0
  302. package/src/generators/static/hlcREADME.md.hbs +144 -0
  303. package/src/generators/static/karma.conf.js.hbs +126 -0
  304. package/src/generators/static/karmaConfigFileGenerator.ts +20 -0
  305. package/src/generators/static/packageFileGenerator.ts +292 -71
  306. package/src/generators/static/readmeFileGenerator.ts +79 -42
  307. package/src/generators/static/rlcREADME.md.hbs +71 -0
  308. package/src/generators/static/rollupConfigFileGenerator.ts +13 -71
  309. package/src/generators/static/tsConfigFileGenerator.ts +54 -19
  310. package/src/generators/test/envBrowserFileGenerator.ts +14 -0
  311. package/src/generators/test/envFileGenerator.ts +22 -0
  312. package/src/generators/test/recordedClientFileGenerator.ts +22 -0
  313. package/src/generators/test/rlcEnv.ts.hbs +3 -0
  314. package/src/generators/test/rlcRecordedClient.ts.hbs +26 -0
  315. package/src/generators/test/rlcSampleTest.spec.ts.hbs +20 -0
  316. package/src/generators/test/sampleTest.ts.hbs +32 -0
  317. package/src/generators/test/sampleTestGenerator.ts +32 -0
  318. package/src/generators/tracingFileGenerator.ts +6 -24
  319. package/src/generators/utils/pagingOperations.ts +1 -2
  320. package/src/generators/utils/tracingUtils.ts +1 -5
  321. package/src/main.ts +8 -5
  322. package/src/models/clientDetails.ts +11 -1
  323. package/src/models/modelDetails.ts +2 -2
  324. package/src/models/operationDetails.ts +1 -0
  325. package/src/models/sampleDetails.ts +22 -0
  326. package/src/restLevelClient/generateClient.ts +134 -244
  327. package/src/restLevelClient/generateClientDefinition.ts +386 -0
  328. package/src/restLevelClient/generateIsUnexpectedHelper.ts +224 -0
  329. package/src/restLevelClient/generateMethodShortcuts.ts +121 -0
  330. package/src/restLevelClient/generateObjectTypes.ts +62 -21
  331. package/src/restLevelClient/generatePagingHelper.ts +69 -0
  332. package/src/restLevelClient/generateParameterTypes.ts +377 -56
  333. package/src/restLevelClient/generatePollingHelper.ts +19 -0
  334. package/src/restLevelClient/generateResponseTypes.ts +36 -17
  335. package/src/restLevelClient/generateRestLevel.ts +63 -8
  336. package/src/restLevelClient/generateSchemaTypes.ts +43 -8
  337. package/src/restLevelClient/generateTopLevelIndexFile.ts +37 -0
  338. package/src/restLevelClient/getPropertySignature.ts +12 -4
  339. package/src/restLevelClient/helpers/hasPollingOperations.ts +15 -0
  340. package/src/restLevelClient/helpers/modelHelpers.ts +15 -0
  341. package/src/restLevelClient/helpers/operationHelpers.ts +93 -0
  342. package/src/restLevelClient/interfaces.ts +39 -0
  343. package/src/restLevelClient/operationHelpers.ts +23 -9
  344. package/src/restLevelClient/paginateHelper.ts.hbs +208 -0
  345. package/src/restLevelClient/pollingHelper.ts.hbs +72 -0
  346. package/src/restLevelClient/samples/generateSamples.ts +23 -0
  347. package/src/restLevelClient/samples/samples.ts.hbs +0 -0
  348. package/src/restLevelClient/schemaHelpers.ts +30 -8
  349. package/src/transforms/mapperTransforms.ts +11 -5
  350. package/src/transforms/objectTransforms.ts +26 -6
  351. package/src/transforms/operationTransforms.ts +6 -1
  352. package/src/transforms/parameterTransforms.ts +26 -7
  353. package/src/transforms/samplesTransforms.ts +349 -0
  354. package/src/transforms/transforms.ts +14 -9
  355. package/src/typescriptGenerator.ts +40 -53
  356. package/src/utils/autorestOptions.ts +198 -88
  357. package/src/utils/copyFiles.ts +36 -0
  358. package/src/utils/extractPaginationDetails.ts +19 -1
  359. package/src/utils/nameUtils.ts +18 -9
  360. package/src/utils/schemaHelpers.ts +51 -4
  361. package/CHANGELOG.md +0 -56
  362. package/dist/src/generators/clientContextFileGenerator.d.ts +0 -5
  363. package/dist/src/generators/clientContextFileGenerator.d.ts.map +0 -1
  364. package/dist/src/generators/clientContextFileGenerator.js +0 -263
  365. package/dist/src/generators/clientContextFileGenerator.js.map +0 -1
  366. package/src/generators/clientContextFileGenerator.ts +0 -405
@@ -1,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,44 +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
- docs: bodySignature.docs,
111
- name: "body",
112
- type: bodySignature.type,
113
- hasQuestionToken: bodySignature.hasQuestionToken
437
+ docs: ["Request content type"],
438
+ name: "contentType",
439
+ type: mediaTypes.map(mt => `"${mt}"`).join(" | "),
440
+ hasQuestionToken: true
114
441
  }
115
442
  ]
116
443
  };
@@ -122,8 +449,10 @@ function buildBodyParametersDefinition(
122
449
  function buildQueryParameterDefinition(
123
450
  operationName: string,
124
451
  parameters: Parameter[],
452
+ schemaUsage: SchemaContext[],
125
453
  importedModels: Set<string>,
126
- internalReferences: Set<string>
454
+ internalReferences: Set<string>,
455
+ requestIndex: number
127
456
  ): InterfaceDeclarationStructure[] | undefined {
128
457
  const queryParameters = parameters.filter(
129
458
  p => p.protocol.http?.in === "query"
@@ -133,12 +462,13 @@ function buildQueryParameterDefinition(
133
462
  return undefined;
134
463
  }
135
464
 
136
- const queryParameterInterfaceName = `${operationName}QueryParam`;
465
+ const nameSuffix = requestIndex > 0 ? `${requestIndex}` : "";
466
+ const queryParameterInterfaceName = `${operationName}QueryParam${nameSuffix}`;
137
467
  const queryParameterPropertiesName = `${operationName}QueryParamProperties`;
138
468
 
139
469
  // Get the property signature for each query parameter
140
470
  const propertiesDefinition = queryParameters.map(qp =>
141
- getPropertySignature(qp, importedModels)
471
+ getPropertySignature(qp, schemaUsage, importedModels)
142
472
  );
143
473
 
144
474
  const hasRequiredParameters = propertiesDefinition.some(
@@ -183,12 +513,3 @@ function getAllOperations(model: CodeModel): Operation[] {
183
513
 
184
514
  return operations;
185
515
  }
186
-
187
- function getOperationParameters(operation: Operation): Parameter[] {
188
- const signatureParameters = operation.signatureParameters ?? [];
189
- // Extract parameters from the operation request
190
- const request = operation.requests ? operation.requests[0] : undefined;
191
- const requestParameters = request?.signatureParameters ?? [];
192
-
193
- return [...signatureParameters, ...requestParameters];
194
- }
@@ -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 {
@@ -18,12 +19,20 @@ import {
18
19
  StructureKind
19
20
  } from "ts-morph";
20
21
  import { NameType, normalizeName } from "../utils/nameUtils";
21
- import { getElementType, getFormatDocs } from "./schemaHelpers";
22
+ import {
23
+ getElementType,
24
+ getFormatDocs,
25
+ primitiveSchemaToType
26
+ } from "./schemaHelpers";
22
27
  import { getLanguageMetadata } from "../utils/languageHelpers";
28
+ import { hasOutputModels } from "./helpers/modelHelpers";
29
+ import { getAutorestOptions } from "../autorestSession";
30
+ import * as path from "path";
23
31
 
24
32
  export function generateResponseInterfaces(model: CodeModel, project: Project) {
33
+ const { srcPath } = getAutorestOptions();
25
34
  const responsesFile = project.createSourceFile(
26
- `src/responses.ts`,
35
+ path.join(srcPath, `responses.ts`),
27
36
  undefined,
28
37
  {
29
38
  overwrite: true
@@ -100,6 +109,14 @@ export function generateResponseInterfaces(model: CodeModel, project: Project) {
100
109
  }
101
110
  }
102
111
 
112
+ if (hasHeaders) {
113
+ responsesFile.addImportDeclarations([
114
+ {
115
+ namedImports: ["RawHttpHeaders"],
116
+ moduleSpecifier: "@azure/core-rest-pipeline"
117
+ }
118
+ ]);
119
+ }
103
120
  responsesFile.addImportDeclarations([
104
121
  {
105
122
  namedImports: ["HttpResponse"],
@@ -107,19 +124,14 @@ export function generateResponseInterfaces(model: CodeModel, project: Project) {
107
124
  }
108
125
  ]);
109
126
 
110
- if (hasHeaders) {
111
- responsesFile.addImportDeclaration({
112
- namedImports: ["RawHttpHeaders"],
113
- moduleSpecifier: "@azure/core-rest-pipeline"
114
- });
127
+ if (hasOutputModels(model)) {
128
+ responsesFile.addImportDeclarations([
129
+ {
130
+ namedImports: [...importedModels],
131
+ moduleSpecifier: "./outputModels"
132
+ }
133
+ ]);
115
134
  }
116
-
117
- responsesFile.addImportDeclarations([
118
- {
119
- namedImports: [...importedModels],
120
- moduleSpecifier: "./models"
121
- }
122
- ]);
123
135
  }
124
136
 
125
137
  /**
@@ -135,7 +147,7 @@ function getResponseInterfaceProperties(
135
147
  const responseProperties: PropertySignatureStructure[] = [
136
148
  {
137
149
  name: "status",
138
- type: statusCode === `"default"` ? `"500"` : statusCode,
150
+ type: statusCode === `"default"` ? `string` : statusCode,
139
151
  kind: StructureKind.PropertySignature
140
152
  }
141
153
  ];
@@ -171,7 +183,11 @@ function getBodyTypeName(
171
183
  response: SchemaResponse,
172
184
  importedModels: Set<string>
173
185
  ): string | undefined {
174
- return getElementType(response.schema, importedModels);
186
+ return getElementType(
187
+ response.schema,
188
+ [SchemaContext.Output, SchemaContext.Exception],
189
+ importedModels
190
+ );
175
191
  }
176
192
 
177
193
  function getResponseHeaderInterfaceDefinition(
@@ -194,7 +210,10 @@ function getResponseHeaderInterfaceDefinition(
194
210
  return {
195
211
  name: `"${h.header.toLowerCase()}"`,
196
212
  ...(description && { docs: [{ description }] }),
197
- type: "string",
213
+ type: primitiveSchemaToType(h.schema, [
214
+ SchemaContext.Output,
215
+ SchemaContext.Exception
216
+ ]),
198
217
  hasQuestionToken: true
199
218
  };
200
219
  })