@azure-tools/typespec-ts 0.11.0-alpha.20230413.3

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 (514) hide show
  1. package/.eslintrc.json +23 -0
  2. package/.prettierignore +1 -0
  3. package/.prettierrc +7 -0
  4. package/.rush/temp/package-deps_build.json +392 -0
  5. package/.rush/temp/shrinkwrap-deps.json +472 -0
  6. package/CHANGELOG.md +65 -0
  7. package/CONTRIBUTING.md +137 -0
  8. package/README.md +150 -0
  9. package/dist/src/casingUtils.d.ts +4 -0
  10. package/dist/src/casingUtils.d.ts.map +1 -0
  11. package/dist/src/casingUtils.js +39 -0
  12. package/dist/src/casingUtils.js.map +1 -0
  13. package/dist/src/emitUtil.d.ts +6 -0
  14. package/dist/src/emitUtil.d.ts.map +1 -0
  15. package/dist/src/emitUtil.js +45 -0
  16. package/dist/src/emitUtil.js.map +1 -0
  17. package/dist/src/index.d.ts +3 -0
  18. package/dist/src/index.d.ts.map +1 -0
  19. package/dist/src/index.js +90 -0
  20. package/dist/src/index.js.map +1 -0
  21. package/dist/src/lib.d.ts +159 -0
  22. package/dist/src/lib.d.ts.map +1 -0
  23. package/dist/src/lib.js +190 -0
  24. package/dist/src/lib.js.map +1 -0
  25. package/dist/src/modelUtils.d.ts +33 -0
  26. package/dist/src/modelUtils.d.ts.map +1 -0
  27. package/dist/src/modelUtils.js +900 -0
  28. package/dist/src/modelUtils.js.map +1 -0
  29. package/dist/src/modular/buildApiIndex.d.ts +3 -0
  30. package/dist/src/modular/buildApiIndex.d.ts.map +1 -0
  31. package/dist/src/modular/buildApiIndex.js +12 -0
  32. package/dist/src/modular/buildApiIndex.js.map +1 -0
  33. package/dist/src/modular/buildClassicalClient.d.ts +4 -0
  34. package/dist/src/modular/buildClassicalClient.d.ts.map +1 -0
  35. package/dist/src/modular/buildClassicalClient.js +116 -0
  36. package/dist/src/modular/buildClassicalClient.js.map +1 -0
  37. package/dist/src/modular/buildClientContext.d.ts +7 -0
  38. package/dist/src/modular/buildClientContext.d.ts.map +1 -0
  39. package/dist/src/modular/buildClientContext.js +65 -0
  40. package/dist/src/modular/buildClientContext.js.map +1 -0
  41. package/dist/src/modular/buildCodeModel.d.ts +14 -0
  42. package/dist/src/modular/buildCodeModel.d.ts.map +1 -0
  43. package/dist/src/modular/buildCodeModel.js +1106 -0
  44. package/dist/src/modular/buildCodeModel.js.map +1 -0
  45. package/dist/src/modular/buildOperations.d.ts +13 -0
  46. package/dist/src/modular/buildOperations.d.ts.map +1 -0
  47. package/dist/src/modular/buildOperations.js +68 -0
  48. package/dist/src/modular/buildOperations.js.map +1 -0
  49. package/dist/src/modular/buildProjectFiles.d.ts +5 -0
  50. package/dist/src/modular/buildProjectFiles.d.ts.map +1 -0
  51. package/dist/src/modular/buildProjectFiles.js +188 -0
  52. package/dist/src/modular/buildProjectFiles.js.map +1 -0
  53. package/dist/src/modular/buildRootIndex.d.ts +4 -0
  54. package/dist/src/modular/buildRootIndex.d.ts.map +1 -0
  55. package/dist/src/modular/buildRootIndex.js +49 -0
  56. package/dist/src/modular/buildRootIndex.js.map +1 -0
  57. package/dist/src/modular/buildSharedTypes.d.ts +6 -0
  58. package/dist/src/modular/buildSharedTypes.d.ts.map +1 -0
  59. package/dist/src/modular/buildSharedTypes.js +33 -0
  60. package/dist/src/modular/buildSharedTypes.js.map +1 -0
  61. package/dist/src/modular/emitModels.d.ts +7 -0
  62. package/dist/src/modular/emitModels.d.ts.map +1 -0
  63. package/dist/src/modular/emitModels.js +63 -0
  64. package/dist/src/modular/emitModels.js.map +1 -0
  65. package/dist/src/modular/helpers/clientHelpers.d.ts +4 -0
  66. package/dist/src/modular/helpers/clientHelpers.d.ts.map +1 -0
  67. package/dist/src/modular/helpers/clientHelpers.js +31 -0
  68. package/dist/src/modular/helpers/clientHelpers.js.map +1 -0
  69. package/dist/src/modular/helpers/credentialHelpers.d.ts +7 -0
  70. package/dist/src/modular/helpers/credentialHelpers.d.ts.map +1 -0
  71. package/dist/src/modular/helpers/credentialHelpers.js +22 -0
  72. package/dist/src/modular/helpers/credentialHelpers.js.map +1 -0
  73. package/dist/src/modular/helpers/namingHelpers.d.ts +3 -0
  74. package/dist/src/modular/helpers/namingHelpers.d.ts.map +1 -0
  75. package/dist/src/modular/helpers/namingHelpers.js +4 -0
  76. package/dist/src/modular/helpers/namingHelpers.js.map +1 -0
  77. package/dist/src/modular/helpers/operationHelpers.d.ts +8 -0
  78. package/dist/src/modular/helpers/operationHelpers.d.ts.map +1 -0
  79. package/dist/src/modular/helpers/operationHelpers.js +191 -0
  80. package/dist/src/modular/helpers/operationHelpers.js.map +1 -0
  81. package/dist/src/modular/helpers/parameterHelpers.d.ts +3 -0
  82. package/dist/src/modular/helpers/parameterHelpers.d.ts.map +1 -0
  83. package/dist/src/modular/helpers/parameterHelpers.js +11 -0
  84. package/dist/src/modular/helpers/parameterHelpers.js.map +1 -0
  85. package/dist/src/modular/helpers/typeHelpers.d.ts +16 -0
  86. package/dist/src/modular/helpers/typeHelpers.d.ts.map +1 -0
  87. package/dist/src/modular/helpers/typeHelpers.js +71 -0
  88. package/dist/src/modular/helpers/typeHelpers.js.map +1 -0
  89. package/dist/src/modular/interfaces.d.ts +10 -0
  90. package/dist/src/modular/interfaces.d.ts.map +1 -0
  91. package/dist/src/modular/interfaces.js +2 -0
  92. package/dist/src/modular/interfaces.js.map +1 -0
  93. package/dist/src/modular/modularCodeModel.d.ts +120 -0
  94. package/dist/src/modular/modularCodeModel.d.ts.map +1 -0
  95. package/dist/src/modular/modularCodeModel.js +2 -0
  96. package/dist/src/modular/modularCodeModel.js.map +1 -0
  97. package/dist/src/operationUtil.d.ts +16 -0
  98. package/dist/src/operationUtil.d.ts.map +1 -0
  99. package/dist/src/operationUtil.js +142 -0
  100. package/dist/src/operationUtil.js.map +1 -0
  101. package/dist/src/transform/transform.d.ts +6 -0
  102. package/dist/src/transform/transform.d.ts.map +1 -0
  103. package/dist/src/transform/transform.js +87 -0
  104. package/dist/src/transform/transform.js.map +1 -0
  105. package/dist/src/transform/transformAnnotationDetails.d.ts +6 -0
  106. package/dist/src/transform/transformAnnotationDetails.d.ts.map +1 -0
  107. package/dist/src/transform/transformAnnotationDetails.js +188 -0
  108. package/dist/src/transform/transformAnnotationDetails.js.map +1 -0
  109. package/dist/src/transform/transformApiVersionInfo.d.ts +5 -0
  110. package/dist/src/transform/transformApiVersionInfo.d.ts.map +1 -0
  111. package/dist/src/transform/transformApiVersionInfo.js +64 -0
  112. package/dist/src/transform/transformApiVersionInfo.js.map +1 -0
  113. package/dist/src/transform/transformParameters.d.ts +14 -0
  114. package/dist/src/transform/transformParameters.d.ts.map +1 -0
  115. package/dist/src/transform/transformParameters.js +314 -0
  116. package/dist/src/transform/transformParameters.js.map +1 -0
  117. package/dist/src/transform/transformPaths.d.ts +10 -0
  118. package/dist/src/transform/transformPaths.d.ts.map +1 -0
  119. package/dist/src/transform/transformPaths.js +124 -0
  120. package/dist/src/transform/transformPaths.js.map +1 -0
  121. package/dist/src/transform/transformResponses.d.ts +5 -0
  122. package/dist/src/transform/transformResponses.d.ts.map +1 -0
  123. package/dist/src/transform/transformResponses.js +136 -0
  124. package/dist/src/transform/transformResponses.js.map +1 -0
  125. package/dist/src/transform/transformSchemas.d.ts +4 -0
  126. package/dist/src/transform/transformSchemas.d.ts.map +1 -0
  127. package/dist/src/transform/transformSchemas.js +161 -0
  128. package/dist/src/transform/transformSchemas.js.map +1 -0
  129. package/dist/src/transform/transfromRLCOptions.d.ts +10 -0
  130. package/dist/src/transform/transfromRLCOptions.d.ts.map +1 -0
  131. package/dist/src/transform/transfromRLCOptions.js +156 -0
  132. package/dist/src/transform/transfromRLCOptions.js.map +1 -0
  133. package/dist/tsconfig.tsbuildinfo +1 -0
  134. package/package.json +80 -0
  135. package/src/casingUtils.ts +48 -0
  136. package/src/emitUtil.ts +63 -0
  137. package/src/index.ts +148 -0
  138. package/src/lib.ts +208 -0
  139. package/src/modelUtils.ts +1080 -0
  140. package/src/modular/buildApiIndex.ts +13 -0
  141. package/src/modular/buildClassicalClient.ts +154 -0
  142. package/src/modular/buildClientContext.ts +96 -0
  143. package/src/modular/buildCodeModel.ts +1444 -0
  144. package/src/modular/buildOperations.ts +93 -0
  145. package/src/modular/buildProjectFiles.ts +217 -0
  146. package/src/modular/buildRootIndex.ts +75 -0
  147. package/src/modular/buildSharedTypes.ts +40 -0
  148. package/src/modular/emitModels.ts +72 -0
  149. package/src/modular/helpers/clientHelpers.ts +38 -0
  150. package/src/modular/helpers/credentialHelpers.ts +29 -0
  151. package/src/modular/helpers/namingHelpers.ts +5 -0
  152. package/src/modular/helpers/operationHelpers.ts +289 -0
  153. package/src/modular/helpers/parameterHelpers.ts +12 -0
  154. package/src/modular/helpers/typeHelpers.ts +84 -0
  155. package/src/modular/interfaces.ts +10 -0
  156. package/src/modular/modularCodeModel.ts +148 -0
  157. package/src/operationUtil.ts +203 -0
  158. package/src/transform/transform.ts +154 -0
  159. package/src/transform/transformAnnotationDetails.ts +231 -0
  160. package/src/transform/transformApiVersionInfo.ts +108 -0
  161. package/src/transform/transformParameters.ts +480 -0
  162. package/src/transform/transformPaths.ts +187 -0
  163. package/src/transform/transformResponses.ts +190 -0
  164. package/src/transform/transformSchemas.ts +197 -0
  165. package/src/transform/transfromRLCOptions.ts +202 -0
  166. package/test/commands/cadl-ranch-list.ts +111 -0
  167. package/test/commands/check-clean-tree.ts +55 -0
  168. package/test/commands/childProcessOnExit.ts +16 -0
  169. package/test/commands/gen-cadl-ranch.ts +21 -0
  170. package/test/commands/run.ts +31 -0
  171. package/test/integration/arrayItemTypes.spec.ts +96 -0
  172. package/test/integration/authApiKey.spec.ts +38 -0
  173. package/test/integration/authOauth2.spec.ts +65 -0
  174. package/test/integration/authUnion.spec.ts +72 -0
  175. package/test/integration/collectionFormat.spec.ts +74 -0
  176. package/test/integration/dictionary.spec.ts +106 -0
  177. package/test/integration/extensibleEnums.spec.ts +61 -0
  178. package/test/integration/fixedEnums.spec.ts +52 -0
  179. package/test/integration/generated/arrays/itemTypes/src/arrayItemTypesClient.ts +31 -0
  180. package/test/integration/generated/arrays/itemTypes/src/clientDefinitions.ts +165 -0
  181. package/test/integration/generated/arrays/itemTypes/src/index.ts +13 -0
  182. package/test/integration/generated/arrays/itemTypes/src/models.ts +9 -0
  183. package/test/integration/generated/arrays/itemTypes/src/outputModels.ts +9 -0
  184. package/test/integration/generated/arrays/itemTypes/src/parameters.ts +86 -0
  185. package/test/integration/generated/arrays/itemTypes/src/responses.ts +115 -0
  186. package/test/integration/generated/arrays/itemTypes/tspconfig.yaml +15 -0
  187. package/test/integration/generated/authentication/apiKey/.eslintrc.json +11 -0
  188. package/test/integration/generated/authentication/apiKey/README.md +56 -0
  189. package/test/integration/generated/authentication/apiKey/api-extractor.json +18 -0
  190. package/test/integration/generated/authentication/apiKey/karma.conf.js +133 -0
  191. package/test/integration/generated/authentication/apiKey/package.json +103 -0
  192. package/test/integration/generated/authentication/apiKey/rollup.config.js +118 -0
  193. package/test/integration/generated/authentication/apiKey/src/authApiKeyClient.ts +41 -0
  194. package/test/integration/generated/authentication/apiKey/src/clientDefinitions.ts +33 -0
  195. package/test/integration/generated/authentication/apiKey/src/index.ts +12 -0
  196. package/test/integration/generated/authentication/apiKey/src/outputModels.ts +6 -0
  197. package/test/integration/generated/authentication/apiKey/src/parameters.ts +7 -0
  198. package/test/integration/generated/authentication/apiKey/src/responses.ts +21 -0
  199. package/test/integration/generated/authentication/apiKey/test/public/sampleTest.spec.ts +23 -0
  200. package/test/integration/generated/authentication/apiKey/test/public/utils/env.browser.ts +2 -0
  201. package/test/integration/generated/authentication/apiKey/test/public/utils/env.ts +6 -0
  202. package/test/integration/generated/authentication/apiKey/test/public/utils/recordedClient.ts +29 -0
  203. package/test/integration/generated/authentication/apiKey/tsconfig.json +25 -0
  204. package/test/integration/generated/authentication/apiKey/tspconfig.yaml +13 -0
  205. package/test/integration/generated/authentication/oauth2/karma.conf.js +133 -0
  206. package/test/integration/generated/authentication/oauth2/src/authOauth2Client.ts +41 -0
  207. package/test/integration/generated/authentication/oauth2/src/clientDefinitions.ts +33 -0
  208. package/test/integration/generated/authentication/oauth2/src/index.ts +12 -0
  209. package/test/integration/generated/authentication/oauth2/src/outputModels.ts +6 -0
  210. package/test/integration/generated/authentication/oauth2/src/parameters.ts +7 -0
  211. package/test/integration/generated/authentication/oauth2/src/responses.ts +21 -0
  212. package/test/integration/generated/authentication/oauth2/test/public/sampleTest.spec.ts +23 -0
  213. package/test/integration/generated/authentication/oauth2/test/public/utils/env.browser.ts +2 -0
  214. package/test/integration/generated/authentication/oauth2/test/public/utils/env.ts +6 -0
  215. package/test/integration/generated/authentication/oauth2/test/public/utils/recordedClient.ts +29 -0
  216. package/test/integration/generated/authentication/oauth2/tspconfig.yaml +15 -0
  217. package/test/integration/generated/authentication/union/karma.conf.js +133 -0
  218. package/test/integration/generated/authentication/union/src/authUnionClient.ts +42 -0
  219. package/test/integration/generated/authentication/union/src/clientDefinitions.ts +27 -0
  220. package/test/integration/generated/authentication/union/src/index.ts +11 -0
  221. package/test/integration/generated/authentication/union/src/parameters.ts +7 -0
  222. package/test/integration/generated/authentication/union/src/responses.ts +14 -0
  223. package/test/integration/generated/authentication/union/test/public/sampleTest.spec.ts +23 -0
  224. package/test/integration/generated/authentication/union/test/public/utils/env.browser.ts +2 -0
  225. package/test/integration/generated/authentication/union/test/public/utils/env.ts +6 -0
  226. package/test/integration/generated/authentication/union/test/public/utils/recordedClient.ts +29 -0
  227. package/test/integration/generated/authentication/union/tspconfig.yaml +15 -0
  228. package/test/integration/generated/dictionary/.eslintrc.json +11 -0
  229. package/test/integration/generated/dictionary/README.md +56 -0
  230. package/test/integration/generated/dictionary/api-extractor.json +18 -0
  231. package/test/integration/generated/dictionary/package.json +80 -0
  232. package/test/integration/generated/dictionary/rollup.config.js +118 -0
  233. package/test/integration/generated/dictionary/src/clientDefinitions.ts +180 -0
  234. package/test/integration/generated/dictionary/src/dictClient.ts +29 -0
  235. package/test/integration/generated/dictionary/src/index.ts +13 -0
  236. package/test/integration/generated/dictionary/src/models.ts +9 -0
  237. package/test/integration/generated/dictionary/src/outputModels.ts +9 -0
  238. package/test/integration/generated/dictionary/src/parameters.ts +94 -0
  239. package/test/integration/generated/dictionary/src/responses.ts +126 -0
  240. package/test/integration/generated/dictionary/tsconfig.json +25 -0
  241. package/test/integration/generated/dictionary/tspconfig.yaml +15 -0
  242. package/test/integration/generated/enums/extensible/.eslintrc.json +11 -0
  243. package/test/integration/generated/enums/extensible/README.md +56 -0
  244. package/test/integration/generated/enums/extensible/api-extractor.json +18 -0
  245. package/test/integration/generated/enums/extensible/package.json +80 -0
  246. package/test/integration/generated/enums/extensible/rollup.config.js +118 -0
  247. package/test/integration/generated/enums/extensible/src/clientDefinitions.ts +45 -0
  248. package/test/integration/generated/enums/extensible/src/enumsExtensible.ts +31 -0
  249. package/test/integration/generated/enums/extensible/src/index.ts +11 -0
  250. package/test/integration/generated/enums/extensible/src/parameters.ts +23 -0
  251. package/test/integration/generated/enums/extensible/src/responses.ts +26 -0
  252. package/test/integration/generated/enums/extensible/tsconfig.json +25 -0
  253. package/test/integration/generated/enums/extensible/tspconfig.yaml +14 -0
  254. package/test/integration/generated/enums/fixed/.eslintrc.json +11 -0
  255. package/test/integration/generated/enums/fixed/README.md +56 -0
  256. package/test/integration/generated/enums/fixed/api-extractor.json +18 -0
  257. package/test/integration/generated/enums/fixed/package.json +80 -0
  258. package/test/integration/generated/enums/fixed/rollup.config.js +118 -0
  259. package/test/integration/generated/enums/fixed/src/clientDefinitions.ts +43 -0
  260. package/test/integration/generated/enums/fixed/src/enumsFixed.ts +31 -0
  261. package/test/integration/generated/enums/fixed/src/index.ts +11 -0
  262. package/test/integration/generated/enums/fixed/src/parameters.ts +36 -0
  263. package/test/integration/generated/enums/fixed/src/responses.ts +27 -0
  264. package/test/integration/generated/enums/fixed/tsconfig.json +25 -0
  265. package/test/integration/generated/enums/fixed/tspconfig.yaml +14 -0
  266. package/test/integration/generated/hello/.eslintrc.json +11 -0
  267. package/test/integration/generated/hello/README.md +56 -0
  268. package/test/integration/generated/hello/api-extractor.json +18 -0
  269. package/test/integration/generated/hello/package.json +80 -0
  270. package/test/integration/generated/hello/rollup.config.js +118 -0
  271. package/test/integration/generated/hello/src/clientDefinitions.ts +19 -0
  272. package/test/integration/generated/hello/src/hello.ts +29 -0
  273. package/test/integration/generated/hello/src/index.ts +11 -0
  274. package/test/integration/generated/hello/src/parameters.ts +6 -0
  275. package/test/integration/generated/hello/src/responses.ts +10 -0
  276. package/test/integration/generated/hello/tsconfig.json +25 -0
  277. package/test/integration/generated/hello/tspconfig.yaml +14 -0
  278. package/test/integration/generated/internal/src/clientDefinitions.ts +27 -0
  279. package/test/integration/generated/internal/src/index.ts +13 -0
  280. package/test/integration/generated/internal/src/internalClient.ts +31 -0
  281. package/test/integration/generated/internal/src/models.ts +8 -0
  282. package/test/integration/generated/internal/src/outputModels.ts +13 -0
  283. package/test/integration/generated/internal/src/parameters.ts +21 -0
  284. package/test/integration/generated/internal/src/responses.ts +20 -0
  285. package/test/integration/generated/internal/tspconfig.yaml +14 -0
  286. package/test/integration/generated/lro/lroBasic/.eslintrc.json +11 -0
  287. package/test/integration/generated/lro/lroBasic/README.md +56 -0
  288. package/test/integration/generated/lro/lroBasic/api-extractor.json +18 -0
  289. package/test/integration/generated/lro/lroBasic/package.json +82 -0
  290. package/test/integration/generated/lro/lroBasic/rollup.config.js +118 -0
  291. package/test/integration/generated/lro/lroBasic/src/azureLro.ts +31 -0
  292. package/test/integration/generated/lro/lroBasic/src/clientDefinitions.ts +37 -0
  293. package/test/integration/generated/lro/lroBasic/src/index.ts +13 -0
  294. package/test/integration/generated/lro/lroBasic/src/outputModels.ts +8 -0
  295. package/test/integration/generated/lro/lroBasic/src/parameters.ts +8 -0
  296. package/test/integration/generated/lro/lroBasic/src/pollingHelper.ts +75 -0
  297. package/test/integration/generated/lro/lroBasic/src/responses.ts +23 -0
  298. package/test/integration/generated/lro/lroBasic/tsconfig.json +25 -0
  299. package/test/integration/generated/lro/lroBasic/tspconfig.yaml +14 -0
  300. package/test/integration/generated/lro/lroCore/.eslintrc.json +11 -0
  301. package/test/integration/generated/lro/lroCore/README.md +56 -0
  302. package/test/integration/generated/lro/lroCore/api-extractor.json +18 -0
  303. package/test/integration/generated/lro/lroCore/package.json +82 -0
  304. package/test/integration/generated/lro/lroCore/rollup.config.js +118 -0
  305. package/test/integration/generated/lro/lroCore/src/azureLroCore.ts +31 -0
  306. package/test/integration/generated/lro/lroCore/src/clientDefinitions.ts +51 -0
  307. package/test/integration/generated/lro/lroCore/src/index.ts +15 -0
  308. package/test/integration/generated/lro/lroCore/src/isUnexpected.ts +128 -0
  309. package/test/integration/generated/lro/lroCore/src/models.ts +8 -0
  310. package/test/integration/generated/lro/lroCore/src/outputModels.ts +53 -0
  311. package/test/integration/generated/lro/lroCore/src/parameters.ts +25 -0
  312. package/test/integration/generated/lro/lroCore/src/pollingHelper.ts +75 -0
  313. package/test/integration/generated/lro/lroCore/src/responses.ts +91 -0
  314. package/test/integration/generated/lro/lroCore/tsconfig.json +25 -0
  315. package/test/integration/generated/lro/lroCore/tspconfig.yaml +14 -0
  316. package/test/integration/generated/models/inheritance/.eslintrc.json +11 -0
  317. package/test/integration/generated/models/inheritance/README.md +56 -0
  318. package/test/integration/generated/models/inheritance/api-extractor.json +18 -0
  319. package/test/integration/generated/models/inheritance/package.json +80 -0
  320. package/test/integration/generated/models/inheritance/rollup.config.js +118 -0
  321. package/test/integration/generated/models/inheritance/src/clientDefinitions.ts +79 -0
  322. package/test/integration/generated/models/inheritance/src/index.ts +13 -0
  323. package/test/integration/generated/models/inheritance/src/models.ts +52 -0
  324. package/test/integration/generated/models/inheritance/src/modelsInheritance.ts +31 -0
  325. package/test/integration/generated/models/inheritance/src/outputModels.ts +52 -0
  326. package/test/integration/generated/models/inheritance/src/parameters.ts +35 -0
  327. package/test/integration/generated/models/inheritance/src/responses.ts +56 -0
  328. package/test/integration/generated/models/inheritance/tsconfig.json +25 -0
  329. package/test/integration/generated/models/inheritance/tspconfig.yaml +14 -0
  330. package/test/integration/generated/models/propertyNullable/.eslintrc.json +11 -0
  331. package/test/integration/generated/models/propertyNullable/README.md +56 -0
  332. package/test/integration/generated/models/propertyNullable/api-extractor.json +18 -0
  333. package/test/integration/generated/models/propertyNullable/package.json +80 -0
  334. package/test/integration/generated/models/propertyNullable/rollup.config.js +118 -0
  335. package/test/integration/generated/models/propertyNullable/src/clientDefinitions.ts +227 -0
  336. package/test/integration/generated/models/propertyNullable/src/index.ts +13 -0
  337. package/test/integration/generated/models/propertyNullable/src/models.ts +56 -0
  338. package/test/integration/generated/models/propertyNullable/src/modelsPropertyNullable.ts +31 -0
  339. package/test/integration/generated/models/propertyNullable/src/outputModels.ts +56 -0
  340. package/test/integration/generated/models/propertyNullable/src/parameters.ts +195 -0
  341. package/test/integration/generated/models/propertyNullable/src/responses.ts +144 -0
  342. package/test/integration/generated/models/propertyNullable/tsconfig.json +25 -0
  343. package/test/integration/generated/models/propertyNullable/tspconfig.yaml +14 -0
  344. package/test/integration/generated/models/propertyOptional/.eslintrc.json +11 -0
  345. package/test/integration/generated/models/propertyOptional/README.md +56 -0
  346. package/test/integration/generated/models/propertyOptional/api-extractor.json +18 -0
  347. package/test/integration/generated/models/propertyOptional/package.json +80 -0
  348. package/test/integration/generated/models/propertyOptional/rollup.config.js +118 -0
  349. package/test/integration/generated/models/propertyOptional/src/clientDefinitions.ts +263 -0
  350. package/test/integration/generated/models/propertyOptional/src/index.ts +13 -0
  351. package/test/integration/generated/models/propertyOptional/src/models.ts +46 -0
  352. package/test/integration/generated/models/propertyOptional/src/modelsPropertyOptional.ts +31 -0
  353. package/test/integration/generated/models/propertyOptional/src/outputModels.ts +46 -0
  354. package/test/integration/generated/models/propertyOptional/src/parameters.ts +124 -0
  355. package/test/integration/generated/models/propertyOptional/src/responses.ts +169 -0
  356. package/test/integration/generated/models/propertyOptional/tsconfig.json +25 -0
  357. package/test/integration/generated/models/propertyOptional/tspconfig.yaml +14 -0
  358. package/test/integration/generated/models/propertyTypes/.eslintrc.json +11 -0
  359. package/test/integration/generated/models/propertyTypes/README.md +56 -0
  360. package/test/integration/generated/models/propertyTypes/api-extractor.json +18 -0
  361. package/test/integration/generated/models/propertyTypes/package.json +80 -0
  362. package/test/integration/generated/models/propertyTypes/rollup.config.js +118 -0
  363. package/test/integration/generated/models/propertyTypes/src/clientDefinitions.ts +234 -0
  364. package/test/integration/generated/models/propertyTypes/src/index.ts +13 -0
  365. package/test/integration/generated/models/propertyTypes/src/models.ts +99 -0
  366. package/test/integration/generated/models/propertyTypes/src/modelsPropertyTypes.ts +31 -0
  367. package/test/integration/generated/models/propertyTypes/src/outputModels.ts +99 -0
  368. package/test/integration/generated/models/propertyTypes/src/parameters.ts +147 -0
  369. package/test/integration/generated/models/propertyTypes/src/responses.ts +186 -0
  370. package/test/integration/generated/models/propertyTypes/tsconfig.json +25 -0
  371. package/test/integration/generated/models/propertyTypes/tspconfig.yaml +14 -0
  372. package/test/integration/generated/models/usage/.eslintrc.json +11 -0
  373. package/test/integration/generated/models/usage/README.md +56 -0
  374. package/test/integration/generated/models/usage/api-extractor.json +18 -0
  375. package/test/integration/generated/models/usage/package.json +80 -0
  376. package/test/integration/generated/models/usage/rollup.config.js +118 -0
  377. package/test/integration/generated/models/usage/src/clientDefinitions.ts +41 -0
  378. package/test/integration/generated/models/usage/src/index.ts +13 -0
  379. package/test/integration/generated/models/usage/src/models.ts +12 -0
  380. package/test/integration/generated/models/usage/src/modelsUsage.ts +31 -0
  381. package/test/integration/generated/models/usage/src/outputModels.ts +12 -0
  382. package/test/integration/generated/models/usage/src/parameters.ts +19 -0
  383. package/test/integration/generated/models/usage/src/responses.ts +22 -0
  384. package/test/integration/generated/models/usage/tsconfig.json +25 -0
  385. package/test/integration/generated/models/usage/tspconfig.yaml +14 -0
  386. package/test/integration/generated/models/visibility/.eslintrc.json +11 -0
  387. package/test/integration/generated/models/visibility/README.md +56 -0
  388. package/test/integration/generated/models/visibility/api-extractor.json +18 -0
  389. package/test/integration/generated/models/visibility/package.json +80 -0
  390. package/test/integration/generated/models/visibility/rollup.config.js +118 -0
  391. package/test/integration/generated/models/visibility/src/clientDefinitions.ts +40 -0
  392. package/test/integration/generated/models/visibility/src/index.ts +13 -0
  393. package/test/integration/generated/models/visibility/src/models.ts +14 -0
  394. package/test/integration/generated/models/visibility/src/modelsVisibilityAutomatic.ts +31 -0
  395. package/test/integration/generated/models/visibility/src/outputModels.ts +16 -0
  396. package/test/integration/generated/models/visibility/src/parameters.ts +41 -0
  397. package/test/integration/generated/models/visibility/src/responses.ts +36 -0
  398. package/test/integration/generated/models/visibility/tsconfig.json +25 -0
  399. package/test/integration/generated/models/visibility/tspconfig.yaml +14 -0
  400. package/test/integration/generated/parameters/collection-format/src/clientDefinitions.ts +39 -0
  401. package/test/integration/generated/parameters/collection-format/src/collectionFormatClient.ts +31 -0
  402. package/test/integration/generated/parameters/collection-format/src/index.ts +12 -0
  403. package/test/integration/generated/parameters/collection-format/src/parameters.ts +38 -0
  404. package/test/integration/generated/parameters/collection-format/src/responses.ts +19 -0
  405. package/test/integration/generated/parameters/collection-format/src/serializeHelper.ts +16 -0
  406. package/test/integration/generated/parameters/collection-format/tspconfig.yaml +14 -0
  407. package/test/integration/generated/projection/src/clientDefinitions.ts +45 -0
  408. package/test/integration/generated/projection/src/index.ts +12 -0
  409. package/test/integration/generated/projection/src/models.ts +11 -0
  410. package/test/integration/generated/projection/src/parameters.ts +26 -0
  411. package/test/integration/generated/projection/src/projectionClient.ts +31 -0
  412. package/test/integration/generated/projection/src/responses.ts +19 -0
  413. package/test/integration/generated/projection/tspconfig.yaml +14 -0
  414. package/test/integration/generated/resiliency/devDriven/.eslintrc.json +11 -0
  415. package/test/integration/generated/resiliency/devDriven/README.md +56 -0
  416. package/test/integration/generated/resiliency/devDriven/api-extractor.json +18 -0
  417. package/test/integration/generated/resiliency/devDriven/package.json +81 -0
  418. package/test/integration/generated/resiliency/devDriven/rollup.config.js +118 -0
  419. package/test/integration/generated/resiliency/devDriven/src/clientDefinitions.ts +75 -0
  420. package/test/integration/generated/resiliency/devDriven/src/index.ts +15 -0
  421. package/test/integration/generated/resiliency/devDriven/src/isUnexpected.ts +117 -0
  422. package/test/integration/generated/resiliency/devDriven/src/models.ts +8 -0
  423. package/test/integration/generated/resiliency/devDriven/src/outputModels.ts +25 -0
  424. package/test/integration/generated/resiliency/devDriven/src/paginateHelper.ts +154 -0
  425. package/test/integration/generated/resiliency/devDriven/src/parameters.ts +17 -0
  426. package/test/integration/generated/resiliency/devDriven/src/resiliencyDevDriven.ts +31 -0
  427. package/test/integration/generated/resiliency/devDriven/src/responses.ts +62 -0
  428. package/test/integration/generated/resiliency/devDriven/tsconfig.json +25 -0
  429. package/test/integration/generated/resiliency/devDriven/tspconfig.yaml +14 -0
  430. package/test/integration/generated/resiliency/srvDriven1/.eslintrc.json +11 -0
  431. package/test/integration/generated/resiliency/srvDriven1/README.md +56 -0
  432. package/test/integration/generated/resiliency/srvDriven1/api-extractor.json +18 -0
  433. package/test/integration/generated/resiliency/srvDriven1/package.json +80 -0
  434. package/test/integration/generated/resiliency/srvDriven1/rollup.config.js +118 -0
  435. package/test/integration/generated/resiliency/srvDriven1/src/clientDefinitions.ts +70 -0
  436. package/test/integration/generated/resiliency/srvDriven1/src/index.ts +13 -0
  437. package/test/integration/generated/resiliency/srvDriven1/src/models.ts +6 -0
  438. package/test/integration/generated/resiliency/srvDriven1/src/outputModels.ts +6 -0
  439. package/test/integration/generated/resiliency/srvDriven1/src/parameters.ts +51 -0
  440. package/test/integration/generated/resiliency/srvDriven1/src/resiliencyServiceDriven1.ts +31 -0
  441. package/test/integration/generated/resiliency/srvDriven1/src/responses.ts +34 -0
  442. package/test/integration/generated/resiliency/srvDriven1/tsconfig.json +25 -0
  443. package/test/integration/generated/resiliency/srvDriven1/tspconfig.yaml +14 -0
  444. package/test/integration/generated/resiliency/srvDriven2/.eslintrc.json +11 -0
  445. package/test/integration/generated/resiliency/srvDriven2/README.md +56 -0
  446. package/test/integration/generated/resiliency/srvDriven2/api-extractor.json +18 -0
  447. package/test/integration/generated/resiliency/srvDriven2/package.json +80 -0
  448. package/test/integration/generated/resiliency/srvDriven2/rollup.config.js +118 -0
  449. package/test/integration/generated/resiliency/srvDriven2/src/clientDefinitions.ts +93 -0
  450. package/test/integration/generated/resiliency/srvDriven2/src/index.ts +13 -0
  451. package/test/integration/generated/resiliency/srvDriven2/src/models.ts +6 -0
  452. package/test/integration/generated/resiliency/srvDriven2/src/outputModels.ts +6 -0
  453. package/test/integration/generated/resiliency/srvDriven2/src/parameters.ts +68 -0
  454. package/test/integration/generated/resiliency/srvDriven2/src/resiliencyServiceDriven2.ts +31 -0
  455. package/test/integration/generated/resiliency/srvDriven2/src/responses.ts +45 -0
  456. package/test/integration/generated/resiliency/srvDriven2/tsconfig.json +25 -0
  457. package/test/integration/generated/resiliency/srvDriven2/tspconfig.yaml +14 -0
  458. package/test/integration/generated/server/path/multiple/src/clientDefinitions.ts +35 -0
  459. package/test/integration/generated/server/path/multiple/src/index.ts +11 -0
  460. package/test/integration/generated/server/path/multiple/src/multipleParamInServerPathClient.ts +39 -0
  461. package/test/integration/generated/server/path/multiple/src/parameters.ts +7 -0
  462. package/test/integration/generated/server/path/multiple/src/responses.ts +14 -0
  463. package/test/integration/generated/server/path/multiple/tspconfig.yaml +14 -0
  464. package/test/integration/generated/server/path/single/src/clientDefinitions.ts +19 -0
  465. package/test/integration/generated/server/path/single/src/index.ts +11 -0
  466. package/test/integration/generated/server/path/single/src/parameters.ts +6 -0
  467. package/test/integration/generated/server/path/single/src/responses.ts +9 -0
  468. package/test/integration/generated/server/path/single/src/singleParamInServerPathClient.ts +34 -0
  469. package/test/integration/generated/server/path/single/tspconfig.yaml +14 -0
  470. package/test/integration/generated/specialWords/src/clientDefinitions.ts +61 -0
  471. package/test/integration/generated/specialWords/src/index.ts +13 -0
  472. package/test/integration/generated/specialWords/src/models.ts +17 -0
  473. package/test/integration/generated/specialWords/src/outputModels.ts +17 -0
  474. package/test/integration/generated/specialWords/src/parameters.ts +37 -0
  475. package/test/integration/generated/specialWords/src/responses.ts +31 -0
  476. package/test/integration/generated/specialWords/src/specialWordsClient.ts +31 -0
  477. package/test/integration/generated/specialWords/tspconfig.yaml +14 -0
  478. package/test/integration/generated/unions/src/clientDefinitions.ts +53 -0
  479. package/test/integration/generated/unions/src/index.ts +12 -0
  480. package/test/integration/generated/unions/src/models.ts +27 -0
  481. package/test/integration/generated/unions/src/parameters.ts +34 -0
  482. package/test/integration/generated/unions/src/responses.ts +24 -0
  483. package/test/integration/generated/unions/src/unionsClient.ts +31 -0
  484. package/test/integration/generated/unions/tspconfig.yaml +14 -0
  485. package/test/integration/helloWorld.spec.ts +20 -0
  486. package/test/integration/internal.spec.ts +43 -0
  487. package/test/integration/lroBasic.spec.ts +25 -0
  488. package/test/integration/modelInheritance.spec.ts +192 -0
  489. package/test/integration/modelPropertyNullable.spec.ts +115 -0
  490. package/test/integration/modelPropertyOptional.spec.ts +362 -0
  491. package/test/integration/modelPropertyType.spec.ts +119 -0
  492. package/test/integration/modelUsage.spec.ts +47 -0
  493. package/test/integration/projection.spec.ts +55 -0
  494. package/test/integration/resiliencyDpgCustomization.spec.ts +52 -0
  495. package/test/integration/server.spec.ts +59 -0
  496. package/test/integration/specialWords.spec.ts +73 -0
  497. package/test/integration/unions.spec.ts +69 -0
  498. package/test/tsconfig.json +4 -0
  499. package/test/unit/apiVersion.spec.ts +388 -0
  500. package/test/unit/azureCoreOperationsGenerator.spec.ts +71 -0
  501. package/test/unit/clientDefinitionGenerator.spec.ts +73 -0
  502. package/test/unit/clientFactoryGenerator.spec.ts +376 -0
  503. package/test/unit/docsGenerator.spec.ts +201 -0
  504. package/test/unit/modelsGenerator.spec.ts +1319 -0
  505. package/test/unit/parametersGenerator.spec.ts +561 -0
  506. package/test/unit/responsesGenerator.spec.ts +462 -0
  507. package/test/unit/spreadAndAlias.spec.ts +200 -0
  508. package/test/unit/util/emitUtil.ts +157 -0
  509. package/test/unit/util/testUtil.ts +83 -0
  510. package/test/util/customBearerTokenTestingPolicy.ts +78 -0
  511. package/test/util/matrix.ts +48 -0
  512. package/tsconfig.json +36 -0
  513. package/tsconfig.test.json +7 -0
  514. package/typespec-ts.build.log +2 -0
@@ -0,0 +1,1106 @@
1
+ import { getPagedResult, isFixed } from "@azure-tools/typespec-azure-core";
2
+ import { getDoc, getFriendlyName, getMaxLength, getMaxValue, getMinLength, getMinValue, getPattern, getSummary, getVisibility, ignoreDiagnostics, isErrorModel, isNeverType, getEffectiveModelType, getDiscriminator, isKey, isStringType, getPropertyType, isNumericType, getFormat, getMinItems, getMaxItems, listServices, isNullType, SyntaxKind, getProjectedName } from "@typespec/compiler";
3
+ import { getAuthentication, getHeaderFieldName, getHttpOperation, getPathParamName, getQueryParamName, getServers, isStatusCode, isHeader } from "@typespec/http";
4
+ import { getAddedOnVersions } from "@typespec/versioning";
5
+ import { listClients, listOperationGroups, listOperationsInOperationGroup, isApiVersion, getDefaultApiVersion, getClientNamespaceString, createSdkContext } from "@azure-tools/typespec-client-generator-core";
6
+ import { getResourceOperation } from "@typespec/rest";
7
+ import { transformRLCOptions } from "../transform/transfromRLCOptions.js";
8
+ import { camelToSnakeCase, toCamelCase } from "../casingUtils.js";
9
+ let CASING = "snake";
10
+ function applyCasing(name, options = { casing: "snake" }) {
11
+ if (options.casing === "camel") {
12
+ return toCamelCase(name);
13
+ }
14
+ return camelToSnakeCase(name);
15
+ }
16
+ const typesMap = new Map();
17
+ const simpleTypesMap = new Map();
18
+ const endpointPathParameters = [];
19
+ let apiVersionParam = undefined;
20
+ function isSimpleType(program, type) {
21
+ // these decorators can only work for simple type(int/string/float, etc)
22
+ if (type && (type.kind === "Scalar" || type.kind === "ModelProperty")) {
23
+ const funcs = [
24
+ getMinValue,
25
+ getMaxValue,
26
+ getMinLength,
27
+ getMaxLength,
28
+ getPattern
29
+ ];
30
+ for (const func of funcs) {
31
+ if (func(program, type)) {
32
+ return true;
33
+ }
34
+ }
35
+ }
36
+ return false;
37
+ }
38
+ function getDocStr(program, target) {
39
+ var _a;
40
+ return (_a = getDoc(program, target)) !== null && _a !== void 0 ? _a : "";
41
+ }
42
+ function isLro(_program, operation) {
43
+ for (const decorator of operation.decorators) {
44
+ if (decorator.decorator.name === "$pollingOperation") {
45
+ return true;
46
+ }
47
+ }
48
+ return false;
49
+ }
50
+ function handleDiscriminator(program, type, model) {
51
+ const discriminator = getDiscriminator(program, type);
52
+ if (discriminator) {
53
+ let discriminatorProperty;
54
+ for (const childModel of type.derivedModels) {
55
+ const modelType = getType(program, childModel);
56
+ for (const property of modelType.properties) {
57
+ if (property.restApiName === discriminator.propertyName) {
58
+ modelType.discriminatorValue = property.type.value;
59
+ property.isDiscriminator = true;
60
+ model.discriminatedSubtypes[property.type.value] = modelType;
61
+ discriminatorProperty = property;
62
+ }
63
+ }
64
+ }
65
+ // it is not included in properties of cadl but needed by python codegen
66
+ if (discriminatorProperty) {
67
+ const discriminatorType = { ...discriminatorProperty.type };
68
+ discriminatorType.value = null;
69
+ const propertyCopy = {
70
+ ...discriminatorProperty,
71
+ isPolymorphic: true,
72
+ type: discriminatorType
73
+ };
74
+ propertyCopy.description = "";
75
+ model.properties.push(propertyCopy);
76
+ }
77
+ }
78
+ }
79
+ function getEffectiveSchemaType(program, type) {
80
+ function isSchemaProperty(property) {
81
+ const headerInfo = getHeaderFieldName(program, property);
82
+ const queryInfo = getQueryParamName(program, property);
83
+ const pathInfo = getPathParamName(program, property);
84
+ const statusCodeinfo = isStatusCode(program, property);
85
+ return !(headerInfo || queryInfo || pathInfo || statusCodeinfo);
86
+ }
87
+ const effective = getEffectiveModelType(program, type, isSchemaProperty);
88
+ if (effective.name) {
89
+ return effective;
90
+ }
91
+ return type;
92
+ }
93
+ function getType(program, type) {
94
+ // don't cache simple type(string, int, etc) since decorators may change the result
95
+ const enableCache = !isSimpleType(program, type);
96
+ const effectiveModel = type.kind === "Model" ? getEffectiveSchemaType(program, type) : type;
97
+ if (enableCache) {
98
+ const cached = typesMap.get(effectiveModel);
99
+ if (cached) {
100
+ return cached;
101
+ }
102
+ }
103
+ let newValue = emitType(program, type);
104
+ if (enableCache) {
105
+ typesMap.set(effectiveModel, newValue);
106
+ if (type.kind === "Model") {
107
+ // need to do properties after insertion to avoid infinite recursion
108
+ for (const property of type.properties.values()) {
109
+ if (isStatusCode(program, property) ||
110
+ isNeverType(property.type) ||
111
+ isHeader(program, property)) {
112
+ continue;
113
+ }
114
+ newValue.properties.push(emitProperty(program, property));
115
+ }
116
+ // need to do discriminator outside `emitModel` to avoid infinite recursion
117
+ handleDiscriminator(program, type, newValue);
118
+ }
119
+ }
120
+ else {
121
+ const key = JSON.stringify(newValue);
122
+ const value = simpleTypesMap.get(key);
123
+ if (value) {
124
+ newValue = value;
125
+ }
126
+ else {
127
+ simpleTypesMap.set(key, newValue);
128
+ }
129
+ }
130
+ return newValue;
131
+ }
132
+ // To pass the yaml dump
133
+ function getAddedOnVersion(p, t) {
134
+ var _a, _b;
135
+ return (_b = (_a = getAddedOnVersions(p, t)) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.value;
136
+ }
137
+ function emitParamBase(program, parameter) {
138
+ let optional;
139
+ let name;
140
+ let description = "";
141
+ let addedOn;
142
+ if (parameter.kind === "ModelProperty") {
143
+ optional = parameter.optional;
144
+ name = parameter.name;
145
+ description = getDocStr(program, parameter);
146
+ addedOn = getAddedOnVersion(program, parameter);
147
+ }
148
+ else {
149
+ optional = false;
150
+ name = "body";
151
+ }
152
+ return {
153
+ optional,
154
+ description,
155
+ addedOn,
156
+ clientName: applyCasing(name, { casing: CASING }),
157
+ inOverload: false
158
+ };
159
+ }
160
+ function getBodyType(program, route) {
161
+ var _a, _b, _c, _d;
162
+ let bodyModel = (_a = route.parameters.body) === null || _a === void 0 ? void 0 : _a.type;
163
+ if (bodyModel && bodyModel.kind === "Model" && route.operation) {
164
+ const resourceType = (_b = getResourceOperation(program, route.operation)) === null || _b === void 0 ? void 0 : _b.resourceType;
165
+ if (resourceType && route.responses && route.responses.length > 0) {
166
+ const resp = route.responses[0];
167
+ if (resp && resp.responses && resp.responses.length > 0) {
168
+ const responseBody = (_c = resp.responses[0]) === null || _c === void 0 ? void 0 : _c.body;
169
+ if (((_d = responseBody === null || responseBody === void 0 ? void 0 : responseBody.type) === null || _d === void 0 ? void 0 : _d.kind) === "Model") {
170
+ const bodyTypeInResponse = getEffectiveSchemaType(program, responseBody.type);
171
+ // response body type is reosurce type, and request body type (if templated) contains resource type
172
+ if (bodyTypeInResponse === resourceType &&
173
+ bodyModel.templateArguments &&
174
+ bodyModel.templateArguments.some((it) => {
175
+ return it.kind === "Model" || it.kind === "Union"
176
+ ? it === bodyTypeInResponse
177
+ : false;
178
+ })) {
179
+ bodyModel = resourceType;
180
+ }
181
+ }
182
+ }
183
+ }
184
+ if (resourceType && bodyModel.name === "") {
185
+ bodyModel = resourceType;
186
+ }
187
+ }
188
+ return bodyModel;
189
+ }
190
+ function emitBodyParameter(program, httpOperation) {
191
+ var _a, _b, _c, _d, _e;
192
+ const params = httpOperation.parameters;
193
+ const body = params.body;
194
+ const base = emitParamBase(program, (_a = body.parameter) !== null && _a !== void 0 ? _a : body.type);
195
+ let contentTypes = body.contentTypes;
196
+ if (contentTypes.length === 0) {
197
+ contentTypes = ["application/json"];
198
+ }
199
+ if (contentTypes.length !== 1) {
200
+ throw Error("Currently only one kind of content-type!");
201
+ }
202
+ const type = getType(program, getBodyType(program, httpOperation));
203
+ if (type.type === "model" && type.name === "") {
204
+ type.name = capitalize(httpOperation.operation.name) + "Request";
205
+ }
206
+ return {
207
+ contentTypes,
208
+ type,
209
+ restApiName: (_c = (_b = body.parameter) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : "body",
210
+ location: "body",
211
+ ...base,
212
+ defaultContentType: ((_e = (_d = body.parameter) === null || _d === void 0 ? void 0 : _d.default) !== null && _e !== void 0 ? _e : contentTypes.includes("application/json"))
213
+ ? "application/json"
214
+ : contentTypes[0]
215
+ };
216
+ }
217
+ function emitParameter(context, parameter, implementation) {
218
+ const base = emitParamBase(context.program, parameter.param);
219
+ let type = getType(context.program, parameter.param.type);
220
+ let clientDefaultValue = undefined;
221
+ if (parameter.name.toLowerCase() === "content-type" &&
222
+ type["type"] === "constant") {
223
+ /// We don't want constant types for content types, so we make sure if it's
224
+ /// a constant, we make it not constant
225
+ clientDefaultValue = type["value"];
226
+ type = type["valueType"];
227
+ }
228
+ const paramMap = {
229
+ restApiName: parameter.name,
230
+ location: parameter.type,
231
+ type: type,
232
+ implementation: implementation,
233
+ skipUrlEncoding: parameter.type === "endpointPath"
234
+ };
235
+ if (paramMap.type.type === "constant") {
236
+ clientDefaultValue = paramMap.type.value;
237
+ }
238
+ if (isApiVersion(context, parameter)) {
239
+ const defaultApiVersion = getDefaultApiVersion(context, getServiceNamespace(context.program));
240
+ paramMap.type = defaultApiVersion
241
+ ? getConstantType(defaultApiVersion.value)
242
+ : { type: "string" };
243
+ paramMap.implementation = "Client";
244
+ paramMap.in_docstring = false;
245
+ if (defaultApiVersion) {
246
+ clientDefaultValue = defaultApiVersion.value;
247
+ }
248
+ }
249
+ return { clientDefaultValue, ...base, ...paramMap };
250
+ }
251
+ function emitContentTypeParameter(bodyParameter, inOverload, inOverriden) {
252
+ return {
253
+ checkClientInput: false,
254
+ clientDefaultValue: bodyParameter.defaultContentType,
255
+ clientName: "content_type",
256
+ delimiter: null,
257
+ description: `Body parameter Content-Type. Known values are: ${bodyParameter.contentTypes}.`,
258
+ implementation: "Method",
259
+ inDocstring: true,
260
+ inOverload: inOverload,
261
+ inOverriden: inOverriden,
262
+ location: "header",
263
+ optional: true,
264
+ restApiName: "Content-Type",
265
+ type: { type: "string" }
266
+ };
267
+ }
268
+ function emitFlattenedParameter(bodyParameter, property) {
269
+ return {
270
+ checkClientInput: false,
271
+ clientDefaultValue: null,
272
+ clientName: property.clientName,
273
+ delimiter: null,
274
+ description: property.description,
275
+ implementation: "Method",
276
+ inDocstring: true,
277
+ inFlattenedBody: true,
278
+ inOverload: false,
279
+ inOverriden: false,
280
+ isApiVersion: bodyParameter["isApiVersion"],
281
+ location: "other",
282
+ optional: property["optional"],
283
+ restApiName: null,
284
+ skipUrlEncoding: false,
285
+ type: property["type"],
286
+ defaultToUnsetSentinel: true
287
+ };
288
+ }
289
+ function getConstantType(key) {
290
+ const cache = simpleTypesMap.get(key);
291
+ if (cache) {
292
+ return cache;
293
+ }
294
+ const type = {
295
+ apiVersions: [],
296
+ clientDefaultValue: null,
297
+ type: "constant",
298
+ value: key,
299
+ valueType: { type: "string" },
300
+ xmlMetadata: {}
301
+ };
302
+ simpleTypesMap.set(key, type);
303
+ return type;
304
+ }
305
+ function emitAcceptParameter(_program, inOverload, inOverriden) {
306
+ return {
307
+ checkClientInput: false,
308
+ clientDefaultValue: "application/json",
309
+ clientName: "accept",
310
+ delimiter: null,
311
+ description: "Accept header.",
312
+ explode: false,
313
+ groupedBy: null,
314
+ implementation: "Method",
315
+ inDocstring: true,
316
+ inOverload: inOverload,
317
+ inOverriden: inOverriden,
318
+ location: "header",
319
+ optional: false,
320
+ restApiName: "Accept",
321
+ skipUrlEncoding: false,
322
+ type: getConstantType("application/json")
323
+ };
324
+ }
325
+ function emitResponseHeaders(program, headers) {
326
+ const retval = [];
327
+ if (!headers) {
328
+ return retval;
329
+ }
330
+ for (const [key, value] of Object.entries(headers)) {
331
+ retval.push({
332
+ type: getType(program, value.type),
333
+ restApiName: key
334
+ });
335
+ }
336
+ return retval;
337
+ }
338
+ function isAzureCoreErrorType(t) {
339
+ var _a;
340
+ if ((t === null || t === void 0 ? void 0 : t.kind) !== "Model" ||
341
+ !["Error", "ErrorResponse", "InnerError"].includes(t.name))
342
+ return false;
343
+ const namespaces = ".Azure.Core.Foundations".split(".");
344
+ while (namespaces.length > 0 &&
345
+ ((t === null || t === void 0 ? void 0 : t.kind) === "Model" || (t === null || t === void 0 ? void 0 : t.kind) === "Namespace") &&
346
+ ((_a = t.namespace) === null || _a === void 0 ? void 0 : _a.name) === namespaces.pop()) {
347
+ t = t.namespace;
348
+ }
349
+ return namespaces.length == 0;
350
+ }
351
+ function emitResponse(program, response, innerResponse) {
352
+ var _a, _b;
353
+ let type = undefined;
354
+ if (((_a = innerResponse.body) === null || _a === void 0 ? void 0 : _a.type) &&
355
+ !isAzureCoreErrorType((_b = innerResponse.body) === null || _b === void 0 ? void 0 : _b.type)) {
356
+ // temporary logic. It can be removed after compiler optimize the response
357
+ const candidate = [
358
+ "ResourceOkResponse",
359
+ "ResourceCreatedResponse",
360
+ "AcceptedResponse"
361
+ ];
362
+ const originType = innerResponse.body.type;
363
+ if (innerResponse.body.type.kind === "Model" &&
364
+ candidate.find((e) => e === originType.name)) {
365
+ const modelType = getEffectiveSchemaType(program, originType);
366
+ type = getType(program, modelType);
367
+ }
368
+ else {
369
+ type = getType(program, innerResponse.body.type);
370
+ }
371
+ }
372
+ const statusCodes = [];
373
+ if (response.statusCode === "*") {
374
+ statusCodes.push("default");
375
+ }
376
+ else {
377
+ statusCodes.push(parseInt(response.statusCode));
378
+ }
379
+ return {
380
+ headers: emitResponseHeaders(program, innerResponse.headers),
381
+ statusCodes: statusCodes !== null && statusCodes !== void 0 ? statusCodes : [],
382
+ addedOn: getAddedOnVersion(program, response.type),
383
+ discriminator: "basic",
384
+ type: type
385
+ };
386
+ }
387
+ function emitOperation(context, operation, operationGroupName) {
388
+ const lro = isLro(context.program, operation);
389
+ const paging = getPagedResult(context.program, operation);
390
+ if (lro && paging) {
391
+ return emitLroPagingOperation(context, operation, operationGroupName);
392
+ }
393
+ else if (paging) {
394
+ return emitPagingOperation(context, operation, operationGroupName);
395
+ }
396
+ else if (lro) {
397
+ return emitLroOperation(context, operation, operationGroupName);
398
+ }
399
+ return emitBasicOperation(context, operation, operationGroupName);
400
+ }
401
+ function addLroInformation(emittedOperation) {
402
+ emittedOperation["discriminator"] = "lro";
403
+ }
404
+ function addPagingInformation(program, operation, emittedOperation) {
405
+ emittedOperation["discriminator"] = "paging";
406
+ const pagedResult = getPagedResult(program, operation);
407
+ if (pagedResult === undefined) {
408
+ throw Error("Trying to add paging information, but not paging metadata for this operation");
409
+ }
410
+ emittedOperation["itemName"] = pagedResult.itemsPath;
411
+ emittedOperation["continuationTokenName"] = pagedResult.nextLinkPath;
412
+ }
413
+ function emitLroPagingOperation(context, operation, operationGroupName) {
414
+ const emittedOperation = emitBasicOperation(context, operation, operationGroupName);
415
+ addLroInformation(emittedOperation);
416
+ addPagingInformation(context.program, operation, emittedOperation);
417
+ emittedOperation["discriminator"] = "lropaging";
418
+ return emittedOperation;
419
+ }
420
+ function emitLroOperation(context, operation, operationGroupName) {
421
+ const emittedOperation = emitBasicOperation(context, operation, operationGroupName);
422
+ addLroInformation(emittedOperation);
423
+ return emittedOperation;
424
+ }
425
+ function emitPagingOperation(context, operation, operationGroupName) {
426
+ const emittedOperation = emitBasicOperation(context, operation, operationGroupName);
427
+ addPagingInformation(context.program, operation, emittedOperation);
428
+ return emittedOperation;
429
+ }
430
+ function emitBasicOperation(context, operation, operationGroupName) {
431
+ var _a;
432
+ // Set up parameters for operation
433
+ const parameters = [];
434
+ if (endpointPathParameters) {
435
+ for (const param of endpointPathParameters) {
436
+ parameters.push(param);
437
+ }
438
+ }
439
+ const httpOperation = ignoreDiagnostics(getHttpOperation(context.program, operation));
440
+ for (const param of httpOperation.parameters.parameters) {
441
+ const emittedParam = emitParameter(context, param, "Method");
442
+ if (isApiVersion(context, param) && apiVersionParam === undefined) {
443
+ apiVersionParam = emittedParam;
444
+ }
445
+ parameters.push(emittedParam);
446
+ }
447
+ // Set up responses for operation
448
+ const responses = [];
449
+ const exceptions = [];
450
+ const isOverload = false;
451
+ const isOverriden = false;
452
+ for (const response of httpOperation.responses) {
453
+ for (const innerResponse of response.responses) {
454
+ const emittedResponse = emitResponse(context.program, response, innerResponse);
455
+ if (emittedResponse["type"] &&
456
+ parameters.filter((e) => e.restApiName.toLowerCase() === "accept")
457
+ .length === 0) {
458
+ parameters.push(emitAcceptParameter(context.program, isOverload, isOverriden));
459
+ }
460
+ if (isErrorModel(context.program, response.type)) {
461
+ // * is valid status code in cadl but invalid for autorest.python
462
+ if (response.statusCode === "*") {
463
+ exceptions.push(emittedResponse);
464
+ }
465
+ }
466
+ else {
467
+ responses.push(emittedResponse);
468
+ }
469
+ }
470
+ }
471
+ let bodyParameter;
472
+ if (httpOperation.parameters.body === undefined) {
473
+ bodyParameter = undefined;
474
+ }
475
+ else {
476
+ bodyParameter = emitBodyParameter(context.program, httpOperation);
477
+ if (parameters.filter((e) => e.restApiName.toLowerCase() === "content-type")
478
+ .length === 0) {
479
+ parameters.push(emitContentTypeParameter(bodyParameter, isOverload, isOverriden));
480
+ }
481
+ if (bodyParameter.type.type === "model" &&
482
+ bodyParameter.type.base === "json") {
483
+ bodyParameter["propertyToParameterName"] = {};
484
+ if (!isOverload) {
485
+ bodyParameter.defaultToUnsetSentinel = true;
486
+ }
487
+ for (const property of bodyParameter.type.properties) {
488
+ bodyParameter["propertyToParameterName"][property["restApiName"]] =
489
+ property["clientName"];
490
+ parameters.push(emitFlattenedParameter(bodyParameter, property));
491
+ }
492
+ }
493
+ }
494
+ const name = applyCasing(operation.name, { casing: CASING });
495
+ return {
496
+ name: name,
497
+ description: getDocStr(context.program, operation),
498
+ summary: (_a = getSummary(context.program, operation)) !== null && _a !== void 0 ? _a : "",
499
+ url: httpOperation.path,
500
+ method: httpOperation.verb.toUpperCase(),
501
+ parameters: parameters,
502
+ bodyParameter: bodyParameter,
503
+ responses: responses !== null && responses !== void 0 ? responses : [],
504
+ exceptions: exceptions !== null && exceptions !== void 0 ? exceptions : [],
505
+ groupName: operationGroupName,
506
+ addedOn: getAddedOnVersion(context.program, operation),
507
+ discriminator: "basic",
508
+ isOverload: false,
509
+ overloads: [],
510
+ apiVersions: [getAddedOnVersion(context.program, operation)]
511
+ };
512
+ }
513
+ function isReadOnly(program, type) {
514
+ // https://microsoft.github.io/cadl/standard-library/rest/operations#automatic-visibility
515
+ // Only "read" should be readOnly
516
+ const visibility = getVisibility(program, type);
517
+ if (visibility) {
518
+ return visibility.includes("read");
519
+ }
520
+ else {
521
+ return false;
522
+ }
523
+ }
524
+ function emitProperty(program, property) {
525
+ var _a;
526
+ let clientDefaultValue = undefined;
527
+ const propertyDefaultKind = (_a = property.default) === null || _a === void 0 ? void 0 : _a.kind;
528
+ if (property.default &&
529
+ (propertyDefaultKind === "Number" ||
530
+ propertyDefaultKind === "String" ||
531
+ propertyDefaultKind === "Boolean")) {
532
+ clientDefaultValue = property.default.value;
533
+ }
534
+ const restApiName = getProjectedName(program, property, "json");
535
+ return {
536
+ clientName: applyCasing(property.name, { casing: CASING }),
537
+ restApiName: restApiName !== null && restApiName !== void 0 ? restApiName : property.name,
538
+ type: getType(program, property.type),
539
+ optional: property.optional,
540
+ description: getDocStr(program, property),
541
+ addedOn: getAddedOnVersion(program, property),
542
+ readonly: isReadOnly(program, property) || isKey(program, property),
543
+ clientDefaultValue: clientDefaultValue
544
+ };
545
+ }
546
+ function getName(program, type) {
547
+ const friendlyName = getFriendlyName(program, type);
548
+ if (friendlyName) {
549
+ return friendlyName;
550
+ }
551
+ else {
552
+ if (type.templateArguments && type.templateArguments.length > 0) {
553
+ return (type.name +
554
+ type.templateArguments
555
+ .map((it) => (it.kind === "Model" ? it.name : ""))
556
+ .join(""));
557
+ }
558
+ else {
559
+ return type.name;
560
+ }
561
+ }
562
+ }
563
+ function emitModel(program, type) {
564
+ // Now we know it's a defined model
565
+ const properties = [];
566
+ let baseModel = undefined;
567
+ if (type.baseModel) {
568
+ baseModel = getType(program, type.baseModel);
569
+ }
570
+ const modelName = getName(program, type) || getEffectiveSchemaType(program, type).name;
571
+ return {
572
+ type: "model",
573
+ name: modelName,
574
+ description: getDocStr(program, type),
575
+ parents: baseModel ? [baseModel] : [],
576
+ discriminatedSubtypes: {},
577
+ properties: properties,
578
+ addedOn: getAddedOnVersion(program, type),
579
+ snakeCaseName: modelName
580
+ ? applyCasing(modelName, { casing: CASING })
581
+ : modelName,
582
+ base: modelName === "" ? "json" : "dpg"
583
+ };
584
+ }
585
+ function intOrFloat(value) {
586
+ return value.toString().indexOf(".") === -1 ? "integer" : "float";
587
+ }
588
+ function enumName(name) {
589
+ if (name.toUpperCase() === name) {
590
+ return name;
591
+ }
592
+ return applyCasing(name, { casing: CASING }).toUpperCase();
593
+ }
594
+ function emitEnum(program, type) {
595
+ var _a;
596
+ const enumValues = [];
597
+ for (const m of type.members.values()) {
598
+ enumValues.push({
599
+ name: enumName(m.name),
600
+ value: (_a = m.value) !== null && _a !== void 0 ? _a : m.name,
601
+ description: getDocStr(program, m)
602
+ });
603
+ }
604
+ return {
605
+ type: "enum",
606
+ name: type.name,
607
+ description: getDocStr(program, type),
608
+ valueType: { type: enumMemberType(type.members.values().next().value) },
609
+ values: enumValues,
610
+ isFixed: isFixed(program, type)
611
+ };
612
+ function enumMemberType(member) {
613
+ if (typeof member.value === "number") {
614
+ return intOrFloat(member.value);
615
+ }
616
+ return "string";
617
+ }
618
+ }
619
+ function constantType(value, valueType) {
620
+ return { type: "constant", value: value, valueType: { type: valueType } };
621
+ }
622
+ function emitCredential(auth) {
623
+ let credential_type = {};
624
+ if (auth.type === "oauth2") {
625
+ credential_type = {
626
+ type: "OAuth2",
627
+ policy: {
628
+ type: "BearerTokenCredentialPolicy",
629
+ credentialScopes: []
630
+ }
631
+ };
632
+ for (const flow of auth.flows) {
633
+ for (const scope of flow.scopes) {
634
+ credential_type.policy.credentialScopes.push(scope.value);
635
+ }
636
+ credential_type.policy.credentialScopes.push();
637
+ }
638
+ }
639
+ else if (auth.type === "apiKey") {
640
+ credential_type = {
641
+ type: "Key",
642
+ policy: {
643
+ type: "AzureKeyCredentialPolicy",
644
+ key: auth.name
645
+ }
646
+ };
647
+ }
648
+ return credential_type;
649
+ }
650
+ function emitCredentialUnion(cred_types) {
651
+ const result = {};
652
+ // Export as CombinedType, which is already a Union Type in autorest codegen
653
+ result.type = "combined";
654
+ result.types = [];
655
+ for (const cred_type of cred_types.types) {
656
+ result.types.push(emitCredential(cred_type.scheme));
657
+ }
658
+ return result;
659
+ }
660
+ function emitStdScalar(scalar) {
661
+ switch (scalar.name) {
662
+ case "bytes":
663
+ return { type: "byte-array", format: "byte" };
664
+ case "int8":
665
+ case "int16":
666
+ case "int32":
667
+ case "int64":
668
+ case "safeint":
669
+ case "uint8":
670
+ case "uint16":
671
+ case "uint32":
672
+ case "uint64":
673
+ case "integer":
674
+ return { type: "integer" };
675
+ case "float32":
676
+ case "float64":
677
+ case "float":
678
+ return { type: "float" };
679
+ case "url":
680
+ case "string":
681
+ return { type: "string" };
682
+ case "boolean":
683
+ return { type: "boolean" };
684
+ case "plainDate":
685
+ return { type: "date" };
686
+ case "utcDateTime":
687
+ return { type: "datetime", format: "date-time" };
688
+ case "plainTime":
689
+ return { type: "time" };
690
+ case "duration":
691
+ return { type: "duration" };
692
+ case "numeric":
693
+ return {}; // Waiting on design for more precise type https://github.com/microsoft/cadl/issues/1260
694
+ default:
695
+ return {};
696
+ }
697
+ }
698
+ function applyIntrinsicDecorators(program, type, result) {
699
+ const newResult = { ...result };
700
+ const docStr = getDoc(program, type);
701
+ const isString = isStringType(program, getPropertyType(type));
702
+ const isNumeric = isNumericType(program, getPropertyType(type));
703
+ if (!result.description && docStr) {
704
+ newResult.description = docStr;
705
+ }
706
+ const formatStr = getFormat(program, type);
707
+ if (isString && !result.format && formatStr) {
708
+ newResult.format = formatStr;
709
+ }
710
+ const pattern = getPattern(program, type);
711
+ if (isString && !result.pattern && pattern) {
712
+ newResult.pattern = pattern;
713
+ }
714
+ const minLength = getMinLength(program, type);
715
+ if (isString && !result.minLength && minLength !== undefined) {
716
+ newResult.minLength = minLength;
717
+ }
718
+ const maxLength = getMaxLength(program, type);
719
+ if (isString && !result.maxLength && maxLength !== undefined) {
720
+ newResult.maxLength = maxLength;
721
+ }
722
+ const minValue = getMinValue(program, type);
723
+ if (isNumeric && !result.minimum && minValue !== undefined) {
724
+ newResult.minimum = minValue;
725
+ }
726
+ const maxValue = getMaxValue(program, type);
727
+ if (isNumeric && !result.maximum && maxValue !== undefined) {
728
+ newResult.maximum = maxValue;
729
+ }
730
+ const minItems = getMinItems(program, type);
731
+ if (!result.minItems && minItems !== undefined) {
732
+ newResult.minItems = minItems;
733
+ }
734
+ const maxItems = getMaxItems(program, type);
735
+ if (!result.maxItems && maxItems !== undefined) {
736
+ newResult.maxItems = maxItems;
737
+ }
738
+ return newResult;
739
+ }
740
+ function emitScalar(program, scalar) {
741
+ let result = {};
742
+ if (program.checker.isStdType(scalar)) {
743
+ result = emitStdScalar(scalar);
744
+ }
745
+ else if (scalar.baseScalar) {
746
+ result = emitScalar(program, scalar.baseScalar);
747
+ }
748
+ return applyIntrinsicDecorators(program, scalar, result);
749
+ }
750
+ function emitListOrDict(program, type) {
751
+ if (type.indexer !== undefined) {
752
+ if (!isNeverType(type.indexer.key)) {
753
+ const name = type.indexer.key.name;
754
+ if (name === "string") {
755
+ return {
756
+ type: "dict",
757
+ elementType: getType(program, type.indexer.value)
758
+ };
759
+ }
760
+ else if (name === "integer") {
761
+ return {
762
+ type: "list",
763
+ elementType: getType(program, type.indexer.value)
764
+ };
765
+ }
766
+ }
767
+ }
768
+ return undefined;
769
+ }
770
+ function mapCadlType(program, type) {
771
+ switch (type.kind) {
772
+ case "Number":
773
+ return constantType(type.value, intOrFloat(type.value));
774
+ case "String":
775
+ return constantType(type.value, "string");
776
+ case "Boolean":
777
+ return constantType(type.value, "boolean");
778
+ case "Model":
779
+ return emitListOrDict(program, type);
780
+ }
781
+ }
782
+ function capitalize(name) {
783
+ return name[0].toUpperCase() + name.slice(1);
784
+ }
785
+ function emitUnion(program, type) {
786
+ const nonNullOptions = [...type.variants.values()]
787
+ .map((x) => x.type)
788
+ .filter((t) => !isNullType(t));
789
+ const notLiteral = (t) => ["Boolean", "Number", "String"].indexOf(t.kind) < 0;
790
+ if (nonNullOptions.length > 1) {
791
+ if (nonNullOptions.every(notLiteral)) {
792
+ // Generate as CombinedType if non of the options is Literal.
793
+ const unionName = `MyCombinedType`;
794
+ return {
795
+ name: unionName,
796
+ snakeCaseName: applyCasing(unionName, { casing: CASING }),
797
+ description: `Type of ${unionName}`,
798
+ isPublic: false,
799
+ type: "combined",
800
+ types: nonNullOptions.map((x) => emitType(program, x)),
801
+ xmlMetadata: {}
802
+ };
803
+ }
804
+ else if (nonNullOptions.some(notLiteral)) {
805
+ // Can't generate if this union is a mixed up of literals and sub-types
806
+ throw Error(`Can't do union for ${JSON.stringify(nonNullOptions)}`);
807
+ }
808
+ }
809
+ // Geneate Union of Literals as Python Enum
810
+ const values = [];
811
+ for (const option of nonNullOptions) {
812
+ const value = emitType(program, option)["value"];
813
+ values.push({
814
+ description: "",
815
+ name: applyCasing(value, { casing: CASING }).toUpperCase(),
816
+ value: value
817
+ });
818
+ }
819
+ let enumName = "MyEnum";
820
+ if (type.node &&
821
+ type.node.parent &&
822
+ [SyntaxKind.ModelStatement, SyntaxKind.ModelProperty].includes(type.node.parent.kind)) {
823
+ if (type.node.parent.kind === SyntaxKind.ModelStatement) {
824
+ enumName = capitalize(type.node.parent.id.sv);
825
+ }
826
+ else if (type.node.parent.kind === SyntaxKind.ModelProperty) {
827
+ const parent = type.node.parent;
828
+ if (parent.id.sv) {
829
+ enumName = capitalize(parent.id.sv) + "Type";
830
+ }
831
+ }
832
+ }
833
+ return {
834
+ name: enumName,
835
+ snakeCaseName: applyCasing(enumName, { casing: CASING }),
836
+ description: `Type of ${enumName}`,
837
+ isPublic: false,
838
+ type: "enum",
839
+ valueType: emitType(program, nonNullOptions[0])["valueType"],
840
+ values: values,
841
+ xmlMetadata: {}
842
+ };
843
+ }
844
+ function emitType(program, type) {
845
+ if (type.kind === "Credential") {
846
+ return emitCredential(type.scheme);
847
+ }
848
+ if (type.kind === "CredentialTypeUnion") {
849
+ return emitCredentialUnion(type);
850
+ }
851
+ const builtinType = mapCadlType(program, type);
852
+ if (builtinType !== undefined) {
853
+ // add in description elements for types derived from primitive types (SecureString, etc.)
854
+ const doc = getDoc(program, type);
855
+ if (doc) {
856
+ builtinType.description = doc;
857
+ }
858
+ return builtinType;
859
+ }
860
+ switch (type.kind) {
861
+ case "Intrinsic":
862
+ return { type: "any" };
863
+ case "Model":
864
+ return emitModel(program, type);
865
+ case "Scalar":
866
+ return emitScalar(program, type);
867
+ case "Union":
868
+ return emitUnion(program, type);
869
+ case "UnionVariant":
870
+ return {};
871
+ case "Enum":
872
+ return emitEnum(program, type);
873
+ default:
874
+ throw Error(`Not supported ${type.kind}`);
875
+ }
876
+ }
877
+ function emitOperationGroups(context, client) {
878
+ const operationGroups = [];
879
+ for (const operationGroup of listOperationGroups(context, client)) {
880
+ const operations = [];
881
+ const name = operationGroup.type.name;
882
+ for (const operation of listOperationsInOperationGroup(context, operationGroup)) {
883
+ operations.push(emitOperation(context, operation, name));
884
+ }
885
+ operationGroups.push({
886
+ className: name,
887
+ propertyName: name,
888
+ operations: operations
889
+ });
890
+ }
891
+ const clientOperations = [];
892
+ for (const operation of listOperationsInOperationGroup(context, client)) {
893
+ clientOperations.push(emitOperation(context, operation, ""));
894
+ }
895
+ if (clientOperations.length > 0) {
896
+ operationGroups.push({
897
+ className: "",
898
+ propertyName: "",
899
+ operations: clientOperations
900
+ });
901
+ }
902
+ return operationGroups;
903
+ }
904
+ function getServerHelper(program, namespace) {
905
+ const servers = getServers(program, namespace);
906
+ if (servers === undefined) {
907
+ return undefined;
908
+ }
909
+ return servers[0];
910
+ }
911
+ function emitServerParams(context, namespace) {
912
+ const server = getServerHelper(context.program, namespace);
913
+ if (server === undefined) {
914
+ return [
915
+ {
916
+ optional: false,
917
+ description: "Service host",
918
+ clientName: "endpoint",
919
+ clientDefaultValue: null,
920
+ restApiName: "$host",
921
+ location: "path",
922
+ type: { type: "string" },
923
+ implementation: "Client",
924
+ inOverload: false
925
+ }
926
+ ];
927
+ }
928
+ if (server.parameters) {
929
+ const params = [];
930
+ for (const param of server.parameters.values()) {
931
+ const serverParameter = {
932
+ type: "endpointPath",
933
+ name: param.name,
934
+ param: param
935
+ };
936
+ const emittedParameter = emitParameter(context, serverParameter, "Client");
937
+ endpointPathParameters.push(emittedParameter);
938
+ if (isApiVersion(context, serverParameter) &&
939
+ apiVersionParam == undefined) {
940
+ apiVersionParam = emittedParameter;
941
+ continue;
942
+ }
943
+ params.push(emittedParameter);
944
+ }
945
+ return params;
946
+ }
947
+ else {
948
+ return [
949
+ {
950
+ optional: false,
951
+ description: "Service host",
952
+ clientName: "endpoint",
953
+ clientDefaultValue: server.url,
954
+ restApiName: "$host",
955
+ location: "path",
956
+ type: { type: "string" },
957
+ implementation: "Client",
958
+ inOverload: false
959
+ }
960
+ ];
961
+ }
962
+ }
963
+ function emitCredentialParam(program, namespace) {
964
+ const auth = getAuthentication(program, namespace);
965
+ if (auth) {
966
+ const credential_types = [];
967
+ for (const option of auth.options) {
968
+ for (const scheme of option.schemes) {
969
+ const type = {
970
+ kind: "Credential",
971
+ scheme: scheme
972
+ };
973
+ credential_types.push(type);
974
+ }
975
+ }
976
+ if (credential_types.length > 0) {
977
+ let type;
978
+ if (credential_types.length === 1 && credential_types[0]) {
979
+ type = credential_types[0];
980
+ }
981
+ else {
982
+ type = {
983
+ kind: "CredentialTypeUnion",
984
+ types: credential_types
985
+ };
986
+ }
987
+ return {
988
+ type: getType(program, type),
989
+ optional: false,
990
+ description: "Credential needed for the client to connect to Azure.",
991
+ clientName: "credential",
992
+ location: "other",
993
+ restApiName: "credential",
994
+ implementation: "Client",
995
+ skipUrlEncoding: true,
996
+ inOverload: false
997
+ };
998
+ }
999
+ }
1000
+ return undefined;
1001
+ }
1002
+ function emitGlobalParameters(context, namespace) {
1003
+ const clientParameters = emitServerParams(context, namespace);
1004
+ const credentialParam = emitCredentialParam(context.program, namespace);
1005
+ if (credentialParam) {
1006
+ clientParameters.push(credentialParam);
1007
+ }
1008
+ return clientParameters;
1009
+ }
1010
+ function getApiVersionParameter(context) {
1011
+ const version = getDefaultApiVersion(context, getServiceNamespace(context.program));
1012
+ if (apiVersionParam) {
1013
+ return { ...apiVersionParam, isApiVersion: true };
1014
+ }
1015
+ else if (version !== undefined) {
1016
+ return {
1017
+ clientName: "api_version",
1018
+ clientDefaultValue: version.value,
1019
+ description: "Api Version",
1020
+ implementation: "Client",
1021
+ location: "query",
1022
+ restApiName: "api-version",
1023
+ skipUrlEncoding: false,
1024
+ optional: false,
1025
+ inDocstring: true,
1026
+ inOverload: false,
1027
+ inOverriden: false,
1028
+ type: getConstantType(version.value),
1029
+ isApiVersion: true
1030
+ };
1031
+ }
1032
+ }
1033
+ function emitClients(context, namespace) {
1034
+ var _a;
1035
+ const program = context.program;
1036
+ const clients = listClients(context);
1037
+ const retval = [];
1038
+ for (const client of clients) {
1039
+ const clientName = client.name.replace("Client", "");
1040
+ if (getNamespace(context, client.name) !== namespace) {
1041
+ continue;
1042
+ }
1043
+ const server = getServerHelper(program, client.service);
1044
+ const emittedClient = {
1045
+ name: (_a = clientName.split(".").at(-1)) !== null && _a !== void 0 ? _a : "",
1046
+ description: getDocStr(program, client.type),
1047
+ parameters: emitGlobalParameters(context, client.service),
1048
+ operationGroups: emitOperationGroups(context, client),
1049
+ url: server ? server.url : "",
1050
+ apiVersions: []
1051
+ };
1052
+ const emittedApiVersionParam = getApiVersionParameter(context);
1053
+ if (emittedApiVersionParam) {
1054
+ emittedClient.parameters.push(emittedApiVersionParam);
1055
+ }
1056
+ retval.push(emittedClient);
1057
+ }
1058
+ return retval;
1059
+ }
1060
+ function getServiceNamespace(program) {
1061
+ return listServices(program)[0].type;
1062
+ }
1063
+ function getNamespace(context, clientName) {
1064
+ // We get client namespaces from the client name. If there's a dot, we add that to the namespace
1065
+ const submodule = clientName.split(".").slice(0, -1).join(".").toLowerCase();
1066
+ if (!submodule) {
1067
+ return getClientNamespaceString(context).toLowerCase();
1068
+ }
1069
+ return submodule;
1070
+ }
1071
+ function getNamespaces(context) {
1072
+ const namespaces = new Set();
1073
+ for (const client of listClients(context)) {
1074
+ namespaces.add(getNamespace(context, client.name));
1075
+ }
1076
+ return namespaces;
1077
+ }
1078
+ export function emitCodeModel(context, options = { casing: "snake" }) {
1079
+ var _a, _b;
1080
+ CASING = (_a = options.casing) !== null && _a !== void 0 ? _a : CASING;
1081
+ const dpgContext = createSdkContext(context);
1082
+ const clientNamespaceString = (_b = getClientNamespaceString(dpgContext)) === null || _b === void 0 ? void 0 : _b.toLowerCase();
1083
+ // Get types
1084
+ const codeModel = {
1085
+ options: transformRLCOptions(context.program, context.options, context.emitterOutputDir, dpgContext),
1086
+ namespace: clientNamespaceString,
1087
+ subnamespaceToClients: {},
1088
+ clients: [],
1089
+ types: []
1090
+ };
1091
+ for (const namespace of getNamespaces(dpgContext)) {
1092
+ if (namespace === clientNamespaceString) {
1093
+ codeModel.clients = emitClients(dpgContext, namespace);
1094
+ }
1095
+ else {
1096
+ codeModel["subnamespaceToClients"][namespace] = emitClients(dpgContext, namespace);
1097
+ }
1098
+ }
1099
+ codeModel.types = [
1100
+ ...[...typesMap.values()].filter((t) => t.name !== "object"),
1101
+ { type: "string" },
1102
+ ...simpleTypesMap.values()
1103
+ ];
1104
+ return codeModel;
1105
+ }
1106
+ //# sourceMappingURL=buildCodeModel.js.map