@typespec/http-server-csharp 0.58.0-alpha.28 → 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 +36 -28
  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,84 @@
1
+ import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
+ import * as cs from "@alloy-js/csharp";
3
+ import { isErrorModel } from "@typespec/compiler";
4
+ import { getHeaderFieldName, isHeader, isStatusCode } from "@typespec/http";
5
+ import { getAllProperties, getCSharpTypeString, getDefaultValueString, getErrorStatusCode, getLiteralValue, isDuplicateExceptionName } from "./model-helpers.js";
6
+
7
+ /** Generates the constructor for an error model. */
8
+ export function getErrorConstructor(program, model, className) {
9
+ const statusCode = getErrorStatusCode(program, model);
10
+ const isChild = model.baseModel && isErrorModel(program, model.baseModel);
11
+ const namePolicy = cs.createCSharpNamePolicy();
12
+
13
+ // For child error models, only use own properties (not inherited)
14
+ // For root error models, use all properties including inherited
15
+ const props = isChild ? Array.from(model.properties.values()) : getAllProperties(program, model);
16
+
17
+ // Separate properties into required and optional/default
18
+ const sortedProps = props.filter(p => !isStatusCode(program, p)).map(prop => {
19
+ const defaultValue = prop.defaultValue ? getDefaultValueString(prop.defaultValue) : undefined;
20
+ const literalValue = getLiteralValue(prop.type);
21
+ return {
22
+ prop,
23
+ defaultValue: defaultValue ?? literalValue
24
+ };
25
+ }).sort((a, b) => {
26
+ const aHasDefault = a.prop.optional || a.defaultValue !== undefined;
27
+ const bHasDefault = b.prop.optional || b.defaultValue !== undefined;
28
+ if (!aHasDefault && bHasDefault) return -1;
29
+ if (aHasDefault && !bHasDefault) return 1;
30
+ return 0;
31
+ });
32
+ const parameters = [];
33
+ const bodyParts = [];
34
+ const headerParts = [];
35
+ const valueParts = [];
36
+ if (statusCode?.requiresConstructorArgument) {
37
+ parameters.push({
38
+ name: String(statusCode.value),
39
+ type: "int"
40
+ });
41
+ }
42
+ for (const {
43
+ prop,
44
+ defaultValue
45
+ } of sortedProps) {
46
+ let propName = namePolicy.getName(prop.name, "class-property");
47
+ if (propName === className || isDuplicateExceptionName(propName)) {
48
+ propName = propName === "Value" ? "ValueName" : `${propName}Prop`;
49
+ }
50
+ const csharpType = getCSharpTypeString(program, prop.type);
51
+ const defaultStr = defaultValue ? defaultValue : prop.optional ? "default" : undefined;
52
+ parameters.push({
53
+ name: prop.name,
54
+ type: csharpType,
55
+ default: defaultStr
56
+ });
57
+ bodyParts.push(`${propName} = ${prop.name};`);
58
+ if (isHeader(program, prop)) {
59
+ const headerName = getHeaderFieldName(program, prop);
60
+ headerParts.push(`{"${headerName}", ${prop.name}}`);
61
+ } else {
62
+ valueParts.push(`${prop.name} = ${prop.name}`);
63
+ }
64
+ }
65
+ const statusCodeStr = statusCode?.value ?? 400;
66
+
67
+ // Build base call arguments
68
+ const baseArgs = [String(statusCodeStr)];
69
+ if (headerParts.length > 0) {
70
+ baseArgs.push(`headers: new() { ${headerParts.join(", ")} }`);
71
+ }
72
+ if (valueParts.length > 0) {
73
+ baseArgs.push(`value: new { ${valueParts.join(", ")} }`);
74
+ }
75
+ const baseConstructorArgs = isChild ? [String(statusCodeStr)] : baseArgs;
76
+ const body = bodyParts.join("\n");
77
+ return _$createComponent(cs.Constructor, {
78
+ "public": true,
79
+ parameters: parameters,
80
+ baseConstructor: baseConstructorArgs,
81
+ children: body
82
+ });
83
+ }
84
+ //# sourceMappingURL=error-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cs","isErrorModel","getHeaderFieldName","isHeader","isStatusCode","getAllProperties","getCSharpTypeString","getDefaultValueString","getErrorStatusCode","getLiteralValue","isDuplicateExceptionName","getErrorConstructor","program","model","className","statusCode","isChild","baseModel","namePolicy","createCSharpNamePolicy","props","Array","from","properties","values","sortedProps","filter","p","map","prop","defaultValue","undefined","literalValue","type","sort","a","b","aHasDefault","optional","bHasDefault","parameters","bodyParts","headerParts","valueParts","requiresConstructorArgument","push","name","String","value","propName","getName","csharpType","defaultStr","default","headerName","statusCodeStr","baseArgs","length","join","baseConstructorArgs","body","_$createComponent","Constructor","baseConstructor","children"],"sources":["../../../../src/components/models/error-models.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,40 @@
1
+ import * as cs from "@alloy-js/csharp";
2
+ import { type Enum, type Model, type ModelProperty, type Program, type Type, type Value } from "@typespec/compiler";
3
+ import type { useTsp } from "@typespec/emitter-framework";
4
+ /** Gets the string representation of a literal or default value. */
5
+ export declare function getLiteralValue(type: Type, collectionType?: "array" | "enumerable"): string | undefined;
6
+ /** Gets the string representation of a Value (for defaultValue). */
7
+ export declare function getDefaultValueString(value: Value): string | undefined;
8
+ /**
9
+ * For a union variant type (e.g., kind: PetType.Dog), returns a C# enum member
10
+ * initializer like "PetType.Dog". Returns undefined if not a union-enum variant.
11
+ */
12
+ export declare function getUnionVariantInitializer(type: Type, namePolicy: ReturnType<typeof cs.createCSharpNamePolicy>): string | undefined;
13
+ /**
14
+ * For a property with a default value that references an enum or union-enum member,
15
+ * returns the C# enum member string like "WolfBreed.Dire".
16
+ */
17
+ export declare function getEnumDefaultInitializer(property: ModelProperty, namePolicy: ReturnType<typeof cs.createCSharpNamePolicy>): string | undefined;
18
+ /** Checks if a property name exists anywhere in the model's base chain. */
19
+ export declare function hasPropertyInChain(model: Model | undefined, propName: string): boolean;
20
+ /** For literal types, get the underlying scalar type for the property declaration. */
21
+ export declare function getScalarForLiteral(type: Type): Type;
22
+ /** Returns true if the enum has any non-integer member values (float enums can't be C# enums). */
23
+ export declare function hasNonIntegerValues(en: Enum): boolean;
24
+ /** Returns true if the TypeSpec type maps to a C# value type (struct). */
25
+ export declare function isValueType($: ReturnType<typeof useTsp>["$"], type: Type): boolean;
26
+ /** Returns true if any property of the model uses Record<T> (mapped to JsonObject). */
27
+ export declare function modelNeedsJsonNodes($: ReturnType<typeof useTsp>["$"], model: Model): boolean;
28
+ export declare function isDuplicateExceptionName(name: string): boolean;
29
+ /** Gets all properties including inherited ones. */
30
+ export declare function getAllProperties(program: Program, model: Model): ModelProperty[];
31
+ /** Gets the status code for an error model. */
32
+ export declare function getErrorStatusCode(program: Program, model: Model): {
33
+ value: string | number;
34
+ requiresConstructorArgument?: boolean;
35
+ } | undefined;
36
+ /** Gets a simple C# type name string for a TypeSpec type. */
37
+ export declare function getCSharpTypeString(program: Program, type: Type): string;
38
+ /** Gets the name to use when emitting a model — handles friendly names, template instantiations, and anonymous models. */
39
+ export declare function getModelEmitName(program: Program, model: Model): string;
40
+ //# sourceMappingURL=model-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-helpers.d.ts","sourceRoot":"","sources":["../../../../src/components/models/model-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,IAAI,EAET,KAAK,KAAK,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAK1D,oEAAoE;AACpE,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,cAAc,CAAC,EAAE,OAAO,GAAG,YAAY,GACtC,MAAM,GAAG,SAAS,CA8BpB;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAKtE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,sBAAsB,CAAC,GACvD,MAAM,GAAG,SAAS,CAQpB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,sBAAsB,CAAC,GACvD,MAAM,GAAG,SAAS,CA8BpB;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOtF;AAED,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAIpD;AAED,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAOrD;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAqClF;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAS5F;AAgBD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,aAAa,EAAE,CAUhF;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,2BAA2B,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAe/E;AAED,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAkCxE;AAED,0HAA0H;AAC1H,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CA0BvE"}
@@ -0,0 +1,239 @@
1
+ import { getFriendlyName, getMinValue } from "@typespec/compiler";
2
+ import { isStatusCode } from "@typespec/http";
3
+ import { getUnionEnumMembers, isUnionEnum } from "../enums/enums.js";
4
+ import { assignAnonymousName } from "./anonymous-models.js";
5
+
6
+ /** Gets the string representation of a literal or default value. */
7
+ export function getLiteralValue(type, collectionType) {
8
+ if (type.kind === "String") return `"${type.value}"`;
9
+ if (type.kind === "Boolean") return type.value ? "true" : "false";
10
+ if (type.kind === "Number") return String(type.value);
11
+ if (type.kind === "StringTemplate" && type.stringValue !== undefined) {
12
+ return `"${type.stringValue}"`;
13
+ }
14
+ if (type.kind === "Tuple") {
15
+ const elements = type.values.map(v => getLiteralValue(v));
16
+ if (elements.every(e => e !== undefined)) {
17
+ if (collectionType === "enumerable") {
18
+ // Determine the C# element type from the first value
19
+ const firstType = type.values[0];
20
+ const csElementType = firstType.kind === "Number" ? Number.isInteger(firstType.value) ? "int" : "double" : firstType.kind === "String" ? "string" : firstType.kind === "Boolean" ? "bool" : "object";
21
+ return `new List<${csElementType}> {${elements.join(", ")}}`;
22
+ }
23
+ // Array mode: use C# 12 collection expression
24
+ return `[${elements.join(", ")}]`;
25
+ }
26
+ }
27
+ return undefined;
28
+ }
29
+
30
+ /** Gets the string representation of a Value (for defaultValue). */
31
+ export function getDefaultValueString(value) {
32
+ if (value.valueKind === "StringValue") return `"${value.value}"`;
33
+ if (value.valueKind === "BooleanValue") return value.value ? "true" : "false";
34
+ if (value.valueKind === "NumericValue") return String(value.value);
35
+ return undefined;
36
+ }
37
+
38
+ /**
39
+ * For a union variant type (e.g., kind: PetType.Dog), returns a C# enum member
40
+ * initializer like "PetType.Dog". Returns undefined if not a union-enum variant.
41
+ */
42
+ export function getUnionVariantInitializer(type, namePolicy) {
43
+ if (type.kind !== "UnionVariant") return undefined;
44
+ const union = type.union;
45
+ if (!union || !isUnionEnum(union)) return undefined;
46
+ const enumName = namePolicy.getName(union.name, "enum");
47
+ const memberName = namePolicy.getName(String(type.name), "enum-member");
48
+ return `${enumName}.${memberName}`;
49
+ }
50
+
51
+ /**
52
+ * For a property with a default value that references an enum or union-enum member,
53
+ * returns the C# enum member string like "WolfBreed.Dire".
54
+ */
55
+ export function getEnumDefaultInitializer(property, namePolicy) {
56
+ if (!property.defaultValue) return undefined;
57
+ const dv = property.defaultValue;
58
+
59
+ // Handle TypeSpec enum default values
60
+ if (dv.valueKind === "EnumValue") {
61
+ const enumType = dv.value.enum;
62
+ if (enumType) {
63
+ const enumName = namePolicy.getName(enumType.name, "enum");
64
+ const memberName = namePolicy.getName(dv.value.name, "enum-member");
65
+ return `${enumName}.${memberName}`;
66
+ }
67
+ }
68
+
69
+ // Handle union-enum default values (StringValue matching a union variant)
70
+ if (dv.valueKind === "StringValue" && property.type.kind === "Union" && isUnionEnum(property.type)) {
71
+ const members = getUnionEnumMembers(property.type);
72
+ const match = members.find(m => m.value === dv.value);
73
+ if (match) {
74
+ const enumName = namePolicy.getName(property.type.name, "enum");
75
+ const memberName = namePolicy.getName(match.name, "enum-member");
76
+ return `${enumName}.${memberName}`;
77
+ }
78
+ }
79
+ return undefined;
80
+ }
81
+
82
+ /** Checks if a property name exists anywhere in the model's base chain. */
83
+ export function hasPropertyInChain(model, propName) {
84
+ let current = model;
85
+ while (current) {
86
+ if (current.properties.has(propName)) return true;
87
+ current = current.baseModel;
88
+ }
89
+ return false;
90
+ }
91
+
92
+ /** For literal types, get the underlying scalar type for the property declaration. */
93
+ export function getScalarForLiteral(type) {
94
+ // Literal types don't have a .scalar reference in the compiler types
95
+ // We just return the original type and let TypeExpression handle it
96
+ return type;
97
+ }
98
+
99
+ /** Returns true if the enum has any non-integer member values (float enums can't be C# enums). */
100
+ export function hasNonIntegerValues(en) {
101
+ for (const member of en.members.values()) {
102
+ if (typeof member.value === "number" && !Number.isInteger(member.value)) {
103
+ return true;
104
+ }
105
+ }
106
+ return false;
107
+ }
108
+
109
+ /** Returns true if the TypeSpec type maps to a C# value type (struct). */
110
+ export function isValueType($, type) {
111
+ // Handle literal types
112
+ if (type.kind === "Boolean" || type.kind === "Number") return true;
113
+ if (type.kind === "String") return false;
114
+ if ($.scalar.is(type)) {
115
+ const baseName = $.scalar.getStdBase(type)?.name ?? type.name;
116
+ const valueTypes = new Set(["int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "safeint", "float32", "float64", "decimal", "decimal128", "boolean", "numeric", "integer", "float", "plainDate", "plainTime", "utcDateTime", "offsetDateTime", "duration", "unixTimestamp32"]);
117
+ return valueTypes.has(baseName);
118
+ }
119
+ if ($.enum.is(type)) return true;
120
+ if (type.kind === "Union" && isUnionEnum(type)) return true;
121
+ return false;
122
+ }
123
+
124
+ /** Returns true if any property of the model uses Record<T> (mapped to JsonObject). */
125
+ export function modelNeedsJsonNodes($, model) {
126
+ for (const prop of model.properties.values()) {
127
+ if (prop.type.kind === "Model" && $.record.is(prop.type)) {
128
+ // Only need JsonNodes for Record<unknown> (maps to JsonObject)
129
+ const valueType = prop.type.indexer?.value;
130
+ if (valueType?.kind === "Intrinsic" && valueType.name === "unknown") return true;
131
+ }
132
+ }
133
+ return false;
134
+ }
135
+
136
+ // Exception property names that conflict with C# Exception class
137
+ const exceptionPropertyNames = ["value", "headers", "stacktrace", "source", "message", "innerexception", "hresult", "data", "targetsite", "helplink"];
138
+ export function isDuplicateExceptionName(name) {
139
+ return exceptionPropertyNames.includes(name.toLowerCase());
140
+ }
141
+
142
+ /** Gets all properties including inherited ones. */
143
+ export function getAllProperties(program, model) {
144
+ const props = [];
145
+ let current = model;
146
+ while (current) {
147
+ for (const prop of current.properties.values()) {
148
+ props.push(prop);
149
+ }
150
+ current = current.baseModel;
151
+ }
152
+ return props;
153
+ }
154
+
155
+ /** Gets the status code for an error model. */
156
+ export function getErrorStatusCode(program, model) {
157
+ const allProps = getAllProperties(program, model);
158
+ const statusCodeProp = allProps.find(p => isStatusCode(program, p));
159
+ if (!statusCodeProp) return undefined;
160
+ const type = statusCodeProp.type;
161
+ if (type.kind === "Union") {
162
+ return {
163
+ value: statusCodeProp.name,
164
+ requiresConstructorArgument: true
165
+ };
166
+ }
167
+ if (type.kind === "Number") {
168
+ return {
169
+ value: type.value
170
+ };
171
+ }
172
+ // Fall back to @minValue decorator
173
+ const minVal = getMinValue(program, statusCodeProp);
174
+ return {
175
+ value: minVal ?? "default"
176
+ };
177
+ }
178
+
179
+ /** Gets a simple C# type name string for a TypeSpec type. */
180
+ export function getCSharpTypeString(program, type) {
181
+ if (type.kind === "Scalar") {
182
+ const scalarMap = {
183
+ string: "string",
184
+ int8: "sbyte",
185
+ int16: "short",
186
+ int32: "int",
187
+ int64: "long",
188
+ uint8: "byte",
189
+ uint16: "ushort",
190
+ uint32: "uint",
191
+ uint64: "ulong",
192
+ float32: "float",
193
+ float64: "double",
194
+ boolean: "bool",
195
+ plainDate: "DateOnly",
196
+ plainTime: "TimeOnly",
197
+ utcDateTime: "DateTimeOffset",
198
+ offsetDateTime: "DateTimeOffset",
199
+ duration: "TimeSpan",
200
+ bytes: "byte[]",
201
+ decimal: "decimal",
202
+ decimal128: "decimal",
203
+ url: "Uri",
204
+ safeint: "long"
205
+ };
206
+ return scalarMap[type.name] ?? type.name;
207
+ }
208
+ if (type.kind === "String") return "string";
209
+ if (type.kind === "Boolean") return "bool";
210
+ if (type.kind === "Number") return Number.isInteger(type.value) ? "int" : "double";
211
+ if (type.kind === "Enum") return type.name;
212
+ if (type.kind === "Model") return type.name;
213
+ return "object";
214
+ }
215
+
216
+ /** Gets the name to use when emitting a model — handles friendly names, template instantiations, and anonymous models. */
217
+ export function getModelEmitName(program, model) {
218
+ // Check for @friendlyName first
219
+ const friendlyName = getFriendlyName(program, model);
220
+ if (friendlyName) return friendlyName;
221
+
222
+ // Anonymous models get sequential names
223
+ if (!model.name || model.name === "") {
224
+ return assignAnonymousName(model);
225
+ }
226
+
227
+ // For template instantiations, concatenate template args with the base name
228
+ if (model.templateMapper && model.templateMapper.args.length > 0) {
229
+ const argNames = model.templateMapper.args.filter(arg => arg.entityKind === "Type").map(arg => {
230
+ if (arg.kind === "Model" || arg.kind === "Scalar") return arg.name;
231
+ return undefined;
232
+ }).filter(Boolean).map(name => name.charAt(0).toUpperCase() + name.slice(1));
233
+ if (argNames.length > 0) {
234
+ return `${model.name}${argNames.join("")}`;
235
+ }
236
+ }
237
+ return model.name;
238
+ }
239
+ //# sourceMappingURL=model-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getFriendlyName","getMinValue","isStatusCode","getUnionEnumMembers","isUnionEnum","assignAnonymousName","getLiteralValue","type","collectionType","kind","value","String","stringValue","undefined","elements","values","map","v","every","e","firstType","csElementType","Number","isInteger","join","getDefaultValueString","valueKind","getUnionVariantInitializer","namePolicy","union","enumName","getName","name","memberName","getEnumDefaultInitializer","property","defaultValue","dv","enumType","enum","members","match","find","m","hasPropertyInChain","model","propName","current","properties","has","baseModel","getScalarForLiteral","hasNonIntegerValues","en","member","isValueType","$","scalar","is","baseName","getStdBase","valueTypes","Set","modelNeedsJsonNodes","prop","record","valueType","indexer","exceptionPropertyNames","isDuplicateExceptionName","includes","toLowerCase","getAllProperties","program","props","push","getErrorStatusCode","allProps","statusCodeProp","p","requiresConstructorArgument","minVal","getCSharpTypeString","scalarMap","string","int8","int16","int32","int64","uint8","uint16","uint32","uint64","float32","float64","boolean","plainDate","plainTime","utcDateTime","offsetDateTime","duration","bytes","decimal","decimal128","url","safeint","getModelEmitName","friendlyName","templateMapper","args","length","argNames","filter","arg","entityKind","Boolean","charAt","toUpperCase","slice"],"sources":["../../../../src/components/models/model-helpers.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { type Children } from "@alloy-js/core";
2
+ import { type Model, type Namespace as TspNamespace } from "@typespec/compiler";
3
+ export { getAnonymousModelName } from "./anonymous-models.js";
4
+ export interface ModelsProps {
5
+ /** Pre-resolved models to emit. */
6
+ models: Model[];
7
+ /** The service namespace for sub-namespace wrapping. */
8
+ serviceNamespace: TspNamespace | undefined;
9
+ }
10
+ /**
11
+ * Iterates pre-resolved models and emits C# class declarations.
12
+ * Each model is emitted in its own source file under the models directory.
13
+ */
14
+ export declare function Models(props: ModelsProps): Children;
15
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../src/components/models/models.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,EAGL,KAAK,KAAK,EAEV,KAAK,SAAS,IAAI,YAAY,EAC/B,MAAM,oBAAoB,CAAC;AA2B5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAU9D,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,wDAAwD;IACxD,gBAAgB,EAAE,YAAY,GAAG,SAAS,CAAC;CAC5C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,CA2BnD"}
@@ -0,0 +1,234 @@
1
+ import { createComponent as _$createComponent, memo as _$memo, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
+ import { code, For } from "@alloy-js/core";
3
+ import * as cs from "@alloy-js/csharp";
4
+ import { Attribute } from "@alloy-js/csharp";
5
+ import { isErrorModel, isVoidType } from "@typespec/compiler";
6
+ import { useTsp } from "@typespec/emitter-framework";
7
+ import { isStatusCode } from "@typespec/http";
8
+ import { getUniqueItems } from "@typespec/json-schema";
9
+ import { useEmitterOptions } from "../../context/emitter-options-context.js";
10
+ import { getPropertyAttributes } from "../../utils/attributes.js";
11
+ import { JsonSerialization } from "../../utils/csharp-libs.js";
12
+ import { getDocComments } from "../../utils/doc-comments.js";
13
+ import { getSubNamespaceParts } from "../../utils/namespace-utils.js";
14
+ import { CSharpFile } from "../csharp-file.js";
15
+ import { efRefkey, TypeExpression } from "../type-expression/type-expression.js";
16
+ import { getErrorConstructor } from "./error-models.js";
17
+ import { getDefaultValueString, getEnumDefaultInitializer, getLiteralValue, getModelEmitName, getScalarForLiteral, getUnionVariantInitializer, hasNonIntegerValues, hasPropertyInChain, isDuplicateExceptionName, isValueType, modelNeedsJsonNodes } from "./model-helpers.js";
18
+
19
+ // Re-export public API used by other modules
20
+ export { getAnonymousModelName } from "./anonymous-models.js";
21
+ const modelUsings = ["System", "System.Collections.Generic", "System.Text.Json", "TypeSpec.Helpers.JsonConverters", "TypeSpec.Helpers"];
22
+ /**
23
+ * Iterates pre-resolved models and emits C# class declarations.
24
+ * Each model is emitted in its own source file under the models directory.
25
+ */
26
+ export function Models(props) {
27
+ const {
28
+ $
29
+ } = useTsp();
30
+ return _$createComponent(For, {
31
+ get each() {
32
+ return props.models;
33
+ },
34
+ children: model => {
35
+ const needsJsonNodes = modelNeedsJsonNodes($, model);
36
+ const usings = needsJsonNodes ? [...modelUsings, "System.Text.Json.Nodes"] : modelUsings;
37
+ const modelName = getModelEmitName($.program, model);
38
+ const subNsParts = getSubNamespaceParts(model.namespace, props.serviceNamespace);
39
+ const modelContent = _$createComponent(ServerClassDeclaration, {
40
+ type: model,
41
+ emitName: modelName
42
+ });
43
+
44
+ // Wrap in sub-namespace if the model is in a sub-namespace of the service
45
+ const wrappedContent = subNsParts.reduceRight((content, nsPart) => _$createComponent(cs.Namespace, {
46
+ name: nsPart,
47
+ children: content
48
+ }), modelContent);
49
+ return _$createComponent(CSharpFile, {
50
+ path: `${modelName}.cs`,
51
+ using: usings,
52
+ children: wrappedContent
53
+ });
54
+ }
55
+ });
56
+ }
57
+ /**
58
+ * Server-specific class declaration that matches the old emitter output:
59
+ * - No `required` keyword
60
+ * - No `[JsonPropertyName]` attributes
61
+ * - No nullable `?` suffix on reference types (string, byte[], etc.)
62
+ */
63
+ function ServerClassDeclaration(props) {
64
+ const {
65
+ $
66
+ } = useTsp();
67
+ const namePolicy = cs.useCSharpNamePolicy();
68
+ const className = namePolicy.getName(props.emitName ?? props.type.name, "class");
69
+ const refkeys = efRefkey(props.type);
70
+ const isError = isErrorModel($.program, props.type);
71
+ const properties = Array.from(props.type.properties.entries()).filter(([_, p]) => !isVoidType(p.type));
72
+
73
+ // Determine base type
74
+ let baseType;
75
+ if (props.type.baseModel) {
76
+ baseType = _$createComponent(TypeExpression, {
77
+ get type() {
78
+ return props.type.baseModel;
79
+ }
80
+ });
81
+ } else if (isError) {
82
+ baseType = "HttpServiceException";
83
+ }
84
+
85
+ // Generate constructor for error models
86
+ const errorConstructor = isError ? getErrorConstructor($.program, props.type, className) : undefined;
87
+
88
+ // For error models with base model, check if base is also an error (child constructor)
89
+ const hasChildConstructor = isError && props.type.derivedModels && props.type.derivedModels.length > 0;
90
+ return _$createComponent(cs.ClassDeclaration, {
91
+ name: className,
92
+ refkey: refkeys,
93
+ "public": true,
94
+ partial: true,
95
+ baseType: baseType,
96
+ get doc() {
97
+ return getDocComments($, props.type);
98
+ },
99
+ get children() {
100
+ return [errorConstructor, _$memo(() => errorConstructor && _$createIntrinsic("hbr", {})), _$memo(() => hasChildConstructor && _$createComponent(cs.Constructor, {
101
+ "public": true,
102
+ parameters: [{
103
+ name: "statusCode",
104
+ type: "int"
105
+ }, {
106
+ name: "value",
107
+ type: "object?",
108
+ default: "null"
109
+ }, {
110
+ name: "headers",
111
+ type: "Dictionary<string, string>?",
112
+ default: "default"
113
+ }],
114
+ baseConstructor: ["statusCode", "value", "headers"]
115
+ })), _$memo(() => hasChildConstructor && _$createIntrinsic("hbr", {})), _$createComponent(For, {
116
+ each: properties,
117
+ doubleHardline: true,
118
+ children: ([_, property]) => {
119
+ // Skip statusCode properties for error models
120
+ if (isError && isStatusCode($.program, property)) return undefined;
121
+ return _$createComponent(ServerProperty, {
122
+ type: property,
123
+ errorClassName: isError ? className : undefined,
124
+ get baseModel() {
125
+ return props.type.baseModel;
126
+ }
127
+ });
128
+ }
129
+ })];
130
+ }
131
+ });
132
+ }
133
+ /**
134
+ * Server-specific property that matches old emitter output.
135
+ * No `required`, no `[JsonPropertyName]`, no nullable `?` for reference types.
136
+ */
137
+ function ServerProperty(props) {
138
+ const {
139
+ $
140
+ } = useTsp();
141
+ const namePolicy = cs.useCSharpNamePolicy();
142
+ const propType = props.type.type;
143
+ const attrs = getPropertyAttributes($.program, props.type);
144
+
145
+ // Determine property name, handling error model conflicts
146
+ let propName = props.type.name;
147
+ if (props.errorClassName) {
148
+ const csharpPropName = namePolicy.getName(propName, "class-property");
149
+ if (csharpPropName === props.errorClassName || isDuplicateExceptionName(csharpPropName)) {
150
+ propName = csharpPropName === "Value" ? "ValueName" : `${csharpPropName}Prop`;
151
+ }
152
+ }
153
+
154
+ // Add JsonPropertyName if the C# name differs from the original TypeSpec name
155
+ const csharpName = namePolicy.getName(propName, "class-property");
156
+ if (csharpName !== props.type.name) {
157
+ attrs.unshift(_$createComponent(Attribute, {
158
+ get name() {
159
+ return JsonSerialization.JsonPropertyNameAttribute;
160
+ },
161
+ get args() {
162
+ return [`"${props.type.name}"`];
163
+ }
164
+ }));
165
+ }
166
+
167
+ // Check if this property overrides a base model property (discriminator pattern)
168
+ const isOverride = props.baseModel ? hasPropertyInChain(props.baseModel, props.type.name) : false;
169
+
170
+ // Check for union variant type (e.g., kind: PetType.Dog) — used as enum member initializer
171
+ const unionVariantInit = getUnionVariantInitializer(propType, namePolicy);
172
+
173
+ // Check for enum default value (e.g., variety: WolfBreed = WolfBreed.dire)
174
+ const enumDefaultInit = getEnumDefaultInitializer(props.type, namePolicy);
175
+
176
+ // For error models, properties get values from constructor, not as literals
177
+ const isErrorProp = !!props.errorClassName;
178
+
179
+ // Check for literal values (the type itself is a literal)
180
+ const {
181
+ collectionType
182
+ } = useEmitterOptions();
183
+ const literalInfo = isErrorProp ? undefined : unionVariantInit ?? getLiteralValue(propType, collectionType);
184
+ // Check for default values
185
+ const defaultValue = isErrorProp ? undefined : enumDefaultInit ?? (props.type.defaultValue ? getDefaultValueString(props.type.defaultValue) : undefined);
186
+ const initializer = literalInfo ?? defaultValue;
187
+ const isLiteralOnly = literalInfo !== undefined && defaultValue === undefined;
188
+
189
+ // Check if the property type is a non-integer enum (C# enums can only be integers)
190
+ const isFloatEnum = $.enum.is(propType) && hasNonIntegerValues(propType);
191
+
192
+ // For error model properties with literal types, use the scalar base type
193
+ // But not for union variant types — those should resolve to the enum type
194
+ const resolveToScalar = isLiteralOnly && !unionVariantInit || isErrorProp;
195
+ const resolvedType = resolveToScalar ? getScalarForLiteral(propType) : propType;
196
+ const needsNullable = props.type.optional && (isFloatEnum || isValueType($, resolvedType));
197
+
198
+ // Check if this is a @uniqueItems array → ISet<T>
199
+ const isUniqueItems = getUniqueItems($.program, props.type);
200
+ const isArrayType = propType.kind === "Model" && $.array.is(propType);
201
+ let typeExpr;
202
+ if (isFloatEnum) {
203
+ typeExpr = code`double`;
204
+ } else if (isUniqueItems && isArrayType && propType.indexer?.value) {
205
+ typeExpr = ["ISet<", _$createComponent(TypeExpression, {
206
+ get type() {
207
+ return propType.indexer.value;
208
+ }
209
+ }), ">"];
210
+ } else {
211
+ typeExpr = _$createComponent(TypeExpression, {
212
+ get type() {
213
+ return resolveToScalar ? getScalarForLiteral(propType) : propType;
214
+ }
215
+ });
216
+ }
217
+ return _$createComponent(cs.Property, {
218
+ name: propName,
219
+ type: typeExpr,
220
+ "public": true,
221
+ "new": isOverride,
222
+ nullable: needsNullable,
223
+ get doc() {
224
+ return getDocComments($, props.type);
225
+ },
226
+ get attributes() {
227
+ return attrs.length > 0 ? attrs : undefined;
228
+ },
229
+ get: true,
230
+ set: !isLiteralOnly,
231
+ initializer: initializer
232
+ });
233
+ }
234
+ //# sourceMappingURL=models.js.map