@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
@@ -2,12 +2,17 @@ import { Project, SourceFile } from "ts-morph";
2
2
  import { ClientDetails } from "../models/clientDetails";
3
3
  import { getAutorestOptions, getSession } from "../autorestSession";
4
4
  import { NameType, normalizeName } from "../utils/nameUtils";
5
-
5
+ import { hasPagingOperations } from "../utils/extractPaginationDetails";
6
+ import { hasPollingOperations } from "../restLevelClient/helpers/hasPollingOperations";
7
+ import {
8
+ hasInputModels,
9
+ hasOutputModels
10
+ } from "../restLevelClient/helpers/modelHelpers";
6
11
  export function generateIndexFile(
7
12
  project: Project,
8
13
  clientDetails?: ClientDetails
9
14
  ) {
10
- const { restLevelClient, srcPath } = getAutorestOptions();
15
+ const { restLevelClient, srcPath, multiClient, batch } = getAutorestOptions();
11
16
  const indexFile = project.createSourceFile(`${srcPath}/index.ts`, undefined, {
12
17
  overwrite: true
13
18
  });
@@ -19,38 +24,143 @@ export function generateIndexFile(
19
24
  );
20
25
  }
21
26
  generateHLCIndex(clientDetails, indexFile);
22
- } else {
27
+ } else if (!multiClient || !batch || batch?.length === 1) {
28
+ // if we are generate single client package for RLC
23
29
  generateRLCIndex(indexFile);
30
+ } else {
31
+ generateRLCIndexForMultiClient(indexFile);
24
32
  }
25
33
  }
26
34
 
35
+ // to generate a index.ts for each single module inside the multi client RLC package
36
+ function generateRLCIndexForMultiClient(file: SourceFile) {
37
+ const { model } = getSession();
38
+ const clientName = model.language.default.name;
39
+ const createClientFuncName = `createClient`;
40
+ const moduleName = normalizeName(clientName, NameType.File);
41
+
42
+ file.addImportDeclaration({
43
+ namespaceImport: "Parameters",
44
+ moduleSpecifier: "./parameters"
45
+ });
46
+
47
+ file.addImportDeclaration({
48
+ namespaceImport: "Responses",
49
+ moduleSpecifier: "./responses"
50
+ });
51
+
52
+ file.addImportDeclaration({
53
+ namespaceImport: "Client",
54
+ moduleSpecifier: "./clientDefinitions"
55
+ });
56
+
57
+ const exports = ["Parameters", "Responses", "Client"];
58
+ if (hasInputModels(model)) {
59
+ file.addImportDeclaration({
60
+ namespaceImport: "Models",
61
+ moduleSpecifier: "./models"
62
+ });
63
+ exports.push("Models");
64
+ }
65
+
66
+ if (hasOutputModels(model)) {
67
+ file.addImportDeclaration({
68
+ namespaceImport: "OutputModels",
69
+ moduleSpecifier: "./outputModels"
70
+ });
71
+ exports.push("OutputModels");
72
+ }
73
+
74
+ if (hasPagingOperations(model)) {
75
+ file.addImportDeclaration({
76
+ namespaceImport: "PaginateHelper",
77
+ moduleSpecifier: "./paginateHelper"
78
+ });
79
+ exports.push("PaginateHelper");
80
+ }
81
+
82
+ if (hasPollingOperations(model)) {
83
+ file.addImportDeclaration({
84
+ namespaceImport: "PollingHelper",
85
+ moduleSpecifier: "./pollingHelper"
86
+ });
87
+ exports.push("PollingHelper");
88
+ }
89
+
90
+ file.addExportDeclarations([
91
+ {
92
+ moduleSpecifier: `./${moduleName}`,
93
+ namedExports: [`${createClientFuncName}`]
94
+ },
95
+ {
96
+ namedExports: [...exports]
97
+ }
98
+ ]);
99
+ }
100
+
27
101
  function generateRLCIndex(file: SourceFile) {
28
102
  const { model } = getSession();
29
103
  const clientName = model.language.default.name;
104
+ const createClientFuncName = `${clientName}`;
30
105
  const moduleName = normalizeName(clientName, NameType.File);
31
106
 
32
107
  file.addImportDeclaration({
33
108
  moduleSpecifier: `./${moduleName}`,
34
- defaultImport: clientName
109
+ defaultImport: createClientFuncName
35
110
  });
36
111
 
37
112
  file.addExportDeclarations([
38
113
  {
39
114
  moduleSpecifier: `./${moduleName}`
40
115
  },
41
- {
42
- moduleSpecifier: "./models"
43
- },
44
116
  {
45
117
  moduleSpecifier: "./parameters"
46
118
  },
47
119
  {
48
120
  moduleSpecifier: "./responses"
121
+ },
122
+ {
123
+ moduleSpecifier: "./clientDefinitions"
124
+ },
125
+ {
126
+ moduleSpecifier: "./isUnexpected"
49
127
  }
50
128
  ]);
51
129
 
130
+ if (hasInputModels(model)) {
131
+ file.addExportDeclarations([
132
+ {
133
+ moduleSpecifier: "./models"
134
+ }
135
+ ]);
136
+ }
137
+
138
+ if (hasOutputModels(model)) {
139
+ file.addExportDeclarations([
140
+ {
141
+ moduleSpecifier: "./outputModels"
142
+ }
143
+ ]);
144
+ }
145
+
146
+ if (hasPagingOperations(model)) {
147
+ file.addExportDeclarations([
148
+ {
149
+ moduleSpecifier: "./paginateHelper"
150
+ }
151
+ ]);
152
+ }
153
+
154
+ if (hasPollingOperations(model)) {
155
+ file.addExportDeclarations([
156
+ {
157
+ moduleSpecifier: "./pollingHelper"
158
+ }
159
+ ]);
160
+ }
161
+
52
162
  file.addExportAssignment({
53
- expression: clientName,
163
+ expression: createClientFuncName,
54
164
  isExportEquals: false
55
165
  });
56
166
  }
