@azure-tools/typespec-ts 0.13.0 → 0.13.1-alpha.20230609.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 (512) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +37 -1
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/modelUtils.d.ts +2 -0
  6. package/dist/src/modelUtils.d.ts.map +1 -1
  7. package/dist/src/modelUtils.js +82 -13
  8. package/dist/src/modelUtils.js.map +1 -1
  9. package/dist/src/modular/buildApiIndex.d.ts.map +1 -1
  10. package/dist/src/modular/buildApiIndex.js +1 -1
  11. package/dist/src/modular/buildApiIndex.js.map +1 -1
  12. package/dist/src/modular/buildClassicalClient.d.ts.map +1 -1
  13. package/dist/src/modular/buildClassicalClient.js +6 -6
  14. package/dist/src/modular/buildClassicalClient.js.map +1 -1
  15. package/dist/src/modular/buildClientContext.d.ts.map +1 -1
  16. package/dist/src/modular/buildClientContext.js +9 -3
  17. package/dist/src/modular/buildClientContext.js.map +1 -1
  18. package/dist/src/modular/buildCodeModel.d.ts.map +1 -1
  19. package/dist/src/modular/buildCodeModel.js +190 -169
  20. package/dist/src/modular/buildCodeModel.js.map +1 -1
  21. package/dist/src/modular/buildOperations.d.ts.map +1 -1
  22. package/dist/src/modular/buildOperations.js +20 -2
  23. package/dist/src/modular/buildOperations.js.map +1 -1
  24. package/dist/src/modular/buildRootIndex.js +2 -2
  25. package/dist/src/modular/buildRootIndex.js.map +1 -1
  26. package/dist/src/modular/buildSharedTypes.d.ts.map +1 -1
  27. package/dist/src/modular/buildSharedTypes.js +8 -10
  28. package/dist/src/modular/buildSharedTypes.js.map +1 -1
  29. package/dist/src/modular/emitModels.d.ts.map +1 -1
  30. package/dist/src/modular/emitModels.js +19 -6
  31. package/dist/src/modular/emitModels.js.map +1 -1
  32. package/dist/src/modular/helpers/clientHelpers.d.ts.map +1 -1
  33. package/dist/src/modular/helpers/clientHelpers.js +2 -11
  34. package/dist/src/modular/helpers/clientHelpers.js.map +1 -1
  35. package/dist/src/modular/helpers/credentialHelpers.js +1 -1
  36. package/dist/src/modular/helpers/credentialHelpers.js.map +1 -1
  37. package/dist/src/modular/helpers/fixmeHelpers.d.ts +2 -0
  38. package/dist/src/modular/helpers/fixmeHelpers.d.ts.map +1 -0
  39. package/dist/src/modular/helpers/fixmeHelpers.js +4 -0
  40. package/dist/src/modular/helpers/fixmeHelpers.js.map +1 -0
  41. package/dist/src/modular/helpers/namingHelpers.d.ts +10 -1
  42. package/dist/src/modular/helpers/namingHelpers.d.ts.map +1 -1
  43. package/dist/src/modular/helpers/namingHelpers.js +20 -0
  44. package/dist/src/modular/helpers/namingHelpers.js.map +1 -1
  45. package/dist/src/modular/helpers/operationHelpers.d.ts +2 -0
  46. package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -1
  47. package/dist/src/modular/helpers/operationHelpers.js +117 -35
  48. package/dist/src/modular/helpers/operationHelpers.js.map +1 -1
  49. package/dist/src/modular/helpers/parameterHelpers.js +1 -1
  50. package/dist/src/modular/helpers/parameterHelpers.js.map +1 -1
  51. package/dist/src/modular/helpers/typeHelpers.d.ts.map +1 -1
  52. package/dist/src/modular/helpers/typeHelpers.js +31 -12
  53. package/dist/src/modular/helpers/typeHelpers.js.map +1 -1
  54. package/dist/src/modular/modularCodeModel.d.ts +2 -1
  55. package/dist/src/modular/modularCodeModel.d.ts.map +1 -1
  56. package/dist/src/operationUtil.d.ts +1 -1
  57. package/dist/src/operationUtil.d.ts.map +1 -1
  58. package/dist/src/operationUtil.js +21 -3
  59. package/dist/src/operationUtil.js.map +1 -1
  60. package/dist/src/transform/transform.d.ts.map +1 -1
  61. package/dist/src/transform/transform.js +2 -2
  62. package/dist/src/transform/transform.js.map +1 -1
  63. package/dist/src/transform/transformApiVersionInfo.js +9 -0
  64. package/dist/src/transform/transformApiVersionInfo.js.map +1 -1
  65. package/dist/src/transform/transformHelperFunctionDetails.d.ts.map +1 -1
  66. package/dist/src/transform/transformHelperFunctionDetails.js +27 -1
  67. package/dist/src/transform/transformHelperFunctionDetails.js.map +1 -1
  68. package/dist/src/transform/transformParameters.d.ts +1 -0
  69. package/dist/src/transform/transformParameters.d.ts.map +1 -1
  70. package/dist/src/transform/transformParameters.js +36 -35
  71. package/dist/src/transform/transformParameters.js.map +1 -1
  72. package/dist/src/transform/transformPaths.d.ts.map +1 -1
  73. package/dist/src/transform/transformPaths.js +9 -0
  74. package/dist/src/transform/transformPaths.js.map +1 -1
  75. package/dist/src/transform/transformResponses.d.ts.map +1 -1
  76. package/dist/src/transform/transformResponses.js +10 -1
  77. package/dist/src/transform/transformResponses.js.map +1 -1
  78. package/dist/src/transform/transformSchemas.d.ts.map +1 -1
  79. package/dist/src/transform/transformSchemas.js +9 -0
  80. package/dist/src/transform/transformSchemas.js.map +1 -1
  81. package/dist/tsconfig.tsbuildinfo +1 -1
  82. package/package.json +20 -15
  83. package/src/index.ts +47 -2
  84. package/src/modelUtils.ts +90 -15
  85. package/src/modular/buildApiIndex.ts +3 -1
  86. package/src/modular/buildClassicalClient.ts +8 -6
  87. package/src/modular/buildClientContext.ts +11 -3
  88. package/src/modular/buildCodeModel.ts +221 -196
  89. package/src/modular/buildOperations.ts +23 -1
  90. package/src/modular/buildRootIndex.ts +2 -2
  91. package/src/modular/buildSharedTypes.ts +8 -10
  92. package/src/modular/emitModels.ts +14 -0
  93. package/src/modular/helpers/clientHelpers.ts +3 -13
  94. package/src/modular/helpers/credentialHelpers.ts +1 -1
  95. package/src/modular/helpers/fixmeHelpers.ts +3 -0
  96. package/src/modular/helpers/namingHelpers.ts +35 -1
  97. package/src/modular/helpers/operationHelpers.ts +173 -66
  98. package/src/modular/helpers/parameterHelpers.ts +1 -1
  99. package/src/modular/helpers/typeHelpers.ts +33 -12
  100. package/src/modular/modularCodeModel.ts +3 -1
  101. package/src/operationUtil.ts +24 -3
  102. package/src/transform/transform.ts +4 -1
  103. package/src/transform/transformApiVersionInfo.ts +8 -0
  104. package/src/transform/transformHelperFunctionDetails.ts +25 -1
  105. package/src/transform/transformParameters.ts +52 -41
  106. package/src/transform/transformPaths.ts +8 -0
  107. package/src/transform/transformResponses.ts +9 -1
  108. package/src/transform/transformSchemas.ts +8 -0
  109. package/.eslintrc.json +0 -23
  110. package/.prettierignore +0 -1
  111. package/.prettierrc +0 -7
  112. package/.rush/temp/operation/build/all.log +0 -1
  113. package/.rush/temp/operation/build/state.json +0 -3
  114. package/.rush/temp/package-deps_build.json +0 -442
  115. package/.rush/temp/shrinkwrap-deps.json +0 -490
  116. package/CONTRIBUTING.md +0 -137
  117. package/test/commands/cadl-ranch-list.ts +0 -116
  118. package/test/commands/check-clean-tree.ts +0 -55
  119. package/test/commands/childProcessOnExit.ts +0 -16
  120. package/test/commands/gen-cadl-ranch.ts +0 -25
  121. package/test/commands/run.ts +0 -31
  122. package/test/integration/arrayItemTypes.spec.ts +0 -96
  123. package/test/integration/authApiKey.spec.ts +0 -38
  124. package/test/integration/authOauth2.spec.ts +0 -65
  125. package/test/integration/authUnion.spec.ts +0 -72
  126. package/test/integration/azurecore.spec.ts +0 -170
  127. package/test/integration/collectionFormat.spec.ts +0 -118
  128. package/test/integration/dictionary.spec.ts +0 -106
  129. package/test/integration/extensibleEnums.spec.ts +0 -61
  130. package/test/integration/fixedEnums.spec.ts +0 -52
  131. package/test/integration/generated/arrays/itemTypes/src/arrayItemTypesClient.ts +0 -35
  132. package/test/integration/generated/arrays/itemTypes/src/clientDefinitions.ts +0 -165
  133. package/test/integration/generated/arrays/itemTypes/src/index.ts +0 -13
  134. package/test/integration/generated/arrays/itemTypes/src/logger.ts +0 -5
  135. package/test/integration/generated/arrays/itemTypes/src/models.ts +0 -9
  136. package/test/integration/generated/arrays/itemTypes/src/outputModels.ts +0 -9
  137. package/test/integration/generated/arrays/itemTypes/src/parameters.ts +0 -86
  138. package/test/integration/generated/arrays/itemTypes/src/responses.ts +0 -115
  139. package/test/integration/generated/arrays/itemTypes/tspconfig.yaml +0 -15
  140. package/test/integration/generated/authentication/apiKey/.eslintrc.json +0 -11
  141. package/test/integration/generated/authentication/apiKey/README.md +0 -56
  142. package/test/integration/generated/authentication/apiKey/api-extractor.json +0 -18
  143. package/test/integration/generated/authentication/apiKey/karma.conf.js +0 -133
  144. package/test/integration/generated/authentication/apiKey/package.json +0 -103
  145. package/test/integration/generated/authentication/apiKey/rollup.config.js +0 -118
  146. package/test/integration/generated/authentication/apiKey/src/authApiKeyClient.ts +0 -45
  147. package/test/integration/generated/authentication/apiKey/src/clientDefinitions.ts +0 -33
  148. package/test/integration/generated/authentication/apiKey/src/index.ts +0 -12
  149. package/test/integration/generated/authentication/apiKey/src/logger.ts +0 -5
  150. package/test/integration/generated/authentication/apiKey/src/outputModels.ts +0 -6
  151. package/test/integration/generated/authentication/apiKey/src/parameters.ts +0 -7
  152. package/test/integration/generated/authentication/apiKey/src/responses.ts +0 -21
  153. package/test/integration/generated/authentication/apiKey/test/public/sampleTest.spec.ts +0 -23
  154. package/test/integration/generated/authentication/apiKey/test/public/utils/env.browser.ts +0 -2
  155. package/test/integration/generated/authentication/apiKey/test/public/utils/env.ts +0 -6
  156. package/test/integration/generated/authentication/apiKey/test/public/utils/recordedClient.ts +0 -29
  157. package/test/integration/generated/authentication/apiKey/tsconfig.json +0 -25
  158. package/test/integration/generated/authentication/apiKey/tspconfig.yaml +0 -13
  159. package/test/integration/generated/authentication/oauth2/karma.conf.js +0 -133
  160. package/test/integration/generated/authentication/oauth2/src/authOauth2Client.ts +0 -45
  161. package/test/integration/generated/authentication/oauth2/src/clientDefinitions.ts +0 -33
  162. package/test/integration/generated/authentication/oauth2/src/index.ts +0 -12
  163. package/test/integration/generated/authentication/oauth2/src/logger.ts +0 -5
  164. package/test/integration/generated/authentication/oauth2/src/outputModels.ts +0 -6
  165. package/test/integration/generated/authentication/oauth2/src/parameters.ts +0 -7
  166. package/test/integration/generated/authentication/oauth2/src/responses.ts +0 -21
  167. package/test/integration/generated/authentication/oauth2/test/public/sampleTest.spec.ts +0 -23
  168. package/test/integration/generated/authentication/oauth2/test/public/utils/env.browser.ts +0 -2
  169. package/test/integration/generated/authentication/oauth2/test/public/utils/env.ts +0 -6
  170. package/test/integration/generated/authentication/oauth2/test/public/utils/recordedClient.ts +0 -29
  171. package/test/integration/generated/authentication/oauth2/tspconfig.yaml +0 -15
  172. package/test/integration/generated/authentication/union/karma.conf.js +0 -133
  173. package/test/integration/generated/authentication/union/src/authUnionClient.ts +0 -46
  174. package/test/integration/generated/authentication/union/src/clientDefinitions.ts +0 -27
  175. package/test/integration/generated/authentication/union/src/index.ts +0 -11
  176. package/test/integration/generated/authentication/union/src/logger.ts +0 -5
  177. package/test/integration/generated/authentication/union/src/parameters.ts +0 -7
  178. package/test/integration/generated/authentication/union/src/responses.ts +0 -14
  179. package/test/integration/generated/authentication/union/test/public/sampleTest.spec.ts +0 -23
  180. package/test/integration/generated/authentication/union/test/public/utils/env.browser.ts +0 -2
  181. package/test/integration/generated/authentication/union/test/public/utils/env.ts +0 -6
  182. package/test/integration/generated/authentication/union/test/public/utils/recordedClient.ts +0 -29
  183. package/test/integration/generated/authentication/union/tspconfig.yaml +0 -15
  184. package/test/integration/generated/azure/core/.eslintrc.json +0 -11
  185. package/test/integration/generated/azure/core/README.md +0 -56
  186. package/test/integration/generated/azure/core/api-extractor.json +0 -18
  187. package/test/integration/generated/azure/core/package.json +0 -81
  188. package/test/integration/generated/azure/core/rollup.config.js +0 -118
  189. package/test/integration/generated/azure/core/src/azureCoreClient.ts +0 -35
  190. package/test/integration/generated/azure/core/src/clientDefinitions.ts +0 -108
  191. package/test/integration/generated/azure/core/src/index.ts +0 -16
  192. package/test/integration/generated/azure/core/src/isUnexpected.ts +0 -178
  193. package/test/integration/generated/azure/core/src/logger.ts +0 -5
  194. package/test/integration/generated/azure/core/src/models.ts +0 -18
  195. package/test/integration/generated/azure/core/src/outputModels.ts +0 -38
  196. package/test/integration/generated/azure/core/src/paginateHelper.ts +0 -204
  197. package/test/integration/generated/azure/core/src/parameters.ts +0 -68
  198. package/test/integration/generated/azure/core/src/responses.ts +0 -158
  199. package/test/integration/generated/azure/core/src/serializeHelper.ts +0 -16
  200. package/test/integration/generated/azure/core/tsconfig.json +0 -25
  201. package/test/integration/generated/azure/core/tspconfig.yaml +0 -15
  202. package/test/integration/generated/azure/core-traits/.eslintrc.json +0 -11
  203. package/test/integration/generated/azure/core-traits/README.md +0 -56
  204. package/test/integration/generated/azure/core-traits/api-extractor.json +0 -18
  205. package/test/integration/generated/azure/core-traits/package.json +0 -80
  206. package/test/integration/generated/azure/core-traits/rollup.config.js +0 -118
  207. package/test/integration/generated/azure/core-traits/src/azureCoreTraitsClient.ts +0 -35
  208. package/test/integration/generated/azure/core-traits/src/clientDefinitions.ts +0 -22
  209. package/test/integration/generated/azure/core-traits/src/index.ts +0 -13
  210. package/test/integration/generated/azure/core-traits/src/isUnexpected.ts +0 -97
  211. package/test/integration/generated/azure/core-traits/src/logger.ts +0 -5
  212. package/test/integration/generated/azure/core-traits/src/outputModels.ts +0 -25
  213. package/test/integration/generated/azure/core-traits/src/parameters.ts +0 -26
  214. package/test/integration/generated/azure/core-traits/src/responses.ts +0 -32
  215. package/test/integration/generated/azure/core-traits/tsconfig.json +0 -25
  216. package/test/integration/generated/azure/core-traits/tspconfig.yaml +0 -15
  217. package/test/integration/generated/dictionary/.eslintrc.json +0 -11
  218. package/test/integration/generated/dictionary/README.md +0 -56
  219. package/test/integration/generated/dictionary/api-extractor.json +0 -18
  220. package/test/integration/generated/dictionary/package.json +0 -80
  221. package/test/integration/generated/dictionary/rollup.config.js +0 -118
  222. package/test/integration/generated/dictionary/src/clientDefinitions.ts +0 -180
  223. package/test/integration/generated/dictionary/src/dictClient.ts +0 -33
  224. package/test/integration/generated/dictionary/src/index.ts +0 -13
  225. package/test/integration/generated/dictionary/src/logger.ts +0 -5
  226. package/test/integration/generated/dictionary/src/models.ts +0 -9
  227. package/test/integration/generated/dictionary/src/outputModels.ts +0 -9
  228. package/test/integration/generated/dictionary/src/parameters.ts +0 -94
  229. package/test/integration/generated/dictionary/src/responses.ts +0 -126
  230. package/test/integration/generated/dictionary/tsconfig.json +0 -25
  231. package/test/integration/generated/dictionary/tspconfig.yaml +0 -15
  232. package/test/integration/generated/enums/extensible/.eslintrc.json +0 -11
  233. package/test/integration/generated/enums/extensible/README.md +0 -56
  234. package/test/integration/generated/enums/extensible/api-extractor.json +0 -18
  235. package/test/integration/generated/enums/extensible/package.json +0 -80
  236. package/test/integration/generated/enums/extensible/rollup.config.js +0 -118
  237. package/test/integration/generated/enums/extensible/src/clientDefinitions.ts +0 -45
  238. package/test/integration/generated/enums/extensible/src/index.ts +0 -11
  239. package/test/integration/generated/enums/extensible/src/logger.ts +0 -5
  240. package/test/integration/generated/enums/extensible/src/parameters.ts +0 -23
  241. package/test/integration/generated/enums/extensible/src/responses.ts +0 -26
  242. package/test/integration/generated/enums/extensible/src/typeEnumExtensible.ts +0 -35
  243. package/test/integration/generated/enums/extensible/tsconfig.json +0 -25
  244. package/test/integration/generated/enums/extensible/tspconfig.yaml +0 -14
  245. package/test/integration/generated/enums/fixed/.eslintrc.json +0 -11
  246. package/test/integration/generated/enums/fixed/README.md +0 -56
  247. package/test/integration/generated/enums/fixed/api-extractor.json +0 -18
  248. package/test/integration/generated/enums/fixed/package.json +0 -80
  249. package/test/integration/generated/enums/fixed/rollup.config.js +0 -118
  250. package/test/integration/generated/enums/fixed/src/clientDefinitions.ts +0 -43
  251. package/test/integration/generated/enums/fixed/src/index.ts +0 -11
  252. package/test/integration/generated/enums/fixed/src/logger.ts +0 -5
  253. package/test/integration/generated/enums/fixed/src/parameters.ts +0 -36
  254. package/test/integration/generated/enums/fixed/src/responses.ts +0 -27
  255. package/test/integration/generated/enums/fixed/src/typeEnumFixed.ts +0 -35
  256. package/test/integration/generated/enums/fixed/tsconfig.json +0 -25
  257. package/test/integration/generated/enums/fixed/tspconfig.yaml +0 -14
  258. package/test/integration/generated/hello/.eslintrc.json +0 -11
  259. package/test/integration/generated/hello/README.md +0 -56
  260. package/test/integration/generated/hello/api-extractor.json +0 -18
  261. package/test/integration/generated/hello/package.json +0 -80
  262. package/test/integration/generated/hello/rollup.config.js +0 -118
  263. package/test/integration/generated/hello/src/clientDefinitions.ts +0 -19
  264. package/test/integration/generated/hello/src/hello.ts +0 -29
  265. package/test/integration/generated/hello/src/index.ts +0 -11
  266. package/test/integration/generated/hello/src/parameters.ts +0 -6
  267. package/test/integration/generated/hello/src/responses.ts +0 -10
  268. package/test/integration/generated/hello/tsconfig.json +0 -25
  269. package/test/integration/generated/hello/tspconfig.yaml +0 -14
  270. package/test/integration/generated/internal/src/clientDefinitions.ts +0 -53
  271. package/test/integration/generated/internal/src/index.ts +0 -12
  272. package/test/integration/generated/internal/src/internalClient.ts +0 -35
  273. package/test/integration/generated/internal/src/logger.ts +0 -5
  274. package/test/integration/generated/internal/src/outputModels.ts +0 -17
  275. package/test/integration/generated/internal/src/parameters.ts +0 -45
  276. package/test/integration/generated/internal/src/responses.ts +0 -33
  277. package/test/integration/generated/internal/tspconfig.yaml +0 -14
  278. package/test/integration/generated/lro/lroCore/.eslintrc.json +0 -11
  279. package/test/integration/generated/lro/lroCore/README.md +0 -56
  280. package/test/integration/generated/lro/lroCore/api-extractor.json +0 -18
  281. package/test/integration/generated/lro/lroCore/package.json +0 -82
  282. package/test/integration/generated/lro/lroCore/rollup.config.js +0 -118
  283. package/test/integration/generated/lro/lroCore/src/clientDefinitions.ts +0 -54
  284. package/test/integration/generated/lro/lroCore/src/index.ts +0 -15
  285. package/test/integration/generated/lro/lroCore/src/isUnexpected.ts +0 -135
  286. package/test/integration/generated/lro/lroCore/src/logger.ts +0 -5
  287. package/test/integration/generated/lro/lroCore/src/models.ts +0 -8
  288. package/test/integration/generated/lro/lroCore/src/outputModels.ts +0 -50
  289. package/test/integration/generated/lro/lroCore/src/parameters.ts +0 -25
  290. package/test/integration/generated/lro/lroCore/src/pollingHelper.ts +0 -113
  291. package/test/integration/generated/lro/lroCore/src/responses.ts +0 -109
  292. package/test/integration/generated/lro/lroCore/src/specsAzureCoreLroStandard.ts +0 -35
  293. package/test/integration/generated/lro/lroCore/tsconfig.json +0 -25
  294. package/test/integration/generated/lro/lroCore/tspconfig.yaml +0 -14
  295. package/test/integration/generated/lro/lroRPC/.eslintrc.json +0 -11
  296. package/test/integration/generated/lro/lroRPC/README.md +0 -56
  297. package/test/integration/generated/lro/lroRPC/api-extractor.json +0 -18
  298. package/test/integration/generated/lro/lroRPC/package.json +0 -82
  299. package/test/integration/generated/lro/lroRPC/rollup.config.js +0 -118
  300. package/test/integration/generated/lro/lroRPC/src/clientDefinitions.ts +0 -79
  301. package/test/integration/generated/lro/lroRPC/src/index.ts +0 -15
  302. package/test/integration/generated/lro/lroRPC/src/isUnexpected.ts +0 -153
  303. package/test/integration/generated/lro/lroRPC/src/logger.ts +0 -5
  304. package/test/integration/generated/lro/lroRPC/src/models.ts +0 -8
  305. package/test/integration/generated/lro/lroRPC/src/outputModels.ts +0 -40
  306. package/test/integration/generated/lro/lroRPC/src/parameters.ts +0 -20
  307. package/test/integration/generated/lro/lroRPC/src/pollingHelper.ts +0 -127
  308. package/test/integration/generated/lro/lroRPC/src/responses.ts +0 -124
  309. package/test/integration/generated/lro/lroRPC/src/specsAzureCoreLroRpc.ts +0 -35
  310. package/test/integration/generated/lro/lroRPC/tsconfig.json +0 -25
  311. package/test/integration/generated/lro/lroRPC/tspconfig.yaml +0 -14
  312. package/test/integration/generated/models/inheritance/.eslintrc.json +0 -11
  313. package/test/integration/generated/models/inheritance/README.md +0 -56
  314. package/test/integration/generated/models/inheritance/api-extractor.json +0 -18
  315. package/test/integration/generated/models/inheritance/package.json +0 -80
  316. package/test/integration/generated/models/inheritance/rollup.config.js +0 -118
  317. package/test/integration/generated/models/inheritance/src/clientDefinitions.ts +0 -81
  318. package/test/integration/generated/models/inheritance/src/index.ts +0 -13
  319. package/test/integration/generated/models/inheritance/src/logger.ts +0 -5
  320. package/test/integration/generated/models/inheritance/src/models.ts +0 -52
  321. package/test/integration/generated/models/inheritance/src/outputModels.ts +0 -52
  322. package/test/integration/generated/models/inheritance/src/parameters.ts +0 -35
  323. package/test/integration/generated/models/inheritance/src/responses.ts +0 -56
  324. package/test/integration/generated/models/inheritance/src/typeModelInheritance.ts +0 -35
  325. package/test/integration/generated/models/inheritance/tsconfig.json +0 -25
  326. package/test/integration/generated/models/inheritance/tspconfig.yaml +0 -14
  327. package/test/integration/generated/models/propertyNullable/.eslintrc.json +0 -11
  328. package/test/integration/generated/models/propertyNullable/README.md +0 -56
  329. package/test/integration/generated/models/propertyNullable/api-extractor.json +0 -18
  330. package/test/integration/generated/models/propertyNullable/package.json +0 -80
  331. package/test/integration/generated/models/propertyNullable/rollup.config.js +0 -118
  332. package/test/integration/generated/models/propertyNullable/src/clientDefinitions.ts +0 -227
  333. package/test/integration/generated/models/propertyNullable/src/index.ts +0 -13
  334. package/test/integration/generated/models/propertyNullable/src/logger.ts +0 -5
  335. package/test/integration/generated/models/propertyNullable/src/models.ts +0 -56
  336. package/test/integration/generated/models/propertyNullable/src/outputModels.ts +0 -56
  337. package/test/integration/generated/models/propertyNullable/src/parameters.ts +0 -197
  338. package/test/integration/generated/models/propertyNullable/src/responses.ts +0 -144
  339. package/test/integration/generated/models/propertyNullable/src/typePropertyNullable.ts +0 -35
  340. package/test/integration/generated/models/propertyNullable/tsconfig.json +0 -25
  341. package/test/integration/generated/models/propertyNullable/tspconfig.yaml +0 -14
  342. package/test/integration/generated/models/propertyOptional/.eslintrc.json +0 -11
  343. package/test/integration/generated/models/propertyOptional/README.md +0 -56
  344. package/test/integration/generated/models/propertyOptional/api-extractor.json +0 -18
  345. package/test/integration/generated/models/propertyOptional/package.json +0 -80
  346. package/test/integration/generated/models/propertyOptional/rollup.config.js +0 -118
  347. package/test/integration/generated/models/propertyOptional/src/clientDefinitions.ts +0 -263
  348. package/test/integration/generated/models/propertyOptional/src/index.ts +0 -13
  349. package/test/integration/generated/models/propertyOptional/src/logger.ts +0 -5
  350. package/test/integration/generated/models/propertyOptional/src/models.ts +0 -46
  351. package/test/integration/generated/models/propertyOptional/src/outputModels.ts +0 -46
  352. package/test/integration/generated/models/propertyOptional/src/parameters.ts +0 -125
  353. package/test/integration/generated/models/propertyOptional/src/responses.ts +0 -169
  354. package/test/integration/generated/models/propertyOptional/src/typePropertyOptional.ts +0 -35
  355. package/test/integration/generated/models/propertyOptional/tsconfig.json +0 -25
  356. package/test/integration/generated/models/propertyOptional/tspconfig.yaml +0 -14
  357. package/test/integration/generated/models/propertyTypes/.eslintrc.json +0 -11
  358. package/test/integration/generated/models/propertyTypes/README.md +0 -56
  359. package/test/integration/generated/models/propertyTypes/api-extractor.json +0 -18
  360. package/test/integration/generated/models/propertyTypes/package.json +0 -80
  361. package/test/integration/generated/models/propertyTypes/rollup.config.js +0 -118
  362. package/test/integration/generated/models/propertyTypes/src/clientDefinitions.ts +0 -310
  363. package/test/integration/generated/models/propertyTypes/src/index.ts +0 -13
  364. package/test/integration/generated/models/propertyTypes/src/logger.ts +0 -5
  365. package/test/integration/generated/models/propertyTypes/src/models.ts +0 -123
  366. package/test/integration/generated/models/propertyTypes/src/outputModels.ts +0 -123
  367. package/test/integration/generated/models/propertyTypes/src/parameters.ts +0 -189
  368. package/test/integration/generated/models/propertyTypes/src/responses.ts +0 -234
  369. package/test/integration/generated/models/propertyTypes/src/typePropertyValueTypes.ts +0 -35
  370. package/test/integration/generated/models/propertyTypes/tsconfig.json +0 -25
  371. package/test/integration/generated/models/propertyTypes/tspconfig.yaml +0 -14
  372. package/test/integration/generated/models/usage/.eslintrc.json +0 -11
  373. package/test/integration/generated/models/usage/README.md +0 -56
  374. package/test/integration/generated/models/usage/api-extractor.json +0 -18
  375. package/test/integration/generated/models/usage/package.json +0 -80
  376. package/test/integration/generated/models/usage/rollup.config.js +0 -118
  377. package/test/integration/generated/models/usage/src/clientDefinitions.ts +0 -41
  378. package/test/integration/generated/models/usage/src/index.ts +0 -13
  379. package/test/integration/generated/models/usage/src/logger.ts +0 -5
  380. package/test/integration/generated/models/usage/src/models.ts +0 -12
  381. package/test/integration/generated/models/usage/src/outputModels.ts +0 -12
  382. package/test/integration/generated/models/usage/src/parameters.ts +0 -19
  383. package/test/integration/generated/models/usage/src/responses.ts +0 -22
  384. package/test/integration/generated/models/usage/src/typeModelUsage.ts +0 -35
  385. package/test/integration/generated/models/usage/tsconfig.json +0 -25
  386. package/test/integration/generated/models/usage/tspconfig.yaml +0 -14
  387. package/test/integration/generated/models/visibility/.eslintrc.json +0 -11
  388. package/test/integration/generated/models/visibility/README.md +0 -56
  389. package/test/integration/generated/models/visibility/api-extractor.json +0 -18
  390. package/test/integration/generated/models/visibility/package.json +0 -80
  391. package/test/integration/generated/models/visibility/rollup.config.js +0 -118
  392. package/test/integration/generated/models/visibility/src/clientDefinitions.ts +0 -40
  393. package/test/integration/generated/models/visibility/src/index.ts +0 -13
  394. package/test/integration/generated/models/visibility/src/logger.ts +0 -5
  395. package/test/integration/generated/models/visibility/src/models.ts +0 -14
  396. package/test/integration/generated/models/visibility/src/outputModels.ts +0 -16
  397. package/test/integration/generated/models/visibility/src/parameters.ts +0 -41
  398. package/test/integration/generated/models/visibility/src/responses.ts +0 -36
  399. package/test/integration/generated/models/visibility/src/typeModelVisibility.ts +0 -35
  400. package/test/integration/generated/models/visibility/tsconfig.json +0 -25
  401. package/test/integration/generated/models/visibility/tspconfig.yaml +0 -14
  402. package/test/integration/generated/parameters/collection-format/src/clientDefinitions.ts +0 -63
  403. package/test/integration/generated/parameters/collection-format/src/collectionFormatClient.ts +0 -35
  404. package/test/integration/generated/parameters/collection-format/src/index.ts +0 -12
  405. package/test/integration/generated/parameters/collection-format/src/logger.ts +0 -5
  406. package/test/integration/generated/parameters/collection-format/src/parameters.ts +0 -71
  407. package/test/integration/generated/parameters/collection-format/src/responses.ts +0 -34
  408. package/test/integration/generated/parameters/collection-format/src/serializeHelper.ts +0 -28
  409. package/test/integration/generated/parameters/collection-format/tspconfig.yaml +0 -14
  410. package/test/integration/generated/parameters/spread/src/clientDefinitions.ts +0 -61
  411. package/test/integration/generated/parameters/spread/src/index.ts +0 -12
  412. package/test/integration/generated/parameters/spread/src/logger.ts +0 -5
  413. package/test/integration/generated/parameters/spread/src/models.ts +0 -7
  414. package/test/integration/generated/parameters/spread/src/parameters.ts +0 -61
  415. package/test/integration/generated/parameters/spread/src/parametersSpread.ts +0 -35
  416. package/test/integration/generated/parameters/spread/src/responses.ts +0 -25
  417. package/test/integration/generated/parameters/spread/tspconfig.yaml +0 -12
  418. package/test/integration/generated/projection/src/clientDefinitions.ts +0 -71
  419. package/test/integration/generated/projection/src/index.ts +0 -12
  420. package/test/integration/generated/projection/src/logger.ts +0 -5
  421. package/test/integration/generated/projection/src/models.ts +0 -22
  422. package/test/integration/generated/projection/src/parameters.ts +0 -48
  423. package/test/integration/generated/projection/src/projectionClient.ts +0 -35
  424. package/test/integration/generated/projection/src/responses.ts +0 -34
  425. package/test/integration/generated/projection/tspconfig.yaml +0 -14
  426. package/test/integration/generated/resiliency/srvDriven1/.eslintrc.json +0 -11
  427. package/test/integration/generated/resiliency/srvDriven1/README.md +0 -56
  428. package/test/integration/generated/resiliency/srvDriven1/api-extractor.json +0 -18
  429. package/test/integration/generated/resiliency/srvDriven1/package.json +0 -80
  430. package/test/integration/generated/resiliency/srvDriven1/rollup.config.js +0 -118
  431. package/test/integration/generated/resiliency/srvDriven1/src/clientDefinitions.ts +0 -46
  432. package/test/integration/generated/resiliency/srvDriven1/src/index.ts +0 -11
  433. package/test/integration/generated/resiliency/srvDriven1/src/logger.ts +0 -5
  434. package/test/integration/generated/resiliency/srvDriven1/src/parameters.ts +0 -30
  435. package/test/integration/generated/resiliency/srvDriven1/src/responses.ts +0 -19
  436. package/test/integration/generated/resiliency/srvDriven1/src/serviceDrivenOldClient.ts +0 -43
  437. package/test/integration/generated/resiliency/srvDriven1/tsconfig.json +0 -25
  438. package/test/integration/generated/resiliency/srvDriven1/tspconfig.yaml +0 -15
  439. package/test/integration/generated/resiliency/srvDriven2/.eslintrc.json +0 -11
  440. package/test/integration/generated/resiliency/srvDriven2/README.md +0 -65
  441. package/test/integration/generated/resiliency/srvDriven2/api-extractor.json +0 -18
  442. package/test/integration/generated/resiliency/srvDriven2/package.json +0 -80
  443. package/test/integration/generated/resiliency/srvDriven2/rollup.config.js +0 -118
  444. package/test/integration/generated/resiliency/srvDriven2/src/clientDefinitions.ts +0 -57
  445. package/test/integration/generated/resiliency/srvDriven2/src/index.ts +0 -11
  446. package/test/integration/generated/resiliency/srvDriven2/src/logger.ts +0 -5
  447. package/test/integration/generated/resiliency/srvDriven2/src/parameters.ts +0 -45
  448. package/test/integration/generated/resiliency/srvDriven2/src/responses.ts +0 -24
  449. package/test/integration/generated/resiliency/srvDriven2/src/serviceDrivenNewClient.ts +0 -43
  450. package/test/integration/generated/resiliency/srvDriven2/tsconfig.json +0 -25
  451. package/test/integration/generated/resiliency/srvDriven2/tspconfig.yaml +0 -15
  452. package/test/integration/generated/server/path/multiple/src/clientDefinitions.ts +0 -35
  453. package/test/integration/generated/server/path/multiple/src/index.ts +0 -11
  454. package/test/integration/generated/server/path/multiple/src/logger.ts +0 -5
  455. package/test/integration/generated/server/path/multiple/src/multipleParamInServerPathClient.ts +0 -43
  456. package/test/integration/generated/server/path/multiple/src/parameters.ts +0 -7
  457. package/test/integration/generated/server/path/multiple/src/responses.ts +0 -14
  458. package/test/integration/generated/server/path/multiple/tspconfig.yaml +0 -14
  459. package/test/integration/generated/server/path/single/src/clientDefinitions.ts +0 -19
  460. package/test/integration/generated/server/path/single/src/index.ts +0 -11
  461. package/test/integration/generated/server/path/single/src/logger.ts +0 -5
  462. package/test/integration/generated/server/path/single/src/parameters.ts +0 -6
  463. package/test/integration/generated/server/path/single/src/responses.ts +0 -9
  464. package/test/integration/generated/server/path/single/src/singleParamInServerPathClient.ts +0 -38
  465. package/test/integration/generated/server/path/single/tspconfig.yaml +0 -14
  466. package/test/integration/generated/specialWords/src/clientDefinitions.ts +0 -61
  467. package/test/integration/generated/specialWords/src/index.ts +0 -13
  468. package/test/integration/generated/specialWords/src/logger.ts +0 -5
  469. package/test/integration/generated/specialWords/src/models.ts +0 -17
  470. package/test/integration/generated/specialWords/src/outputModels.ts +0 -17
  471. package/test/integration/generated/specialWords/src/parameters.ts +0 -37
  472. package/test/integration/generated/specialWords/src/responses.ts +0 -31
  473. package/test/integration/generated/specialWords/src/specialWordsClient.ts +0 -35
  474. package/test/integration/generated/specialWords/tspconfig.yaml +0 -14
  475. package/test/integration/generated/unions/src/clientDefinitions.ts +0 -53
  476. package/test/integration/generated/unions/src/index.ts +0 -12
  477. package/test/integration/generated/unions/src/logger.ts +0 -5
  478. package/test/integration/generated/unions/src/models.ts +0 -27
  479. package/test/integration/generated/unions/src/parameters.ts +0 -34
  480. package/test/integration/generated/unions/src/responses.ts +0 -24
  481. package/test/integration/generated/unions/src/unionsClient.ts +0 -35
  482. package/test/integration/generated/unions/tspconfig.yaml +0 -14
  483. package/test/integration/internal.spec.ts +0 -76
  484. package/test/integration/lroCore.spec.ts +0 -89
  485. package/test/integration/modelInheritance.spec.ts +0 -192
  486. package/test/integration/modelPropertyNullable.spec.ts +0 -115
  487. package/test/integration/modelPropertyOptional.spec.ts +0 -362
  488. package/test/integration/modelPropertyType.spec.ts +0 -135
  489. package/test/integration/modelUsage.spec.ts +0 -47
  490. package/test/integration/projection.spec.ts +0 -102
  491. package/test/integration/resiliencyDpgCustomization.spec.ts +0 -147
  492. package/test/integration/server.spec.ts +0 -59
  493. package/test/integration/specialWords.spec.ts +0 -73
  494. package/test/integration/spreadParameters.spec.ts +0 -82
  495. package/test/integration/unions.spec.ts +0 -69
  496. package/test/tsconfig.json +0 -4
  497. package/test/unit/apiVersion.spec.ts +0 -400
  498. package/test/unit/azureCoreOperationsGenerator.spec.ts +0 -71
  499. package/test/unit/clientDefinitionGenerator.spec.ts +0 -73
  500. package/test/unit/clientFactoryGenerator.spec.ts +0 -404
  501. package/test/unit/docsGenerator.spec.ts +0 -201
  502. package/test/unit/modelsGenerator.spec.ts +0 -1529
  503. package/test/unit/parametersGenerator.spec.ts +0 -561
  504. package/test/unit/responsesGenerator.spec.ts +0 -462
  505. package/test/unit/spreadAndAlias.spec.ts +0 -200
  506. package/test/unit/util/emitUtil.ts +0 -166
  507. package/test/unit/util/testUtil.ts +0 -88
  508. package/test/util/customBearerTokenTestingPolicy.ts +0 -78
  509. package/test/util/matrix.ts +0 -48
  510. package/tsconfig.json +0 -36
  511. package/tsconfig.test.json +0 -7
  512. package/typespec-ts.build.log +0 -1
