@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,72 @@
1
+ import { renderAsync } from "@alloy-js/core";
2
+ import { emitFile, joinPaths, resolveCompilerOptions, resolvePath } from "@typespec/compiler";
3
+ /**
4
+ * Custom write function that respects the overwrite option.
5
+ * Files in the "generated/" directory are always written.
6
+ * Other files (scaffolding, mocks, project files) are only written if they don't exist or overwrite is true.
7
+ */
8
+ export async function writeOutputWithOverwrite(program, rootComponent, emitterOutputDir, overwrite) {
9
+ const tree = await renderAsync(rootComponent);
10
+ await writeOutputDir(program, tree, emitterOutputDir, overwrite);
11
+ }
12
+ async function writeOutputDir(program, dir, emitterOutputDir, overwrite) {
13
+ for (const sub of dir.contents) {
14
+ if ("contents" in sub) {
15
+ if (Array.isArray(sub.contents)) {
16
+ await writeOutputDir(program, sub, emitterOutputDir, overwrite);
17
+ } else {
18
+ const filePath = joinPaths(emitterOutputDir, sub.path);
19
+ // Files in "generated/" are always written; others respect overwrite option
20
+ const isGenerated = sub.path.includes("generated/") || sub.path.startsWith("generated");
21
+ if (isGenerated || overwrite || !(await fileExists(program, filePath))) {
22
+ await emitFile(program, {
23
+ content: sub.contents,
24
+ path: filePath
25
+ });
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+ async function fileExists(program, path) {
32
+ try {
33
+ await program.host.stat(path);
34
+ return true;
35
+ } catch {
36
+ return false;
37
+ }
38
+ }
39
+ function normalizeSlashes(p) {
40
+ return p.replaceAll("\\", "/");
41
+ }
42
+ export async function resolveOpenApiPath(context) {
43
+ const root = context.program.projectRoot;
44
+ try {
45
+ const [resolvedOptions] = await resolveCompilerOptions(context.program.host, {
46
+ cwd: root,
47
+ entrypoint: resolvePath(root, "main.tsp")
48
+ });
49
+ const oaiOptions = resolvedOptions.options && Object.keys(resolvedOptions.options).includes("@typespec/openapi3") ? resolvedOptions.options["@typespec/openapi3"] : undefined;
50
+ const emitted = resolvedOptions.emit !== undefined && resolvedOptions.emit.includes("@typespec/openapi3");
51
+ const outputDir = oaiOptions?.["emitter-output-dir"];
52
+ const fileName = oaiOptions?.["output-file"];
53
+
54
+ // Use emitterOutputDir resolved as absolute path
55
+ const projectDir = resolvePath(root, context.emitterOutputDir);
56
+ if (outputDir) {
57
+ const openApiFullPath = resolvePath(outputDir, fileName || "openapi.yaml");
58
+ const pathModule = await import("path");
59
+ return normalizeSlashes(pathModule.relative(projectDir, openApiFullPath));
60
+ }
61
+ if (emitted) {
62
+ const baseDir = context.program.compilerOptions.outputDir || resolvePath(root, "tsp-output");
63
+ const openApiFullPath = resolvePath(baseDir, "@typespec", "openapi3", fileName || "openapi.yaml");
64
+ const pathModule = await import("path");
65
+ return normalizeSlashes(pathModule.relative(projectDir, openApiFullPath));
66
+ }
67
+ } catch {
68
+ // Config resolution failed, fall through
69
+ }
70
+ return undefined;
71
+ }
72
+ //# sourceMappingURL=output-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["renderAsync","emitFile","joinPaths","resolveCompilerOptions","resolvePath","writeOutputWithOverwrite","program","rootComponent","emitterOutputDir","overwrite","tree","writeOutputDir","dir","sub","contents","Array","isArray","filePath","path","isGenerated","includes","startsWith","fileExists","content","host","stat","normalizeSlashes","p","replaceAll","resolveOpenApiPath","context","root","projectRoot","resolvedOptions","cwd","entrypoint","oaiOptions","options","Object","keys","undefined","emitted","emit","outputDir","fileName","projectDir","openApiFullPath","pathModule","relative","baseDir","compilerOptions"],"sources":["../../src/output-writer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import { Interface } from "@typespec/compiler";
2
+ import type { useTsp } from "@typespec/emitter-framework";
3
+ /**
4
+ * Collects all interfaces from the service namespace(s).
5
+ * Also creates synthetic interfaces for namespace-level operations
6
+ * (following the old emitter pattern: `${namespaceName}Operations`).
7
+ */
8
+ export declare function getServiceInterfaces(program: ReturnType<typeof useTsp>["$"]["program"]): Interface[];
9
+ /**
10
+ * Gets the full service namespace name from the program (e.g., "Microsoft.Contoso").
11
+ */
12
+ export declare function getServiceNamespaceName(program: ReturnType<typeof useTsp>["$"]["program"]): string | undefined;
13
+ //# sourceMappingURL=service-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-discovery.d.ts","sourceRoot":"","sources":["../../src/service-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAKV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAG1D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GACjD,SAAS,EAAE,CAmDb;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GACjD,MAAM,GAAG,SAAS,CAoCpB"}
@@ -0,0 +1,93 @@
1
+ import { isStdNamespace, isTemplateDeclaration } from "@typespec/compiler";
2
+ import { getCSharpIdentifier, NameCasingType } from "./utils/naming.js";
3
+
4
+ /**
5
+ * Collects all interfaces from the service namespace(s).
6
+ * Also creates synthetic interfaces for namespace-level operations
7
+ * (following the old emitter pattern: `${namespaceName}Operations`).
8
+ */
9
+ export function getServiceInterfaces(program) {
10
+ const interfaces = [];
11
+ const globalNs = program.getGlobalNamespaceType();
12
+ function collectFromNamespace(ns) {
13
+ // Collect explicit TypeSpec interfaces
14
+ for (const iface of ns.interfaces?.values() ?? []) {
15
+ if (iface.name && !interfaces.includes(iface) && !isTemplateDeclaration(iface)) {
16
+ interfaces.push(iface);
17
+ }
18
+ }
19
+
20
+ // Create synthetic interface for namespace-level operations
21
+ if (ns.operations.size > 0) {
22
+ const nsOps = [];
23
+ for (const [name, op] of ns.operations) {
24
+ if (!isTemplateDeclaration(op)) {
25
+ nsOps.push([name, op]);
26
+ }
27
+ }
28
+ if (nsOps.length > 0) {
29
+ const syntheticIface = program.checker.createAndFinishType({
30
+ sourceInterfaces: [],
31
+ decorators: [],
32
+ operations: new Map(nsOps),
33
+ kind: "Interface",
34
+ name: `${ns.name}Operations`,
35
+ namespace: ns,
36
+ entityKind: "Type",
37
+ isFinished: true
38
+ });
39
+
40
+ // Temporarily associate ops with the synthetic interface
41
+ for (const [_, op] of nsOps) {
42
+ op.interface = syntheticIface;
43
+ }
44
+ interfaces.push(syntheticIface);
45
+ }
46
+ }
47
+ for (const childNs of ns.namespaces?.values() ?? []) {
48
+ if (isStdNamespace(childNs)) continue;
49
+ collectFromNamespace(childNs);
50
+ }
51
+ }
52
+ for (const ns of globalNs.namespaces.values()) {
53
+ if (isStdNamespace(ns)) continue;
54
+ collectFromNamespace(ns);
55
+ }
56
+ return interfaces;
57
+ }
58
+
59
+ /**
60
+ * Gets the full service namespace name from the program (e.g., "Microsoft.Contoso").
61
+ */
62
+ export function getServiceNamespaceName(program) {
63
+ const globalNs = program.getGlobalNamespaceType();
64
+ function getFullName(ns) {
65
+ const parts = [];
66
+ let current = ns;
67
+ while (current && current !== globalNs) {
68
+ parts.unshift(current.name);
69
+ current = current.namespace;
70
+ }
71
+ return parts.join(".");
72
+ }
73
+
74
+ // Find the service namespace (deepest non-std namespace in the first branch)
75
+ function findServiceNs(ns) {
76
+ for (const child of ns.namespaces.values()) {
77
+ if (isStdNamespace(child)) continue;
78
+ // If this namespace has content (models, interfaces, operations, enums), use it
79
+ // Otherwise, recurse deeper
80
+ const hasContent = child.models.size > 0 || child.interfaces.size > 0 || child.operations.size > 0 || child.enums.size > 0;
81
+ if (hasContent) return child;
82
+ const deeper = findServiceNs(child);
83
+ if (deeper) return deeper;
84
+ return child;
85
+ }
86
+ return undefined;
87
+ }
88
+ const serviceNs = findServiceNs(globalNs);
89
+ if (!serviceNs) return undefined;
90
+ const fullName = getFullName(serviceNs);
91
+ return getCSharpIdentifier(fullName, NameCasingType.Namespace);
92
+ }
93
+ //# sourceMappingURL=service-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isStdNamespace","isTemplateDeclaration","getCSharpIdentifier","NameCasingType","getServiceInterfaces","program","interfaces","globalNs","getGlobalNamespaceType","collectFromNamespace","ns","iface","values","name","includes","push","operations","size","nsOps","op","length","syntheticIface","checker","createAndFinishType","sourceInterfaces","decorators","Map","kind","namespace","entityKind","isFinished","_","interface","childNs","namespaces","getServiceNamespaceName","getFullName","parts","current","unshift","join","findServiceNs","child","hasContent","models","enums","deeper","undefined","serviceNs","fullName","Namespace"],"sources":["../../src/service-discovery.ts"],"sourcesContent":[null],"mappings":"AAAA,SAEEA,cAAc,EACdC,qBAAqB,QAGhB,oBAAoB;AAE3B,SAASC,mBAAmB,EAAEC,cAAc,QAAQ,mBAAmB;;AAEvE;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAClCC,OAAkD,EACrC;EACb,MAAMC,UAAuB,GAAG,EAAE;EAClC,MAAMC,QAAQ,GAAGF,OAAO,CAACG,sBAAsB,CAAC,CAAC;EAEjD,SAASC,oBAAoBA,CAACC,EAAgB,EAAQ;IACpD;IACA,KAAK,MAAMC,KAAK,IAAID,EAAE,CAACJ,UAAU,EAAEM,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MACjD,IAAID,KAAK,CAACE,IAAI,IAAI,CAACP,UAAU,CAACQ,QAAQ,CAACH,KAAK,CAAC,IAAI,CAACV,qBAAqB,CAACU,KAAK,CAAC,EAAE;QAC9EL,UAAU,CAACS,IAAI,CAACJ,KAAK,CAAC;MACxB;IACF;;IAEA;IACA,IAAID,EAAE,CAACM,UAAU,CAACC,IAAI,GAAG,CAAC,EAAE;MAC1B,MAAMC,KAA4B,GAAG,EAAE;MACvC,KAAK,MAAM,CAACL,IAAI,EAAEM,EAAE,CAAC,IAAIT,EAAE,CAACM,UAAU,EAAE;QACtC,IAAI,CAACf,qBAAqB,CAACkB,EAAE,CAAC,EAAE;UAC9BD,KAAK,CAACH,IAAI,CAAC,CAACF,IAAI,EAAEM,EAAE,CAAC,CAAC;QACxB;MACF;MACA,IAAID,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;QACpB,MAAMC,cAAc,GAAGhB,OAAO,CAACiB,OAAO,CAACC,mBAAmB,CAAC;UACzDC,gBAAgB,EAAE,EAAE;UACpBC,UAAU,EAAE,EAAE;UACdT,UAAU,EAAE,IAAIU,GAAG,CAACR,KAAK,CAAQ;UACjCS,IAAI,EAAE,WAAW;UACjBd,IAAI,EAAE,GAAGH,EAAE,CAACG,IAAI,YAAY;UAC5Be,SAAS,EAAElB,EAAE;UACbmB,UAAU,EAAE,MAAM;UAClBC,UAAU,EAAE;QACd,CAAC,CAAc;;QAEf;QACA,KAAK,MAAM,CAACC,CAAC,EAAEZ,EAAE,CAAC,IAAID,KAAK,EAAE;UAC3BC,EAAE,CAACa,SAAS,GAAGX,cAAc;QAC/B;QACAf,UAAU,CAACS,IAAI,CAACM,cAAc,CAAC;MACjC;IACF;IAEA,KAAK,MAAMY,OAAO,IAAIvB,EAAE,CAACwB,UAAU,EAAEtB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MACnD,IAAIZ,cAAc,CAACiC,OAAO,CAAC,EAAE;MAC7BxB,oBAAoB,CAACwB,OAAO,CAAC;IAC/B;EACF;EAEA,KAAK,MAAMvB,EAAE,IAAIH,QAAQ,CAAC2B,UAAU,CAACtB,MAAM,CAAC,CAAC,EAAE;IAC7C,IAAIZ,cAAc,CAACU,EAAE,CAAC,EAAE;IACxBD,oBAAoB,CAACC,EAAE,CAAC;EAC1B;EACA,OAAOJ,UAAU;AACnB;;AAEA;AACA;AACA;AACA,OAAO,SAAS6B,uBAAuBA,CACrC9B,OAAkD,EAC9B;EACpB,MAAME,QAAQ,GAAGF,OAAO,CAACG,sBAAsB,CAAC,CAAC;EAEjD,SAAS4B,WAAWA,CAAC1B,EAAgB,EAAU;IAC7C,MAAM2B,KAAe,GAAG,EAAE;IAC1B,IAAIC,OAAiC,GAAG5B,EAAE;IAC1C,OAAO4B,OAAO,IAAIA,OAAO,KAAK/B,QAAQ,EAAE;MACtC8B,KAAK,CAACE,OAAO,CAACD,OAAO,CAACzB,IAAI,CAAC;MAC3ByB,OAAO,GAAGA,OAAO,CAACV,SAAS;IAC7B;IACA,OAAOS,KAAK,CAACG,IAAI,CAAC,GAAG,CAAC;EACxB;;EAEA;EACA,SAASC,aAAaA,CAAC/B,EAAgB,EAA4B;IACjE,KAAK,MAAMgC,KAAK,IAAIhC,EAAE,CAACwB,UAAU,CAACtB,MAAM,CAAC,CAAC,EAAE;MAC1C,IAAIZ,cAAc,CAAC0C,KAAK,CAAC,EAAE;MAC3B;MACA;MACA,MAAMC,UAAU,GACdD,KAAK,CAACE,MAAM,CAAC3B,IAAI,GAAG,CAAC,IACrByB,KAAK,CAACpC,UAAU,CAACW,IAAI,GAAG,CAAC,IACzByB,KAAK,CAAC1B,UAAU,CAACC,IAAI,GAAG,CAAC,IACzByB,KAAK,CAACG,KAAK,CAAC5B,IAAI,GAAG,CAAC;MACtB,IAAI0B,UAAU,EAAE,OAAOD,KAAK;MAC5B,MAAMI,MAAM,GAAGL,aAAa,CAACC,KAAK,CAAC;MACnC,IAAII,MAAM,EAAE,OAAOA,MAAM;MACzB,OAAOJ,KAAK;IACd;IACA,OAAOK,SAAS;EAClB;EAEA,MAAMC,SAAS,GAAGP,aAAa,CAAClC,QAAQ,CAAC;EACzC,IAAI,CAACyC,SAAS,EAAE,OAAOD,SAAS;EAChC,MAAME,QAAQ,GAAGb,WAAW,CAACY,SAAS,CAAC;EACvC,OAAO9C,mBAAmB,CAAC+C,QAAQ,EAAE9C,cAAc,CAAC+C,SAAS,CAAC;AAChE","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ import { type Enum, type Interface, type Model, type Program, type Namespace as TspNamespace, type Union } from "@typespec/compiler";
2
+ import type { Typekit } from "@typespec/compiler/typekit";
3
+ import type { HttpCanonicalizer, OperationHttpCanonicalization } from "@typespec/http-canonicalization";
4
+ /** All resolved service types, computed once before rendering. */
5
+ export interface ServiceTypeResolution {
6
+ /** The service namespace (first non-std namespace with content). */
7
+ serviceNamespace: TspNamespace | undefined;
8
+ /** The C#-normalized service namespace name. */
9
+ serviceNamespaceName: string | undefined;
10
+ /** All service interfaces (including synthetic ones for namespace-level operations). */
11
+ interfaces: Interface[];
12
+ /** All models to emit (namespace-level + operation-referenced). */
13
+ models: Model[];
14
+ /** All named enums from service namespaces. */
15
+ enums: Enum[];
16
+ /** All named unions that qualify as C# string enums. */
17
+ unionEnums: Union[];
18
+ /** Canonicalized HTTP operations per interface. */
19
+ canonicalOpsMap: Map<string, OperationHttpCanonicalization[]>;
20
+ }
21
+ /**
22
+ * Resolves all service types in a single pass, eliminating redundant
23
+ * namespace traversals that previously occurred in individual components.
24
+ *
25
+ * Ordering:
26
+ * 1. Service namespace discovery
27
+ * 2. Interface collection (including synthetic interfaces for namespace-level ops)
28
+ * 3. Anonymous response model naming (depends on interfaces)
29
+ * 4. Enum and union-enum collection
30
+ * 5. Model discovery (walks operations from interfaces + namespace models)
31
+ * 6. Canonicalization of HTTP operations
32
+ */
33
+ export declare function resolveServiceTypes(program: Program, $: Typekit, canonicalizer: HttpCanonicalizer): ServiceTypeResolution;
34
+ //# sourceMappingURL=service-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-resolution.d.ts","sourceRoot":"","sources":["../../src/service-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,IAAI,YAAY,EAE9B,KAAK,KAAK,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EACV,iBAAiB,EACjB,6BAA6B,EAC9B,MAAM,iCAAiC,CAAC;AASzC,kEAAkE;AAClE,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,gBAAgB,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,gDAAgD;IAChD,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,wFAAwF;IACxF,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,mEAAmE;IACnE,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,+CAA+C;IAC/C,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,wDAAwD;IACxD,UAAU,EAAE,KAAK,EAAE,CAAC;IACpB,mDAAmD;IACnD,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,6BAA6B,EAAE,CAAC,CAAC;CAC/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,CAAC,EAAE,OAAO,EACV,aAAa,EAAE,iBAAiB,GAC/B,qBAAqB,CAmCvB"}
@@ -0,0 +1,244 @@
1
+ import { getNamespaceFullName, isStdNamespace, isTemplateDeclaration } from "@typespec/compiler";
2
+ import { isUnionEnum } from "./components/enums/enums.js";
3
+ import { preAssignAnonymousResponseNames, resetAnonymousModels } from "./components/models/anonymous-models.js";
4
+ import { getServiceInterfaces, getServiceNamespaceName } from "./service-discovery.js";
5
+ import { findServiceNamespace } from "./utils/namespace-utils.js";
6
+
7
+ /** All resolved service types, computed once before rendering. */
8
+
9
+ /**
10
+ * Resolves all service types in a single pass, eliminating redundant
11
+ * namespace traversals that previously occurred in individual components.
12
+ *
13
+ * Ordering:
14
+ * 1. Service namespace discovery
15
+ * 2. Interface collection (including synthetic interfaces for namespace-level ops)
16
+ * 3. Anonymous response model naming (depends on interfaces)
17
+ * 4. Enum and union-enum collection
18
+ * 5. Model discovery (walks operations from interfaces + namespace models)
19
+ * 6. Canonicalization of HTTP operations
20
+ */
21
+ export function resolveServiceTypes(program, $, canonicalizer) {
22
+ resetAnonymousModels();
23
+ const globalNs = program.getGlobalNamespaceType();
24
+
25
+ // Phase 1: Service namespace
26
+ const serviceNamespace = findServiceNamespace(globalNs);
27
+ const serviceNamespaceName = getServiceNamespaceName(program);
28
+
29
+ // Phase 2: Interfaces (includes synthetic ones for namespace-level operations)
30
+ const interfaces = getServiceInterfaces(program);
31
+
32
+ // Phase 3: Pre-assign contextual names to anonymous response models
33
+ preAssignAnonymousResponseNames(interfaces);
34
+
35
+ // Phase 4: Enums and union-enums from all non-std namespaces
36
+ const enums = [];
37
+ const unionEnums = [];
38
+ collectEnumsFromNamespaces(globalNs, enums, unionEnums);
39
+
40
+ // Phase 5: Model discovery (namespace models + operation-referenced models)
41
+ const models = getServiceModels($, globalNs);
42
+
43
+ // Phase 6: Canonicalize all HTTP operations
44
+ const canonicalOpsMap = canonicalizeAllInterfaces(canonicalizer, interfaces);
45
+ return {
46
+ serviceNamespace,
47
+ serviceNamespaceName,
48
+ interfaces,
49
+ models,
50
+ enums,
51
+ unionEnums,
52
+ canonicalOpsMap
53
+ };
54
+ }
55
+
56
+ /**
57
+ * Collects all enums and union-enums from non-std namespaces in a single walk.
58
+ */
59
+ function collectEnumsFromNamespaces(globalNs, enums, unionEnums) {
60
+ const seenEnums = new Set();
61
+ const seenUnions = new Set();
62
+ function walk(ns) {
63
+ for (const en of ns.enums?.values() ?? []) {
64
+ if (!seenEnums.has(en) && en.name) {
65
+ seenEnums.add(en);
66
+ enums.push(en);
67
+ }
68
+ }
69
+ for (const union of ns.unions?.values() ?? []) {
70
+ if (!seenUnions.has(union) && isUnionEnum(union)) {
71
+ seenUnions.add(union);
72
+ unionEnums.push(union);
73
+ }
74
+ }
75
+ for (const childNs of ns.namespaces?.values() ?? []) {
76
+ if (isStdNamespace(childNs)) continue;
77
+ walk(childNs);
78
+ }
79
+ }
80
+ walk(globalNs);
81
+ }
82
+
83
+ /**
84
+ * Canonicalize all operations for each interface, skipping any that fail.
85
+ */
86
+ function canonicalizeAllInterfaces(canonicalizer, interfaces) {
87
+ const result = new Map();
88
+ for (const iface of interfaces) {
89
+ const ops = [];
90
+ for (const [, op] of iface.operations) {
91
+ try {
92
+ ops.push(canonicalizer.canonicalize(op));
93
+ } catch {
94
+ // Skip operations that can't be canonicalized
95
+ }
96
+ }
97
+ result.set(iface.name, ops);
98
+ }
99
+ return result;
100
+ }
101
+
102
+ // ── Model discovery ─────────────────────────────────────────────────────
103
+
104
+ /**
105
+ * Retrieves all models from the program that should be emitted.
106
+ * Includes namespace-level models AND models referenced by operations.
107
+ */
108
+ function getServiceModels($, globalNs) {
109
+ const models = [];
110
+ const seen = new Set();
111
+ function addModel(model) {
112
+ if (seen.has(model)) return;
113
+ seen.add(model);
114
+ if (shouldEmitModel($, model)) {
115
+ models.push(model);
116
+ }
117
+ }
118
+
119
+ // Collect from namespaces
120
+ for (const model of globalNs.models.values()) {
121
+ addModel(model);
122
+ }
123
+ for (const ns of globalNs.namespaces.values()) {
124
+ if (isStdNamespace(ns)) continue;
125
+ collectModelsFromNamespace($, ns, models, seen);
126
+ }
127
+
128
+ // Walk operations to discover referenced models (template instantiations, etc.)
129
+ const visited = new Set();
130
+ for (const ns of globalNs.namespaces.values()) {
131
+ if (isStdNamespace(ns)) continue;
132
+ discoverReferencedModels($, ns, addModel, visited);
133
+ }
134
+
135
+ // Walk all collected model properties to discover anonymous sub-models
136
+ const modelsSnapshot = [...models];
137
+ for (const model of modelsSnapshot) {
138
+ for (const prop of model.properties.values()) {
139
+ discoverModelsInType($, prop.type, addModel, visited);
140
+ }
141
+ if (model.baseModel) {
142
+ discoverModelsInType($, model.baseModel, addModel, visited);
143
+ }
144
+ }
145
+ return models;
146
+ }
147
+
148
+ /** Walks operations in a namespace to discover referenced model types. */
149
+ function discoverReferencedModels($, ns, addModel, visited) {
150
+ for (const op of ns.operations?.values() ?? []) {
151
+ discoverModelsInType($, op.returnType, addModel, visited);
152
+ for (const param of op.parameters?.properties?.values() ?? []) {
153
+ discoverModelsInType($, param.type, addModel, visited);
154
+ }
155
+ }
156
+ for (const iface of ns.interfaces?.values() ?? []) {
157
+ for (const op of iface.operations?.values() ?? []) {
158
+ discoverModelsInType($, op.returnType, addModel, visited);
159
+ for (const param of op.parameters?.properties?.values() ?? []) {
160
+ discoverModelsInType($, param.type, addModel, visited);
161
+ }
162
+ }
163
+ }
164
+ for (const childNs of ns.namespaces?.values() ?? []) {
165
+ if (isStdNamespace(childNs)) continue;
166
+ discoverReferencedModels($, childNs, addModel, visited);
167
+ }
168
+ }
169
+
170
+ /** Recursively discovers models referenced by a type. */
171
+ function discoverModelsInType($, type, addModel, visited) {
172
+ if (visited.has(type)) return;
173
+ visited.add(type);
174
+ if (type.kind === "Model") {
175
+ if ($.array.is(type)) {
176
+ if (type.indexer?.value) {
177
+ discoverModelsInType($, type.indexer.value, addModel, visited);
178
+ }
179
+ } else if (!$.record.is(type)) {
180
+ addModel(type);
181
+ for (const prop of type.properties.values()) {
182
+ discoverModelsInType($, prop.type, addModel, visited);
183
+ }
184
+ if (type.baseModel) {
185
+ discoverModelsInType($, type.baseModel, addModel, visited);
186
+ }
187
+ if (type.templateMapper) {
188
+ for (const arg of type.templateMapper.args) {
189
+ if (arg.entityKind === "Type") {
190
+ discoverModelsInType($, arg, addModel, visited);
191
+ }
192
+ }
193
+ }
194
+ }
195
+ } else if (type.kind === "Union") {
196
+ for (const variant of type.variants.values()) {
197
+ discoverModelsInType($, variant.type, addModel, visited);
198
+ }
199
+ }
200
+ }
201
+ function collectModelsFromNamespace($, ns, models, seen) {
202
+ for (const model of ns.models?.values() ?? []) {
203
+ if (!seen.has(model) && shouldEmitModel($, model)) {
204
+ seen.add(model);
205
+ models.push(model);
206
+ }
207
+ }
208
+ for (const childNs of ns.namespaces?.values() ?? []) {
209
+ collectModelsFromNamespace($, childNs, models, seen);
210
+ }
211
+ }
212
+ function shouldEmitModel($, model) {
213
+ if (model.name === "") return true;
214
+ if (!model.name) return false;
215
+ if ($.array.is(model)) return false;
216
+ if ($.record.is(model)) return false;
217
+ if (isTemplateDeclaration(model)) return false;
218
+ if (model.name === "HttpPart" && model.templateMapper) return false;
219
+ if (isMultipartBodyContainer(model)) return false;
220
+ if (model.templateMapper) return true;
221
+ if (model.namespace && isStdNamespace(model.namespace)) return false;
222
+ const nsName = model.namespace ? getNamespaceFullName(model.namespace) : "";
223
+ if (nsName.startsWith("TypeSpec.Http") || nsName.startsWith("TypeSpec.Rest")) return false;
224
+ return true;
225
+ }
226
+
227
+ /** Detects models whose properties are all HttpPart<T>. */
228
+ function isMultipartBodyContainer(model) {
229
+ if (model.properties.size === 0) return false;
230
+ for (const prop of model.properties.values()) {
231
+ if (isHttpPartType(prop.type)) continue;
232
+ return false;
233
+ }
234
+ return true;
235
+ }
236
+ function isHttpPartType(type) {
237
+ if (type.kind !== "Model") return false;
238
+ if (type.name === "HttpPart" && type.templateMapper) return true;
239
+ if (type.indexer?.value) {
240
+ return isHttpPartType(type.indexer.value);
241
+ }
242
+ return false;
243
+ }
244
+ //# sourceMappingURL=service-resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getNamespaceFullName","isStdNamespace","isTemplateDeclaration","isUnionEnum","preAssignAnonymousResponseNames","resetAnonymousModels","getServiceInterfaces","getServiceNamespaceName","findServiceNamespace","resolveServiceTypes","program","$","canonicalizer","globalNs","getGlobalNamespaceType","serviceNamespace","serviceNamespaceName","interfaces","enums","unionEnums","collectEnumsFromNamespaces","models","getServiceModels","canonicalOpsMap","canonicalizeAllInterfaces","seenEnums","Set","seenUnions","walk","ns","en","values","has","name","add","push","union","unions","childNs","namespaces","result","Map","iface","ops","op","operations","canonicalize","set","seen","addModel","model","shouldEmitModel","collectModelsFromNamespace","visited","discoverReferencedModels","modelsSnapshot","prop","properties","discoverModelsInType","type","baseModel","returnType","param","parameters","kind","array","is","indexer","value","record","templateMapper","arg","args","entityKind","variant","variants","isMultipartBodyContainer","namespace","nsName","startsWith","size","isHttpPartType"],"sources":["../../src/service-resolution.ts"],"sourcesContent":[null],"mappings":"AAAA,SACEA,oBAAoB,EACpBC,cAAc,EACdC,qBAAqB,QAQhB,oBAAoB;AAM3B,SAASC,WAAW;AACpB,SACEC,+BAA+B,EAC/BC,oBAAoB,QACf,yCAAyC;AAChD,SAASC,oBAAoB,EAAEC,uBAAuB,QAAQ,wBAAwB;AACtF,SAASC,oBAAoB,QAAQ,4BAA4B;;AAEjE;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,mBAAmBA,CACjCC,OAAgB,EAChBC,CAAU,EACVC,aAAgC,EACT;EACvBP,oBAAoB,CAAC,CAAC;EAEtB,MAAMQ,QAAQ,GAAGH,OAAO,CAACI,sBAAsB,CAAC,CAAC;;EAEjD;EACA,MAAMC,gBAAgB,GAAGP,oBAAoB,CAACK,QAAQ,CAAC;EACvD,MAAMG,oBAAoB,GAAGT,uBAAuB,CAACG,OAAO,CAAC;;EAE7D;EACA,MAAMO,UAAU,GAAGX,oBAAoB,CAACI,OAAO,CAAC;;EAEhD;EACAN,+BAA+B,CAACa,UAAU,CAAC;;EAE3C;EACA,MAAMC,KAAa,GAAG,EAAE;EACxB,MAAMC,UAAmB,GAAG,EAAE;EAC9BC,0BAA0B,CAACP,QAAQ,EAAEK,KAAK,EAAEC,UAAU,CAAC;;EAEvD;EACA,MAAME,MAAM,GAAGC,gBAAgB,CAACX,CAAC,EAAEE,QAAQ,CAAC;;EAE5C;EACA,MAAMU,eAAe,GAAGC,yBAAyB,CAACZ,aAAa,EAAEK,UAAU,CAAC;EAE5E,OAAO;IACLF,gBAAgB;IAChBC,oBAAoB;IACpBC,UAAU;IACVI,MAAM;IACNH,KAAK;IACLC,UAAU;IACVI;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA,SAASH,0BAA0BA,CACjCP,QAAsB,EACtBK,KAAa,EACbC,UAAmB,EACb;EACN,MAAMM,SAAS,GAAG,IAAIC,GAAG,CAAO,CAAC;EACjC,MAAMC,UAAU,GAAG,IAAID,GAAG,CAAQ,CAAC;EAEnC,SAASE,IAAIA,CAACC,EAAgB,EAAQ;IACpC,KAAK,MAAMC,EAAE,IAAID,EAAE,CAACX,KAAK,EAAEa,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MACzC,IAAI,CAACN,SAAS,CAACO,GAAG,CAACF,EAAE,CAAC,IAAIA,EAAE,CAACG,IAAI,EAAE;QACjCR,SAAS,CAACS,GAAG,CAACJ,EAAE,CAAC;QACjBZ,KAAK,CAACiB,IAAI,CAACL,EAAE,CAAC;MAChB;IACF;IACA,KAAK,MAAMM,KAAK,IAAIP,EAAE,CAACQ,MAAM,EAAEN,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MAC7C,IAAI,CAACJ,UAAU,CAACK,GAAG,CAACI,KAAK,CAAC,IAAIjC,WAAW,CAACiC,KAAK,CAAC,EAAE;QAChDT,UAAU,CAACO,GAAG,CAACE,KAAK,CAAC;QACrBjB,UAAU,CAACgB,IAAI,CAACC,KAAK,CAAC;MACxB;IACF;IACA,KAAK,MAAME,OAAO,IAAIT,EAAE,CAACU,UAAU,EAAER,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MACnD,IAAI9B,cAAc,CAACqC,OAAO,CAAC,EAAE;MAC7BV,IAAI,CAACU,OAAO,CAAC;IACf;EACF;EAEAV,IAAI,CAACf,QAAQ,CAAC;AAChB;;AAEA;AACA;AACA;AACA,SAASW,yBAAyBA,CAChCZ,aAAgC,EAChCK,UAAuB,EACuB;EAC9C,MAAMuB,MAAM,GAAG,IAAIC,GAAG,CAA0C,CAAC;EACjE,KAAK,MAAMC,KAAK,IAAIzB,UAAU,EAAE;IAC9B,MAAM0B,GAAoC,GAAG,EAAE;IAC/C,KAAK,MAAM,GAAGC,EAAE,CAAC,IAAIF,KAAK,CAACG,UAAU,EAAE;MACrC,IAAI;QACFF,GAAG,CAACR,IAAI,CAACvB,aAAa,CAACkC,YAAY,CAACF,EAAE,CAAkC,CAAC;MAC3E,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ;IACAJ,MAAM,CAACO,GAAG,CAACL,KAAK,CAACT,IAAI,EAAEU,GAAG,CAAC;EAC7B;EACA,OAAOH,MAAM;AACf;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAASlB,gBAAgBA,CAACX,CAAU,EAAEE,QAAsB,EAAW;EACrE,MAAMQ,MAAe,GAAG,EAAE;EAC1B,MAAM2B,IAAI,GAAG,IAAItB,GAAG,CAAQ,CAAC;EAE7B,SAASuB,QAAQA,CAACC,KAAY,EAAE;IAC9B,IAAIF,IAAI,CAAChB,GAAG,CAACkB,KAAK,CAAC,EAAE;IACrBF,IAAI,CAACd,GAAG,CAACgB,KAAK,CAAC;IACf,IAAIC,eAAe,CAACxC,CAAC,EAAEuC,KAAK,CAAC,EAAE;MAC7B7B,MAAM,CAACc,IAAI,CAACe,KAAK,CAAC;IACpB;EACF;;EAEA;EACA,KAAK,MAAMA,KAAK,IAAIrC,QAAQ,CAACQ,MAAM,CAACU,MAAM,CAAC,CAAC,EAAE;IAC5CkB,QAAQ,CAACC,KAAK,CAAC;EACjB;EACA,KAAK,MAAMrB,EAAE,IAAIhB,QAAQ,CAAC0B,UAAU,CAACR,MAAM,CAAC,CAAC,EAAE;IAC7C,IAAI9B,cAAc,CAAC4B,EAAE,CAAC,EAAE;IACxBuB,0BAA0B,CAACzC,CAAC,EAAEkB,EAAE,EAAER,MAAM,EAAE2B,IAAI,CAAC;EACjD;;EAEA;EACA,MAAMK,OAAO,GAAG,IAAI3B,GAAG,CAAO,CAAC;EAC/B,KAAK,MAAMG,EAAE,IAAIhB,QAAQ,CAAC0B,UAAU,CAACR,MAAM,CAAC,CAAC,EAAE;IAC7C,IAAI9B,cAAc,CAAC4B,EAAE,CAAC,EAAE;IACxByB,wBAAwB,CAAC3C,CAAC,EAAEkB,EAAE,EAAEoB,QAAQ,EAAEI,OAAO,CAAC;EACpD;;EAEA;EACA,MAAME,cAAc,GAAG,CAAC,GAAGlC,MAAM,CAAC;EAClC,KAAK,MAAM6B,KAAK,IAAIK,cAAc,EAAE;IAClC,KAAK,MAAMC,IAAI,IAAIN,KAAK,CAACO,UAAU,CAAC1B,MAAM,CAAC,CAAC,EAAE;MAC5C2B,oBAAoB,CAAC/C,CAAC,EAAE6C,IAAI,CAACG,IAAI,EAAEV,QAAQ,EAAEI,OAAO,CAAC;IACvD;IACA,IAAIH,KAAK,CAACU,SAAS,EAAE;MACnBF,oBAAoB,CAAC/C,CAAC,EAAEuC,KAAK,CAACU,SAAS,EAAEX,QAAQ,EAAEI,OAAO,CAAC;IAC7D;EACF;EAEA,OAAOhC,MAAM;AACf;;AAEA;AACA,SAASiC,wBAAwBA,CAC/B3C,CAAU,EACVkB,EAAgB,EAChBoB,QAA4B,EAC5BI,OAAkB,EACZ;EACN,KAAK,MAAMT,EAAE,IAAIf,EAAE,CAACgB,UAAU,EAAEd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IAC9C2B,oBAAoB,CAAC/C,CAAC,EAAEiC,EAAE,CAACiB,UAAU,EAAEZ,QAAQ,EAAEI,OAAO,CAAC;IACzD,KAAK,MAAMS,KAAK,IAAIlB,EAAE,CAACmB,UAAU,EAAEN,UAAU,EAAE1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MAC7D2B,oBAAoB,CAAC/C,CAAC,EAAEmD,KAAK,CAACH,IAAI,EAAEV,QAAQ,EAAEI,OAAO,CAAC;IACxD;EACF;EACA,KAAK,MAAMX,KAAK,IAAIb,EAAE,CAACZ,UAAU,EAAEc,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACjD,KAAK,MAAMa,EAAE,IAAIF,KAAK,CAACG,UAAU,EAAEd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MACjD2B,oBAAoB,CAAC/C,CAAC,EAAEiC,EAAE,CAACiB,UAAU,EAAEZ,QAAQ,EAAEI,OAAO,CAAC;MACzD,KAAK,MAAMS,KAAK,IAAIlB,EAAE,CAACmB,UAAU,EAAEN,UAAU,EAAE1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7D2B,oBAAoB,CAAC/C,CAAC,EAAEmD,KAAK,CAACH,IAAI,EAAEV,QAAQ,EAAEI,OAAO,CAAC;MACxD;IACF;EACF;EACA,KAAK,MAAMf,OAAO,IAAIT,EAAE,CAACU,UAAU,EAAER,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACnD,IAAI9B,cAAc,CAACqC,OAAO,CAAC,EAAE;IAC7BgB,wBAAwB,CAAC3C,CAAC,EAAE2B,OAAO,EAAEW,QAAQ,EAAEI,OAAO,CAAC;EACzD;AACF;;AAEA;AACA,SAASK,oBAAoBA,CAC3B/C,CAAU,EACVgD,IAAU,EACVV,QAA4B,EAC5BI,OAAkB,EACZ;EACN,IAAIA,OAAO,CAACrB,GAAG,CAAC2B,IAAI,CAAC,EAAE;EACvBN,OAAO,CAACnB,GAAG,CAACyB,IAAI,CAAC;EAEjB,IAAIA,IAAI,CAACK,IAAI,KAAK,OAAO,EAAE;IACzB,IAAIrD,CAAC,CAACsD,KAAK,CAACC,EAAE,CAACP,IAAI,CAAC,EAAE;MACpB,IAAIA,IAAI,CAACQ,OAAO,EAAEC,KAAK,EAAE;QACvBV,oBAAoB,CAAC/C,CAAC,EAAEgD,IAAI,CAACQ,OAAO,CAACC,KAAK,EAAEnB,QAAQ,EAAEI,OAAO,CAAC;MAChE;IACF,CAAC,MAAM,IAAI,CAAC1C,CAAC,CAAC0D,MAAM,CAACH,EAAE,CAACP,IAAI,CAAC,EAAE;MAC7BV,QAAQ,CAACU,IAAI,CAAC;MACd,KAAK,MAAMH,IAAI,IAAIG,IAAI,CAACF,UAAU,CAAC1B,MAAM,CAAC,CAAC,EAAE;QAC3C2B,oBAAoB,CAAC/C,CAAC,EAAE6C,IAAI,CAACG,IAAI,EAAEV,QAAQ,EAAEI,OAAO,CAAC;MACvD;MACA,IAAIM,IAAI,CAACC,SAAS,EAAE;QAClBF,oBAAoB,CAAC/C,CAAC,EAAEgD,IAAI,CAACC,SAAS,EAAEX,QAAQ,EAAEI,OAAO,CAAC;MAC5D;MACA,IAAIM,IAAI,CAACW,cAAc,EAAE;QACvB,KAAK,MAAMC,GAAG,IAAIZ,IAAI,CAACW,cAAc,CAACE,IAAI,EAAE;UAC1C,IAAID,GAAG,CAACE,UAAU,KAAK,MAAM,EAAE;YAC7Bf,oBAAoB,CAAC/C,CAAC,EAAE4D,GAAG,EAAEtB,QAAQ,EAAEI,OAAO,CAAC;UACjD;QACF;MACF;IACF;EACF,CAAC,MAAM,IAAIM,IAAI,CAACK,IAAI,KAAK,OAAO,EAAE;IAChC,KAAK,MAAMU,OAAO,IAAIf,IAAI,CAACgB,QAAQ,CAAC5C,MAAM,CAAC,CAAC,EAAE;MAC5C2B,oBAAoB,CAAC/C,CAAC,EAAE+D,OAAO,CAACf,IAAI,EAAEV,QAAQ,EAAEI,OAAO,CAAC;IAC1D;EACF;AACF;AAEA,SAASD,0BAA0BA,CACjCzC,CAAU,EACVkB,EAAgB,EAChBR,MAAe,EACf2B,IAAgB,EACV;EACN,KAAK,MAAME,KAAK,IAAIrB,EAAE,CAACR,MAAM,EAAEU,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IAC7C,IAAI,CAACiB,IAAI,CAAChB,GAAG,CAACkB,KAAK,CAAC,IAAIC,eAAe,CAACxC,CAAC,EAAEuC,KAAK,CAAC,EAAE;MACjDF,IAAI,CAACd,GAAG,CAACgB,KAAK,CAAC;MACf7B,MAAM,CAACc,IAAI,CAACe,KAAK,CAAC;IACpB;EACF;EACA,KAAK,MAAMZ,OAAO,IAAIT,EAAE,CAACU,UAAU,EAAER,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACnDqB,0BAA0B,CAACzC,CAAC,EAAE2B,OAAO,EAAEjB,MAAM,EAAE2B,IAAI,CAAC;EACtD;AACF;AAEA,SAASG,eAAeA,CAACxC,CAAU,EAAEuC,KAAY,EAAW;EAC1D,IAAIA,KAAK,CAACjB,IAAI,KAAK,EAAE,EAAE,OAAO,IAAI;EAClC,IAAI,CAACiB,KAAK,CAACjB,IAAI,EAAE,OAAO,KAAK;EAC7B,IAAItB,CAAC,CAACsD,KAAK,CAACC,EAAE,CAAChB,KAAK,CAAC,EAAE,OAAO,KAAK;EACnC,IAAIvC,CAAC,CAAC0D,MAAM,CAACH,EAAE,CAAChB,KAAK,CAAC,EAAE,OAAO,KAAK;EACpC,IAAIhD,qBAAqB,CAACgD,KAAK,CAAC,EAAE,OAAO,KAAK;EAC9C,IAAIA,KAAK,CAACjB,IAAI,KAAK,UAAU,IAAIiB,KAAK,CAACoB,cAAc,EAAE,OAAO,KAAK;EACnE,IAAIM,wBAAwB,CAAC1B,KAAK,CAAC,EAAE,OAAO,KAAK;EACjD,IAAIA,KAAK,CAACoB,cAAc,EAAE,OAAO,IAAI;EACrC,IAAIpB,KAAK,CAAC2B,SAAS,IAAI5E,cAAc,CAACiD,KAAK,CAAC2B,SAAS,CAAC,EAAE,OAAO,KAAK;EACpE,MAAMC,MAAM,GAAG5B,KAAK,CAAC2B,SAAS,GAAG7E,oBAAoB,CAACkD,KAAK,CAAC2B,SAAS,CAAC,GAAG,EAAE;EAC3E,IAAIC,MAAM,CAACC,UAAU,CAAC,eAAe,CAAC,IAAID,MAAM,CAACC,UAAU,CAAC,eAAe,CAAC,EAAE,OAAO,KAAK;EAC1F,OAAO,IAAI;AACb;;AAEA;AACA,SAASH,wBAAwBA,CAAC1B,KAAY,EAAW;EACvD,IAAIA,KAAK,CAACO,UAAU,CAACuB,IAAI,KAAK,CAAC,EAAE,OAAO,KAAK;EAC7C,KAAK,MAAMxB,IAAI,IAAIN,KAAK,CAACO,UAAU,CAAC1B,MAAM,CAAC,CAAC,EAAE;IAC5C,IAAIkD,cAAc,CAACzB,IAAI,CAACG,IAAI,CAAC,EAAE;IAC/B,OAAO,KAAK;EACd;EACA,OAAO,IAAI;AACb;AAEA,SAASsB,cAAcA,CAACtB,IAAU,EAAW;EAC3C,IAAIA,IAAI,CAACK,IAAI,KAAK,OAAO,EAAE,OAAO,KAAK;EACvC,IAAIL,IAAI,CAAC1B,IAAI,KAAK,UAAU,IAAI0B,IAAI,CAACW,cAAc,EAAE,OAAO,IAAI;EAChE,IAAIX,IAAI,CAACQ,OAAO,EAAEC,KAAK,EAAE;IACvB,OAAOa,cAAc,CAACtB,IAAI,CAACQ,OAAO,CAACC,KAAK,CAAC;EAC3C;EACA,OAAO,KAAK;AACd","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export { $lib } from "../lib.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { $lib } from "../lib.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["$lib"],"sources":["../../../src/testing/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,IAAI,QAAQ,WAAW","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import { type Children } from "@alloy-js/core";
2
+ import { type ModelProperty, type Program } from "@typespec/compiler";
3
+ /**
4
+ * Get all C# attributes for a model property.
5
+ * Returns an array of attribute strings like `[JsonConverter(typeof(TimeSpanDurationConverter))]`
6
+ */
7
+ export declare function getPropertyAttributes(program: Program, property: ModelProperty): Children[];
8
+ //# sourceMappingURL=attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../../src/utils/attributes.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAaL,KAAK,aAAa,EAClB,KAAK,OAAO,EAGb,MAAM,oBAAoB,CAAC;AAgE5B;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,QAAQ,EAAE,CAyC3F"}