@typespec/http-server-csharp 0.58.0-alpha.28-dev.4 → 0.58.0-alpha.29-dev.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 (279) hide show
  1. package/dist/src/cli/cli.js +118 -154
  2. package/dist/src/cli/cli.js.map +1 -1
  3. package/dist/src/components/controller-action/controller-action.d.ts +16 -0
  4. package/dist/src/components/controller-action/controller-action.d.ts.map +1 -0
  5. package/dist/src/components/controller-action/controller-action.js +251 -0
  6. package/dist/src/components/controller-action/controller-action.js.map +1 -0
  7. package/dist/src/components/controller-action/controller-action.test.d.ts +2 -0
  8. package/dist/src/components/controller-action/controller-action.test.d.ts.map +1 -0
  9. package/dist/src/components/controller-action/controller-action.test.js +106 -0
  10. package/dist/src/components/controller-action/controller-action.test.js.map +1 -0
  11. package/dist/src/components/controller-action/parameter-binding.d.ts +17 -0
  12. package/dist/src/components/controller-action/parameter-binding.d.ts.map +1 -0
  13. package/dist/src/components/controller-action/parameter-binding.js +77 -0
  14. package/dist/src/components/controller-action/parameter-binding.js.map +1 -0
  15. package/dist/src/components/controller-action/response-analysis.d.ts +10 -0
  16. package/dist/src/components/controller-action/response-analysis.d.ts.map +1 -0
  17. package/dist/src/components/controller-action/response-analysis.js +61 -0
  18. package/dist/src/components/controller-action/response-analysis.js.map +1 -0
  19. package/dist/src/components/controllers/controllers.d.ts +18 -0
  20. package/dist/src/components/controllers/controllers.d.ts.map +1 -0
  21. package/dist/src/components/controllers/controllers.js +64 -0
  22. package/dist/src/components/controllers/controllers.js.map +1 -0
  23. package/dist/src/components/controllers/controllers.test.d.ts +2 -0
  24. package/dist/src/components/controllers/controllers.test.d.ts.map +1 -0
  25. package/dist/src/components/controllers/controllers.test.js +84 -0
  26. package/dist/src/components/controllers/controllers.test.js.map +1 -0
  27. package/dist/src/components/csharp-file.d.ts +15 -0
  28. package/dist/src/components/csharp-file.d.ts.map +1 -0
  29. package/dist/src/components/csharp-file.js +28 -0
  30. package/dist/src/components/csharp-file.js.map +1 -0
  31. package/dist/src/components/enums/enums.d.ts +28 -0
  32. package/dist/src/components/enums/enums.d.ts.map +1 -0
  33. package/dist/src/components/enums/enums.js +158 -0
  34. package/dist/src/components/enums/enums.js.map +1 -0
  35. package/dist/src/components/enums/enums.test.d.ts +2 -0
  36. package/dist/src/components/enums/enums.test.d.ts.map +1 -0
  37. package/dist/src/components/enums/enums.test.js +112 -0
  38. package/dist/src/components/enums/enums.test.js.map +1 -0
  39. package/dist/src/components/interfaces/interfaces.d.ts +17 -0
  40. package/dist/src/components/interfaces/interfaces.d.ts.map +1 -0
  41. package/dist/src/components/interfaces/interfaces.js +153 -0
  42. package/dist/src/components/interfaces/interfaces.js.map +1 -0
  43. package/dist/src/components/interfaces/interfaces.test.d.ts +2 -0
  44. package/dist/src/components/interfaces/interfaces.test.d.ts.map +1 -0
  45. package/dist/src/components/interfaces/interfaces.test.js +76 -0
  46. package/dist/src/components/interfaces/interfaces.test.js.map +1 -0
  47. package/dist/src/components/models/anonymous-models.d.ts +9 -0
  48. package/dist/src/components/models/anonymous-models.d.ts.map +1 -0
  49. package/dist/src/components/models/anonymous-models.js +37 -0
  50. package/dist/src/components/models/anonymous-models.js.map +1 -0
  51. package/dist/src/components/models/error-models.d.ts +5 -0
  52. package/dist/src/components/models/error-models.d.ts.map +1 -0
  53. package/dist/src/components/models/error-models.js +84 -0
  54. package/dist/src/components/models/error-models.js.map +1 -0
  55. package/dist/src/components/models/model-helpers.d.ts +40 -0
  56. package/dist/src/components/models/model-helpers.d.ts.map +1 -0
  57. package/dist/src/components/models/model-helpers.js +239 -0
  58. package/dist/src/components/models/model-helpers.js.map +1 -0
  59. package/dist/src/components/models/models.d.ts +15 -0
  60. package/dist/src/components/models/models.d.ts.map +1 -0
  61. package/dist/src/components/models/models.js +234 -0
  62. package/dist/src/components/models/models.js.map +1 -0
  63. package/dist/src/components/models/models.test.d.ts +2 -0
  64. package/dist/src/components/models/models.test.d.ts.map +1 -0
  65. package/dist/src/components/models/models.test.js +151 -0
  66. package/dist/src/components/models/models.test.js.map +1 -0
  67. package/dist/src/components/project/csproj.d.ts +12 -0
  68. package/dist/src/components/project/csproj.d.ts.map +1 -0
  69. package/dist/src/components/project/csproj.js +35 -0
  70. package/dist/src/components/project/csproj.js.map +1 -0
  71. package/dist/src/components/project/csproj.test.d.ts +2 -0
  72. package/dist/src/components/project/csproj.test.d.ts.map +1 -0
  73. package/dist/src/components/project/csproj.test.js +42 -0
  74. package/dist/src/components/project/csproj.test.js.map +1 -0
  75. package/dist/src/components/project/launch-settings.d.ts +16 -0
  76. package/dist/src/components/project/launch-settings.d.ts.map +1 -0
  77. package/dist/src/components/project/launch-settings.js +73 -0
  78. package/dist/src/components/project/launch-settings.js.map +1 -0
  79. package/dist/src/components/project/launch-settings.test.d.ts +2 -0
  80. package/dist/src/components/project/launch-settings.test.d.ts.map +1 -0
  81. package/dist/src/components/project/launch-settings.test.js +48 -0
  82. package/dist/src/components/project/launch-settings.test.js.map +1 -0
  83. package/dist/src/components/project/program.d.ts +14 -0
  84. package/dist/src/components/project/program.d.ts.map +1 -0
  85. package/dist/src/components/project/program.js +75 -0
  86. package/dist/src/components/project/program.js.map +1 -0
  87. package/dist/src/components/project/program.test.d.ts +2 -0
  88. package/dist/src/components/project/program.test.d.ts.map +1 -0
  89. package/dist/src/components/project/program.test.js +50 -0
  90. package/dist/src/components/project/program.test.js.map +1 -0
  91. package/dist/src/components/render-root.d.ts +14 -0
  92. package/dist/src/components/render-root.d.ts.map +1 -0
  93. package/dist/src/components/render-root.js +122 -0
  94. package/dist/src/components/render-root.js.map +1 -0
  95. package/dist/src/components/request-models.d.ts +15 -0
  96. package/dist/src/components/request-models.d.ts.map +1 -0
  97. package/dist/src/components/request-models.js +97 -0
  98. package/dist/src/components/request-models.js.map +1 -0
  99. package/dist/src/components/scaffolding/documentation.d.ts +12 -0
  100. package/dist/src/components/scaffolding/documentation.d.ts.map +1 -0
  101. package/dist/src/{lib/doc.js → components/scaffolding/documentation.js} +56 -46
  102. package/dist/src/components/scaffolding/documentation.js.map +1 -0
  103. package/dist/src/components/scaffolding/mock-helpers.d.ts +10 -0
  104. package/dist/src/components/scaffolding/mock-helpers.d.ts.map +1 -0
  105. package/dist/src/components/scaffolding/mock-helpers.js +268 -0
  106. package/dist/src/components/scaffolding/mock-helpers.js.map +1 -0
  107. package/dist/src/components/scaffolding/mock-implementations.d.ts +14 -0
  108. package/dist/src/components/scaffolding/mock-implementations.d.ts.map +1 -0
  109. package/dist/src/components/scaffolding/mock-implementations.js +152 -0
  110. package/dist/src/components/scaffolding/mock-implementations.js.map +1 -0
  111. package/dist/src/components/scaffolding/mock-return-utils.d.ts +11 -0
  112. package/dist/src/components/scaffolding/mock-return-utils.d.ts.map +1 -0
  113. package/dist/src/components/scaffolding/mock-return-utils.js +62 -0
  114. package/dist/src/components/scaffolding/mock-return-utils.js.map +1 -0
  115. package/dist/src/components/scaffolding/mock-scaffolding.d.ts +6 -0
  116. package/dist/src/components/scaffolding/mock-scaffolding.d.ts.map +1 -0
  117. package/dist/src/components/scaffolding/mock-scaffolding.js +5 -0
  118. package/dist/src/components/scaffolding/mock-scaffolding.js.map +1 -0
  119. package/dist/src/components/scaffolding/mock-scaffolding.test.d.ts +2 -0
  120. package/dist/src/components/scaffolding/mock-scaffolding.test.d.ts.map +1 -0
  121. package/dist/src/components/scaffolding/mock-scaffolding.test.js +59 -0
  122. package/dist/src/components/scaffolding/mock-scaffolding.test.js.map +1 -0
  123. package/dist/src/components/serialization/base64-url-json-converter.d.ts +7 -0
  124. package/dist/src/components/serialization/base64-url-json-converter.d.ts.map +1 -0
  125. package/dist/src/components/serialization/base64-url-json-converter.js +58 -0
  126. package/dist/src/components/serialization/base64-url-json-converter.js.map +1 -0
  127. package/dist/src/components/serialization/constraint-attributes.d.ts +7 -0
  128. package/dist/src/components/serialization/constraint-attributes.d.ts.map +1 -0
  129. package/dist/src/components/serialization/constraint-attributes.js +556 -0
  130. package/dist/src/components/serialization/constraint-attributes.js.map +1 -0
  131. package/dist/src/components/serialization/http-service-exception-filter.d.ts +8 -0
  132. package/dist/src/components/serialization/http-service-exception-filter.d.ts.map +1 -0
  133. package/dist/src/components/serialization/http-service-exception-filter.js +71 -0
  134. package/dist/src/components/serialization/http-service-exception-filter.js.map +1 -0
  135. package/dist/src/components/serialization/json-converters.d.ts +7 -0
  136. package/dist/src/components/serialization/json-converters.d.ts.map +1 -0
  137. package/dist/src/components/serialization/json-converters.js +22 -0
  138. package/dist/src/components/serialization/json-converters.js.map +1 -0
  139. package/dist/src/components/serialization/json-converters.test.d.ts +2 -0
  140. package/dist/src/components/serialization/json-converters.test.d.ts.map +1 -0
  141. package/dist/src/components/serialization/json-converters.test.js +136 -0
  142. package/dist/src/components/serialization/json-converters.test.js.map +1 -0
  143. package/dist/src/components/serialization/json-serialization-provider.d.ts +7 -0
  144. package/dist/src/components/serialization/json-serialization-provider.d.ts.map +1 -0
  145. package/dist/src/components/serialization/json-serialization-provider.js +90 -0
  146. package/dist/src/components/serialization/json-serialization-provider.js.map +1 -0
  147. package/dist/src/components/serialization/time-span-duration-converter.d.ts +7 -0
  148. package/dist/src/components/serialization/time-span-duration-converter.d.ts.map +1 -0
  149. package/dist/src/components/serialization/time-span-duration-converter.js +44 -0
  150. package/dist/src/components/serialization/time-span-duration-converter.js.map +1 -0
  151. package/dist/src/components/serialization/unix-epoch-date-time-converter.d.ts +7 -0
  152. package/dist/src/components/serialization/unix-epoch-date-time-converter.d.ts.map +1 -0
  153. package/dist/src/components/serialization/unix-epoch-date-time-converter.js +71 -0
  154. package/dist/src/components/serialization/unix-epoch-date-time-converter.js.map +1 -0
  155. package/dist/src/components/type-expression/type-expression.d.ts +24 -0
  156. package/dist/src/components/type-expression/type-expression.d.ts.map +1 -0
  157. package/dist/src/components/type-expression/type-expression.js +223 -0
  158. package/dist/src/components/type-expression/type-expression.js.map +1 -0
  159. package/dist/src/components/type-expression/type-expression.test.d.ts +2 -0
  160. package/dist/src/components/type-expression/type-expression.test.d.ts.map +1 -0
  161. package/dist/src/components/type-expression/type-expression.test.js +207 -0
  162. package/dist/src/components/type-expression/type-expression.test.js.map +1 -0
  163. package/dist/src/context/emitter-options-context.d.ts +13 -0
  164. package/dist/src/context/emitter-options-context.d.ts.map +1 -0
  165. package/dist/src/context/emitter-options-context.js +15 -0
  166. package/dist/src/context/emitter-options-context.js.map +1 -0
  167. package/dist/src/diagnostics.d.ts +8 -0
  168. package/dist/src/diagnostics.d.ts.map +1 -0
  169. package/dist/src/diagnostics.js +164 -0
  170. package/dist/src/diagnostics.js.map +1 -0
  171. package/dist/src/emitter.d.ts +8 -0
  172. package/dist/src/emitter.d.ts.map +1 -0
  173. package/dist/src/emitter.js +180 -0
  174. package/dist/src/emitter.js.map +1 -0
  175. package/dist/src/{lib/index.d.ts → index.d.ts} +1 -1
  176. package/dist/src/index.d.ts.map +1 -0
  177. package/dist/src/{lib/index.js → index.js} +1 -1
  178. package/dist/src/index.js.map +1 -0
  179. package/dist/src/{lib/lib.d.ts → lib.d.ts} +4 -14
  180. package/dist/src/lib.d.ts.map +1 -0
  181. package/dist/src/lib.js +133 -0
  182. package/dist/src/lib.js.map +1 -0
  183. package/dist/src/output-writer.d.ts +11 -0
  184. package/dist/src/output-writer.d.ts.map +1 -0
  185. package/dist/src/output-writer.js +72 -0
  186. package/dist/src/output-writer.js.map +1 -0
  187. package/dist/src/service-discovery.d.ts +13 -0
  188. package/dist/src/service-discovery.d.ts.map +1 -0
  189. package/dist/src/service-discovery.js +93 -0
  190. package/dist/src/service-discovery.js.map +1 -0
  191. package/dist/src/service-resolution.d.ts +34 -0
  192. package/dist/src/service-resolution.d.ts.map +1 -0
  193. package/dist/src/service-resolution.js +244 -0
  194. package/dist/src/service-resolution.js.map +1 -0
  195. package/dist/src/testing/index.d.ts +2 -0
  196. package/dist/src/testing/index.d.ts.map +1 -0
  197. package/dist/src/testing/index.js +2 -0
  198. package/dist/src/testing/index.js.map +1 -0
  199. package/dist/src/utils/attributes.d.ts +8 -0
  200. package/dist/src/utils/attributes.d.ts.map +1 -0
  201. package/dist/src/utils/attributes.js +224 -0
  202. package/dist/src/utils/attributes.js.map +1 -0
  203. package/dist/src/utils/csharp-libs.d.ts +87 -0
  204. package/dist/src/utils/csharp-libs.d.ts.map +1 -0
  205. package/dist/src/utils/csharp-libs.js +90 -0
  206. package/dist/src/utils/csharp-libs.js.map +1 -0
  207. package/dist/src/utils/doc-comments.d.ts +2 -0
  208. package/dist/src/utils/doc-comments.d.ts.map +1 -0
  209. package/dist/src/utils/doc-comments.js +4 -0
  210. package/dist/src/utils/doc-comments.js.map +1 -0
  211. package/dist/src/utils/http-helpers.d.ts +19 -0
  212. package/dist/src/utils/http-helpers.d.ts.map +1 -0
  213. package/dist/src/utils/http-helpers.js +70 -0
  214. package/dist/src/utils/http-helpers.js.map +1 -0
  215. package/dist/src/utils/http-helpers.test.d.ts +2 -0
  216. package/dist/src/utils/http-helpers.test.d.ts.map +1 -0
  217. package/dist/src/utils/http-helpers.test.js +68 -0
  218. package/dist/src/utils/http-helpers.test.js.map +1 -0
  219. package/dist/src/utils/namespace-utils.d.ts +13 -0
  220. package/dist/src/utils/namespace-utils.d.ts.map +1 -0
  221. package/dist/src/utils/namespace-utils.js +55 -0
  222. package/dist/src/utils/namespace-utils.js.map +1 -0
  223. package/dist/src/utils/naming.d.ts +31 -0
  224. package/dist/src/utils/naming.d.ts.map +1 -0
  225. package/dist/src/utils/naming.js +87 -0
  226. package/dist/src/utils/naming.js.map +1 -0
  227. package/dist/src/utils/naming.test.d.ts +2 -0
  228. package/dist/src/utils/naming.test.d.ts.map +1 -0
  229. package/dist/src/utils/naming.test.js +86 -0
  230. package/dist/src/utils/naming.test.js.map +1 -0
  231. package/dist/src/utils/port.d.ts +5 -0
  232. package/dist/src/utils/port.d.ts.map +1 -0
  233. package/dist/src/utils/port.js +33 -0
  234. package/dist/src/utils/port.js.map +1 -0
  235. package/dist/src/utils/return-type-helpers.d.ts +8 -0
  236. package/dist/src/utils/return-type-helpers.d.ts.map +1 -0
  237. package/dist/src/utils/return-type-helpers.js +59 -0
  238. package/dist/src/utils/return-type-helpers.js.map +1 -0
  239. package/package.json +34 -26
  240. package/dist/src/lib/attributes.d.ts +0 -43
  241. package/dist/src/lib/attributes.d.ts.map +0 -1
  242. package/dist/src/lib/attributes.js +0 -422
  243. package/dist/src/lib/attributes.js.map +0 -1
  244. package/dist/src/lib/boilerplate.d.ts +0 -6
  245. package/dist/src/lib/boilerplate.d.ts.map +0 -1
  246. package/dist/src/lib/boilerplate.js +0 -792
  247. package/dist/src/lib/boilerplate.js.map +0 -1
  248. package/dist/src/lib/doc.d.ts +0 -5
  249. package/dist/src/lib/doc.d.ts.map +0 -1
  250. package/dist/src/lib/doc.js.map +0 -1
  251. package/dist/src/lib/index.d.ts.map +0 -1
  252. package/dist/src/lib/index.js.map +0 -1
  253. package/dist/src/lib/interfaces.d.ts +0 -183
  254. package/dist/src/lib/interfaces.d.ts.map +0 -1
  255. package/dist/src/lib/interfaces.js +0 -287
  256. package/dist/src/lib/interfaces.js.map +0 -1
  257. package/dist/src/lib/lib.d.ts.map +0 -1
  258. package/dist/src/lib/lib.js +0 -146
  259. package/dist/src/lib/lib.js.map +0 -1
  260. package/dist/src/lib/project.d.ts +0 -5
  261. package/dist/src/lib/project.d.ts.map +0 -1
  262. package/dist/src/lib/project.js +0 -101
  263. package/dist/src/lib/project.js.map +0 -1
  264. package/dist/src/lib/scaffolding.d.ts +0 -22
  265. package/dist/src/lib/scaffolding.d.ts.map +0 -1
  266. package/dist/src/lib/scaffolding.js +0 -461
  267. package/dist/src/lib/scaffolding.js.map +0 -1
  268. package/dist/src/lib/service.d.ts +0 -4
  269. package/dist/src/lib/service.d.ts.map +0 -1
  270. package/dist/src/lib/service.js +0 -1208
  271. package/dist/src/lib/service.js.map +0 -1
  272. package/dist/src/lib/type-helpers.d.ts +0 -44
  273. package/dist/src/lib/type-helpers.d.ts.map +0 -1
  274. package/dist/src/lib/type-helpers.js +0 -106
  275. package/dist/src/lib/type-helpers.js.map +0 -1
  276. package/dist/src/lib/utils.d.ts +0 -120
  277. package/dist/src/lib/utils.d.ts.map +0 -1
  278. package/dist/src/lib/utils.js +0 -1580
  279. package/dist/src/lib/utils.js.map +0 -1
