@azure-tools/typespec-go 0.14.2 → 0.15.0-dev.4

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 (280) hide show
  1. package/CHANGELOG.md +669 -0
  2. package/README.md +6 -4
  3. package/dist/{codegen.go/src/core/clientFactory.d.ts → src/codegen/core/client-factory.d.ts} +2 -2
  4. package/dist/src/codegen/core/client-factory.d.ts.map +1 -0
  5. package/dist/{codegen.go/src/core/clientFactory.js → src/codegen/core/client-factory.js} +29 -24
  6. package/dist/src/codegen/core/client-factory.js.map +1 -0
  7. package/dist/{codegen.go/src/core/cloudConfig.d.ts → src/codegen/core/cloud-config.d.ts} +2 -2
  8. package/dist/src/codegen/core/cloud-config.d.ts.map +1 -0
  9. package/dist/{codegen.go/src/core/cloudConfig.js → src/codegen/core/cloud-config.js} +10 -9
  10. package/dist/src/codegen/core/cloud-config.js.map +1 -0
  11. package/dist/{codegen.go/src → src/codegen}/core/constants.d.ts +1 -1
  12. package/dist/src/codegen/core/constants.d.ts.map +1 -0
  13. package/dist/{codegen.go/src → src/codegen}/core/constants.js +9 -9
  14. package/dist/src/codegen/core/constants.js.map +1 -0
  15. package/dist/{codegen.go/src → src/codegen}/core/errors.d.ts +1 -1
  16. package/dist/src/codegen/core/errors.d.ts.map +1 -0
  17. package/dist/src/codegen/core/errors.js.map +1 -0
  18. package/dist/{codegen.go/src → src/codegen}/core/example.d.ts +1 -1
  19. package/dist/src/codegen/core/example.d.ts.map +1 -0
  20. package/dist/{codegen.go/src → src/codegen}/core/example.js +155 -140
  21. package/dist/src/codegen/core/example.js.map +1 -0
  22. package/dist/{codegen.go/src → src/codegen}/core/gomod.d.ts +1 -1
  23. package/dist/src/codegen/core/gomod.d.ts.map +1 -0
  24. package/dist/{codegen.go/src → src/codegen}/core/gomod.js +8 -8
  25. package/dist/src/codegen/core/gomod.js.map +1 -0
  26. package/dist/{codegen.go/src → src/codegen}/core/helpers.d.ts +5 -5
  27. package/dist/src/codegen/core/helpers.d.ts.map +1 -0
  28. package/dist/{codegen.go/src → src/codegen}/core/helpers.js +308 -284
  29. package/dist/src/codegen/core/helpers.js.map +1 -0
  30. package/dist/{codegen.go/src → src/codegen}/core/imports.d.ts +1 -1
  31. package/dist/src/codegen/core/imports.d.ts.map +1 -0
  32. package/dist/{codegen.go/src → src/codegen}/core/imports.js +19 -18
  33. package/dist/src/codegen/core/imports.js.map +1 -0
  34. package/dist/{codegen.go/src → src/codegen}/core/interfaces.d.ts +1 -1
  35. package/dist/src/codegen/core/interfaces.d.ts.map +1 -0
  36. package/dist/{codegen.go/src → src/codegen}/core/interfaces.js +5 -5
  37. package/dist/src/codegen/core/interfaces.js.map +1 -0
  38. package/dist/{codegen.go/src → src/codegen}/core/license.d.ts +1 -1
  39. package/dist/src/codegen/core/license.d.ts.map +1 -0
  40. package/dist/src/codegen/core/license.js.map +1 -0
  41. package/dist/src/codegen/core/metadata.d.ts +3 -0
  42. package/dist/src/codegen/core/metadata.d.ts.map +1 -0
  43. package/dist/{codegen.go/src → src/codegen}/core/metadata.js +1 -1
  44. package/dist/src/codegen/core/metadata.js.map +1 -0
  45. package/dist/{codegen.go/src → src/codegen}/core/models.d.ts +2 -2
  46. package/dist/src/codegen/core/models.d.ts.map +1 -0
  47. package/dist/{codegen.go/src → src/codegen}/core/models.js +215 -184
  48. package/dist/src/codegen/core/models.js.map +1 -0
  49. package/dist/{codegen.go/src → src/codegen}/core/operations.d.ts +1 -1
  50. package/dist/src/codegen/core/operations.d.ts.map +1 -0
  51. package/dist/{codegen.go/src → src/codegen}/core/operations.js +383 -360
  52. package/dist/src/codegen/core/operations.js.map +1 -0
  53. package/dist/{codegen.go/src → src/codegen}/core/options.d.ts +1 -1
  54. package/dist/src/codegen/core/options.d.ts.map +1 -0
  55. package/dist/{codegen.go/src → src/codegen}/core/options.js +11 -11
  56. package/dist/src/codegen/core/options.js.map +1 -0
  57. package/dist/{codegen.go/src → src/codegen}/core/polymorphics.d.ts +1 -1
  58. package/dist/src/codegen/core/polymorphics.d.ts.map +1 -0
  59. package/dist/{codegen.go/src → src/codegen}/core/polymorphics.js +30 -30
  60. package/dist/src/codegen/core/polymorphics.js.map +1 -0
  61. package/dist/{codegen.go/src → src/codegen}/core/responses.d.ts +1 -1
  62. package/dist/src/codegen/core/responses.d.ts.map +1 -0
  63. package/dist/{codegen.go/src → src/codegen}/core/responses.js +28 -28
  64. package/dist/src/codegen/core/responses.js.map +1 -0
  65. package/dist/{codegen.go/src → src/codegen}/core/version.d.ts +1 -1
  66. package/dist/src/codegen/core/version.d.ts.map +1 -0
  67. package/dist/{codegen.go/src → src/codegen}/core/version.js +4 -4
  68. package/dist/src/codegen/core/version.js.map +1 -0
  69. package/dist/{codegen.go/src/core/xmlAdditionalProps.d.ts → src/codegen/core/xml-additional-props.d.ts} +2 -2
  70. package/dist/src/codegen/core/xml-additional-props.d.ts.map +1 -0
  71. package/dist/{codegen.go/src/core/xmlAdditionalProps.js → src/codegen/core/xml-additional-props.js} +11 -11
  72. package/dist/src/codegen/core/xml-additional-props.js.map +1 -0
  73. package/dist/{codegen.go/src → src/codegen}/emitter.d.ts +2 -2
  74. package/dist/src/codegen/emitter.d.ts.map +1 -0
  75. package/dist/{codegen.go/src → src/codegen}/emitter.js +58 -54
  76. package/dist/src/codegen/emitter.js.map +1 -0
  77. package/dist/{codegen.go/src → src/codegen}/fake/factory.d.ts +1 -1
  78. package/dist/src/codegen/fake/factory.d.ts.map +1 -0
  79. package/dist/{codegen.go/src → src/codegen}/fake/factory.js +22 -21
  80. package/dist/src/codegen/fake/factory.js.map +1 -0
  81. package/dist/{codegen.go/src → src/codegen}/fake/internal.d.ts +1 -1
  82. package/dist/src/codegen/fake/internal.d.ts.map +1 -0
  83. package/dist/{codegen.go/src → src/codegen}/fake/internal.js +13 -13
  84. package/dist/src/codegen/fake/internal.js.map +1 -0
  85. package/dist/{codegen.go/src → src/codegen}/fake/servers.d.ts +1 -1
  86. package/dist/src/codegen/fake/servers.d.ts.map +1 -0
  87. package/dist/{codegen.go/src → src/codegen}/fake/servers.js +332 -300
  88. package/dist/src/codegen/fake/servers.js.map +1 -0
  89. package/dist/src/codegen/index.d.ts +4 -0
  90. package/dist/src/codegen/index.d.ts.map +1 -0
  91. package/dist/{codegen.go/src → src/codegen}/index.js +3 -3
  92. package/dist/src/codegen/index.js.map +1 -0
  93. package/dist/{codemodel.go/src → src/codemodel}/client.d.ts +25 -25
  94. package/dist/src/codemodel/client.d.ts.map +1 -0
  95. package/dist/{codemodel.go/src → src/codemodel}/client.js +32 -32
  96. package/dist/src/codemodel/client.js.map +1 -0
  97. package/dist/{codemodel.go/src/codeModel.d.ts → src/codemodel/code-model.d.ts} +3 -3
  98. package/dist/src/codemodel/code-model.d.ts.map +1 -0
  99. package/dist/{codemodel.go/src/codeModel.js → src/codemodel/code-model.js} +1 -1
  100. package/dist/src/codemodel/code-model.js.map +1 -0
  101. package/dist/{codemodel.go/src → src/codemodel}/errors.d.ts +5 -5
  102. package/dist/src/codemodel/errors.d.ts.map +1 -0
  103. package/dist/{codemodel.go/src → src/codemodel}/errors.js +1 -1
  104. package/dist/src/codemodel/errors.js.map +1 -0
  105. package/dist/{codemodel.go/src → src/codemodel}/examples.d.ts +13 -13
  106. package/dist/src/codemodel/examples.d.ts.map +1 -0
  107. package/dist/{codemodel.go/src → src/codemodel}/examples.js +10 -10
  108. package/dist/src/codemodel/examples.js.map +1 -0
  109. package/dist/src/codemodel/index.d.ts +9 -0
  110. package/dist/src/codemodel/index.d.ts.map +1 -0
  111. package/dist/{codemodel.go/src → src/codemodel}/index.js +8 -8
  112. package/dist/src/codemodel/index.js.map +1 -0
  113. package/dist/{codemodel.go/src → src/codemodel}/method.d.ts +1 -1
  114. package/dist/src/codemodel/method.d.ts.map +1 -0
  115. package/dist/src/codemodel/method.js.map +1 -0
  116. package/dist/{codemodel.go/src → src/codemodel}/module.d.ts +8 -8
  117. package/dist/src/codemodel/module.d.ts.map +1 -0
  118. package/dist/{codemodel.go/src → src/codemodel}/module.js +12 -11
  119. package/dist/src/codemodel/module.js.map +1 -0
  120. package/dist/{codemodel.go/src → src/codemodel}/param.d.ts +26 -26
  121. package/dist/src/codemodel/param.d.ts.map +1 -0
  122. package/dist/{codemodel.go/src → src/codemodel}/param.js +56 -53
  123. package/dist/src/codemodel/param.js.map +1 -0
  124. package/dist/{codemodel.go/src → src/codemodel}/result.d.ts +15 -15
  125. package/dist/src/codemodel/result.d.ts.map +1 -0
  126. package/dist/{codemodel.go/src → src/codemodel}/result.js +27 -27
  127. package/dist/src/codemodel/result.js.map +1 -0
  128. package/dist/{codemodel.go/src → src/codemodel}/type.d.ts +30 -30
  129. package/dist/src/codemodel/type.d.ts.map +1 -0
  130. package/dist/{codemodel.go/src → src/codemodel}/type.js +77 -76
  131. package/dist/src/codemodel/type.js.map +1 -0
  132. package/dist/{typespec-go/src → src}/emitter.d.ts +2 -3
  133. package/dist/src/emitter.d.ts.map +1 -0
  134. package/dist/{typespec-go/src → src}/emitter.js +56 -45
  135. package/dist/src/emitter.js.map +1 -0
  136. package/dist/src/index.d.ts +3 -0
  137. package/dist/src/index.d.ts.map +1 -0
  138. package/dist/{typespec-go/src → src}/index.js +2 -2
  139. package/dist/src/index.js.map +1 -0
  140. package/dist/{typespec-go/src → src}/lib.d.ts +16 -16
  141. package/dist/src/lib.d.ts.map +1 -0
  142. package/dist/{typespec-go/src → src}/lib.js +60 -61
  143. package/dist/src/lib.js.map +1 -0
  144. package/dist/src/naming/index.d.ts +3 -0
  145. package/dist/src/naming/index.d.ts.map +1 -0
  146. package/dist/{naming.go/src → src/naming}/index.js +2 -2
  147. package/dist/src/naming/index.js.map +1 -0
  148. package/dist/src/naming/mappings.d.ts.map +1 -0
  149. package/dist/src/naming/mappings.js +294 -0
  150. package/dist/src/naming/mappings.js.map +1 -0
  151. package/dist/src/naming/naming.d.ts.map +1 -0
  152. package/dist/{naming.go/src → src/naming}/naming.js +10 -10
  153. package/dist/src/naming/naming.js.map +1 -0
  154. package/dist/{typespec-go/src → src}/tcgcadapter/adapter.d.ts +3 -3
  155. package/dist/src/tcgcadapter/adapter.d.ts.map +1 -0
  156. package/dist/{typespec-go/src → src}/tcgcadapter/adapter.js +35 -31
  157. package/dist/src/tcgcadapter/adapter.js.map +1 -0
  158. package/dist/{typespec-go/src → src}/tcgcadapter/clients.d.ts +1 -1
  159. package/dist/src/tcgcadapter/clients.d.ts.map +1 -0
  160. package/dist/{typespec-go/src → src}/tcgcadapter/clients.js +360 -310
  161. package/dist/src/tcgcadapter/clients.js.map +1 -0
  162. package/dist/{typespec-go/src → src}/tcgcadapter/errors.d.ts +2 -2
  163. package/dist/src/tcgcadapter/errors.d.ts.map +1 -0
  164. package/dist/{typespec-go/src → src}/tcgcadapter/errors.js +1 -1
  165. package/dist/src/tcgcadapter/errors.js.map +1 -0
  166. package/dist/{typespec-go/src → src}/tcgcadapter/helpers.d.ts +3 -3
  167. package/dist/src/tcgcadapter/helpers.d.ts.map +1 -0
  168. package/dist/{typespec-go/src → src}/tcgcadapter/helpers.js +41 -30
  169. package/dist/src/tcgcadapter/helpers.js.map +1 -0
  170. package/dist/{typespec-go/src → src}/tcgcadapter/metadata.d.ts +2 -2
  171. package/dist/src/tcgcadapter/metadata.d.ts.map +1 -0
  172. package/dist/src/tcgcadapter/metadata.js +47 -0
  173. package/dist/src/tcgcadapter/metadata.js.map +1 -0
  174. package/dist/{typespec-go/src → src}/tcgcadapter/types.d.ts +2 -2
  175. package/dist/src/tcgcadapter/types.d.ts.map +1 -0
  176. package/dist/{typespec-go/src → src}/tcgcadapter/types.js +221 -193
  177. package/dist/src/tcgcadapter/types.js.map +1 -0
  178. package/package.json +77 -62
  179. package/dist/codegen.go/src/core/clientFactory.d.ts.map +0 -1
  180. package/dist/codegen.go/src/core/clientFactory.js.map +0 -1
  181. package/dist/codegen.go/src/core/cloudConfig.d.ts.map +0 -1
  182. package/dist/codegen.go/src/core/cloudConfig.js.map +0 -1
  183. package/dist/codegen.go/src/core/constants.d.ts.map +0 -1
  184. package/dist/codegen.go/src/core/constants.js.map +0 -1
  185. package/dist/codegen.go/src/core/errors.d.ts.map +0 -1
  186. package/dist/codegen.go/src/core/errors.js.map +0 -1
  187. package/dist/codegen.go/src/core/example.d.ts.map +0 -1
  188. package/dist/codegen.go/src/core/example.js.map +0 -1
  189. package/dist/codegen.go/src/core/gomod.d.ts.map +0 -1
  190. package/dist/codegen.go/src/core/gomod.js.map +0 -1
  191. package/dist/codegen.go/src/core/helpers.d.ts.map +0 -1
  192. package/dist/codegen.go/src/core/helpers.js.map +0 -1
  193. package/dist/codegen.go/src/core/imports.d.ts.map +0 -1
  194. package/dist/codegen.go/src/core/imports.js.map +0 -1
  195. package/dist/codegen.go/src/core/interfaces.d.ts.map +0 -1
  196. package/dist/codegen.go/src/core/interfaces.js.map +0 -1
  197. package/dist/codegen.go/src/core/license.d.ts.map +0 -1
  198. package/dist/codegen.go/src/core/license.js.map +0 -1
  199. package/dist/codegen.go/src/core/metadata.d.ts +0 -3
  200. package/dist/codegen.go/src/core/metadata.d.ts.map +0 -1
  201. package/dist/codegen.go/src/core/metadata.js.map +0 -1
  202. package/dist/codegen.go/src/core/models.d.ts.map +0 -1
  203. package/dist/codegen.go/src/core/models.js.map +0 -1
  204. package/dist/codegen.go/src/core/operations.d.ts.map +0 -1
  205. package/dist/codegen.go/src/core/operations.js.map +0 -1
  206. package/dist/codegen.go/src/core/options.d.ts.map +0 -1
  207. package/dist/codegen.go/src/core/options.js.map +0 -1
  208. package/dist/codegen.go/src/core/polymorphics.d.ts.map +0 -1
  209. package/dist/codegen.go/src/core/polymorphics.js.map +0 -1
  210. package/dist/codegen.go/src/core/responses.d.ts.map +0 -1
  211. package/dist/codegen.go/src/core/responses.js.map +0 -1
  212. package/dist/codegen.go/src/core/version.d.ts.map +0 -1
  213. package/dist/codegen.go/src/core/version.js.map +0 -1
  214. package/dist/codegen.go/src/core/xmlAdditionalProps.d.ts.map +0 -1
  215. package/dist/codegen.go/src/core/xmlAdditionalProps.js.map +0 -1
  216. package/dist/codegen.go/src/emitter.d.ts.map +0 -1
  217. package/dist/codegen.go/src/emitter.js.map +0 -1
  218. package/dist/codegen.go/src/fake/factory.d.ts.map +0 -1
  219. package/dist/codegen.go/src/fake/factory.js.map +0 -1
  220. package/dist/codegen.go/src/fake/internal.d.ts.map +0 -1
  221. package/dist/codegen.go/src/fake/internal.js.map +0 -1
  222. package/dist/codegen.go/src/fake/servers.d.ts.map +0 -1
  223. package/dist/codegen.go/src/fake/servers.js.map +0 -1
  224. package/dist/codegen.go/src/index.d.ts +0 -4
  225. package/dist/codegen.go/src/index.d.ts.map +0 -1
  226. package/dist/codegen.go/src/index.js.map +0 -1
  227. package/dist/codemodel.go/src/client.d.ts.map +0 -1
  228. package/dist/codemodel.go/src/client.js.map +0 -1
  229. package/dist/codemodel.go/src/codeModel.d.ts.map +0 -1
  230. package/dist/codemodel.go/src/codeModel.js.map +0 -1
  231. package/dist/codemodel.go/src/errors.d.ts.map +0 -1
  232. package/dist/codemodel.go/src/errors.js.map +0 -1
  233. package/dist/codemodel.go/src/examples.d.ts.map +0 -1
  234. package/dist/codemodel.go/src/examples.js.map +0 -1
  235. package/dist/codemodel.go/src/index.d.ts +0 -9
  236. package/dist/codemodel.go/src/index.d.ts.map +0 -1
  237. package/dist/codemodel.go/src/index.js.map +0 -1
  238. package/dist/codemodel.go/src/method.d.ts.map +0 -1
  239. package/dist/codemodel.go/src/method.js.map +0 -1
  240. package/dist/codemodel.go/src/module.d.ts.map +0 -1
  241. package/dist/codemodel.go/src/module.js.map +0 -1
  242. package/dist/codemodel.go/src/param.d.ts.map +0 -1
  243. package/dist/codemodel.go/src/param.js.map +0 -1
  244. package/dist/codemodel.go/src/result.d.ts.map +0 -1
  245. package/dist/codemodel.go/src/result.js.map +0 -1
  246. package/dist/codemodel.go/src/type.d.ts.map +0 -1
  247. package/dist/codemodel.go/src/type.js.map +0 -1
  248. package/dist/naming.go/src/index.d.ts +0 -3
  249. package/dist/naming.go/src/index.d.ts.map +0 -1
  250. package/dist/naming.go/src/index.js.map +0 -1
  251. package/dist/naming.go/src/mappings.d.ts.map +0 -1
  252. package/dist/naming.go/src/mappings.js +0 -294
  253. package/dist/naming.go/src/mappings.js.map +0 -1
  254. package/dist/naming.go/src/naming.d.ts.map +0 -1
  255. package/dist/naming.go/src/naming.js.map +0 -1
  256. package/dist/typespec-go/src/emitter.d.ts.map +0 -1
  257. package/dist/typespec-go/src/emitter.js.map +0 -1
  258. package/dist/typespec-go/src/index.d.ts +0 -3
  259. package/dist/typespec-go/src/index.d.ts.map +0 -1
  260. package/dist/typespec-go/src/index.js.map +0 -1
  261. package/dist/typespec-go/src/lib.d.ts.map +0 -1
  262. package/dist/typespec-go/src/lib.js.map +0 -1
  263. package/dist/typespec-go/src/tcgcadapter/adapter.d.ts.map +0 -1
  264. package/dist/typespec-go/src/tcgcadapter/adapter.js.map +0 -1
  265. package/dist/typespec-go/src/tcgcadapter/clients.d.ts.map +0 -1
  266. package/dist/typespec-go/src/tcgcadapter/clients.js.map +0 -1
  267. package/dist/typespec-go/src/tcgcadapter/errors.d.ts.map +0 -1
  268. package/dist/typespec-go/src/tcgcadapter/errors.js.map +0 -1
  269. package/dist/typespec-go/src/tcgcadapter/helpers.d.ts.map +0 -1
  270. package/dist/typespec-go/src/tcgcadapter/helpers.js.map +0 -1
  271. package/dist/typespec-go/src/tcgcadapter/metadata.d.ts.map +0 -1
  272. package/dist/typespec-go/src/tcgcadapter/metadata.js +0 -21
  273. package/dist/typespec-go/src/tcgcadapter/metadata.js.map +0 -1
  274. package/dist/typespec-go/src/tcgcadapter/types.d.ts.map +0 -1
  275. package/dist/typespec-go/src/tcgcadapter/types.js.map +0 -1
  276. /package/dist/{codegen.go/src → src/codegen}/core/errors.js +0 -0
  277. /package/dist/{codegen.go/src → src/codegen}/core/license.js +0 -0
  278. /package/dist/{codemodel.go/src → src/codemodel}/method.js +0 -0
  279. /package/dist/{naming.go/src → src/naming}/mappings.d.ts +0 -0
  280. /package/dist/{naming.go/src → src/naming}/naming.d.ts +0 -0