@@ -68,10 +178,6 @@ function generateHLCIndex(clientDetails: ClientDetails, file: SourceFile) {
68
178
  {
69
179
  moduleSpecifier: `./${clientDetails.sourceFileName}`,
70
180
  namedExports: [clientDetails.className]
71
- },
72
- {
73
- moduleSpecifier: `./${clientDetails.sourceFileName}Context`,
74
- namedExports: [`${clientDetails.className}Context`]
75
181
  }
76
182
  ]);
77
183
 
@@ -19,7 +19,7 @@ import {
19
19
  MapperConstraints
20
20
  } from "@azure/core-http";
21
21
  import { ModelProperties } from "../transforms/mapperTransforms";
22
- import { keys, isEmpty, isString, isNil, isEqual } from "lodash";
22
+ import { keys, isEmpty, isString, isNil, isEqual, List } from "lodash";
23
23
  import { getStringForValue, MapperTypes } from "../utils/valueHelpers";
24
24
  import { PolymorphicObjectDetails, ObjectKind } from "../models/modelDetails";
25
25
  import { logger } from "../utils/logger";
@@ -57,14 +57,89 @@ export function generateMappers(
57
57
  mappersFile.fixUnusedIdentifiers();
58
58
  }
59
59
 
60
+ function getParents(
61
+ mapperParentMap: Map<string, Array<string>>,
62
+ parent: string
63
+ ) {
64
+ const list: Array<string> = new Array<string>();
65
+ const parents = mapperParentMap.get(parent);
66
+
67
+ if (!parents) {
68
+ parents!.forEach(pnt => {
69
+ if (!list.includes(pnt)) {
70
+ getParents(mapperParentMap, pnt).forEach(str => list.push(str));
71
+ }
72
+ });
73
+ }
74
+
75
+ if (!list.includes(parent)) {
76
+ list.push(parent);
77
+ }
78
+
79
+ return list;
80
+ }
81
+
82
+ function traverse(mapperParentMap: Map<string, Array<string>>) {
83
+ const list: Array<string> = new Array<string>();
84
+ mapperParentMap.forEach((value: string[], key: string) => {
85
+ value.forEach(parent => {
86
+ if (!list.includes(parent)) {
87
+ getParents(mapperParentMap, parent).forEach(str => list.push(str));
88
+ }
89
+ });
90
+ if (!list.includes(key)) {
91
+ list.push(key);
92
+ }
93
+ });
94
+ return list;
95
+ }
96
+
60
97
  /**
61
98
  * This function writes to the mappers.ts file all the mappers to be used by @azure/core-http for serialization
62
99
  */
63
100
  function writeMappers(sourceFile: SourceFile, { mappers }: ClientDetails) {
101
+ const mapperParentMap: Map<string, Array<string>> = new Map<
102
+ string,
103
+ Array<string>
104
+ >();
105
+ const mapperPositionMap: Map<string, number> = new Map<string, number>();
106
+ let position = 0;
107
+ mappers.forEach(mapper => {
108
+ const compositeMapper = mapper as CompositeMapper;
109
+ const mapperClassName = compositeMapper.type.className;
110
+ if (!mapperClassName) return;
111
+ mapperPositionMap.set(mapperClassName, position);
112
+ position += 1;
113
+ let listOfParents = mapperParentMap.get(mapperClassName);
114
+ if (!listOfParents) {
115
+ listOfParents = new Array<string>();
116
+ }
117
+
118
+ if (
119
+ compositeMapper.type.modelProperties &&
120
+ compositeMapper.type.modelProperties.parentsRefs
121
+ ) {
122
+ const { parentsRefs } = (compositeMapper.type.modelProperties ||
123
+ {}) as ModelProperties;
124
+
125
+ if (parentsRefs) {
126
+ (parentsRefs as string[]).forEach(parentsRef => {
127
+ listOfParents!.push(parentsRef);
128
+ });
129
+ }
130
+ }
131
+
132
+ mapperParentMap.set(mapperClassName, listOfParents);
133
+ });
134
+
135
+ const modifiedList = traverse(mapperParentMap);
64
136
  const { useCoreV2 } = getAutorestOptions();
65
137
  const generatedMappers: Map<string, Mapper> = new Map<string, Mapper>();
66
138
 
67
- mappers.forEach(mapper => {
139
+ modifiedList.forEach(name => {
140
+ const arrayIndex = mapperPositionMap.get(name) || 0;
141
+ const mapper = mappers[arrayIndex];
142
+
68
143
  const mapperClassName = (mapper as CompositeMapper).type.className;
69
144
  if (!mapperClassName) {
70
145
  logger.warning(`Expected a mapper with a className, skipping generation`);
@@ -103,6 +178,19 @@ function writeMappers(sourceFile: SourceFile, { mappers }: ClientDetails) {
103
178
  leadingTrivia: writer => writer.blankLine()
104
179
  });
105
180
 
181
+ const { polymorphicDiscriminator } = mapper.type as CompositeMapperType;
182
+
183
+ if (polymorphicDiscriminator) {
184
+ if (
185
+ isString(polymorphicDiscriminator) &&
186
+ `${polymorphicDiscriminator}`.startsWith(mapper.serializedName!)
187
+ ) {
188
+ sourceFile.addStatements(
189
+ `${polymorphicDiscriminator}=${polymorphicDiscriminator};`
190
+ );
191
+ }
192
+ }
193
+
106
194
  // Keep track of the mapper we just generated
107
195
  generatedMappers.set(mapperClassName, mapper);
108
196
  });
@@ -178,7 +266,7 @@ export function writeMapper(writer: CodeBlockWriter, mapper: Mapper) {
178
266
  .write("type:")
179
267
  .block(() => {
180
268
  // Write tipe properties for the current mapper
181
- writeMapperType(writer, mapper.type, parents);
269
+ writeMapperType(writer, mapper, parents);
182
270
  });
183
271
  });
184
272
  }
@@ -189,14 +277,16 @@ export function writeMapper(writer: CodeBlockWriter, mapper: Mapper) {
189
277
  */
190
278
  function writeMapperType(
191
279
  writer: CodeBlockWriter,
192
- mapperType: MapperType,
280
+ mapper: Mapper,
193
281
  parents: string[]
194
282
  ) {
283
+ const mapperType = mapper.type;
284
+
195
285
  if (isSequenceMapperType(mapperType)) {
196
286
  return writeSequenceMapperType(writer, mapperType);
197
287
  }
198
288
 
199
- return writeCompositeMapperType(writer, mapperType, parents);
289
+ return writeCompositeMapperType(writer, mapper, parents);
200
290
  }
201
291
 
202
292
  /**
@@ -213,9 +303,10 @@ function isSequenceMapperType(
213
303
  */
214
304
  function writeCompositeMapperType(
215
305
  writer: CodeBlockWriter,
216
- mapperType: MapperType,
306
+ mapper: Mapper,
217
307
  parents: string[]
218
308
  ) {
309
+ const mapperType = mapper.type;
219
310
  const {
220
311
  modelProperties,
221
312
  polymorphicDiscriminator,
@@ -223,7 +314,14 @@ function writeCompositeMapperType(
223
314
  } = mapperType as CompositeMapperType;
224
315
  writeObjectProps(restType, writer);
225
316
  // Write type properties that need special handling
226
- writePolymorphicDiscriminator(writer, polymorphicDiscriminator);
317
+ if (polymorphicDiscriminator) {
318
+ if (
319
+ !isString(polymorphicDiscriminator) ||
320
+ !`${polymorphicDiscriminator}`.startsWith(mapper.serializedName!)
321
+ ) {
322
+ writePolymorphicDiscriminator(writer, polymorphicDiscriminator);
323
+ }
324
+ }
227
325
  writeModelProperties(writer, parents, modelProperties);
228
326
  }
229
327
 
@@ -258,7 +356,9 @@ function writeMapperContraints(
258
356
  .block(() => {
259
357
  if (Pattern) {
260
358
  writer.write(
261
- `Pattern: new RegExp("${Pattern.source.replace(/\\/g, "\\\\")}"), `
359
+ `Pattern: new RegExp("${Pattern.source
360
+ .replace(/\\/g, "\\\\")
361
+ .replace(/"/g, '\\"')}"), `
262
362
  );
263
363
  }
264
364
 
@@ -27,7 +27,6 @@ import { filterOperationParameters } from "./utils/parameterUtils";
27
27
  import {
28
28
  OperationDetails,
29
29
  OperationResponseDetails,
30
- OperationGroupDetails
31
30
  } from "../models/operationDetails";
32
31
  import { ParameterDetails } from "../models/parameterDetails";
33
32
  import {
@@ -69,6 +68,10 @@ export function generateModels(clientDetails: ClientDetails, project: Project) {
69
68
  namespaceImport: "coreRestPipeline",
70
69
  moduleSpecifier: "@azure/core-rest-pipeline"
71
70
  });
71
+ modelsIndexFile.addImportDeclaration({
72
+ namespaceImport: "coreHttpCompat",
73
+ moduleSpecifier: "@azure/core-http-compat"
74
+ });
72
75
  }
73
76
 
74
77
  writeUniontypes(clientDetails, modelsIndexFile);
@@ -77,13 +80,21 @@ export function generateModels(clientDetails: ClientDetails, project: Project) {
77
80
  writeOperationModels(clientDetails, modelsIndexFile);
78
81
  writeClientModels(clientDetails, modelsIndexFile);
79
82
  modelsIndexFile.fixUnusedIdentifiers();
83
+ const allTypes = modelsIndexFile.getTypeAliases();
84
+ clientDetails.allTypes = allTypes
85
+ .filter(item => {
86
+ return item.isExported();
87
+ })
88
+ .map(item => {
89
+ return item.getName();
90
+ });
80
91
  }
81
92
 
82
93
  const writeClientModels = (
83
94
  clientDetails: ClientDetails,
84
95
  modelsIndexFile: SourceFile
85
96
  ) => {
86
- const { useCoreV2 } = getAutorestOptions();
97
+ const { useCoreV2, coreHttpCompatMode } = getAutorestOptions();
87
98
  let clientOptionalParams = clientDetails.parameters.filter(
88
99
  p =>
89
100
  (!p.required || p.defaultValue) &&
@@ -97,7 +108,9 @@ const writeClientModels = (
97
108
  {
98
109
  baseClass: !useCoreV2
99
110
  ? "coreHttp.ServiceClientOptions"
100
- : "coreClient.ServiceClientOptions"
111
+ : coreHttpCompatMode
112
+ ? "coreHttpCompat.ExtendedServiceClientOptions"
113
+ : "coreClient.ServiceClientOptions"
101
114
  }
102
115
  );
103
116
  };
@@ -391,11 +404,11 @@ function buildResponseType(
391
404
  docs: ["The underlying HTTP response."],
392
405
  type: innerResponseProperties.length
393
406
  ? Writers.intersectionType(
394
- "coreHttp.HttpResponse",
395
- Writers.objectType({
396
- properties: innerResponseProperties
397
- })
398
- )
407
+ "coreHttp.HttpResponse",
408
+ Writers.objectType({
409
+ properties: innerResponseProperties
410
+ })
411
+ )
399
412
  : "coreHttp.HttpResponse",
400
413
  leadingTrivia: writer => writer.blankLine()
401
414
  }
@@ -435,13 +448,13 @@ function buildResponseType(
435
448
  if (!useCoreV2) {
436
449
  return intersectionTypes.length > 1
437
450
  ? // Using apply instead of calling the method directly to be able to conditionally pass
438
- // parameters, this way we don't have to have a nested if/else tree to decide which parameters
439
- // to pass, we will pass any intersectionTypes availabe plus the innerType. When there are no intersection types
440
- // we just return innerType
441
- Writers.intersectionType.apply(
442
- Writers,
443
- intersectionTypes as IntersectionTypeParameters
444
- )
451
+ // parameters, this way we don't have to have a nested if/else tree to decide which parameters
452
+ // to pass, we will pass any intersectionTypes availabe plus the innerType. When there are no intersection types
453
+ // we just return innerType
454
+ Writers.intersectionType.apply(
455
+ Writers,
456
+ intersectionTypes as IntersectionTypeParameters
457
+ )
445
458
  : (innerTypeWriter as WriterFunction);
446
459
  } else {
447
460
  if (intersectionTypes.length > 1) {
@@ -491,7 +504,7 @@ const writeExtensibleChoice = (
491
504
  members: choice.properties.map(p => ({
492
505
  name: p.name,
493
506
  value: p.value,
494
- docs: p.description ? [p.description] : undefined
507
+ docs: [p.description ? p.description : p.name]
495
508
  }))
496
509
  });
497
510
  }
@@ -559,29 +572,14 @@ const writeObjects = (
559
572
  const writeObjectSignature = (modelsIndexFile: SourceFile) => (
560
573
  model: ObjectDetails
561
574
  ) => {
562
- const properties = getPropertiesSignatures(model);
563
- const parents = model.parents.map(p => p.name).join(" & ");
564
-
565
- if (parents) {
566
- modelsIndexFile.addTypeAlias({
567
- name: model.name,
568
- docs: model.description ? [model.description] : [],
569
- isExported: true,
570
- type: Writers.intersectionType(
571
- parents,
572
- Writers.objectType({ properties })
573
- ),
574
- leadingTrivia: writer => writer.blankLine()
575
- });
576
- } else {
577
- modelsIndexFile.addInterface({
578
- name: model.name,
579
- docs: model.description ? [model.description] : [],
580
- isExported: true,
581
- properties,
582
- leadingTrivia: writer => writer.blankLine()
583
- });
584
- }
575
+ modelsIndexFile.addInterface({
576
+ name: model.name,
577
+ docs: model.description ? [model.description] : [],
578
+ isExported: true,
579
+ extends: model.parents.map(p => p.name),
580
+ properties: getPropertiesSignatures(model),
581
+ leadingTrivia: writer => writer.blankLine()
582
+ });
585
583
  };
586
584
 
587
585
  /**
@@ -602,7 +600,6 @@ function writeUniontypes({ objects }: ClientDetails, modelsFile: SourceFile) {
602
600
  : c.name;
603
601
  })
604
602
  ];
605
-
606
603
  modelsFile.addTypeAlias({
607
604
  name: `${obj.name}Union`,
608
605
  isExported: true,
@@ -612,20 +609,6 @@ function writeUniontypes({ objects }: ClientDetails, modelsFile: SourceFile) {
612
609
  });
613
610
  }
614
611
 
615
- /**
616
- * Checks if a polymorphic parent needs to be included in the Union type to represent its polymorphism
617
- * A parent needs to be in the union only if its name is in the list of allowed discriminator values
618
- * otherwise the parent should be excluded.
619
- * @param parent Plymorphic parent to check
620
- */
621
- function isPolymorphicParentInUnion(parent: PolymorphicObjectDetails): boolean {
622
- return Object.keys(parent.discriminatorValues).some(property =>
623
- parent.discriminatorValues[property].some(
624
- discriminatorValue => discriminatorValue === parent.name
625
- )
626
- );
627
- }
628
-
629
612
  interface WriteOptionalParametersOptions {
630
613
  baseClass?: string;
631
614
  mediaTypes?: Set<KnownMediaType>;
@@ -689,7 +672,7 @@ function writeOptionalParameters(
689
672
  function buildParamDetails(p: ParameterDetails): PropertySignatureStructure {
690
673
  const description = getParameterDescription(p, operationFullName);
691
674
  return {
692
- name: p.name,
675
+ name: normalizeName(p.name, NameType.Parameter, true),
693
676
  hasQuestionToken: true,
694
677
  type: p.typeDetails.typeName,
695
678
  docs: description ? [description] : undefined,
@@ -707,9 +690,9 @@ function writeOptionalParameters(
707
690
  isExported: true,
708
691
  extends: [
709
692
  baseClass ||
710
- (!useCoreV2
711
- ? "coreHttp.OperationOptions"
712
- : "coreClient.OperationOptions")
693
+ (!useCoreV2
694
+ ? "coreHttp.OperationOptions"
695
+ : "coreClient.OperationOptions")
713
696
  ],
714
697
  properties: properties
715
698
  };
@@ -764,48 +747,50 @@ function writeOptionalParameters(
764
747
  });
765
748
  }
766
749
 
750
+ // Get the type name to generate given a property
751
+ function getPropertyTypeName(
752
+ property: PropertyDetails,
753
+ objectDetails: ObjectDetails,
754
+ ignoreNullableOnOptional: boolean
755
+ ) {
756
+ if (property.isConstant) {
757
+ if (
758
+ property.type === SchemaType.Number ||
759
+ property.type === SchemaType.Boolean
760
+ ) {
761
+ return `${property.defaultValue}`;
762
+ }
763
+ return `"${getStringForValue(
764
+ property.defaultValue,
765
+ property.type,
766
+ false //quoted
767
+ )}"`;
768
+ }
769
+
770
+ const typeName =
771
+ property.name === "siblings"
772
+ ? `${(objectDetails as PolymorphicObjectDetails).unionName}[]`
773
+ : property.type;
774
+
775
+ if (ignoreNullableOnOptional) {
776
+ return property.nullable && property.required
777
+ ? `${typeName} | null`
778
+ : typeName;
779
+ } else {
780
+ return property.nullable ? `${typeName} | null` : typeName;
781
+ }
782
+ }
783
+
767
784
  /**
768
- * Extracts all properties from ObjectDetails and returns a list of PropertySignatureStructure
785
+ * Get a list of properties from an object which aren't marked as discriminators
769
786
  * @param objectDetails Object description
770
787
  */
771
- function getProperties(
788
+ function getNonDiscriminatorProperties(
772
789
  objectDetails: ObjectDetails
773
- ): PropertySignatureStructure[] {
774
- const { ignoreNullableOnOptional } = getAutorestOptions();
790
+ ): PropertyDetails[] {
775
791
  const { properties } = objectDetails;
776
- const getTypename = (property: PropertyDetails) => {
777
- if (property.isConstant) {
778
- return `"${getStringForValue(
779
- property.defaultValue,
780
- property.type,
781
- false //quoted
782
- )}"`;
783
- }
784
792
 
785
- const typeName =
786
- property.name === "siblings"
787
- ? `${(objectDetails as PolymorphicObjectDetails).unionName}[]`
788
- : property.type;
789
-
790
- if (ignoreNullableOnOptional) {
791
- return property.nullable && property.required
792
- ? `${typeName} | null`
793
- : typeName;
794
- } else {
795
- return property.nullable ? `${typeName} | null` : typeName;
796
- }
797
- };
798
-
799
- return properties
800
- .filter(property => !property.isDiscriminator)
801
- .map<PropertySignatureStructure>(property => ({
802
- name: `"${property.name}"`,
803
- hasQuestionToken: !property.required,
804
- isReadonly: property.readOnly,
805
- type: getTypename(property),
806
- docs: getPropertyDescription(property),
807
- kind: StructureKind.PropertySignature
808
- }));
793
+ return properties.filter(property => !property.isDiscriminator);
809
794
  }
810
795
 
811
796
  function getPropertyDescription({ description, readOnly }: PropertyDetails) {
@@ -886,8 +871,24 @@ function withAdditionalProperties(
886
871
  * Gets an enhanced list of Properties to construct an Object signature
887
872
  * @param objectDetails Object description
888
873
  */
889
- const getPropertiesSignatures = (objectDetails: ObjectDetails) =>
890
- withDiscriminator(
874
+ const getPropertiesSignatures = (objectDetails: ObjectDetails) => {
875
+ const { ignoreNullableOnOptional = false } = getAutorestOptions();
876
+ const properties = getNonDiscriminatorProperties(objectDetails).map<
877
+ PropertySignatureStructure
878
+ >(property => ({
879
+ name: `"${property.name}"`,
880
+ hasQuestionToken: !property.required,
881
+ isReadonly: property.readOnly,
882
+ type: getPropertyTypeName(
883
+ property,
884
+ objectDetails,
885
+ ignoreNullableOnOptional
886
+ ),
887
+ docs: getPropertyDescription(property),
888
+ kind: StructureKind.PropertySignature
889
+ }));
890
+ return withDiscriminator(
891
891
  objectDetails,
892
- withAdditionalProperties(objectDetails, getProperties(objectDetails))
892
+ withAdditionalProperties(objectDetails, properties)
893
893
  );
894
+ };