@@ -33,10 +33,10 @@ import {
33
33
  EmitContext,
34
34
  listServices,
35
35
  Union,
36
- isNullType,
37
- SyntaxKind,
38
36
  Type,
39
- getProjectedName
37
+ IntrinsicType,
38
+ getProjectedName,
39
+ isNullType
40
40
  } from "@typespec/compiler";
41
41
  import {
42
42
  getAuthentication,
@@ -64,7 +64,11 @@ import {
64
64
  getDefaultApiVersion,
65
65
  getClientNamespaceString,
66
66
  createSdkContext,
67
- SdkContext
67
+ SdkContext,
68
+ getSdkUnion,
69
+ getAllModels,
70
+ SdkSimpleType,
71
+ getSdkSimpleType
68
72
  } from "@azure-tools/typespec-client-generator-core";
69
73
  import { getResourceOperation } from "@typespec/rest";
70
74
  import {
@@ -160,12 +164,12 @@ function isLro(_program: Program, operation: Operation): boolean {
160
164
  return false;
161
165
  }
162
166
 
163
- function handleDiscriminator(program: Program, type: Model, model: any) {
164
- const discriminator = getDiscriminator(program, type);
167
+ function handleDiscriminator(context: SdkContext, type: Model, model: any) {
168
+ const discriminator = getDiscriminator(context.program, type);
165
169
  if (discriminator) {
166
170
  let discriminatorProperty;
167
171
  for (const childModel of type.derivedModels) {
168
- const modelType = getType(program, childModel);
172
+ const modelType = getType(context, childModel);
169
173
  for (const property of modelType.properties) {
170
174
  if (property.restApiName === discriminator.propertyName) {
171
175
  modelType.discriminatorValue = property.type.value;
@@ -190,7 +194,7 @@ function handleDiscriminator(program: Program, type: Model, model: any) {
190
194
  }
191
195
  }
192
196
 
193
- function getEffectiveSchemaType(program: Program, type: Model): Model {
197
+ function getEffectiveSchemaType(program: Program, type: Model | Union): Model {
194
198
  function isSchemaProperty(property: ModelProperty) {
195
199
  const headerInfo = getHeaderFieldName(program, property);
196
200
  const queryInfo = getQueryParamName(program, property);
@@ -199,41 +203,95 @@ function getEffectiveSchemaType(program: Program, type: Model): Model {
199
203
  return !(headerInfo || queryInfo || pathInfo || statusCodeinfo);
200
204
  }
201
205
 
202
- const effective = getEffectiveModelType(program, type, isSchemaProperty);
206
+ let effective: Model;
207
+ if (type.kind === "Union") {
208
+ const nonNullOptions = [...type.variants.values()]
209
+ .map((x) => x.type)
210
+ .filter((t) => !isNullType(t));
211
+ if (nonNullOptions.length === 1 && nonNullOptions[0]?.kind === "Model") {
212
+ effective = getEffectiveModelType(program, nonNullOptions[0]);
213
+ }
214
+ return type as any;
215
+ } else {
216
+ effective = getEffectiveModelType(program, type, isSchemaProperty);
217
+ }
218
+
203
219
  if (effective.name) {
204
220
  return effective;
205
221
  }
206
- return type;
222
+ return type as Model;
207
223
  }
208
224
 
209
- function getType(program: Program, type: EmitterType): any {
225
+ function isEmptyModel(type: EmitterType): boolean {
226
+ // object, {}, Model{} all will be treated as empty model
227
+ return (
228
+ type.kind === "Model" &&
229
+ type.properties.size === 0 &&
230
+ !type.baseModel &&
231
+ type.derivedModels.length === 0 &&
232
+ !type.indexer
233
+ );
234
+ }
235
+
236
+ function processModelProperties(
237
+ context: SdkContext,
238
+ newValue: any,
239
+ model: Model
240
+ ) {
241
+ // need to do properties after insertion to avoid infinite recursion
242
+ for (const property of model.properties.values()) {
243
+ if (
244
+ isStatusCode(context.program, property) ||
245
+ isNeverType(property.type) ||
246
+ isHeader(context.program, property)
247
+ ) {
248
+ continue;
249
+ }
250
+ newValue.properties.push(emitProperty(context, property));
251
+ }
252
+ // need to do discriminator outside `emitModel` to avoid infinite recursion
253
+ handleDiscriminator(context, model, newValue);
254
+ }
255
+
256
+ function getType(
257
+ context: SdkContext,
258
+ type: EmitterType,
259
+ options: { disableEffectiveModel?: boolean } = {}
260
+ ): any {
210
261
  // don't cache simple type(string, int, etc) since decorators may change the result
211
- const enableCache = !isSimpleType(program, type);
262
+ const enableCache =
263
+ !isSimpleType(context.program, type) && !isEmptyModel(type);
212
264
  const effectiveModel =
213
- type.kind === "Model" ? getEffectiveSchemaType(program, type) : type;
265
+ !options.disableEffectiveModel &&
266
+ (type.kind === "Model" || type.kind === "Union")
267
+ ? getEffectiveSchemaType(context.program, type)
268
+ : type;
214
269
  if (enableCache) {
215
270
  const cached = typesMap.get(effectiveModel);
216
271
  if (cached) {
217
272
  return cached;
218
273
  }
219
274
  }
220
- let newValue: any = emitType(program, type);
275
+ let newValue: any;
276
+ if (isEmptyModel(type)) {
277
+ // do not generate model for empty model, treat it as any
278
+ newValue = { type: "any" };
279
+ } else {
280
+ newValue = emitType(context, type);
281
+ }
282
+
221
283
  if (enableCache) {
222
284
  typesMap.set(effectiveModel, newValue);
223
- if (type.kind === "Model") {
224
- // need to do properties after insertion to avoid infinite recursion
225
- for (const property of type.properties.values()) {
226
- if (
227
- isStatusCode(program, property) ||
228
- isNeverType(property.type) ||
229
- isHeader(program, property)
230
- ) {
231
- continue;
285
+ if (type.kind === "Union") {
286
+ for (const t of type.variants.values()) {
287
+ if (t.type.kind === "Model") {
288
+ processModelProperties(context, newValue, t.type);
232
289
  }
233
- newValue.properties.push(emitProperty(program, property));
234
290
  }
235
- // need to do discriminator outside `emitModel` to avoid infinite recursion
236
- handleDiscriminator(program, type, newValue);
291
+ }
292
+ if (type.kind === "Model") {
293
+ // need to do properties after insertion to avoid infinite recursion
294
+ processModelProperties(context, newValue, type);
237
295
  }
238
296
  } else {
239
297
  const key = JSON.stringify(newValue);
@@ -336,12 +394,12 @@ function getBodyType(program: Program, route: HttpOperation): Type {
336
394
  }
337
395
 
338
396
  function emitBodyParameter(
339
- program: Program,
397
+ context: SdkContext,
340
398
  httpOperation: HttpOperation
341
399
  ): BodyParameter {
342
400
  const params = httpOperation.parameters;
343
401
  const body = params.body!;
344
- const base = emitParamBase(program, body.parameter ?? body.type);
402
+ const base = emitParamBase(context.program, body.parameter ?? body.type);
345
403
  let contentTypes = body.contentTypes;
346
404
  if (contentTypes.length === 0) {
347
405
  contentTypes = ["application/json"];
@@ -349,7 +407,9 @@ function emitBodyParameter(
349
407
  if (contentTypes.length !== 1) {
350
408
  throw Error("Currently only one kind of content-type!");
351
409
  }
352
- const type = getType(program, getBodyType(program, httpOperation));
410
+ const type = getType(context, getBodyType(context.program, httpOperation), {
411
+ disableEffectiveModel: true
412
+ });
353
413
 
354
414
  if (type.type === "model" && type.name === "") {
355
415
  type.name = capitalize(httpOperation.operation.name) + "Request";
@@ -374,7 +434,7 @@ function emitParameter(
374
434
  implementation: string
375
435
  ): Parameter {
376
436
  const base = emitParamBase(context.program, parameter.param);
377
- let type = getType(context.program, parameter.param.type);
437
+ let type = getType(context, parameter.param.type);
378
438
  let clientDefaultValue = undefined;
379
439
  if (
380
440
  parameter.name.toLowerCase() === "content-type" &&
@@ -414,28 +474,6 @@ function emitParameter(
414
474
  return { clientDefaultValue, ...base, ...paramMap };
415
475
  }
416
476
 
417
- function emitContentTypeParameter(
418
- bodyParameter: any,
419
- inOverload: boolean,
420
- inOverriden: boolean
421
- ) {
422
- return {
423
- checkClientInput: false,
424
- clientDefaultValue: bodyParameter.defaultContentType,
425
- clientName: "content_type",
426
- delimiter: null,
427
- description: `Body parameter Content-Type. Known values are: ${bodyParameter.contentTypes}.`,
428
- implementation: "Method",
429
- inDocstring: true,
430
- inOverload: inOverload,
431
- inOverriden: inOverriden,
432
- location: "header",
433
- optional: true,
434
- restApiName: "Content-Type",
435
- type: { type: "string" }
436
- };
437
- }
438
-
439
477
  function emitFlattenedParameter(
440
478
  bodyParameter: Record<string, any>,
441
479
  property: any
@@ -478,33 +516,8 @@ function getConstantType(key: string): HrlcType {
478
516
  return type;
479
517
  }
480
518
 
481
- function emitAcceptParameter(
482
- _program: Program,
483
- inOverload: boolean,
484
- inOverriden: boolean
485
- ): Record<string, any> {
486
- return {
487
- checkClientInput: false,
488
- clientDefaultValue: "application/json",
489
- clientName: "accept",
490
- delimiter: null,
491
- description: "Accept header.",
492
- explode: false,
493
- groupedBy: null,
494
- implementation: "Method",
495
- inDocstring: true,
496
- inOverload: inOverload,
497
- inOverriden: inOverriden,
498
- location: "header",
499
- optional: false,
500
- restApiName: "Accept",
501
- skipUrlEncoding: false,
502
- type: getConstantType("application/json")
503
- };
504
- }
505
-
506
519
  function emitResponseHeaders(
507
- program: Program,
520
+ context: SdkContext,
508
521
  headers?: Record<string, ModelProperty>
509
522
  ): Header[] {
510
523
  const retval: Header[] = [];
@@ -513,7 +526,7 @@ function emitResponseHeaders(
513
526
  }
514
527
  for (const [key, value] of Object.entries(headers)) {
515
528
  retval.push({
516
- type: getType(program, value.type),
529
+ type: getType(context, value.type),
517
530
  restApiName: key
518
531
  });
519
532
  }
@@ -538,7 +551,7 @@ function isAzureCoreErrorType(t?: Type): boolean {
538
551
  }
539
552
 
540
553
  function emitResponse(
541
- program: Program,
554
+ context: SdkContext,
542
555
  response: HttpOperationResponse,
543
556
  innerResponse: HttpOperationResponseContent
544
557
  ): Response {
@@ -558,10 +571,10 @@ function emitResponse(
558
571
  innerResponse.body.type.kind === "Model" &&
559
572
  candidate.find((e) => e === originType.name)
560
573
  ) {
561
- const modelType = getEffectiveSchemaType(program, originType);
562
- type = getType(program, modelType);
574
+ const modelType = getEffectiveSchemaType(context.program, originType);
575
+ type = getType(context, modelType);
563
576
  } else {
564
- type = getType(program, innerResponse.body.type);
577
+ type = getType(context, innerResponse.body.type);
565
578
  }
566
579
  }
567
580
  const statusCodes: (number | "default")[] = [];
@@ -571,9 +584,9 @@ function emitResponse(
571
584
  statusCodes.push(parseInt(response.statusCode));
572
585
  }
573
586
  return {
574
- headers: emitResponseHeaders(program, innerResponse.headers),
587
+ headers: emitResponseHeaders(context, innerResponse.headers),
575
588
  statusCodes: statusCodes ?? [],
576
- addedOn: getAddedOnVersion(program, response.type),
589
+ addedOn: getAddedOnVersion(context.program, response.type),
577
590
  discriminator: "basic",
578
591
  type: type
579
592
  };
@@ -687,23 +700,13 @@ function emitBasicOperation(
687
700
  const responses: Response[] = [];
688
701
  const exceptions: Response[] = [];
689
702
  const isOverload: boolean = false;
690
- const isOverriden: boolean = false;
691
703
  for (const response of httpOperation.responses) {
692
704
  for (const innerResponse of response.responses) {
693
705
  const emittedResponse: Response = emitResponse(
694
- context.program,
706
+ context,
695
707
  response,
696
708
  innerResponse
697
709
  );
698
- if (
699
- emittedResponse["type"] &&
700
- parameters.filter((e) => e.restApiName.toLowerCase() === "accept")
701
- .length === 0
702
- ) {
703
- parameters.push(
704
- emitAcceptParameter(context.program, isOverload, isOverriden)
705
- );
706
- }
707
710
  if (isErrorModel(context.program, response.type)) {
708
711
  // * is valid status code in cadl but invalid for autorest.python
709
712
  if (response.statusCode === "*") {
@@ -719,15 +722,7 @@ function emitBasicOperation(
719
722
  if (httpOperation.parameters.body === undefined) {
720
723
  bodyParameter = undefined;
721
724
  } else {
722
- bodyParameter = emitBodyParameter(context.program, httpOperation);
723
- if (
724
- parameters.filter((e) => e.restApiName.toLowerCase() === "content-type")
725
- .length === 0
726
- ) {
727
- parameters.push(
728
- emitContentTypeParameter(bodyParameter, isOverload, isOverriden)
729
- );
730
- }
725
+ bodyParameter = emitBodyParameter(context, httpOperation);
731
726
  if (
732
727
  bodyParameter.type.type === "model" &&
733
728
  bodyParameter.type.base === "json"
@@ -775,7 +770,7 @@ function isReadOnly(program: Program, type: ModelProperty): boolean {
775
770
  }
776
771
 
777
772
  function emitProperty(
778
- program: Program,
773
+ context: SdkContext,
779
774
  property: ModelProperty
780
775
  ): Record<string, any> {
781
776
  let clientDefaultValue = undefined;
@@ -788,15 +783,24 @@ function emitProperty(
788
783
  ) {
789
784
  clientDefaultValue = property.default.value;
790
785
  }
791
- const restApiName = getProjectedName(program, property, "json");
786
+
787
+ // const [clientName, jsonName] = getPropertyNames(context, property);
788
+ const clientName = property.name;
789
+ const jsonName =
790
+ getProjectedName(context.program, property, "json") ?? property.name;
791
+
792
+ if (property.model) {
793
+ getType(context, property.model);
794
+ }
792
795
  return {
793
- clientName: applyCasing(property.name, { casing: CASING }),
794
- restApiName: restApiName ?? property.name,
795
- type: getType(program, property.type),
796
+ clientName: applyCasing(clientName, { casing: CASING }),
797
+ restApiName: jsonName,
798
+ type: getType(context, property.type),
796
799
  optional: property.optional,
797
- description: getDocStr(program, property),
798
- addedOn: getAddedOnVersion(program, property),
799
- readonly: isReadOnly(program, property) || isKey(program, property),
800
+ description: getDocStr(context.program, property),
801
+ addedOn: getAddedOnVersion(context.program, property),
802
+ readonly:
803
+ isReadOnly(context.program, property) || isKey(context.program, property),
800
804
  clientDefaultValue: clientDefaultValue
801
805
  };
802
806
  }
@@ -823,23 +827,25 @@ function getName(program: Program, type: Model): string {
823
827
  }
824
828
  }
825
829
 
826
- function emitModel(program: Program, type: Model): Record<string, any> {
830
+ function emitModel(context: SdkContext, type: Model): Record<string, any> {
827
831
  // Now we know it's a defined model
828
832
  const properties: Record<string, any>[] = [];
829
833
  let baseModel = undefined;
830
834
  if (type.baseModel) {
831
- baseModel = getType(program, type.baseModel);
835
+ baseModel = getType(context, type.baseModel);
832
836
  }
833
- const effectiveName = getEffectiveSchemaType(program, type).name;
834
- const modelName = effectiveName ? effectiveName : getName(program, type);
837
+ const effectiveName = getEffectiveSchemaType(context.program, type).name;
838
+ const modelName = effectiveName
839
+ ? effectiveName
840
+ : getName(context.program, type);
835
841
  return {
836
842
  type: "model",
837
843
  name: modelName,
838
- description: getDocStr(program, type),
844
+ description: getDocStr(context.program, type),
839
845
  parents: baseModel ? [baseModel] : [],
840
846
  discriminatedSubtypes: {},
841
847
  properties: properties,
842
- addedOn: getAddedOnVersion(program, type),
848
+ addedOn: getAddedOnVersion(context.program, type),
843
849
  snakeCaseName: modelName
844
850
  ? applyCasing(modelName, { casing: CASING })
845
851
  : modelName,
@@ -933,7 +939,7 @@ function emitStdScalar(
933
939
  ): Record<string, any> {
934
940
  switch (scalar.name) {
935
941
  case "bytes":
936
- return { type: "byte-array", format: "byte" };
942
+ return { type: "Uint8Array", format: "byte" };
937
943
  case "int8":
938
944
  case "int16":
939
945
  case "int32":
@@ -1036,7 +1042,7 @@ function emitScalar(program: Program, scalar: Scalar): Record<string, any> {
1036
1042
  }
1037
1043
 
1038
1044
  function emitListOrDict(
1039
- program: Program,
1045
+ context: SdkContext,
1040
1046
  type: Model
1041
1047
  ): Record<string, any> | undefined {
1042
1048
  if (type.indexer !== undefined) {
@@ -1045,12 +1051,12 @@ function emitListOrDict(
1045
1051
  if (name === "string") {
1046
1052
  return {
1047
1053
  type: "dict",
1048
- elementType: getType(program, type.indexer.value!)
1054
+ elementType: getType(context, type.indexer.value!)
1049
1055
  };
1050
1056
  } else if (name === "integer") {
1051
1057
  return {
1052
1058
  type: "list",
1053
- elementType: getType(program, type.indexer.value!)
1059
+ elementType: getType(context, type.indexer.value!)
1054
1060
  };
1055
1061
  }
1056
1062
  }
@@ -1058,7 +1064,7 @@ function emitListOrDict(
1058
1064
  return undefined;
1059
1065
  }
1060
1066
 
1061
- function mapCadlType(program: Program, type: Type): any {
1067
+ function mapCadlType(context: SdkContext, type: Type): any {
1062
1068
  switch (type.kind) {
1063
1069
  case "Number":
1064
1070
  return constantType(type.value, intOrFloat(type.value));
@@ -1067,7 +1073,7 @@ function mapCadlType(program: Program, type: Type): any {
1067
1073
  case "Boolean":
1068
1074
  return constantType(type.value, "boolean");
1069
1075
  case "Model":
1070
- return emitListOrDict(program, type);
1076
+ return emitListOrDict(context, type);
1071
1077
  }
1072
1078
  }
1073
1079
 
@@ -1075,82 +1081,94 @@ function capitalize(name: string): string {
1075
1081
  return name[0]!.toUpperCase() + name.slice(1);
1076
1082
  }
1077
1083
 
1078
- function emitUnion(program: Program, type: Union): Record<string, any> {
1079
- const nonNullOptions = [...type.variants.values()]
1080
- .map((x) => x.type)
1081
- .filter((t) => !isNullType(t));
1082
-
1083
- const notLiteral = (t: Type): boolean =>
1084
- ["Boolean", "Number", "String"].indexOf(t.kind) < 0;
1085
- if (nonNullOptions.length > 1) {
1086
- if (nonNullOptions.every(notLiteral)) {
1087
- // Generate as CombinedType if non of the options is Literal.
1088
- const unionName = `MyCombinedType`;
1089
- return {
1090
- name: unionName,
1091
- snakeCaseName: applyCasing(unionName, { casing: CASING }),
1092
- description: `Type of ${unionName}`,
1093
- isPublic: false,
1094
- type: "combined",
1095
- types: nonNullOptions.map((x) => emitType(program, x)),
1096
- xmlMetadata: {}
1097
- };
1098
- } else if (nonNullOptions.some(notLiteral)) {
1099
- // Can't generate if this union is a mixed up of literals and sub-types
1100
- throw Error(`Can't do union for ${JSON.stringify(nonNullOptions)}`);
1101
- }
1084
+ function emitUnion(context: SdkContext, type: Union): Record<string, any> {
1085
+ const sdkType = getSdkUnion(context, type);
1086
+ if (sdkType === undefined) {
1087
+ throw Error("Should not have an empty union");
1102
1088
  }
1103
-
1104
- // Geneate Union of Literals as Python Enum
1105
- const values: Record<string, any>[] = [];
1106
- for (const option of nonNullOptions) {
1107
- const value = emitType(program, option)["value"];
1108
- values.push({
1109
- description: "",
1110
- name: applyCasing(value, { casing: CASING }).toUpperCase(),
1111
- value: value
1112
- });
1089
+ if (sdkType.kind === "union") {
1090
+ const unionName = type.name;
1091
+ return {
1092
+ nullable: sdkType.nullable,
1093
+ name: unionName,
1094
+ description: `Type of ${unionName}`,
1095
+ internal: true,
1096
+ type: "combined",
1097
+ types: sdkType.values.map((x) => getType(context, x.__raw)),
1098
+ xmlMetadata: {}
1099
+ };
1100
+ } else if (sdkType.kind === "enum") {
1101
+ return {
1102
+ name: sdkType.name,
1103
+ nullable: sdkType.nullable,
1104
+ description: sdkType.doc || `Type of ${sdkType.name}`,
1105
+ internal: true,
1106
+ type: sdkType.kind,
1107
+ valueType: emitSimpleType(context, sdkType.valueType as SdkSimpleType),
1108
+ values: sdkType.values.map((x) => emitEnumMember(x)),
1109
+ isFixed: sdkType.isFixed === false ? false : true,
1110
+ xmlMetadata: {}
1111
+ };
1112
+ } else {
1113
+ return { nullable: sdkType.nullable, ...emitType(context, sdkType.__raw) };
1113
1114
  }
1114
- let enumName = "MyEnum";
1115
- if (
1116
- type.node &&
1117
- type.node.parent &&
1118
- [SyntaxKind.ModelStatement, SyntaxKind.ModelProperty].includes(
1119
- type.node.parent.kind
1120
- )
1115
+ }
1116
+
1117
+ function emitEnumMember(type: any): Record<string, any> {
1118
+ return {
1119
+ name: enumName(type.name),
1120
+ value: type.value,
1121
+ description: type.doc
1122
+ };
1123
+ }
1124
+
1125
+ function emitSimpleType(
1126
+ context: SdkContext,
1127
+ type: Scalar | IntrinsicType | SdkSimpleType
1128
+ ): Record<string, any> {
1129
+ let sdkType: SdkSimpleType;
1130
+ if (type.kind === "Scalar" || type.kind === "Intrinsic") {
1131
+ sdkType = getSdkSimpleType(context, type);
1132
+ } else {
1133
+ sdkType = type;
1134
+ }
1135
+
1136
+ const extraInformation: Record<string, any> = {};
1137
+ if (sdkType.kind === "string") {
1138
+ extraInformation["pattern"] = sdkType.pattern;
1139
+ extraInformation["minLength"] = sdkType.minLength;
1140
+ extraInformation["maxLength"] = sdkType.maxLength;
1141
+ } else if (
1142
+ sdkType.kind === "int32" ||
1143
+ sdkType.kind === "int64" ||
1144
+ sdkType.kind === "float32" ||
1145
+ sdkType.kind === "float64"
1121
1146
  ) {
1122
- if (type.node.parent.kind === SyntaxKind.ModelStatement) {
1123
- enumName = capitalize(type.node.parent.id.sv);
1124
- } else if (type.node.parent.kind === SyntaxKind.ModelProperty) {
1125
- const parent = type.node.parent as any;
1126
- if (parent.id.sv) {
1127
- enumName = capitalize(parent.id.sv) + "Type";
1128
- }
1129
- }
1147
+ extraInformation["minValue"] = sdkType.minValue;
1148
+ extraInformation["maxValue"] = sdkType.maxValue;
1130
1149
  }
1131
1150
  return {
1132
- name: enumName,
1133
- snakeCaseName: applyCasing(enumName, { casing: CASING }),
1134
- description: `Type of ${enumName}`,
1135
- isPublic: false,
1136
- type: "enum",
1137
- valueType: emitType(program, nonNullOptions[0]!)["valueType"],
1138
- values: values,
1139
- xmlMetadata: {}
1151
+ nullable: sdkType.nullable,
1152
+ type: "number", // TODO: switch to kind
1153
+ doc: sdkType.doc,
1154
+ apiVersions: sdkType.apiVersions,
1155
+ sdkDefaultValue: sdkType.sdkDefaultValue,
1156
+ format: sdkType.format,
1157
+ ...extraInformation
1140
1158
  };
1141
1159
  }
1142
1160
 
1143
- function emitType(program: Program, type: EmitterType): Record<string, any> {
1161
+ function emitType(context: SdkContext, type: EmitterType): Record<string, any> {
1144
1162
  if (type.kind === "Credential") {
1145
1163
  return emitCredential(type.scheme);
1146
1164
  }
1147
1165
  if (type.kind === "CredentialTypeUnion") {
1148
1166
  return emitCredentialUnion(type);
1149
1167
  }
1150
- const builtinType = mapCadlType(program, type);
1168
+ const builtinType = mapCadlType(context, type);
1151
1169
  if (builtinType !== undefined) {
1152
1170
  // add in description elements for types derived from primitive types (SecureString, etc.)
1153
- const doc = getDoc(program, type);
1171
+ const doc = getDoc(context.program, type);
1154
1172
  if (doc) {
1155
1173
  builtinType.description = doc;
1156
1174
  }
@@ -1159,17 +1177,17 @@ function emitType(program: Program, type: EmitterType): Record<string, any> {
1159
1177
 
1160
1178
  switch (type.kind) {
1161
1179
  case "Intrinsic":
1162
- return { type: "any" };
1180
+ return { type: type.name };
1163
1181
  case "Model":
1164
- return emitModel(program, type);
1182
+ return emitModel(context, type);
1165
1183
  case "Scalar":
1166
- return emitScalar(program, type);
1184
+ return emitScalar(context.program, type);
1167
1185
  case "Union":
1168
- return emitUnion(program, type);
1186
+ return emitUnion(context, type);
1169
1187
  case "UnionVariant":
1170
1188
  return {};
1171
1189
  case "Enum":
1172
- return emitEnum(program, type);
1190
+ return emitEnum(context.program, type);
1173
1191
  default:
1174
1192
  throw Error(`Not supported ${type.kind}`);
1175
1193
  }
@@ -1282,10 +1300,10 @@ function emitServerParams(
1282
1300
  }
1283
1301
 
1284
1302
  function emitCredentialParam(
1285
- program: Program,
1303
+ context: SdkContext,
1286
1304
  namespace: Namespace
1287
1305
  ): Parameter | undefined {
1288
- const auth = getAuthentication(program, namespace);
1306
+ const auth = getAuthentication(context.program, namespace);
1289
1307
  if (auth) {
1290
1308
  const credential_types: CredentialType[] = [];
1291
1309
  for (const option of auth.options) {
@@ -1308,7 +1326,7 @@ function emitCredentialParam(
1308
1326
  };
1309
1327
  }
1310
1328
  return {
1311
- type: getType(program, type),
1329
+ type: getType(context, type),
1312
1330
  optional: false,
1313
1331
  description: "Credential needed for the client to connect to Azure.",
1314
1332
  clientName: "credential",
@@ -1328,7 +1346,7 @@ function emitGlobalParameters(
1328
1346
  namespace: Namespace
1329
1347
  ): Parameter[] {
1330
1348
  const clientParameters = emitServerParams(context, namespace);
1331
- const credentialParam = emitCredentialParam(context.program, namespace);
1349
+ const credentialParam = emitCredentialParam(context, namespace);
1332
1350
  if (credentialParam) {
1333
1351
  clientParameters.push(credentialParam);
1334
1352
  }
@@ -1430,6 +1448,12 @@ export function emitCodeModel(
1430
1448
  clients: [],
1431
1449
  types: []
1432
1450
  };
1451
+
1452
+ const allModels = getAllModels(dpgContext);
1453
+ for (const model of allModels) {
1454
+ getType(dpgContext, model);
1455
+ }
1456
+
1433
1457
  for (const namespace of getNamespaces(dpgContext)) {
1434
1458
  if (namespace === clientNamespaceString) {
1435
1459
  codeModel.clients = emitClients(dpgContext, namespace);
@@ -1440,9 +1464,10 @@ export function emitCodeModel(
1440
1464
  );
1441
1465
  }
1442
1466
  }
1443
- codeModel.types = [
1444
- ...[...typesMap.values()].filter((t) => t.name !== "object"),
1467
+
1468
+ codeModel["types"] = [
1445
1469
  { type: "string" },
1470
+ ...typesMap.values(),
1446
1471
  ...simpleTypesMap.values()
1447
1472
  ];
1448
1473
  return codeModel;