@@ -0,0 +1,158 @@
1
+ import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
+ import { For } from "@alloy-js/core";
3
+ import * as cs from "@alloy-js/csharp";
4
+ import { Attribute } from "@alloy-js/csharp";
5
+ import { useTsp } from "@typespec/emitter-framework";
6
+ import { JsonSerialization } from "../../utils/csharp-libs.js";
7
+ import { getDocComments } from "../../utils/doc-comments.js";
8
+ import { getSubNamespaceParts } from "../../utils/namespace-utils.js";
9
+ import { CSharpFile } from "../csharp-file.js";
10
+ import { efRefkey } from "../type-expression/type-expression.js";
11
+
12
+ /** Normalized member info shared by both enums and union-enums. */
13
+
14
+ /** Normalized enum info that abstracts over Enum and union-as-enum types. */
15
+
16
+ function normalizeEnum(en) {
17
+ return {
18
+ name: en.name,
19
+ type: en,
20
+ namespace: en.namespace,
21
+ members: Array.from(en.members.entries()).map(([key, value]) => ({
22
+ name: key,
23
+ serializedValue: typeof value.value === "string" ? value.value : key,
24
+ docSource: value
25
+ }))
26
+ };
27
+ }
28
+ function normalizeUnionEnum(union) {
29
+ return {
30
+ name: union.name,
31
+ type: union,
32
+ namespace: union.namespace,
33
+ members: getUnionEnumMembers(union).map(({
34
+ name,
35
+ value,
36
+ variant
37
+ }) => ({
38
+ name,
39
+ serializedValue: value,
40
+ docSource: variant,
41
+ memberRefkey: efRefkey(union, name)
42
+ }))
43
+ };
44
+ }
45
+ /**
46
+ * Iterates pre-resolved enums and union-enums and emits C# enum declarations.
47
+ * Each enum is emitted in its own source file with JSON serialization attributes.
48
+ */
49
+ export function Enums(props) {
50
+ const {
51
+ $
52
+ } = useTsp();
53
+ const allEnums = [...props.enums.map(normalizeEnum), ...props.unionEnums.map(normalizeUnionEnum)];
54
+ return _$createComponent(For, {
55
+ each: allEnums,
56
+ children: info => {
57
+ const namePolicy = cs.useCSharpNamePolicy();
58
+ const subNsParts = getSubNamespaceParts(info.namespace, props.serviceNamespace);
59
+ const enumDecl = [_$createComponent(Attribute, {
60
+ get name() {
61
+ return JsonSerialization.JsonConverterAttribute;
62
+ },
63
+ args: ["typeof(JsonStringEnumConverter)"]
64
+ }), _$createIntrinsic("hbr", {}), _$createComponent(cs.EnumDeclaration, {
65
+ get name() {
66
+ return namePolicy.getName(info.name, "enum");
67
+ },
68
+ "public": true,
69
+ get refkey() {
70
+ return efRefkey(info.type);
71
+ },
72
+ get doc() {
73
+ return getDocComments($, info.type);
74
+ },
75
+ get children() {
76
+ return _$createComponent(For, {
77
+ get each() {
78
+ return info.members;
79
+ },
80
+ comma: true,
81
+ hardline: true,
82
+ children: member => [_$createComponent(cs.DocWhen, {
83
+ get doc() {
84
+ return getDocComments($, member.docSource);
85
+ }
86
+ }), _$createComponent(Attribute, {
87
+ get name() {
88
+ return JsonSerialization.JsonStringEnumMemberNameAttribute;
89
+ },
90
+ get args() {
91
+ return [`"${member.serializedValue}"`];
92
+ }
93
+ }), _$createIntrinsic("hbr", {}), _$createComponent(cs.EnumMember, {
94
+ get name() {
95
+ return namePolicy.getName(member.name, "enum-member");
96
+ },
97
+ get refkey() {
98
+ return member.memberRefkey;
99
+ }
100
+ })]
101
+ });
102
+ }
103
+ })];
104
+ const wrappedContent = subNsParts.reduceRight((content, nsPart) => _$createComponent(cs.Namespace, {
105
+ name: nsPart,
106
+ children: content
107
+ }), enumDecl);
108
+ return _$createComponent(CSharpFile, {
109
+ get path() {
110
+ return `${info.name}.cs`;
111
+ },
112
+ using: ["System.Text.Json"],
113
+ children: wrappedContent
114
+ });
115
+ }
116
+ });
117
+ }
118
+
119
+ /**
120
+ * Returns true if a named union can be represented as a C# enum.
121
+ * Requires: named union, every named variant has a string value,
122
+ * and optionally one unnamed scalar `string` variant (open/extensible).
123
+ */
124
+ export function isUnionEnum(union) {
125
+ if (!union.name) return false;
126
+ const variants = Array.from(union.variants.values());
127
+ let hasNamedStringVariant = false;
128
+ for (const variant of variants) {
129
+ // Allow a single open string scalar variant (extensible union)
130
+ if (variant.type.kind === "Scalar" && variant.type.name === "string") {
131
+ continue;
132
+ }
133
+ // Named variant with a string literal value
134
+ if (variant.type.kind === "String" && variant.name && typeof variant.name === "string") {
135
+ hasNamedStringVariant = true;
136
+ continue;
137
+ }
138
+ // Any other variant type means it's not a simple enum
139
+ return false;
140
+ }
141
+ return hasNamedStringVariant;
142
+ }
143
+
144
+ /** Gets the named string variants of a union-as-enum (skipping the open `string` variant). */
145
+ export function getUnionEnumMembers(union) {
146
+ const members = [];
147
+ for (const variant of union.variants.values()) {
148
+ if (variant.type.kind === "String" && variant.name && typeof variant.name === "string") {
149
+ members.push({
150
+ name: variant.name,
151
+ value: variant.type.value,
152
+ variant
153
+ });
154
+ }
155
+ }
156
+ return members;
157
+ }
158
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["For","cs","Attribute","useTsp","JsonSerialization","getDocComments","getSubNamespaceParts","CSharpFile","efRefkey","normalizeEnum","en","name","type","namespace","members","Array","from","entries","map","key","value","serializedValue","docSource","normalizeUnionEnum","union","getUnionEnumMembers","variant","memberRefkey","Enums","props","$","allEnums","enums","unionEnums","_$createComponent","each","children","info","namePolicy","useCSharpNamePolicy","subNsParts","serviceNamespace","enumDecl","JsonConverterAttribute","args","_$createIntrinsic","EnumDeclaration","getName","refkey","doc","comma","hardline","member","DocWhen","JsonStringEnumMemberNameAttribute","EnumMember","wrappedContent","reduceRight","content","nsPart","Namespace","path","using","isUnionEnum","variants","values","hasNamedStringVariant","kind","push"],"sources":["../../../../src/components/enums/enums.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=enums.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.test.d.ts","sourceRoot":"","sources":["../../../../src/components/enums/enums.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,112 @@
1
+ import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
+ import { Tester } from "#test/tester.js";
3
+ import { createCSharpNamePolicy, SourceFile } from "@alloy-js/csharp";
4
+ import { t } from "@typespec/compiler/testing";
5
+ import { Output } from "@typespec/emitter-framework";
6
+ import { EnumDeclaration } from "@typespec/emitter-framework/csharp";
7
+ import { beforeEach, describe, expect, it } from "vitest";
8
+ let runner;
9
+ beforeEach(async () => {
10
+ runner = await Tester.createInstance();
11
+ });
12
+ function Wrapper(props) {
13
+ const policy = createCSharpNamePolicy();
14
+ return _$createComponent(Output, {
15
+ get program() {
16
+ return runner.program;
17
+ },
18
+ namePolicy: policy,
19
+ get children() {
20
+ return _$createComponent(SourceFile, {
21
+ path: "test.cs",
22
+ get children() {
23
+ return props.children;
24
+ }
25
+ });
26
+ }
27
+ });
28
+ }
29
+ describe("EnumDeclaration", () => {
30
+ it("renders a simple enum", async () => {
31
+ const {
32
+ Color
33
+ } = await runner.compile(t.code`
34
+ enum ${t.enum("Color")} {
35
+ Red,
36
+ Green,
37
+ Blue,
38
+ }
39
+ `);
40
+ expect(_$createComponent(Wrapper, {
41
+ get children() {
42
+ return _$createComponent(EnumDeclaration, {
43
+ type: Color
44
+ });
45
+ }
46
+ })).toRenderTo(`
47
+ enum Color
48
+ {
49
+ Red,
50
+ Green,
51
+ Blue
52
+ }
53
+ `);
54
+ });
55
+ it("renders an enum with multiple members", async () => {
56
+ const {
57
+ Direction
58
+ } = await runner.compile(t.code`
59
+ enum ${t.enum("Direction")} {
60
+ North,
61
+ South,
62
+ East,
63
+ West,
64
+ }
65
+ `);
66
+ expect(_$createComponent(Wrapper, {
67
+ get children() {
68
+ return _$createComponent(EnumDeclaration, {
69
+ type: Direction
70
+ });
71
+ }
72
+ })).toRenderTo(`
73
+ enum Direction
74
+ {
75
+ North,
76
+ South,
77
+ East,
78
+ West
79
+ }
80
+ `);
81
+ });
82
+ it("renders an enum with a type-level doc comment", async () => {
83
+ const {
84
+ Color
85
+ } = await runner.compile(t.code`
86
+ /** Represents available colors */
87
+ enum ${t.enum("Color")} {
88
+ Red,
89
+ Green,
90
+ Blue,
91
+ }
92
+ `);
93
+ expect(_$createComponent(Wrapper, {
94
+ get children() {
95
+ return _$createComponent(EnumDeclaration, {
96
+ type: Color
97
+ });
98
+ }
99
+ })).toRenderTo(`
100
+ /// <summary>
101
+ /// Represents available colors
102
+ /// </summary>
103
+ enum Color
104
+ {
105
+ Red,
106
+ Green,
107
+ Blue
108
+ }
109
+ `);
110
+ });
111
+ });
112
+ //# sourceMappingURL=enums.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Tester","createCSharpNamePolicy","SourceFile","t","Output","EnumDeclaration","beforeEach","describe","expect","it","runner","createInstance","Wrapper","props","policy","_$createComponent","program","namePolicy","children","path","Color","compile","code","enum","type","toRenderTo","Direction"],"sources":["../../../../src/components/enums/enums.test.tsx"],"sourcesContent":[null],"mappings":";AAAA,SAASA,MAAM,QAAQ,iBAAiB;AAExC,SAASC,sBAAsB,EAAEC,UAAU,QAAQ,kBAAkB;AACrE,SAASC,CAAC,QAA6B,4BAA4B;AACnE,SAASC,MAAM,QAAQ,6BAA6B;AACpD,SAASC,eAAe,QAAQ,oCAAoC;AACpE,SAASC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAEzD,IAAIC,MAAsB;AAE1BJ,UAAU,CAAC,YAAY;EACrBI,MAAM,GAAG,MAAMV,MAAM,CAACW,cAAc,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,SAASC,OAAOA,CAACC,KAA6B,EAAE;EAC9C,MAAMC,MAAM,GAAGb,sBAAsB,CAAC,CAAC;EACvC,OAAAc,iBAAA,CACGX,MAAM;IAAA,IAACY,OAAOA,CAAA;MAAA,OAAEN,MAAM,CAACM,OAAO;IAAA;IAAEC,UAAU,EAAEH,MAAM;IAAA,IAAAI,SAAA;MAAA,OAAAH,iBAAA,CAChDb,UAAU;QAACiB,IAAI;QAAA,IAAAD,SAAA;UAAA,OAAYL,KAAK,CAACK,QAAQ;QAAA;MAAA;IAAA;EAAA;AAGhD;AAEAX,QAAQ,CAAC,iBAAiB,EAAE,MAAM;EAChCE,EAAE,CAAC,uBAAuB,EAAE,YAAY;IACtC,MAAM;MAAEW;IAAM,CAAC,GAAG,MAAMV,MAAM,CAACW,OAAO,CAAClB,CAAC,CAACmB,IAAI;AACjD,aAAanB,CAAC,CAACoB,IAAI,CAAC,OAAO,CAAC;AAC5B;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEFf,MAAM,CAAAO,iBAAA,CACHH,OAAO;MAAA,IAAAM,SAAA;QAAA,OAAAH,iBAAA,CACLV,eAAe;UAACmB,IAAI,EAAEJ;QAAK;MAAA;IAAA,EAEhC,CAAC,CAACK,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;EACJ,CAAC,CAAC;EAEFhB,EAAE,CAAC,uCAAuC,EAAE,YAAY;IACtD,MAAM;MAAEiB;IAAU,CAAC,GAAG,MAAMhB,MAAM,CAACW,OAAO,CAAClB,CAAC,CAACmB,IAAI;AACrD,aAAanB,CAAC,CAACoB,IAAI,CAAC,WAAW,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEFf,MAAM,CAAAO,iBAAA,CACHH,OAAO;MAAA,IAAAM,SAAA;QAAA,OAAAH,iBAAA,CACLV,eAAe;UAACmB,IAAI,EAAEE;QAAS;MAAA;IAAA,EAEpC,CAAC,CAACD,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;EACJ,CAAC,CAAC;EAEFhB,EAAE,CAAC,+CAA+C,EAAE,YAAY;IAC9D,MAAM;MAAEW;IAAM,CAAC,GAAG,MAAMV,MAAM,CAACW,OAAO,CAAClB,CAAC,CAACmB,IAAI;AACjD;AACA,aAAanB,CAAC,CAACoB,IAAI,CAAC,OAAO,CAAC;AAC5B;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEFf,MAAM,CAAAO,iBAAA,CACHH,OAAO;MAAA,IAAAM,SAAA;QAAA,OAAAH,iBAAA,CACLV,eAAe;UAACmB,IAAI,EAAEJ;QAAK;MAAA;IAAA,EAEhC,CAAC,CAACK,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ import { type Children, type Refkey } from "@alloy-js/core";
2
+ import type { Interface } from "@typespec/compiler";
3
+ import type { OperationHttpCanonicalization } from "@typespec/http-canonicalization";
4
+ /** Creates a stable refkey for a business logic interface from its TypeSpec Interface type. */
5
+ export declare function businessLogicInterfaceRefkey(type: Interface): Refkey;
6
+ export interface BusinessLogicInterfaceProps {
7
+ /** The TypeSpec interface to generate a business logic interface for. */
8
+ type: Interface;
9
+ /** The canonicalized HTTP operations (for filtering body params on GET). */
10
+ canonicalOps?: OperationHttpCanonicalization[];
11
+ }
12
+ /**
13
+ * Generates an ASP.NET business logic interface (e.g., `IPetStoreOperations`)
14
+ * from a TypeSpec interface. Each operation becomes an async Task method.
15
+ */
16
+ export declare function BusinessLogicInterface(props: BusinessLogicInterfaceProps): Children;
17
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/components/interfaces/interfaces.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE3F,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,oBAAoB,CAAC;AAG/D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAQrF,+FAA+F;AAC/F,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEpE;AAED,MAAM,WAAW,2BAA2B;IAC1C,yEAAyE;IACzE,IAAI,EAAE,SAAS,CAAC;IAChB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,6BAA6B,EAAE,CAAC;CAChD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,QAAQ,CA8BnF"}
@@ -0,0 +1,153 @@
1
+ import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
+ import { refkey as ayRefkey, code, For } from "@alloy-js/core";
3
+ import * as cs from "@alloy-js/csharp";
4
+ import { isTemplateDeclaration, isVoidType } from "@typespec/compiler";
5
+ import { useTsp } from "@typespec/emitter-framework";
6
+ import { getUniqueItems } from "@typespec/json-schema";
7
+ import { getDocComments } from "../../utils/doc-comments.js";
8
+ import { getSuccessReturnType } from "../../utils/return-type-helpers.js";
9
+ import { TypeExpression } from "../type-expression/type-expression.js";
10
+ const interfaceRefKeyPrefix = Symbol.for("http-server-csharp:interface");
11
+
12
+ /** Creates a stable refkey for a business logic interface from its TypeSpec Interface type. */
13
+ export function businessLogicInterfaceRefkey(type) {
14
+ return ayRefkey(interfaceRefKeyPrefix, type);
15
+ }
16
+ /**
17
+ * Generates an ASP.NET business logic interface (e.g., `IPetStoreOperations`)
18
+ * from a TypeSpec interface. Each operation becomes an async Task method.
19
+ */
20
+ export function BusinessLogicInterface(props) {
21
+ const {
22
+ $
23
+ } = useTsp();
24
+ const namePolicy = cs.useCSharpNamePolicy();
25
+ const interfaceName = `I${namePolicy.getName(props.type.name, "class")}`;
26
+ const operations = Array.from(props.type.operations.entries()).filter(([_, op]) => !isTemplateDeclaration(op));
27
+
28
+ // Build a map from operation name to its canonicalized HTTP info
29
+ const canonicalMap = new Map();
30
+ if (props.canonicalOps) {
31
+ for (const cop of props.canonicalOps) {
32
+ canonicalMap.set(cop.name, cop);
33
+ }
34
+ }
35
+ return _$createComponent(cs.InterfaceDeclaration, {
36
+ name: interfaceName,
37
+ "public": true,
38
+ get refkey() {
39
+ return businessLogicInterfaceRefkey(props.type);
40
+ },
41
+ get doc() {
42
+ return getDocComments($, props.type);
43
+ },
44
+ get children() {
45
+ return _$createComponent(For, {
46
+ each: operations,
47
+ doubleHardline: true,
48
+ children: ([name, op]) => _$createComponent(BusinessLogicMethod, {
49
+ name: name,
50
+ operation: op,
51
+ get canonicalOp() {
52
+ return canonicalMap.get(name);
53
+ }
54
+ })
55
+ });
56
+ }
57
+ });
58
+ }
59
+ /**
60
+ * Renders a single async method signature in a business logic interface.
61
+ * Method names get an "Async" suffix (e.g., `ListPetsAsync`).
62
+ */
63
+ function BusinessLogicMethod(props) {
64
+ const namePolicy = cs.useCSharpNamePolicy();
65
+ const methodName = `${namePolicy.getName(props.name, "class-method")}Async`;
66
+ const {
67
+ $
68
+ } = useTsp();
69
+ const successType = getSuccessReturnType($.program, props.operation.returnType);
70
+ const returnType = successType ? code`Task<${_$createComponent(TypeExpression, {
71
+ type: successType
72
+ })}>` : code`Task`;
73
+
74
+ // Check if this is a multipart request
75
+ const isMultipart = props.canonicalOp?.requestParameters.body?.bodyKind === "multipart";
76
+
77
+ // For GET operations, suppress body parameters entirely
78
+ const isGet = props.canonicalOp?.method === "get";
79
+ const bodyPropNames = new Set();
80
+ if (isGet && props.canonicalOp) {
81
+ const body = props.canonicalOp.requestParameters.body;
82
+ if (body?.bodyKind === "single" && body.bodies.length > 0) {
83
+ const bodyType = body.bodies[0].type.sourceType;
84
+ if (bodyType.kind === "Model") {
85
+ for (const [name] of bodyType.properties) {
86
+ bodyPropNames.add(name);
87
+ }
88
+ }
89
+ }
90
+ for (const p of props.canonicalOp.requestParameters.properties) {
91
+ if (p.kind === "body" || p.kind === "bodyRoot" || p.kind === "bodyProperty") {
92
+ bodyPropNames.add(p.property.sourceType.name);
93
+ }
94
+ }
95
+ }
96
+
97
+ // For multipart requests, suppress all body-related params
98
+ // For all requests, suppress content-type params
99
+ const filteredPropNames = new Set();
100
+ if (props.canonicalOp) {
101
+ for (const p of props.canonicalOp.requestParameters.properties) {
102
+ if (isMultipart && (p.kind === "body" || p.kind === "bodyRoot" || p.kind === "bodyProperty" || p.kind === "multipartBody")) {
103
+ filteredPropNames.add(p.property.sourceType.name);
104
+ }
105
+ if (p.property.isContentTypeProperty) {
106
+ filteredPropNames.add(p.property.sourceType.name);
107
+ }
108
+ }
109
+ }
110
+ const parameters = Array.from(props.operation.parameters.properties.entries()).filter(([name, prop]) => !isVoidType(prop.type)).filter(([name]) => !bodyPropNames.has(name)).filter(([name]) => !filteredPropNames.has(name)).map(([pName, prop]) => {
111
+ const isUnique = getUniqueItems($.program, prop);
112
+ const isArrayType = prop.type.kind === "Model" && $.array.is(prop.type);
113
+ let typeExpr;
114
+ if (isUnique && isArrayType && prop.type.kind === "Model" && prop.type.indexer?.value) {
115
+ typeExpr = ["ISet<", _$createComponent(TypeExpression, {
116
+ get type() {
117
+ return prop.type.indexer.value;
118
+ }
119
+ }), ">"];
120
+ } else {
121
+ typeExpr = _$createComponent(TypeExpression, {
122
+ get type() {
123
+ return prop.type;
124
+ }
125
+ });
126
+ }
127
+ return {
128
+ name: namePolicy.getName(pName, "parameter"),
129
+ type: typeExpr,
130
+ optional: prop.optional
131
+ };
132
+ })
133
+ // Required parameters must come before optional ones in C#
134
+ .sort((a, b) => a.optional === b.optional ? 0 : a.optional ? 1 : -1);
135
+
136
+ // For multipart requests, add MultipartReader parameter
137
+ if (isMultipart) {
138
+ parameters.push({
139
+ name: "reader",
140
+ type: code`MultipartReader`,
141
+ optional: false
142
+ });
143
+ }
144
+ return _$createComponent(cs.InterfaceMethod, {
145
+ name: methodName,
146
+ parameters: parameters,
147
+ returns: returnType,
148
+ get doc() {
149
+ return getDocComments($, props.operation);
150
+ }
151
+ });
152
+ }
153
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["refkey","ayRefkey","code","For","cs","isTemplateDeclaration","isVoidType","useTsp","getUniqueItems","getDocComments","getSuccessReturnType","TypeExpression","interfaceRefKeyPrefix","Symbol","for","businessLogicInterfaceRefkey","type","BusinessLogicInterface","props","$","namePolicy","useCSharpNamePolicy","interfaceName","getName","name","operations","Array","from","entries","filter","_","op","canonicalMap","Map","canonicalOps","cop","set","_$createComponent","InterfaceDeclaration","doc","children","each","doubleHardline","BusinessLogicMethod","operation","canonicalOp","get","methodName","successType","program","returnType","isMultipart","requestParameters","body","bodyKind","isGet","method","bodyPropNames","Set","bodies","length","bodyType","sourceType","kind","properties","add","p","property","filteredPropNames","isContentTypeProperty","parameters","prop","has","map","pName","isUnique","isArrayType","array","is","typeExpr","indexer","value","optional","sort","a","b","push","InterfaceMethod","returns"],"sources":["../../../../src/components/interfaces/interfaces.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interfaces.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.test.d.ts","sourceRoot":"","sources":["../../../../src/components/interfaces/interfaces.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
+ import { Tester } from "#test/tester.js";
3
+ import { createCSharpNamePolicy, SourceFile } from "@alloy-js/csharp";
4
+ import { t } from "@typespec/compiler/testing";
5
+ import { Output } from "@typespec/emitter-framework";
6
+ import { beforeEach, describe, expect, it } from "vitest";
7
+ import { BusinessLogicInterface } from "./interfaces.js";
8
+ let runner;
9
+ beforeEach(async () => {
10
+ runner = await Tester.createInstance();
11
+ });
12
+ function Wrapper(props) {
13
+ const policy = createCSharpNamePolicy();
14
+ return _$createComponent(Output, {
15
+ get program() {
16
+ return runner.program;
17
+ },
18
+ namePolicy: policy,
19
+ get children() {
20
+ return _$createComponent(SourceFile, {
21
+ path: "test.cs",
22
+ get children() {
23
+ return props.children;
24
+ }
25
+ });
26
+ }
27
+ });
28
+ }
29
+ describe("BusinessLogicInterface", () => {
30
+ it("renders an interface with async methods", async () => {
31
+ const {
32
+ PetStore
33
+ } = await runner.compile(t.code`
34
+ interface ${t.interface("PetStore")} {
35
+ listPets(): string[];
36
+ getPet(petId: string): string;
37
+ }
38
+ `);
39
+ expect(_$createComponent(Wrapper, {
40
+ get children() {
41
+ return _$createComponent(BusinessLogicInterface, {
42
+ type: PetStore
43
+ });
44
+ }
45
+ })).toRenderTo(`
46
+ public interface IPetStore
47
+ {
48
+ Task<string[]> ListPetsAsync();
49
+
50
+ Task<string> GetPetAsync(string petId);
51
+ }
52
+ `);
53
+ });
54
+ it("renders an interface with void return type", async () => {
55
+ const {
56
+ PetStore
57
+ } = await runner.compile(t.code`
58
+ interface ${t.interface("PetStore")} {
59
+ deletePet(petId: string): void;
60
+ }
61
+ `);
62
+ expect(_$createComponent(Wrapper, {
63
+ get children() {
64
+ return _$createComponent(BusinessLogicInterface, {
65
+ type: PetStore
66
+ });
67
+ }
68
+ })).toRenderTo(`
69
+ public interface IPetStore
70
+ {
71
+ Task DeletePetAsync(string petId);
72
+ }
73
+ `);
74
+ });
75
+ });
76
+ //# sourceMappingURL=interfaces.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Tester","createCSharpNamePolicy","SourceFile","t","Output","beforeEach","describe","expect","it","BusinessLogicInterface","runner","createInstance","Wrapper","props","policy","_$createComponent","program","namePolicy","children","path","PetStore","compile","code","interface","type","toRenderTo"],"sources":["../../../../src/components/interfaces/interfaces.test.tsx"],"sourcesContent":[null],"mappings":";AAAA,SAASA,MAAM,QAAQ,iBAAiB;AAExC,SAASC,sBAAsB,EAAEC,UAAU,QAAQ,kBAAkB;AACrE,SAASC,CAAC,QAA6B,4BAA4B;AACnE,SAASC,MAAM,QAAQ,6BAA6B;AACpD,SAASC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AACzD,SAASC,sBAAsB;AAE/B,IAAIC,MAAsB;AAE1BL,UAAU,CAAC,YAAY;EACrBK,MAAM,GAAG,MAAMV,MAAM,CAACW,cAAc,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,SAASC,OAAOA,CAACC,KAA6B,EAAE;EAC9C,MAAMC,MAAM,GAAGb,sBAAsB,CAAC,CAAC;EACvC,OAAAc,iBAAA,CACGX,MAAM;IAAA,IAACY,OAAOA,CAAA;MAAA,OAAEN,MAAM,CAACM,OAAO;IAAA;IAAEC,UAAU,EAAEH,MAAM;IAAA,IAAAI,SAAA;MAAA,OAAAH,iBAAA,CAChDb,UAAU;QAACiB,IAAI;QAAA,IAAAD,SAAA;UAAA,OAAYL,KAAK,CAACK,QAAQ;QAAA;MAAA;IAAA;EAAA;AAGhD;AAEAZ,QAAQ,CAAC,wBAAwB,EAAE,MAAM;EACvCE,EAAE,CAAC,yCAAyC,EAAE,YAAY;IACxD,MAAM;MAAEY;IAAS,CAAC,GAAG,MAAMV,MAAM,CAACW,OAAO,CAAClB,CAAC,CAACmB,IAAI;AACpD,kBAAkBnB,CAAC,CAACoB,SAAS,CAAC,UAAU,CAAC;AACzC;AACA;AACA;AACA,KAAK,CAAC;IAEFhB,MAAM,CAAAQ,iBAAA,CACHH,OAAO;MAAA,IAAAM,SAAA;QAAA,OAAAH,iBAAA,CACLN,sBAAsB;UAACe,IAAI,EAAEJ;QAAQ;MAAA;IAAA,EAE1C,CAAC,CAACK,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;EACJ,CAAC,CAAC;EAEFjB,EAAE,CAAC,4CAA4C,EAAE,YAAY;IAC3D,MAAM;MAAEY;IAAS,CAAC,GAAG,MAAMV,MAAM,CAACW,OAAO,CAAClB,CAAC,CAACmB,IAAI;AACpD,kBAAkBnB,CAAC,CAACoB,SAAS,CAAC,UAAU,CAAC;AACzC;AACA;AACA,KAAK,CAAC;IAEFhB,MAAM,CAAAQ,iBAAA,CACHH,OAAO;MAAA,IAAAM,SAAA;QAAA,OAAAH,iBAAA,CACLN,sBAAsB;UAACe,IAAI,EAAEJ;QAAQ;MAAA;IAAA,EAE1C,CAAC,CAACK,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA,KAAK,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import type { Interface, Model } from "@typespec/compiler";
2
+ /** Resets anonymous model state — call before each compilation. */
3
+ export declare function resetAnonymousModels(): void;
4
+ /** Gets the generated name for an anonymous model, or undefined if it's not anonymous. */
5
+ export declare function getAnonymousModelName(model: Model): string | undefined;
6
+ export declare function assignAnonymousName(model: Model, contextualName?: string): string;
7
+ /** Pre-assigns contextual names to anonymous response models before the diagnostic pre-pass. */
8
+ export declare function preAssignAnonymousResponseNames(interfaces: Interface[]): void;
9
+ //# sourceMappingURL=anonymous-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anonymous-models.d.ts","sourceRoot":"","sources":["../../../../src/components/models/anonymous-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3D,mEAAmE;AACnE,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAOjF;AAED,gGAAgG;AAChG,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAW7E"}
@@ -0,0 +1,37 @@
1
+ /** Map from anonymous models to their generated names (Model0, Model1, ...) */
2
+ const anonymousModelNames = new Map();
3
+ let anonymousModelCounter = 0;
4
+
5
+ /** Resets anonymous model state — call before each compilation. */
6
+ export function resetAnonymousModels() {
7
+ anonymousModelNames.clear();
8
+ anonymousModelCounter = 0;
9
+ }
10
+
11
+ /** Gets the generated name for an anonymous model, or undefined if it's not anonymous. */
12
+ export function getAnonymousModelName(model) {
13
+ return anonymousModelNames.get(model);
14
+ }
15
+ export function assignAnonymousName(model, contextualName) {
16
+ let name = anonymousModelNames.get(model);
17
+ if (!name) {
18
+ name = contextualName ?? `Model${anonymousModelCounter++}`;
19
+ anonymousModelNames.set(model, name);
20
+ }
21
+ return name;
22
+ }
23
+
24
+ /** Pre-assigns contextual names to anonymous response models before the diagnostic pre-pass. */
25
+ export function preAssignAnonymousResponseNames(interfaces) {
26
+ for (const iface of interfaces) {
27
+ for (const [, op] of iface.operations) {
28
+ const returnType = op.returnType;
29
+ if (returnType.kind === "Model" && !returnType.name) {
30
+ const opName = op.name.charAt(0).toUpperCase() + op.name.slice(1);
31
+ const ctxName = iface.name.charAt(0).toUpperCase() + iface.name.slice(1);
32
+ assignAnonymousName(returnType, `${ctxName}${opName}Response`);
33
+ }
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=anonymous-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["anonymousModelNames","Map","anonymousModelCounter","resetAnonymousModels","clear","getAnonymousModelName","model","get","assignAnonymousName","contextualName","name","set","preAssignAnonymousResponseNames","interfaces","iface","op","operations","returnType","kind","opName","charAt","toUpperCase","slice","ctxName"],"sources":["../../../../src/components/models/anonymous-models.ts"],"sourcesContent":[null],"mappings":"AAEA;AACA,MAAMA,mBAAmB,GAAG,IAAIC,GAAG,CAAgB,CAAC;AACpD,IAAIC,qBAAqB,GAAG,CAAC;;AAE7B;AACA,OAAO,SAASC,oBAAoBA,CAAA,EAAS;EAC3CH,mBAAmB,CAACI,KAAK,CAAC,CAAC;EAC3BF,qBAAqB,GAAG,CAAC;AAC3B;;AAEA;AACA,OAAO,SAASG,qBAAqBA,CAACC,KAAY,EAAsB;EACtE,OAAON,mBAAmB,CAACO,GAAG,CAACD,KAAK,CAAC;AACvC;AAEA,OAAO,SAASE,mBAAmBA,CAACF,KAAY,EAAEG,cAAuB,EAAU;EACjF,IAAIC,IAAI,GAAGV,mBAAmB,CAACO,GAAG,CAACD,KAAK,CAAC;EACzC,IAAI,CAACI,IAAI,EAAE;IACTA,IAAI,GAAGD,cAAc,IAAI,QAAQP,qBAAqB,EAAE,EAAE;IAC1DF,mBAAmB,CAACW,GAAG,CAACL,KAAK,EAAEI,IAAI,CAAC;EACtC;EACA,OAAOA,IAAI;AACb;;AAEA;AACA,OAAO,SAASE,+BAA+BA,CAACC,UAAuB,EAAQ;EAC7E,KAAK,MAAMC,KAAK,IAAID,UAAU,EAAE;IAC9B,KAAK,MAAM,GAAGE,EAAE,CAAC,IAAID,KAAK,CAACE,UAAU,EAAE;MACrC,MAAMC,UAAU,GAAGF,EAAE,CAACE,UAAU;MAChC,IAAIA,UAAU,CAACC,IAAI,KAAK,OAAO,IAAI,CAACD,UAAU,CAACP,IAAI,EAAE;QACnD,MAAMS,MAAM,GAAGJ,EAAE,CAACL,IAAI,CAACU,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGN,EAAE,CAACL,IAAI,CAACY,KAAK,CAAC,CAAC,CAAC;QACjE,MAAMC,OAAO,GAAGT,KAAK,CAACJ,IAAI,CAACU,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGP,KAAK,CAACJ,IAAI,CAACY,KAAK,CAAC,CAAC,CAAC;QACxEd,mBAAmB,CAACS,UAAU,EAAE,GAAGM,OAAO,GAAGJ,MAAM,UAAU,CAAC;MAChE;IACF;EACF;AACF","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { type Children } from "@alloy-js/core";
2
+ import { type Model, type Program } from "@typespec/compiler";
3
+ /** Generates the constructor for an error model. */
4
+ export declare function getErrorConstructor(program: Program, model: Model, className: string): Children;
5
+ //# sourceMappingURL=error-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-models.d.ts","sourceRoot":"","sources":["../../../../src/components/models/error-models.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAgB,KAAK,KAAK,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAW5E,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAyE/F"}