@@ -2,13 +2,14 @@
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Licensed under the MIT License. See License.txt in the project root for license information.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import * as tcgc from '@azure-tools/typespec-client-generator-core';
6
- import * as tsp from '@typespec/compiler';
7
- import * as http from '@typespec/http';
8
- import * as helpers from './helpers.js';
9
- import * as go from '../../../codemodel.go/src/index.js';
10
- import * as naming from '../../../naming.go/src/naming.js';
11
- import { AdapterError } from '../tcgcadapter/errors.js';
5
+ /* eslint-disable @typescript-eslint/no-deprecated -- uses TCGC APIs marked deprecated (serializedName) as a documented fallback when serializationOptions is empty. */
6
+ import * as tcgc from "@azure-tools/typespec-client-generator-core";
7
+ import * as tsp from "@typespec/compiler";
8
+ import * as http from "@typespec/http";
9
+ import * as go from "../codemodel/index.js";
10
+ import * as naming from "../naming/naming.js";
11
+ import { AdapterError } from "../tcgcadapter/errors.js";
12
+ import * as helpers from "./helpers.js";
12
13
  /** used to convert tcgc types to Go code model types */
13
14
  export class TypeAdapter {
14
15
  /** the SdkContext for this adapter */
@@ -34,7 +35,9 @@ export class TypeAdapter {
34
35
  * @returns the module or package to contain the adapted tcgc model
35
36
  */
36
37
  getPkg() {
37
- return this.codeModel.root.kind === 'containingModule' ? this.codeModel.root.package : this.codeModel.root;
38
+ return this.codeModel.root.kind === "containingModule"
39
+ ? this.codeModel.root.package
40
+ : this.codeModel.root;
38
41
  }
39
42
  /**
40
43
  * converts all tcgc model/enum types to Go code model types
@@ -45,7 +48,8 @@ export class TypeAdapter {
45
48
  // skip enums that are used for API version
46
49
  continue;
47
50
  }
48
- else if ((enumType.usage & tcgc.UsageFlags.Input) === 0 && (enumType.usage & tcgc.UsageFlags.Output) === 0) {
51
+ else if ((enumType.usage & tcgc.UsageFlags.Input) === 0 &&
52
+ (enumType.usage & tcgc.UsageFlags.Output) === 0) {
49
53
  // skip types without input and output usage
50
54
  continue;
51
55
  }
@@ -61,11 +65,13 @@ export class TypeAdapter {
61
65
  // we don't use these so just skip them.
62
66
  continue;
63
67
  }
64
- else if (modelType.access === 'internal' && (modelType.usage & tcgc.UsageFlags.Spread) !== 0) {
68
+ else if (modelType.access === "internal" &&
69
+ (modelType.usage & tcgc.UsageFlags.Spread) !== 0) {
65
70
  // we don't use the internal models for spread params
66
71
  continue;
67
72
  }
68
- else if ((modelType.usage & tcgc.UsageFlags.Input) === 0 && (modelType.usage & tcgc.UsageFlags.Output) === 0) {
73
+ else if ((modelType.usage & tcgc.UsageFlags.Input) === 0 &&
74
+ (modelType.usage & tcgc.UsageFlags.Output) === 0) {
69
75
  // skip types without input and output usage
70
76
  continue;
71
77
  }
@@ -73,7 +79,8 @@ export class TypeAdapter {
73
79
  // we flatten these params into their underlying type
74
80
  continue;
75
81
  }
76
- else if (helpers.isHttpFileType(modelType) || (modelType.baseModel && helpers.isHttpFileType(modelType.baseModel))) {
82
+ else if (helpers.isHttpFileType(modelType) ||
83
+ (modelType.baseModel && helpers.isHttpFileType(modelType.baseModel))) {
77
84
  // use use streaming.MultipartContent from azcore
78
85
  continue;
79
86
  }
@@ -115,7 +122,7 @@ export class TypeAdapter {
115
122
  if (content.addlProps) {
116
123
  const annotations = new go.ModelFieldAnnotations(false, false, true, false);
117
124
  const addlPropsType = new go.Map(this.getWireType(content.addlProps, false, false), helpers.isTypePassedByValue(content.addlProps));
118
- const addlProps = new go.ModelField('AdditionalProperties', addlPropsType, true, '', annotations);
125
+ const addlProps = new go.ModelField("AdditionalProperties", addlPropsType, true, "", annotations);
119
126
  modelType.go.fields.push(addlProps);
120
127
  }
121
128
  this.getPkg().models.push(modelType.go);
@@ -131,11 +138,11 @@ export class TypeAdapter {
131
138
  }
132
139
  }
133
140
  for (const sdkMethod of client.methods) {
134
- if (sdkMethod.kind !== 'paging') {
141
+ if (sdkMethod.kind !== "paging") {
135
142
  continue;
136
143
  }
137
144
  for (const httpResp of sdkMethod.operation.responses.values()) {
138
- if (!httpResp.type || httpResp.type.kind !== 'model') {
145
+ if (!httpResp.type || httpResp.type.kind !== "model") {
139
146
  continue;
140
147
  }
141
148
  if (!pagedResponses.find((each) => each.name === httpResp.type.name)) {
@@ -154,38 +161,42 @@ export class TypeAdapter {
154
161
  // returns the same instance of the converted type.
155
162
  getWireType(type, elementTypeByValue, substituteDiscriminator) {
156
163
  switch (type.kind) {
157
- case 'boolean':
158
- case 'bytes':
159
- case 'decimal':
160
- case 'decimal128':
161
- case 'float':
162
- case 'float32':
163
- case 'float64':
164
- case 'int8':
165
- case 'int16':
166
- case 'int32':
167
- case 'int64':
168
- case 'uint8':
169
- case 'uint16':
170
- case 'uint32':
171
- case 'uint64':
172
- case 'unknown':
173
- case 'safeint':
174
- case 'plainDate':
175
- case 'plainTime':
176
- case 'string':
177
- case 'url':
164
+ case "boolean":
165
+ case "bytes":
166
+ case "decimal":
167
+ case "decimal128":
168
+ case "float":
169
+ case "float32":
170
+ case "float64":
171
+ case "int8":
172
+ case "int16":
173
+ case "int32":
174
+ case "int64":
175
+ case "uint8":
176
+ case "uint16":
177
+ case "uint32":
178
+ case "uint64":
179
+ case "unknown":
180
+ case "safeint":
181
+ case "plainDate":
182
+ case "plainTime":
183
+ case "string":
184
+ case "url":
178
185
  return this.getBuiltInType(type);
179
- case 'array': {
186
+ case "array": {
180
187
  let elementType = type.valueType;
181
188
  let nullable = false;
182
- if (elementType.kind === 'nullable') {
189
+ if (elementType.kind === "nullable") {
183
190
  // unwrap the nullable type
184
191
  elementType = elementType.type;
185
192
  nullable = true;
186
193
  }
187
194
  // prefer elementTypeByValue. if false, then if the array elements have been explicitly marked as nullable then prefer that, else fall back to our usual algorithm
188
- const myElementTypeByValue = elementTypeByValue ? true : nullable ? false : this.codeModel.options.sliceElementsByval || helpers.isTypePassedByValue(elementType);
195
+ const myElementTypeByValue = elementTypeByValue
196
+ ? true
197
+ : nullable
198
+ ? false
199
+ : this.codeModel.options.sliceElementsByval || helpers.isTypePassedByValue(elementType);
189
200
  const keyName = recursiveKeyName(`array-${myElementTypeByValue}`, elementType, substituteDiscriminator);
190
201
  let arrayType = this.types.get(keyName);
191
202
  if (arrayType) {
@@ -195,19 +206,19 @@ export class TypeAdapter {
195
206
  this.types.set(keyName, arrayType);
196
207
  return arrayType;
197
208
  }
198
- case 'endpoint': {
209
+ case "endpoint": {
199
210
  return this.getStringType();
200
211
  }
201
- case 'enum':
212
+ case "enum":
202
213
  return this.getConstantType(type);
203
- case 'constant':
204
- case 'enumvalue':
214
+ case "constant":
215
+ case "enumvalue":
205
216
  return this.getLiteralValue(type);
206
- case 'offsetDateTime':
217
+ case "offsetDateTime":
207
218
  return this.getTimeType(type.encode, false);
208
- case 'utcDateTime':
219
+ case "utcDateTime":
209
220
  return this.getTimeType(type.encode, true);
210
- case 'dict': {
221
+ case "dict": {
211
222
  const valueTypeByValue = helpers.isTypePassedByValue(type.valueType);
212
223
  const keyName = recursiveKeyName(`dict-${valueTypeByValue}`, type.valueType, substituteDiscriminator);
213
224
  let mapType = this.types.get(keyName);
@@ -218,31 +229,32 @@ export class TypeAdapter {
218
229
  this.types.set(keyName, mapType);
219
230
  return mapType;
220
231
  }
221
- case 'duration': {
232
+ case "duration": {
222
233
  switch (type.wireType.kind) {
223
- case 'float':
224
- case 'float32':
225
- case 'float64':
226
- case 'int32':
227
- case 'int64':
228
- case 'string':
234
+ case "float":
235
+ case "float32":
236
+ case "float64":
237
+ case "int32":
238
+ case "int64":
239
+ case "string":
229
240
  return this.getBuiltInType(type.wireType);
230
241
  default:
231
- throw new AdapterError('UnsupportedTsp', `unsupported duration wire format kind ${type.wireType.kind}`, type.wireType.__raw?.node);
242
+ throw new AdapterError("UnsupportedTsp", `unsupported duration wire format kind ${type.wireType.kind}`, type.wireType.__raw?.node);
232
243
  }
233
244
  }
234
- case 'model':
245
+ case "model":
235
246
  if (helpers.isPolymorphicRoot(type) && substituteDiscriminator) {
236
247
  return this.getInterfaceType(type);
237
248
  }
238
- else if (helpers.isHttpFileType(type) || (type.baseModel && helpers.isHttpFileType(type.baseModel))) {
249
+ else if (helpers.isHttpFileType(type) ||
250
+ (type.baseModel && helpers.isHttpFileType(type.baseModel))) {
239
251
  return this.getMultipartContent(false);
240
252
  }
241
253
  return this.getModel(type);
242
- case 'nullable':
254
+ case "nullable":
243
255
  return this.getWireType(type.type, elementTypeByValue, substituteDiscriminator);
244
256
  default:
245
- throw new AdapterError('UnsupportedTsp', `unsupported type kind ${type.kind}`, type.__raw?.node);
257
+ throw new AdapterError("UnsupportedTsp", `unsupported type kind ${type.kind}`, type.__raw?.node);
246
258
  }
247
259
  }
248
260
  getTimeType(encode, utc) {
@@ -257,9 +269,9 @@ export class TypeAdapter {
257
269
  }
258
270
  // returns the Go code model type for an io.ReadSeekCloser
259
271
  getReadSeekCloser(sliceOf) {
260
- let keyName = 'io-readseekcloser';
272
+ let keyName = "io-readseekcloser";
261
273
  if (sliceOf) {
262
- keyName = 'sliceof-' + keyName;
274
+ keyName = "sliceof-" + keyName;
263
275
  }
264
276
  let rsc = this.types.get(keyName);
265
277
  if (!rsc) {
@@ -282,12 +294,12 @@ export class TypeAdapter {
282
294
  * @returns the go.MultipartContent instance
283
295
  */
284
296
  getMultipartContent(sliceOf, contentType) {
285
- let keyName = 'streaming-multipartcontent';
297
+ let keyName = "streaming-multipartcontent";
286
298
  if (contentType) {
287
299
  keyName += `-${contentType}`;
288
300
  }
289
301
  if (sliceOf) {
290
- keyName = 'sliceof-' + keyName;
302
+ keyName = "sliceof-" + keyName;
291
303
  }
292
304
  let mpc = this.types.get(keyName);
293
305
  if (!mpc) {
@@ -302,9 +314,9 @@ export class TypeAdapter {
302
314
  }
303
315
  getBuiltInType(type) {
304
316
  switch (type.kind) {
305
- case 'unknown': {
317
+ case "unknown": {
306
318
  if (this.codeModel.options.rawJSONAsBytes) {
307
- const anyRawJSONKey = 'any-raw-json';
319
+ const anyRawJSONKey = "any-raw-json";
308
320
  let anyRawJSON = this.types.get(anyRawJSONKey);
309
321
  if (anyRawJSON) {
310
322
  return anyRawJSON;
@@ -313,104 +325,104 @@ export class TypeAdapter {
313
325
  this.types.set(anyRawJSONKey, anyRawJSON);
314
326
  return anyRawJSON;
315
327
  }
316
- let anyType = this.types.get('any');
328
+ let anyType = this.types.get("any");
317
329
  if (anyType) {
318
330
  return anyType;
319
331
  }
320
332
  anyType = new go.Any();
321
- this.types.set('any', anyType);
333
+ this.types.set("any", anyType);
322
334
  return anyType;
323
335
  }
324
- case 'boolean': {
325
- const boolKey = 'boolean';
336
+ case "boolean": {
337
+ const boolKey = "boolean";
326
338
  let primitiveBool = this.types.get(boolKey);
327
339
  if (primitiveBool) {
328
340
  return primitiveBool;
329
341
  }
330
- primitiveBool = new go.Scalar('bool', type.encode === 'string');
342
+ primitiveBool = new go.Scalar("bool", type.encode === "string");
331
343
  this.types.set(boolKey, primitiveBool);
332
344
  return primitiveBool;
333
345
  }
334
- case 'bytes':
346
+ case "bytes":
335
347
  return this.adaptBytesType(type);
336
- case 'plainDate': {
337
- const dateKey = 'plainDate';
348
+ case "plainDate": {
349
+ const dateKey = "plainDate";
338
350
  let date = this.types.get(dateKey);
339
351
  if (date) {
340
352
  return date;
341
353
  }
342
- date = new go.Time('PlainDate', false);
354
+ date = new go.Time("PlainDate", false);
343
355
  this.types.set(dateKey, date);
344
356
  return date;
345
357
  }
346
- case 'decimal':
347
- case 'decimal128': {
348
- const decimalKey = 'float64';
358
+ case "decimal":
359
+ case "decimal128": {
360
+ const decimalKey = "float64";
349
361
  let decimalType = this.types.get(decimalKey);
350
362
  if (decimalType) {
351
363
  return decimalType;
352
364
  }
353
- decimalType = new go.Scalar(decimalKey, type.encode === 'string');
365
+ decimalType = new go.Scalar(decimalKey, type.encode === "string");
354
366
  this.types.set(decimalKey, decimalType);
355
367
  return decimalType;
356
368
  }
357
- case 'float': // C# and Java define float as 32 bits so we're following suit
358
- case 'float32': {
359
- const float32Key = 'float32';
369
+ case "float": // C# and Java define float as 32 bits so we're following suit
370
+ case "float32": {
371
+ const float32Key = "float32";
360
372
  let float32 = this.types.get(float32Key);
361
373
  if (float32) {
362
374
  return float32;
363
375
  }
364
- float32 = new go.Scalar(float32Key, type.encode === 'string');
376
+ float32 = new go.Scalar(float32Key, type.encode === "string");
365
377
  this.types.set(float32Key, float32);
366
378
  return float32;
367
379
  }
368
- case 'float64': {
369
- const float64Key = 'float64';
380
+ case "float64": {
381
+ const float64Key = "float64";
370
382
  let float64 = this.types.get(float64Key);
371
383
  if (float64) {
372
384
  return float64;
373
385
  }
374
- float64 = new go.Scalar(float64Key, type.encode === 'string');
386
+ float64 = new go.Scalar(float64Key, type.encode === "string");
375
387
  this.types.set(float64Key, float64);
376
388
  return float64;
377
389
  }
378
- case 'int8':
379
- case 'int16':
380
- case 'int32':
381
- case 'int64':
382
- case 'uint8':
383
- case 'uint16':
384
- case 'uint32':
385
- case 'uint64': {
386
- const keyName = type.encode === 'string' ? `${type.kind}-string` : type.kind;
390
+ case "int8":
391
+ case "int16":
392
+ case "int32":
393
+ case "int64":
394
+ case "uint8":
395
+ case "uint16":
396
+ case "uint32":
397
+ case "uint64": {
398
+ const keyName = type.encode === "string" ? `${type.kind}-string` : type.kind;
387
399
  let intType = this.types.get(keyName);
388
400
  if (intType) {
389
401
  return intType;
390
402
  }
391
- intType = new go.Scalar(type.kind, type.encode === 'string');
403
+ intType = new go.Scalar(type.kind, type.encode === "string");
392
404
  this.types.set(keyName, intType);
393
405
  return intType;
394
406
  }
395
- case 'safeint': {
396
- const safeintkey = type.encode === 'string' ? 'int64-string' : 'int64';
407
+ case "safeint": {
408
+ const safeintkey = type.encode === "string" ? "int64-string" : "int64";
397
409
  let int64 = this.types.get(safeintkey);
398
410
  if (int64) {
399
411
  return int64;
400
412
  }
401
- int64 = new go.Scalar('int64', type.encode === 'string');
413
+ int64 = new go.Scalar("int64", type.encode === "string");
402
414
  this.types.set(safeintkey, int64);
403
415
  return int64;
404
416
  }
405
- case 'string':
406
- case 'url': {
407
- if (type.crossLanguageDefinitionId === 'Azure.Core.eTag') {
417
+ case "string":
418
+ case "url": {
419
+ if (type.crossLanguageDefinitionId === "Azure.Core.eTag") {
408
420
  return this.getETagType();
409
421
  }
410
422
  return this.getStringType();
411
423
  }
412
- case 'plainTime': {
413
- const encoding = 'PlainTime';
424
+ case "plainTime": {
425
+ const encoding = "PlainTime";
414
426
  let time = this.types.get(encoding);
415
427
  if (time) {
416
428
  return time;
@@ -420,20 +432,20 @@ export class TypeAdapter {
420
432
  return time;
421
433
  }
422
434
  default:
423
- throw new AdapterError('UnsupportedTsp', `unsupported type kind ${type.kind}`, type.__raw?.node);
435
+ throw new AdapterError("UnsupportedTsp", `unsupported type kind ${type.kind}`, type.__raw?.node);
424
436
  }
425
437
  }
426
438
  // converts an SdkEnumType to a go.ConstantType
427
439
  getConstantType(enumType) {
428
440
  let constTypeName = helpers.getEffectiveName(enumType);
429
- if (enumType.access === 'internal') {
430
- constTypeName = naming.getEscapedReservedName(naming.uncapitalize(constTypeName), 'Type');
441
+ if (enumType.access === "internal") {
442
+ constTypeName = naming.getEscapedReservedName(naming.uncapitalize(constTypeName), "Type");
431
443
  }
432
444
  let constType = this.types.get(constTypeName);
433
445
  if (constType) {
434
446
  return constType;
435
447
  }
436
- const accessPrefix = enumType.access === 'internal' ? 'p' : 'P';
448
+ const accessPrefix = enumType.access === "internal" ? "p" : "P";
437
449
  constType = new go.Constant(this.getPkg(), constTypeName, getPrimitiveType(enumType.valueType), `${accessPrefix}ossible${constTypeName}Values`);
438
450
  constType.values = this.getConstantValues(constType, enumType.values);
439
451
  constType.docs.summary = enumType.summary;
@@ -442,7 +454,7 @@ export class TypeAdapter {
442
454
  return constType;
443
455
  }
444
456
  getETagType() {
445
- const etagKey = 'etag';
457
+ const etagKey = "etag";
446
458
  let etag = this.types.get(etagKey);
447
459
  if (etag) {
448
460
  return etag;
@@ -462,7 +474,7 @@ export class TypeAdapter {
462
474
  getLiteral(type, value, extensibleEnum = true) {
463
475
  let literalKey = `literal-${type.kind}`;
464
476
  switch (type.kind) {
465
- case 'constant': {
477
+ case "constant": {
466
478
  // find the const value that matches the clientDefaultValue
467
479
  const constantValue = type.values.find((v) => v.value === value);
468
480
  if (constantValue) {
@@ -474,17 +486,17 @@ export class TypeAdapter {
474
486
  literalKey = `${literalKey}-${type.name}`;
475
487
  }
476
488
  else {
477
- throw new AdapterError('UnsupportedTsp', `invalid client side default ${value} for fixed enum ${type.name}`);
489
+ throw new AdapterError("UnsupportedTsp", `invalid client side default ${value} for fixed enum ${type.name}`);
478
490
  }
479
491
  break;
480
492
  }
481
- case 'encodedBytes':
493
+ case "encodedBytes":
482
494
  literalKey = `${literalKey}-${type.encoding}`;
483
495
  break;
484
- case 'scalar':
496
+ case "scalar":
485
497
  literalKey = `${literalKey}-${type.type}`;
486
498
  break;
487
- case 'time':
499
+ case "time":
488
500
  literalKey = `${literalKey}-${type.format}-${type.utc}`;
489
501
  }
490
502
  literalKey = `${literalKey}-${value}`;
@@ -497,7 +509,7 @@ export class TypeAdapter {
497
509
  }
498
510
  /** returns a Go string type */
499
511
  getStringType() {
500
- const stringKey = 'string';
512
+ const stringKey = "string";
501
513
  let stringType = this.types.get(stringKey);
502
514
  if (!stringType) {
503
515
  stringType = new go.String();
@@ -507,13 +519,13 @@ export class TypeAdapter {
507
519
  }
508
520
  getInterfaceType(model) {
509
521
  if (model.name.length === 0) {
510
- throw new AdapterError('InternalError', 'unnamed model');
522
+ throw new AdapterError("InternalError", "unnamed model");
511
523
  }
512
524
  if (!helpers.isPolymorphicRoot(model)) {
513
- throw new AdapterError('InternalError', `type ${model.name} isn't a discriminator root`, model.__raw?.node);
525
+ throw new AdapterError("InternalError", `type ${model.name} isn't a discriminator root`, model.__raw?.node);
514
526
  }
515
527
  let ifaceName = naming.createPolymorphicInterfaceName(helpers.getEffectiveName(model));
516
- if (model.access === 'internal') {
528
+ if (model.access === "internal") {
517
529
  ifaceName = naming.uncapitalize(ifaceName);
518
530
  }
519
531
  let iface = this.types.get(ifaceName);
@@ -523,14 +535,14 @@ export class TypeAdapter {
523
535
  // find the discriminator field
524
536
  let discriminatorField;
525
537
  for (const prop of model.properties) {
526
- if (prop.kind === 'property' && prop.discriminator) {
538
+ if (prop.kind === "property" && prop.discriminator) {
527
539
  // only json support discriminator type
528
540
  discriminatorField = prop.serializationOptions.json?.name;
529
541
  break;
530
542
  }
531
543
  }
532
544
  if (!discriminatorField) {
533
- throw new AdapterError('InternalError', `failed to find discriminator field for type ${model.name}`);
545
+ throw new AdapterError("InternalError", `failed to find discriminator field for type ${model.name}`);
534
546
  }
535
547
  iface = new go.Interface(this.getPkg(), ifaceName, discriminatorField);
536
548
  if (model.baseModel && helpers.isPolymorphicRoot(model.baseModel)) {
@@ -542,8 +554,8 @@ export class TypeAdapter {
542
554
  // converts an SdkModelType to a go.ModelType or go.PolymorphicType if the model is polymorphic
543
555
  getModel(model) {
544
556
  let modelName = helpers.getEffectiveName(model);
545
- if (model.access === 'internal') {
546
- modelName = naming.getEscapedReservedName(naming.uncapitalize(modelName), 'Model');
557
+ if (model.access === "internal") {
558
+ modelName = naming.getEscapedReservedName(naming.uncapitalize(modelName), "Model");
547
559
  }
548
560
  let modelType = this.types.get(modelName);
549
561
  if (modelType) {
@@ -557,16 +569,16 @@ export class TypeAdapter {
557
569
  usage |= go.UsageFlags.Output;
558
570
  }
559
571
  let omitSerde = false;
560
- const omitValue = helpers.getClientOption('omitSerdeMethods', model, this.ctx.program);
572
+ const omitValue = helpers.getClientOption("omitSerdeMethods", model, this.ctx.program);
561
573
  if (omitValue) {
562
574
  switch (omitValue) {
563
- case 'all':
575
+ case "all":
564
576
  omitSerde = true;
565
577
  break;
566
578
  default:
567
579
  this.ctx.program.reportDiagnostic({
568
- code: 'InvalidClientOption',
569
- severity: 'warning',
580
+ code: "InvalidClientOption",
581
+ severity: "warning",
570
582
  message: `invalid omitSerdeMethods value ${omitValue} on model ${model.name}`,
571
583
  target: model.__raw?.node ?? tsp.NoTarget,
572
584
  });
@@ -591,13 +603,13 @@ export class TypeAdapter {
591
603
  parent = parent.baseModel;
592
604
  }
593
605
  if (!iface) {
594
- throw new AdapterError('InternalError', `failed to find discriminator interface name for type ${model.name}`);
606
+ throw new AdapterError("InternalError", `failed to find discriminator interface name for type ${model.name}`);
595
607
  }
596
608
  }
597
609
  if (model.discriminatorValue) {
598
610
  // find the discriminator property and create the discriminator literal based on it
599
611
  for (const prop of model.properties) {
600
- if (prop.kind === 'property' && prop.discriminator) {
612
+ if (prop.kind === "property" && prop.discriminator) {
601
613
  discriminatorLiteral = this.getDiscriminatorLiteral(prop);
602
614
  break;
603
615
  }
@@ -633,11 +645,11 @@ export class TypeAdapter {
633
645
  }
634
646
  getDiscriminatorLiteral(sdkProp) {
635
647
  switch (sdkProp.type.kind) {
636
- case 'constant':
637
- case 'enumvalue':
648
+ case "constant":
649
+ case "enumvalue":
638
650
  return this.getLiteralValue(sdkProp.type);
639
651
  default:
640
- throw new AdapterError('UnsupportedTsp', `unsupported type kind ${sdkProp.type.kind} for discriminator property ${sdkProp.name}`, sdkProp.__raw?.node);
652
+ throw new AdapterError("UnsupportedTsp", `unsupported type kind ${sdkProp.type.kind} for discriminator property ${sdkProp.name}`, sdkProp.__raw?.node);
641
653
  }
642
654
  }
643
655
  getModelField(prop, modelType) {
@@ -646,17 +658,20 @@ export class TypeAdapter {
646
658
  // don't have to deal with JSON patch shenanigans. only the optional fields will be pointer-to-type.
647
659
  const isMultipartFormData = (modelType.usage & tcgc.UsageFlags.MultipartFormData) !== 0;
648
660
  let fieldByValue = isMultipartFormData ? true : helpers.isTypePassedByValue(prop.type);
649
- if (isMultipartFormData && prop.kind === 'property' && prop.optional) {
661
+ if (isMultipartFormData && prop.kind === "property" && prop.optional) {
650
662
  fieldByValue = false;
651
663
  }
652
664
  let type = this.getWireType(prop.type, isMultipartFormData, true);
653
- if (prop.kind === 'property') {
665
+ if (prop.kind === "property") {
654
666
  if (prop.serializationOptions.multipart?.isFilePart) {
655
667
  // for file parts, check if the tsp defines a fixed content type
656
668
  // (e.g. HttpPart<File<"image/png">>). if so, bake it into the MultipartContent type.
657
669
  const multipartOpts = prop.serializationOptions.multipart;
658
- const fixedContentType = multipartOpts?.contentType?.type.kind === 'constant' && multipartOpts.defaultContentTypes.length === 1 ? multipartOpts.defaultContentTypes[0] : undefined;
659
- type = this.getMultipartContent(prop.type.kind === 'array', fixedContentType);
670
+ const fixedContentType = multipartOpts?.contentType?.type.kind === "constant" &&
671
+ multipartOpts.defaultContentTypes.length === 1
672
+ ? multipartOpts.defaultContentTypes[0]
673
+ : undefined;
674
+ type = this.getMultipartContent(prop.type.kind === "array", fixedContentType);
660
675
  }
661
676
  if (prop.visibility) {
662
677
  // the field is read-only IFF the only visibility attribute present is Read.
@@ -679,7 +694,9 @@ export class TypeAdapter {
679
694
  // e.g. /typespec-go/test/tsp/HardwareSecurityModules.Management/CloudHsmCluster.tsp#L99-L105
680
695
  serializedName = prop.serializedName;
681
696
  }
682
- const fieldName = prop.isExactName ? prop.name : naming.capitalize(naming.ensureNameCase(prop.name));
697
+ const fieldName = prop.isExactName
698
+ ? prop.name
699
+ : naming.capitalize(naming.ensureNameCase(prop.name));
683
700
  const field = new go.ModelField(fieldName, type, fieldByValue, serializedName, annotations);
684
701
  field.docs.summary = prop.summary;
685
702
  field.docs.description = prop.doc;
@@ -691,7 +708,7 @@ export class TypeAdapter {
691
708
  }
692
709
  else if (prop.clientDefaultValue) {
693
710
  if (!go.isLiteralValueType(type)) {
694
- throw new AdapterError('InternalError', `unexpected client side default kind ${type.kind} for field ${field.name}`, prop.__raw?.node);
711
+ throw new AdapterError("InternalError", `unexpected client side default kind ${type.kind} for field ${field.name}`, prop.__raw?.node);
695
712
  }
696
713
  field.defaultValue = this.getLiteral(type, prop.clientDefaultValue, helpers.isExtensibleEnum(prop.type));
697
714
  if (!field.docs.summary && !field.docs.description) {
@@ -704,7 +721,7 @@ export class TypeAdapter {
704
721
  type: type,
705
722
  xml: prop.serializationOptions.xml,
706
723
  });
707
- if (helpers.hasDecorator('@deserializeEmptyStringAsNull', prop.decorators)) {
724
+ if (helpers.hasDecorator("@deserializeEmptyStringAsNull", prop.decorators)) {
708
725
  field.annotations.unmarshalEmptyStringAsNil = true;
709
726
  }
710
727
  // it's possible for different models to reference the same property definition
@@ -717,8 +734,8 @@ export class TypeAdapter {
717
734
  const values = new Array();
718
735
  for (const valueType of valueTypes) {
719
736
  let valueTypeName = `${type.name}${helpers.getEffectiveName(valueType)}`;
720
- if (valueType.enumType.access === 'internal') {
721
- valueTypeName = naming.getEscapedReservedName(naming.uncapitalize(valueTypeName), 'Type');
737
+ if (valueType.enumType.access === "internal") {
738
+ valueTypeName = naming.getEscapedReservedName(naming.uncapitalize(valueTypeName), "Type");
722
739
  }
723
740
  if (this.constValues.has(valueTypeName)) {
724
741
  // we have a type name collision. while tsp will prevent this
@@ -732,7 +749,7 @@ export class TypeAdapter {
732
749
  // "ApplicationJSON".
733
750
  // instead of being clever, report a NameCollision diagnostic so
734
751
  // that the tsp author can define the desired names.
735
- throw new AdapterError('NameCollision', `enum value ${valueType.name} was renamed to ${valueTypeName} which collides with an existing value`, valueType.__raw?.node);
752
+ throw new AdapterError("NameCollision", `enum value ${valueType.name} was renamed to ${valueTypeName} which collides with an existing value`, valueType.__raw?.node);
736
753
  }
737
754
  const value = new go.ConstantValue(valueTypeName, type, valueType.value);
738
755
  value.docs.summary = valueType.summary;
@@ -743,9 +760,9 @@ export class TypeAdapter {
743
760
  return values;
744
761
  }
745
762
  adaptBytesType(sdkType) {
746
- let format = 'Std';
747
- if (sdkType.encode === 'base64url') {
748
- format = 'URL';
763
+ let format = "Std";
764
+ if (sdkType.encode === "base64url") {
765
+ format = "URL";
749
766
  }
750
767
  const keyName = `bytes-${format}`;
751
768
  let bytesType = this.types.get(keyName);
@@ -757,33 +774,44 @@ export class TypeAdapter {
757
774
  return bytesType;
758
775
  }
759
776
  getLiteralValue(constType) {
760
- if (constType.kind === 'enumvalue') {
761
- const valueName = `${helpers.getEffectiveName(constType.enumType)}${helpers.getEffectiveName(constType)}`;
762
- const keyName = `literal-${valueName}`;
777
+ if (constType.kind === "enumvalue") {
778
+ const goConstType = this.getConstantType(constType.enumType);
779
+ // find the matching enum value
780
+ let goConstValue;
781
+ for (const value of goConstType.values) {
782
+ if (value.value === constType.value) {
783
+ goConstValue = value;
784
+ break;
785
+ }
786
+ }
787
+ if (!goConstValue) {
788
+ throw new AdapterError("InternalError", `failed to find const value for ${constType.value} in const ${goConstType.name}`, constType.__raw?.node);
789
+ }
790
+ const keyName = `literal-${goConstValue.name}`;
763
791
  let literalConst = this.types.get(keyName);
764
792
  if (literalConst) {
765
793
  return literalConst;
766
794
  }
767
- const constValue = this.constValues.get(valueName);
795
+ const constValue = this.constValues.get(goConstValue.name);
768
796
  if (!constValue) {
769
- throw new AdapterError('InternalError', `failed to find const value for ${constType.name} in enum ${constType.enumType.name}`, constType.__raw?.node);
797
+ throw new AdapterError("InternalError", `failed to find const value for ${constType.name} in enum ${constType.enumType.name}`, constType.__raw?.node);
770
798
  }
771
799
  literalConst = new go.Literal(this.getConstantType(constType.enumType), constValue);
772
800
  this.types.set(keyName, literalConst);
773
801
  return literalConst;
774
802
  }
775
803
  switch (constType.valueType.kind) {
776
- case 'boolean': {
804
+ case "boolean": {
777
805
  const keyName = `literal-boolean-${constType.value}`;
778
806
  let literalBool = this.types.get(keyName);
779
807
  if (literalBool) {
780
808
  return literalBool;
781
809
  }
782
- literalBool = new go.Literal(new go.Scalar('bool', false), constType.value);
810
+ literalBool = new go.Literal(new go.Scalar("bool", false), constType.value);
783
811
  this.types.set(keyName, literalBool);
784
812
  return literalBool;
785
813
  }
786
- case 'bytes': {
814
+ case "bytes": {
787
815
  const keyName = `literal-bytes-${constType.value}`;
788
816
  let literalByteArray = this.types.get(keyName);
789
817
  if (literalByteArray) {
@@ -793,14 +821,14 @@ export class TypeAdapter {
793
821
  this.types.set(keyName, literalByteArray);
794
822
  return literalByteArray;
795
823
  }
796
- case 'decimal':
797
- case 'decimal128': {
824
+ case "decimal":
825
+ case "decimal128": {
798
826
  const keyName = `literal-${constType.valueType.kind}-${constType.value}`;
799
827
  let literalDecimal = this.types.get(keyName);
800
828
  if (literalDecimal) {
801
829
  return literalDecimal;
802
830
  }
803
- literalDecimal = new go.Literal(new go.Scalar('float64', false), constType.value);
831
+ literalDecimal = new go.Literal(new go.Scalar("float64", false), constType.value);
804
832
  this.types.set(keyName, literalDecimal);
805
833
  return literalDecimal;
806
834
  }
@@ -817,14 +845,14 @@ export class TypeAdapter {
817
845
  this.types.set(keyName, literalTime);
818
846
  return literalTime;
819
847
  }*/
820
- case 'int8':
821
- case 'int16':
822
- case 'int32':
823
- case 'int64':
824
- case 'uint8':
825
- case 'uint16':
826
- case 'uint32':
827
- case 'uint64': {
848
+ case "int8":
849
+ case "int16":
850
+ case "int32":
851
+ case "int64":
852
+ case "uint8":
853
+ case "uint16":
854
+ case "uint32":
855
+ case "uint64": {
828
856
  const keyName = `literal-${constType.valueType.kind}-${constType.value}`;
829
857
  let literalInt = this.types.get(keyName);
830
858
  if (literalInt) {
@@ -834,8 +862,8 @@ export class TypeAdapter {
834
862
  this.types.set(keyName, literalInt);
835
863
  return literalInt;
836
864
  }
837
- case 'float32':
838
- case 'float64': {
865
+ case "float32":
866
+ case "float64": {
839
867
  const keyName = `literal-${constType.valueType.kind}-${constType.value}`;
840
868
  let literalFloat = this.types.get(keyName);
841
869
  if (literalFloat) {
@@ -845,8 +873,8 @@ export class TypeAdapter {
845
873
  this.types.set(keyName, literalFloat);
846
874
  return literalFloat;
847
875
  }
848
- case 'string':
849
- case 'url': {
876
+ case "string":
877
+ case "url": {
850
878
  const keyName = `literal-string-${constType.value}`;
851
879
  let literalString = this.types.get(keyName);
852
880
  if (literalString) {
@@ -857,63 +885,63 @@ export class TypeAdapter {
857
885
  return literalString;
858
886
  }
859
887
  default:
860
- throw new AdapterError('UnsupportedTsp', `unsupported kind ${constType.valueType.kind} for LiteralValue`, constType.valueType.__raw?.node);
888
+ throw new AdapterError("UnsupportedTsp", `unsupported kind ${constType.valueType.kind} for LiteralValue`, constType.valueType.__raw?.node);
861
889
  }
862
890
  // TODO: tcgc doesn't support duration as a literal value
863
891
  }
864
892
  }
865
893
  function getPrimitiveType(type) {
866
894
  switch (type.kind) {
867
- case 'boolean':
868
- return 'bool';
869
- case 'float32':
870
- case 'float64':
871
- case 'int32':
872
- case 'int64':
873
- case 'string':
895
+ case "boolean":
896
+ return "bool";
897
+ case "float32":
898
+ case "float64":
899
+ case "int32":
900
+ case "int64":
901
+ case "string":
874
902
  return type.kind;
875
903
  default:
876
- throw new AdapterError('UnsupportedTsp', `unhandled tcgc.SdkBuiltInKinds: ${type.kind}`, type.__raw?.node);
904
+ throw new AdapterError("UnsupportedTsp", `unhandled tcgc.SdkBuiltInKinds: ${type.kind}`, type.__raw?.node);
877
905
  }
878
906
  }
879
907
  function getDateTimeEncoding(encoding) {
880
908
  switch (encoding) {
881
- case 'rfc3339':
882
- return 'RFC3339';
883
- case 'rfc7231':
884
- return 'RFC7231';
885
- case 'unixTimestamp':
886
- return 'Unix';
909
+ case "rfc3339":
910
+ return "RFC3339";
911
+ case "rfc7231":
912
+ return "RFC7231";
913
+ case "unixTimestamp":
914
+ return "Unix";
887
915
  default:
888
- throw new AdapterError('UnsupportedTsp', `unsupported date time encoding ${encoding}`);
916
+ throw new AdapterError("UnsupportedTsp", `unsupported date time encoding ${encoding}`);
889
917
  }
890
918
  }
891
919
  function recursiveKeyName(root, obj, substituteDiscriminator) {
892
920
  switch (obj.kind) {
893
- case 'array':
921
+ case "array":
894
922
  return recursiveKeyName(`${root}-array`, obj.valueType, substituteDiscriminator);
895
- case 'enum':
923
+ case "enum":
896
924
  return `${root}-${obj.name}`;
897
- case 'enumvalue':
925
+ case "enumvalue":
898
926
  return `${root}-${obj.enumType.name}-${obj.value}`;
899
- case 'dict':
927
+ case "dict":
900
928
  return recursiveKeyName(`${root}-dict`, obj.valueType, substituteDiscriminator);
901
- case 'plainDate':
929
+ case "plainDate":
902
930
  return `${root}-dateType`;
903
- case 'utcDateTime':
931
+ case "utcDateTime":
904
932
  return `${root}-${getDateTimeEncoding(obj.encode)}`;
905
- case 'duration':
933
+ case "duration":
906
934
  return `${root}-${obj.wireType.kind}`;
907
- case 'model':
935
+ case "model":
908
936
  if (substituteDiscriminator) {
909
937
  return `${root}-${naming.createPolymorphicInterfaceName(obj.name)}`;
910
938
  }
911
939
  return `${root}-${obj.name}`;
912
- case 'nullable':
940
+ case "nullable":
913
941
  return recursiveKeyName(root, obj.type, substituteDiscriminator);
914
- case 'plainTime':
915
- if (obj.encode !== 'rfc3339') {
916
- throw new AdapterError('UnsupportedTsp', `unsupported time encoding ${obj.encode}`, obj.__raw?.node);
942
+ case "plainTime":
943
+ if (obj.encode !== "rfc3339") {
944
+ throw new AdapterError("UnsupportedTsp", `unsupported time encoding ${obj.encode}`, obj.__raw?.node);
917
945
  }
918
946
  return `${root}-timeRFC3339`;
919
947
  default: