@tsonic/frontend 0.0.62 → 0.0.63

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 (377) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/dependency-graph.d.ts +1 -1
  3. package/dist/dependency-graph.d.ts.map +1 -1
  4. package/dist/dependency-graph.js +1 -1
  5. package/dist/dependency-graph.js.map +1 -1
  6. package/dist/dotnet-metadata.d.ts +0 -12
  7. package/dist/dotnet-metadata.d.ts.map +1 -1
  8. package/dist/dotnet-metadata.js +0 -24
  9. package/dist/dotnet-metadata.js.map +1 -1
  10. package/dist/generic-function-values.d.ts +11 -0
  11. package/dist/generic-function-values.d.ts.map +1 -0
  12. package/dist/generic-function-values.js +243 -0
  13. package/dist/generic-function-values.js.map +1 -0
  14. package/dist/generic-function-values.test.d.ts +2 -0
  15. package/dist/generic-function-values.test.d.ts.map +1 -0
  16. package/dist/generic-function-values.test.js +256 -0
  17. package/dist/generic-function-values.test.js.map +1 -0
  18. package/dist/graph/extraction/imports.d.ts +5 -0
  19. package/dist/graph/extraction/imports.d.ts.map +1 -1
  20. package/dist/graph/extraction/imports.js +30 -0
  21. package/dist/graph/extraction/imports.js.map +1 -1
  22. package/dist/graph/extraction/index.d.ts +1 -1
  23. package/dist/graph/extraction/index.d.ts.map +1 -1
  24. package/dist/graph/extraction/index.js +1 -1
  25. package/dist/graph/extraction/index.js.map +1 -1
  26. package/dist/graph/extraction/orchestrator.d.ts.map +1 -1
  27. package/dist/graph/extraction/orchestrator.js +16 -2
  28. package/dist/graph/extraction/orchestrator.js.map +1 -1
  29. package/dist/graph/extraction.d.ts +1 -1
  30. package/dist/graph/extraction.d.ts.map +1 -1
  31. package/dist/graph/extraction.js +1 -1
  32. package/dist/graph/extraction.js.map +1 -1
  33. package/dist/ir/binding/binding-factory.d.ts +17 -0
  34. package/dist/ir/binding/binding-factory.d.ts.map +1 -0
  35. package/dist/ir/binding/binding-factory.js +765 -0
  36. package/dist/ir/binding/binding-factory.js.map +1 -0
  37. package/dist/ir/binding/binding-helpers.d.ts +90 -0
  38. package/dist/ir/binding/binding-helpers.d.ts.map +1 -0
  39. package/dist/ir/binding/binding-helpers.js +387 -0
  40. package/dist/ir/binding/binding-helpers.js.map +1 -0
  41. package/dist/ir/binding/binding-types.d.ts +203 -0
  42. package/dist/ir/binding/binding-types.d.ts.map +1 -0
  43. package/dist/ir/binding/binding-types.js +9 -0
  44. package/dist/ir/binding/binding-types.js.map +1 -0
  45. package/dist/ir/binding/index.d.ts +4 -158
  46. package/dist/ir/binding/index.d.ts.map +1 -1
  47. package/dist/ir/binding/index.js +3 -1134
  48. package/dist/ir/binding/index.js.map +1 -1
  49. package/dist/ir/builder.test.js +223 -0
  50. package/dist/ir/builder.test.js.map +1 -1
  51. package/dist/ir/converters/anonymous-synthesis.d.ts +3 -3
  52. package/dist/ir/converters/anonymous-synthesis.d.ts.map +1 -1
  53. package/dist/ir/converters/anonymous-synthesis.js +45 -8
  54. package/dist/ir/converters/anonymous-synthesis.js.map +1 -1
  55. package/dist/ir/converters/expressions/access/access-converter.d.ts +14 -0
  56. package/dist/ir/converters/expressions/access/access-converter.d.ts.map +1 -0
  57. package/dist/ir/converters/expressions/access/access-converter.js +141 -0
  58. package/dist/ir/converters/expressions/access/access-converter.js.map +1 -0
  59. package/dist/ir/converters/expressions/access/binding-resolution.d.ts +35 -0
  60. package/dist/ir/converters/expressions/access/binding-resolution.d.ts.map +1 -0
  61. package/dist/ir/converters/expressions/access/binding-resolution.js +384 -0
  62. package/dist/ir/converters/expressions/access/binding-resolution.js.map +1 -0
  63. package/dist/ir/converters/expressions/access/member-resolution.d.ts +67 -0
  64. package/dist/ir/converters/expressions/access/member-resolution.d.ts.map +1 -0
  65. package/dist/ir/converters/expressions/access/member-resolution.js +262 -0
  66. package/dist/ir/converters/expressions/access/member-resolution.js.map +1 -0
  67. package/dist/ir/converters/expressions/access.d.ts +1 -7
  68. package/dist/ir/converters/expressions/access.d.ts.map +1 -1
  69. package/dist/ir/converters/expressions/access.js +1 -720
  70. package/dist/ir/converters/expressions/access.js.map +1 -1
  71. package/dist/ir/converters/expressions/calls/call-converter.d.ts +23 -0
  72. package/dist/ir/converters/expressions/calls/call-converter.d.ts.map +1 -0
  73. package/dist/ir/converters/expressions/calls/call-converter.js +526 -0
  74. package/dist/ir/converters/expressions/calls/call-converter.js.map +1 -0
  75. package/dist/ir/converters/expressions/calls/call-site-analysis.d.ts +53 -0
  76. package/dist/ir/converters/expressions/calls/call-site-analysis.d.ts.map +1 -0
  77. package/dist/ir/converters/expressions/calls/call-site-analysis.js +554 -0
  78. package/dist/ir/converters/expressions/calls/call-site-analysis.js.map +1 -0
  79. package/dist/ir/converters/expressions/calls/new-converter.d.ts +21 -0
  80. package/dist/ir/converters/expressions/calls/new-converter.d.ts.map +1 -0
  81. package/dist/ir/converters/expressions/calls/new-converter.js +182 -0
  82. package/dist/ir/converters/expressions/calls/new-converter.js.map +1 -0
  83. package/dist/ir/converters/expressions/calls.d.ts +2 -28
  84. package/dist/ir/converters/expressions/calls.d.ts.map +1 -1
  85. package/dist/ir/converters/expressions/calls.js +2 -1344
  86. package/dist/ir/converters/expressions/calls.js.map +1 -1
  87. package/dist/ir/converters/expressions/collections.d.ts.map +1 -1
  88. package/dist/ir/converters/expressions/collections.js +37 -6
  89. package/dist/ir/converters/expressions/collections.js.map +1 -1
  90. package/dist/ir/converters/expressions/functions.js +1 -1
  91. package/dist/ir/converters/expressions/functions.js.map +1 -1
  92. package/dist/ir/converters/expressions/helpers.d.ts.map +1 -1
  93. package/dist/ir/converters/expressions/helpers.js +1 -0
  94. package/dist/ir/converters/expressions/helpers.js.map +1 -1
  95. package/dist/ir/converters/expressions/other.d.ts.map +1 -1
  96. package/dist/ir/converters/expressions/other.js +3 -2
  97. package/dist/ir/converters/expressions/other.js.map +1 -1
  98. package/dist/ir/converters/flow-narrowing.d.ts.map +1 -1
  99. package/dist/ir/converters/flow-narrowing.js +3 -2
  100. package/dist/ir/converters/flow-narrowing.js.map +1 -1
  101. package/dist/ir/converters/statements/declarations/classes/methods.js +1 -1
  102. package/dist/ir/converters/statements/declarations/classes/methods.js.map +1 -1
  103. package/dist/ir/converters/statements/declarations/type-aliases.js +1 -1
  104. package/dist/ir/converters/statements/declarations/type-aliases.js.map +1 -1
  105. package/dist/ir/converters/statements/declarations/variables.d.ts +2 -2
  106. package/dist/ir/converters/statements/declarations/variables.d.ts.map +1 -1
  107. package/dist/ir/converters/statements/declarations/variables.js +289 -2
  108. package/dist/ir/converters/statements/declarations/variables.js.map +1 -1
  109. package/dist/ir/expression-converter.d.ts +0 -1
  110. package/dist/ir/expression-converter.d.ts.map +1 -1
  111. package/dist/ir/expression-converter.js +0 -2
  112. package/dist/ir/expression-converter.js.map +1 -1
  113. package/dist/ir/generic-function-value-lowering.test.d.ts +2 -0
  114. package/dist/ir/generic-function-value-lowering.test.d.ts.map +1 -0
  115. package/dist/ir/generic-function-value-lowering.test.js +312 -0
  116. package/dist/ir/generic-function-value-lowering.test.js.map +1 -0
  117. package/dist/ir/generic-validator.d.ts +3 -4
  118. package/dist/ir/generic-validator.d.ts.map +1 -1
  119. package/dist/ir/generic-validator.js +3 -35
  120. package/dist/ir/generic-validator.js.map +1 -1
  121. package/dist/ir/program-context.d.ts +7 -0
  122. package/dist/ir/program-context.d.ts.map +1 -1
  123. package/dist/ir/program-context.js +1 -0
  124. package/dist/ir/program-context.js.map +1 -1
  125. package/dist/ir/statement-converter.d.ts +0 -2
  126. package/dist/ir/statement-converter.d.ts.map +1 -1
  127. package/dist/ir/statement-converter.js +0 -3
  128. package/dist/ir/statement-converter.js.map +1 -1
  129. package/dist/ir/type-system/internal/handle-types.d.ts +16 -16
  130. package/dist/ir/type-system/internal/handle-types.d.ts.map +1 -1
  131. package/dist/ir/type-system/internal/nominal-env.d.ts +0 -2
  132. package/dist/ir/type-system/internal/nominal-env.d.ts.map +1 -1
  133. package/dist/ir/type-system/internal/nominal-env.js +2 -6
  134. package/dist/ir/type-system/internal/nominal-env.js.map +1 -1
  135. package/dist/ir/type-system/internal/type-converter/converter.d.ts +3 -1
  136. package/dist/ir/type-system/internal/type-converter/converter.d.ts.map +1 -1
  137. package/dist/ir/type-system/internal/type-converter/converter.js +3 -1
  138. package/dist/ir/type-system/internal/type-converter/converter.js.map +1 -1
  139. package/dist/ir/type-system/internal/type-converter/objects.js +7 -1
  140. package/dist/ir/type-system/internal/type-converter/objects.js.map +1 -1
  141. package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts +0 -2
  142. package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts.map +1 -1
  143. package/dist/ir/type-system/internal/type-converter/orchestrator.js +315 -23
  144. package/dist/ir/type-system/internal/type-converter/orchestrator.js.map +1 -1
  145. package/dist/ir/type-system/internal/type-converter/orchestrator.test.d.ts +2 -0
  146. package/dist/ir/type-system/internal/type-converter/orchestrator.test.d.ts.map +1 -0
  147. package/dist/ir/type-system/internal/type-converter/orchestrator.test.js +265 -0
  148. package/dist/ir/type-system/internal/type-converter/orchestrator.test.js.map +1 -0
  149. package/dist/ir/type-system/internal/type-converter/primitives.d.ts.map +1 -1
  150. package/dist/ir/type-system/internal/type-converter/primitives.js +5 -0
  151. package/dist/ir/type-system/internal/type-converter/primitives.js.map +1 -1
  152. package/dist/ir/type-system/internal/type-converter/references.d.ts.map +1 -1
  153. package/dist/ir/type-system/internal/type-converter/references.js +67 -29
  154. package/dist/ir/type-system/internal/type-converter/references.js.map +1 -1
  155. package/dist/ir/type-system/internal/type-converter/utility-types.d.ts.map +1 -1
  156. package/dist/ir/type-system/internal/type-converter/utility-types.js +145 -0
  157. package/dist/ir/type-system/internal/type-converter/utility-types.js.map +1 -1
  158. package/dist/ir/type-system/internal/type-converter/utility-types.test.js +91 -1
  159. package/dist/ir/type-system/internal/type-converter/utility-types.test.js.map +1 -1
  160. package/dist/ir/type-system/internal/type-registry.d.ts +1 -1
  161. package/dist/ir/type-system/internal/type-registry.js +7 -7
  162. package/dist/ir/type-system/internal/type-registry.js.map +1 -1
  163. package/dist/ir/type-system/internal/universe/alias-table.d.ts +0 -14
  164. package/dist/ir/type-system/internal/universe/alias-table.d.ts.map +1 -1
  165. package/dist/ir/type-system/internal/universe/alias-table.js +0 -17
  166. package/dist/ir/type-system/internal/universe/alias-table.js.map +1 -1
  167. package/dist/ir/type-system/internal/universe/clr-catalog.d.ts +3 -0
  168. package/dist/ir/type-system/internal/universe/clr-catalog.d.ts.map +1 -1
  169. package/dist/ir/type-system/internal/universe/clr-catalog.js +4 -1044
  170. package/dist/ir/type-system/internal/universe/clr-catalog.js.map +1 -1
  171. package/dist/ir/type-system/internal/universe/clr-entry-converter.d.ts +51 -0
  172. package/dist/ir/type-system/internal/universe/clr-entry-converter.d.ts.map +1 -0
  173. package/dist/ir/type-system/internal/universe/clr-entry-converter.js +657 -0
  174. package/dist/ir/type-system/internal/universe/clr-entry-converter.js.map +1 -0
  175. package/dist/ir/type-system/internal/universe/clr-type-parser.d.ts +52 -0
  176. package/dist/ir/type-system/internal/universe/clr-type-parser.d.ts.map +1 -0
  177. package/dist/ir/type-system/internal/universe/clr-type-parser.js +415 -0
  178. package/dist/ir/type-system/internal/universe/clr-type-parser.js.map +1 -0
  179. package/dist/ir/type-system/internal/universe/index.d.ts +1 -1
  180. package/dist/ir/type-system/internal/universe/index.d.ts.map +1 -1
  181. package/dist/ir/type-system/internal/universe/index.js +1 -3
  182. package/dist/ir/type-system/internal/universe/index.js.map +1 -1
  183. package/dist/ir/type-system/internal/universe/unified-universe.test.js +2 -0
  184. package/dist/ir/type-system/internal/universe/unified-universe.test.js.map +1 -1
  185. package/dist/ir/type-system/type-system-call-resolution.d.ts +69 -0
  186. package/dist/ir/type-system/type-system-call-resolution.d.ts.map +1 -0
  187. package/dist/ir/type-system/type-system-call-resolution.js +1121 -0
  188. package/dist/ir/type-system/type-system-call-resolution.js.map +1 -0
  189. package/dist/ir/type-system/type-system-inference.d.ts +98 -0
  190. package/dist/ir/type-system/type-system-inference.d.ts.map +1 -0
  191. package/dist/ir/type-system/type-system-inference.js +1083 -0
  192. package/dist/ir/type-system/type-system-inference.js.map +1 -0
  193. package/dist/ir/type-system/type-system-relations.d.ts +15 -0
  194. package/dist/ir/type-system/type-system-relations.d.ts.map +1 -0
  195. package/dist/ir/type-system/type-system-relations.js +152 -0
  196. package/dist/ir/type-system/type-system-relations.js.map +1 -0
  197. package/dist/ir/type-system/type-system-state.d.ts +436 -0
  198. package/dist/ir/type-system/type-system-state.d.ts.map +1 -0
  199. package/dist/ir/type-system/type-system-state.js +212 -0
  200. package/dist/ir/type-system/type-system-state.js.map +1 -0
  201. package/dist/ir/type-system/type-system-utilities.d.ts +56 -0
  202. package/dist/ir/type-system/type-system-utilities.d.ts.map +1 -0
  203. package/dist/ir/type-system/type-system-utilities.js +373 -0
  204. package/dist/ir/type-system/type-system-utilities.js.map +1 -0
  205. package/dist/ir/type-system/type-system.d.ts +17 -358
  206. package/dist/ir/type-system/type-system.d.ts.map +1 -1
  207. package/dist/ir/type-system/type-system.js +67 -2945
  208. package/dist/ir/type-system/type-system.js.map +1 -1
  209. package/dist/ir/types/index.d.ts +1 -0
  210. package/dist/ir/types/index.d.ts.map +1 -1
  211. package/dist/ir/types/index.js +1 -0
  212. package/dist/ir/types/index.js.map +1 -1
  213. package/dist/ir/types/ir-substitution.js +1 -1
  214. package/dist/ir/types/ir-substitution.js.map +1 -1
  215. package/dist/ir/types/statements.d.ts +1 -1
  216. package/dist/ir/types/type-ops.d.ts +9 -0
  217. package/dist/ir/types/type-ops.d.ts.map +1 -0
  218. package/dist/ir/types/type-ops.js +134 -0
  219. package/dist/ir/types/type-ops.js.map +1 -0
  220. package/dist/ir/types/type-ops.test.d.ts +2 -0
  221. package/dist/ir/types/type-ops.test.d.ts.map +1 -0
  222. package/dist/ir/types/type-ops.test.js +73 -0
  223. package/dist/ir/types/type-ops.test.js.map +1 -0
  224. package/dist/ir/validation/attribute-collection/arg-extractor.d.ts +58 -0
  225. package/dist/ir/validation/attribute-collection/arg-extractor.d.ts.map +1 -0
  226. package/dist/ir/validation/attribute-collection/arg-extractor.js +284 -0
  227. package/dist/ir/validation/attribute-collection/arg-extractor.js.map +1 -0
  228. package/dist/ir/validation/attribute-collection/marker-parser.d.ts +28 -0
  229. package/dist/ir/validation/attribute-collection/marker-parser.d.ts.map +1 -0
  230. package/dist/ir/validation/attribute-collection/marker-parser.js +404 -0
  231. package/dist/ir/validation/attribute-collection/marker-parser.js.map +1 -0
  232. package/dist/ir/validation/attribute-collection/orchestrator.d.ts +28 -0
  233. package/dist/ir/validation/attribute-collection/orchestrator.d.ts.map +1 -0
  234. package/dist/ir/validation/attribute-collection/orchestrator.js +332 -0
  235. package/dist/ir/validation/attribute-collection/orchestrator.js.map +1 -0
  236. package/dist/ir/validation/attribute-collection-pass.d.ts +1 -23
  237. package/dist/ir/validation/attribute-collection-pass.d.ts.map +1 -1
  238. package/dist/ir/validation/attribute-collection-pass.js +1 -961
  239. package/dist/ir/validation/attribute-collection-pass.js.map +1 -1
  240. package/dist/ir/validation/attribute-collection-pass.test.js +12 -6
  241. package/dist/ir/validation/attribute-collection-pass.test.js.map +1 -1
  242. package/dist/ir/validation/soundness-gate.d.ts.map +1 -1
  243. package/dist/ir/validation/soundness-gate.js +2 -1
  244. package/dist/ir/validation/soundness-gate.js.map +1 -1
  245. package/dist/ir/validation/soundness-gate.test.js +69 -0
  246. package/dist/ir/validation/soundness-gate.test.js.map +1 -1
  247. package/dist/ir/validation/yield-lowering-pass.d.ts +11 -5
  248. package/dist/ir/validation/yield-lowering-pass.d.ts.map +1 -1
  249. package/dist/ir/validation/yield-lowering-pass.js +942 -48
  250. package/dist/ir/validation/yield-lowering-pass.js.map +1 -1
  251. package/dist/ir/validation/yield-lowering-pass.test.js +1333 -127
  252. package/dist/ir/validation/yield-lowering-pass.test.js.map +1 -1
  253. package/dist/program/binding-loader.d.ts +37 -0
  254. package/dist/program/binding-loader.d.ts.map +1 -0
  255. package/dist/program/binding-loader.js +155 -0
  256. package/dist/program/binding-loader.js.map +1 -0
  257. package/dist/program/binding-registry.d.ts +106 -0
  258. package/dist/program/binding-registry.d.ts.map +1 -0
  259. package/dist/program/binding-registry.js +590 -0
  260. package/dist/program/binding-registry.js.map +1 -0
  261. package/dist/program/binding-types.d.ts +166 -0
  262. package/dist/program/binding-types.d.ts.map +1 -0
  263. package/dist/program/binding-types.js +57 -0
  264. package/dist/program/binding-types.js.map +1 -0
  265. package/dist/program/bindings.d.ts +6 -271
  266. package/dist/program/bindings.d.ts.map +1 -1
  267. package/dist/program/bindings.js +7 -781
  268. package/dist/program/bindings.js.map +1 -1
  269. package/dist/resolver/clr-bindings-resolver.d.ts +0 -1
  270. package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -1
  271. package/dist/resolver/clr-bindings-resolver.js +22 -32
  272. package/dist/resolver/clr-bindings-resolver.js.map +1 -1
  273. package/dist/resolver/clr-bindings-resolver.test.js +0 -27
  274. package/dist/resolver/clr-bindings-resolver.test.js.map +1 -1
  275. package/dist/resolver/import-resolution.d.ts +1 -1
  276. package/dist/resolver/import-resolution.d.ts.map +1 -1
  277. package/dist/resolver/import-resolution.js +2 -7
  278. package/dist/resolver/import-resolution.js.map +1 -1
  279. package/dist/resolver/naming.d.ts.map +1 -1
  280. package/dist/resolver/naming.js +1 -0
  281. package/dist/resolver/naming.js.map +1 -1
  282. package/dist/types/diagnostic.d.ts +1 -1
  283. package/dist/types/diagnostic.d.ts.map +1 -1
  284. package/dist/types/diagnostic.js.map +1 -1
  285. package/dist/validation/features.d.ts.map +1 -1
  286. package/dist/validation/features.js +38 -13
  287. package/dist/validation/features.js.map +1 -1
  288. package/dist/validation/features.test.d.ts +2 -0
  289. package/dist/validation/features.test.d.ts.map +1 -0
  290. package/dist/validation/features.test.js +273 -0
  291. package/dist/validation/features.test.js.map +1 -0
  292. package/dist/validation/generics.d.ts +1 -1
  293. package/dist/validation/generics.d.ts.map +1 -1
  294. package/dist/validation/generics.js +2 -26
  295. package/dist/validation/generics.js.map +1 -1
  296. package/dist/validation/imports.d.ts.map +1 -1
  297. package/dist/validation/imports.js +2 -1
  298. package/dist/validation/imports.js.map +1 -1
  299. package/dist/validation/imports.test.d.ts +2 -0
  300. package/dist/validation/imports.test.d.ts.map +1 -0
  301. package/dist/validation/imports.test.js +112 -0
  302. package/dist/validation/imports.test.js.map +1 -0
  303. package/dist/validation/static-safety.d.ts +6 -6
  304. package/dist/validation/static-safety.d.ts.map +1 -1
  305. package/dist/validation/static-safety.js +163 -109
  306. package/dist/validation/static-safety.js.map +1 -1
  307. package/dist/validation/unsupported-utility-types.d.ts +3 -3
  308. package/dist/validation/unsupported-utility-types.d.ts.map +1 -1
  309. package/dist/validation/unsupported-utility-types.js +4 -7
  310. package/dist/validation/unsupported-utility-types.js.map +1 -1
  311. package/dist/validator.maximus.test.d.ts +2 -0
  312. package/dist/validator.maximus.test.d.ts.map +1 -0
  313. package/dist/validator.maximus.test.js +1214 -0
  314. package/dist/validator.maximus.test.js.map +1 -0
  315. package/dist/validator.test.js +152 -18
  316. package/dist/validator.test.js.map +1 -1
  317. package/package.json +1 -1
  318. package/dist/ir/converters/statements/declarations/registry.d.ts +0 -96
  319. package/dist/ir/converters/statements/declarations/registry.d.ts.map +0 -1
  320. package/dist/ir/converters/statements/declarations/registry.js +0 -130
  321. package/dist/ir/converters/statements/declarations/registry.js.map +0 -1
  322. package/dist/ir/this-parameter-inference.test.d.ts +0 -13
  323. package/dist/ir/this-parameter-inference.test.d.ts.map +0 -1
  324. package/dist/ir/this-parameter-inference.test.js +0 -165
  325. package/dist/ir/this-parameter-inference.test.js.map +0 -1
  326. package/dist/metadata/bindings-loader.d.ts +0 -41
  327. package/dist/metadata/bindings-loader.d.ts.map +0 -1
  328. package/dist/metadata/bindings-loader.js +0 -308
  329. package/dist/metadata/bindings-loader.js.map +0 -1
  330. package/dist/metadata/bindings-loader.test.d.ts +0 -5
  331. package/dist/metadata/bindings-loader.test.d.ts.map +0 -1
  332. package/dist/metadata/bindings-loader.test.js +0 -117
  333. package/dist/metadata/bindings-loader.test.js.map +0 -1
  334. package/dist/metadata/index.d.ts +0 -8
  335. package/dist/metadata/index.d.ts.map +0 -1
  336. package/dist/metadata/index.js +0 -7
  337. package/dist/metadata/index.js.map +0 -1
  338. package/dist/metadata/library-loader.d.ts +0 -42
  339. package/dist/metadata/library-loader.d.ts.map +0 -1
  340. package/dist/metadata/library-loader.js +0 -126
  341. package/dist/metadata/library-loader.js.map +0 -1
  342. package/dist/metadata/loader.d.ts +0 -26
  343. package/dist/metadata/loader.d.ts.map +0 -1
  344. package/dist/metadata/loader.js +0 -333
  345. package/dist/metadata/loader.js.map +0 -1
  346. package/dist/metadata/loader.test.d.ts +0 -5
  347. package/dist/metadata/loader.test.d.ts.map +0 -1
  348. package/dist/metadata/loader.test.js +0 -119
  349. package/dist/metadata/loader.test.js.map +0 -1
  350. package/dist/resolver/naming-policy.d.ts +0 -20
  351. package/dist/resolver/naming-policy.d.ts.map +0 -1
  352. package/dist/resolver/naming-policy.js +0 -40
  353. package/dist/resolver/naming-policy.js.map +0 -1
  354. package/dist/types/bindings.d.ts +0 -153
  355. package/dist/types/bindings.d.ts.map +0 -1
  356. package/dist/types/bindings.js +0 -14
  357. package/dist/types/bindings.js.map +0 -1
  358. package/dist/types/metadata.d.ts +0 -196
  359. package/dist/types/metadata.d.ts.map +0 -1
  360. package/dist/types/metadata.js +0 -10
  361. package/dist/types/metadata.js.map +0 -1
  362. package/dist/types/nested-types.d.ts +0 -111
  363. package/dist/types/nested-types.d.ts.map +0 -1
  364. package/dist/types/nested-types.js +0 -176
  365. package/dist/types/nested-types.js.map +0 -1
  366. package/dist/types/nested-types.test.d.ts +0 -5
  367. package/dist/types/nested-types.test.d.ts.map +0 -1
  368. package/dist/types/nested-types.test.js +0 -135
  369. package/dist/types/nested-types.test.js.map +0 -1
  370. package/dist/types/ref-parameters.d.ts +0 -123
  371. package/dist/types/ref-parameters.d.ts.map +0 -1
  372. package/dist/types/ref-parameters.js +0 -203
  373. package/dist/types/ref-parameters.js.map +0 -1
  374. package/dist/types/ref-parameters.test.d.ts +0 -5
  375. package/dist/types/ref-parameters.test.d.ts.map +0 -1
  376. package/dist/types/ref-parameters.test.js +0 -147
  377. package/dist/types/ref-parameters.test.js.map +0 -1
@@ -0,0 +1,73 @@
1
+ import { describe, it } from "mocha";
2
+ import { expect } from "chai";
3
+ import { irTypesEqual, normalizedUnionType, stableIrTypeKey, unwrapAsyncWrapperType, } from "./type-ops.js";
4
+ const stringType = { kind: "primitiveType", name: "string" };
5
+ const numberType = { kind: "primitiveType", name: "number" };
6
+ const booleanType = { kind: "primitiveType", name: "boolean" };
7
+ describe("type-ops", () => {
8
+ it("treats union member order as equal", () => {
9
+ const left = {
10
+ kind: "unionType",
11
+ types: [stringType, numberType, booleanType],
12
+ };
13
+ const right = {
14
+ kind: "unionType",
15
+ types: [booleanType, stringType, numberType],
16
+ };
17
+ expect(irTypesEqual(left, right)).to.equal(true);
18
+ expect(stableIrTypeKey(left)).to.equal(stableIrTypeKey(right));
19
+ });
20
+ it("normalizes and deduplicates nested unions", () => {
21
+ const nested = {
22
+ kind: "unionType",
23
+ types: [
24
+ stringType,
25
+ {
26
+ kind: "unionType",
27
+ types: [numberType, stringType],
28
+ },
29
+ ],
30
+ };
31
+ const normalized = normalizedUnionType([nested, booleanType]);
32
+ expect(normalized.kind).to.equal("unionType");
33
+ if (normalized.kind !== "unionType")
34
+ return;
35
+ expect(normalized.types).to.have.length(3);
36
+ const keys = normalized.types.map((t) => stableIrTypeKey(t));
37
+ expect(keys).to.deep.equal([
38
+ stableIrTypeKey(booleanType),
39
+ stableIrTypeKey(numberType),
40
+ stableIrTypeKey(stringType),
41
+ ]);
42
+ });
43
+ it("unwraps Promise/Task/ValueTask wrappers", () => {
44
+ const payload = { kind: "primitiveType", name: "int" };
45
+ const promiseType = {
46
+ kind: "referenceType",
47
+ name: "Promise",
48
+ typeArguments: [payload],
49
+ };
50
+ const taskType = {
51
+ kind: "referenceType",
52
+ name: "System.Threading.Tasks.Task_1",
53
+ resolvedClrType: "System.Threading.Tasks.Task`1[[System.Int32]]",
54
+ typeArguments: [payload],
55
+ };
56
+ const valueTaskType = {
57
+ kind: "referenceType",
58
+ name: "ValueTask_1",
59
+ resolvedClrType: "System.Threading.Tasks.ValueTask`1[[System.Int32]]",
60
+ typeArguments: [payload],
61
+ };
62
+ const plainType = {
63
+ kind: "referenceType",
64
+ name: "List_1",
65
+ typeArguments: [payload],
66
+ };
67
+ expect(unwrapAsyncWrapperType(promiseType)).to.deep.equal(payload);
68
+ expect(unwrapAsyncWrapperType(taskType)).to.deep.equal(payload);
69
+ expect(unwrapAsyncWrapperType(valueTaskType)).to.deep.equal(payload);
70
+ expect(unwrapAsyncWrapperType(plainType)).to.equal(undefined);
71
+ });
72
+ });
73
+ //# sourceMappingURL=type-ops.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-ops.test.js","sourceRoot":"","sources":["../../../src/ir/types/type-ops.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Attribute Collection — Argument Extraction & Descriptor Parsing
3
+ *
4
+ * Extracts attribute arguments from IR expressions and parses
5
+ * attribute descriptor calls (A.attr(AttrCtor, ...args)).
6
+ * Also contains shared constants, types, and utility functions
7
+ * used across the attribute collection pass.
8
+ */
9
+ import { Diagnostic, SourceLocation } from "../../../types/diagnostic.js";
10
+ import { IrModule, IrExpression, IrIdentifierExpression, IrAttributeTarget, IrAttributeArg, IrType } from "../../types.js";
11
+ export declare const ATTRIBUTES_IMPORT_SPECIFIER = "@tsonic/core/lang.js";
12
+ export declare const ATTRIBUTE_TARGETS_EXPORT_NAME = "AttributeTargets";
13
+ export declare const ATTRIBUTE_TARGETS: readonly IrAttributeTarget[];
14
+ export declare const ATTRIBUTE_TARGETS_SET: Set<IrAttributeTarget>;
15
+ export type ParseResult<T> = {
16
+ readonly kind: "notMatch";
17
+ } | {
18
+ readonly kind: "ok";
19
+ readonly value: T;
20
+ } | {
21
+ readonly kind: "error";
22
+ readonly diagnostic: Diagnostic;
23
+ };
24
+ export type ParsedAttributeDescriptor = {
25
+ readonly attributeType: IrType;
26
+ readonly positionalArgs: readonly IrAttributeArg[];
27
+ readonly namedArgs: ReadonlyMap<string, IrAttributeArg>;
28
+ readonly sourceSpan?: SourceLocation;
29
+ };
30
+ /**
31
+ * Intermediate representation of a detected attribute marker call
32
+ */
33
+ export type AttributeMarker = {
34
+ readonly targetName: string;
35
+ readonly targetSelector: "type" | "ctor" | "method" | "prop";
36
+ readonly selectedMemberName?: string;
37
+ readonly attributeTarget?: IrAttributeTarget;
38
+ readonly attributeType: IrType;
39
+ readonly positionalArgs: readonly IrAttributeArg[];
40
+ readonly namedArgs: ReadonlyMap<string, IrAttributeArg>;
41
+ readonly sourceSpan?: SourceLocation;
42
+ };
43
+ /**
44
+ * Create a source location for error reporting
45
+ */
46
+ export declare const createLocation: (filePath: string, sourceSpan?: SourceLocation) => SourceLocation;
47
+ export declare const isAttributesApiIdentifier: (expr: IrExpression, apiNames: ReadonlySet<string>) => expr is IrIdentifierExpression;
48
+ export declare const getAttributesApiLocalNames: (module: IrModule) => ReadonlySet<string>;
49
+ export declare const getAttributeTargetsApiLocalNames: (module: IrModule) => ReadonlySet<string>;
50
+ /**
51
+ * Try to extract an attribute argument from an IR expression.
52
+ * Returns undefined if the expression is not a valid attribute argument.
53
+ */
54
+ export declare const tryExtractAttributeArg: (expr: IrExpression) => IrAttributeArg | undefined;
55
+ export declare const resolveClrTypeForAttributeCtor: (ctorIdent: IrIdentifierExpression, module: IrModule) => string | undefined;
56
+ export declare const makeAttributeType: (ctorIdent: IrIdentifierExpression, module: IrModule) => ParseResult<IrType>;
57
+ export declare const parseAttrDescriptorCall: (expr: IrExpression, module: IrModule, apiNames: ReadonlySet<string>) => ParseResult<ParsedAttributeDescriptor>;
58
+ //# sourceMappingURL=arg-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arg-extractor.d.ts","sourceRoot":"","sources":["../../../../src/ir/validation/attribute-collection/arg-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,UAAU,EAEV,cAAc,EACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,QAAQ,EACR,YAAY,EAGZ,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EAEd,MAAM,EAGP,MAAM,gBAAgB,CAAC;AAMxB,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAClE,eAAO,MAAM,6BAA6B,qBAAqB,CAAC;AAEhE,eAAO,MAAM,iBAAiB,EAAE,SAAS,iBAAiB,EAUzD,CAAC;AAEF,eAAO,MAAM,qBAAqB,wBAEjC,CAAC;AAMF,MAAM,MAAM,WAAW,CAAC,CAAC,IACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAC1C;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAEhE,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,SAAS,cAAc,EAAE,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,iBAAiB,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,SAAS,cAAc,EAAE,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;CACtC,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,EAChB,aAAa,cAAc,KAC1B,cAC8D,CAAC;AAElE,eAAO,MAAM,yBAAyB,GACpC,MAAM,YAAY,EAClB,UAAU,WAAW,CAAC,MAAM,CAAC,KAC5B,IAAI,IAAI,sBAC4C,CAAC;AAExD,eAAO,MAAM,0BAA0B,GACrC,QAAQ,QAAQ,KACf,WAAW,CAAC,MAAM,CAWpB,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAC3C,QAAQ,QAAQ,KACf,WAAW,CAAC,MAAM,CAWpB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,YAAY,KACjB,cAAc,GAAG,SAuEnB,CAAC;AAMF,eAAO,MAAM,8BAA8B,GACzC,WAAW,sBAAsB,EACjC,QAAQ,QAAQ,KACf,MAAM,GAAG,SAeX,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,WAAW,sBAAsB,EACjC,QAAQ,QAAQ,KACf,WAAW,CAAC,MAAM,CAiCpB,CAAC;AAMF,eAAO,MAAM,uBAAuB,GAClC,MAAM,YAAY,EAClB,QAAQ,QAAQ,EAChB,UAAU,WAAW,CAAC,MAAM,CAAC,KAC5B,WAAW,CAAC,yBAAyB,CA+IvC,CAAC"}
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Attribute Collection — Argument Extraction & Descriptor Parsing
3
+ *
4
+ * Extracts attribute arguments from IR expressions and parses
5
+ * attribute descriptor calls (A.attr(AttrCtor, ...args)).
6
+ * Also contains shared constants, types, and utility functions
7
+ * used across the attribute collection pass.
8
+ */
9
+ import { createDiagnostic, } from "../../../types/diagnostic.js";
10
+ // ═══════════════════════════════════════════════════════════════════════════
11
+ // CONSTANTS
12
+ // ═══════════════════════════════════════════════════════════════════════════
13
+ export const ATTRIBUTES_IMPORT_SPECIFIER = "@tsonic/core/lang.js";
14
+ export const ATTRIBUTE_TARGETS_EXPORT_NAME = "AttributeTargets";
15
+ export const ATTRIBUTE_TARGETS = [
16
+ "assembly",
17
+ "module",
18
+ "type",
19
+ "method",
20
+ "property",
21
+ "field",
22
+ "event",
23
+ "param",
24
+ "return",
25
+ ];
26
+ export const ATTRIBUTE_TARGETS_SET = new Set(ATTRIBUTE_TARGETS);
27
+ // ═══════════════════════════════════════════════════════════════════════════
28
+ // UTILITY FUNCTIONS
29
+ // ═══════════════════════════════════════════════════════════════════════════
30
+ /**
31
+ * Create a source location for error reporting
32
+ */
33
+ export const createLocation = (filePath, sourceSpan) => sourceSpan ?? { file: filePath, line: 1, column: 1, length: 1 };
34
+ export const isAttributesApiIdentifier = (expr, apiNames) => expr.kind === "identifier" && apiNames.has(expr.name);
35
+ export const getAttributesApiLocalNames = (module) => {
36
+ const names = new Set();
37
+ for (const imp of module.imports) {
38
+ if (imp.source !== ATTRIBUTES_IMPORT_SPECIFIER)
39
+ continue;
40
+ for (const spec of imp.specifiers) {
41
+ if (spec.kind !== "named")
42
+ continue;
43
+ if (spec.name !== "attributes")
44
+ continue;
45
+ names.add(spec.localName);
46
+ }
47
+ }
48
+ return names;
49
+ };
50
+ export const getAttributeTargetsApiLocalNames = (module) => {
51
+ const names = new Set();
52
+ for (const imp of module.imports) {
53
+ if (imp.source !== ATTRIBUTES_IMPORT_SPECIFIER)
54
+ continue;
55
+ for (const spec of imp.specifiers) {
56
+ if (spec.kind !== "named")
57
+ continue;
58
+ if (spec.name !== ATTRIBUTE_TARGETS_EXPORT_NAME)
59
+ continue;
60
+ names.add(spec.localName);
61
+ }
62
+ }
63
+ return names;
64
+ };
65
+ // ═══════════════════════════════════════════════════════════════════════════
66
+ // ARGUMENT EXTRACTION
67
+ // ═══════════════════════════════════════════════════════════════════════════
68
+ /**
69
+ * Try to extract an attribute argument from an IR expression.
70
+ * Returns undefined if the expression is not a valid attribute argument.
71
+ */
72
+ export const tryExtractAttributeArg = (expr) => {
73
+ const tryExtractPrimitive = (e) => {
74
+ const extracted = tryExtractAttributeArg(e);
75
+ if (!extracted)
76
+ return undefined;
77
+ if (extracted.kind === "array")
78
+ return undefined;
79
+ return extracted;
80
+ };
81
+ if (expr.kind === "literal") {
82
+ if (typeof expr.value === "string") {
83
+ return { kind: "string", value: expr.value };
84
+ }
85
+ if (typeof expr.value === "number") {
86
+ return { kind: "number", value: expr.value };
87
+ }
88
+ if (typeof expr.value === "boolean") {
89
+ return { kind: "boolean", value: expr.value };
90
+ }
91
+ }
92
+ // Arrays of compile-time constants are valid attribute arguments in C#.
93
+ // Example: [Index(new[] { "PropertyId", "Ts" })]
94
+ if (expr.kind === "array") {
95
+ const arr = expr;
96
+ const elements = [];
97
+ if (arr.elements.length === 0)
98
+ return undefined;
99
+ for (const el of arr.elements) {
100
+ if (!el || el.kind === "spread") {
101
+ return undefined;
102
+ }
103
+ const v = tryExtractPrimitive(el);
104
+ if (!v)
105
+ return undefined;
106
+ elements.push(v);
107
+ }
108
+ return { kind: "array", elements };
109
+ }
110
+ // typeof(SomeType) → C# typeof(SomeType) attribute argument
111
+ if (expr.kind === "unary" && expr.operator === "typeof") {
112
+ const targetType = expr.expression.inferredType;
113
+ if (targetType && targetType.kind !== "unknownType") {
114
+ return { kind: "typeof", type: targetType };
115
+ }
116
+ }
117
+ // Enum.Member → enum literal argument
118
+ if (expr.kind === "memberAccess" &&
119
+ !expr.isComputed &&
120
+ typeof expr.property === "string") {
121
+ const object = expr.object;
122
+ const enumType = expr.inferredType && expr.inferredType.kind === "referenceType"
123
+ ? expr.inferredType
124
+ : object.kind === "identifier" &&
125
+ object.inferredType &&
126
+ object.inferredType.kind === "referenceType"
127
+ ? object.inferredType
128
+ : undefined;
129
+ if (enumType) {
130
+ const binding = expr.memberBinding;
131
+ const member = binding?.member ?? expr.property;
132
+ return { kind: "enum", type: enumType, member };
133
+ }
134
+ }
135
+ return undefined;
136
+ };
137
+ // ═══════════════════════════════════════════════════════════════════════════
138
+ // CLR TYPE RESOLUTION
139
+ // ═══════════════════════════════════════════════════════════════════════════
140
+ export const resolveClrTypeForAttributeCtor = (ctorIdent, module) => {
141
+ if (ctorIdent.resolvedClrType)
142
+ return ctorIdent.resolvedClrType;
143
+ // Prefer CLR imports: these are the authoritative mapping for runtime type names.
144
+ for (const imp of module.imports) {
145
+ if (!imp.isClr)
146
+ continue;
147
+ if (!imp.resolvedNamespace)
148
+ continue;
149
+ for (const spec of imp.specifiers) {
150
+ if (spec.kind !== "named")
151
+ continue;
152
+ if (spec.localName !== ctorIdent.name)
153
+ continue;
154
+ return `${imp.resolvedNamespace}.${spec.name}`;
155
+ }
156
+ }
157
+ return undefined;
158
+ };
159
+ export const makeAttributeType = (ctorIdent, module) => {
160
+ const resolvedClrType = resolveClrTypeForAttributeCtor(ctorIdent, module);
161
+ if (resolvedClrType) {
162
+ return {
163
+ kind: "ok",
164
+ value: {
165
+ kind: "referenceType",
166
+ name: ctorIdent.name,
167
+ resolvedClrType,
168
+ },
169
+ };
170
+ }
171
+ // Allow locally-emitted attribute types (non-ambient class declarations).
172
+ const hasLocalClass = module.body.some((s) => s.kind === "classDeclaration" && s.name === ctorIdent.name);
173
+ if (hasLocalClass) {
174
+ return {
175
+ kind: "ok",
176
+ value: { kind: "referenceType", name: ctorIdent.name },
177
+ };
178
+ }
179
+ return {
180
+ kind: "error",
181
+ diagnostic: createDiagnostic("TSN4004", "error", `Missing CLR binding for attribute constructor '${ctorIdent.name}'. Import the attribute type from a CLR bindings module (e.g., @tsonic/dotnet) or define it as a local class.`, createLocation(module.filePath, ctorIdent.sourceSpan)),
182
+ };
183
+ };
184
+ // ═══════════════════════════════════════════════════════════════════════════
185
+ // DESCRIPTOR PARSING
186
+ // ═══════════════════════════════════════════════════════════════════════════
187
+ export const parseAttrDescriptorCall = (expr, module, apiNames) => {
188
+ if (expr.kind !== "call")
189
+ return { kind: "notMatch" };
190
+ const call = expr;
191
+ if (call.callee.kind !== "memberAccess")
192
+ return { kind: "notMatch" };
193
+ const member = call.callee;
194
+ if (member.isComputed || typeof member.property !== "string")
195
+ return { kind: "notMatch" };
196
+ if (member.property !== "attr")
197
+ return { kind: "notMatch" };
198
+ if (!isAttributesApiIdentifier(member.object, apiNames))
199
+ return { kind: "notMatch" };
200
+ if (call.arguments.length < 1) {
201
+ return {
202
+ kind: "error",
203
+ diagnostic: createDiagnostic("TSN4005", "error", `Invalid attribute marker: A.attr(AttrCtor, ...args) requires at least the attribute constructor`, createLocation(module.filePath, call.sourceSpan)),
204
+ };
205
+ }
206
+ const rawArgs = [];
207
+ for (const arg of call.arguments) {
208
+ if (!arg || arg.kind === "spread") {
209
+ return {
210
+ kind: "error",
211
+ diagnostic: createDiagnostic("TSN4006", "error", `Invalid attribute argument: spreads are not allowed in attributes`, createLocation(module.filePath, call.sourceSpan)),
212
+ };
213
+ }
214
+ rawArgs.push(arg);
215
+ }
216
+ const ctorExpr = rawArgs[0];
217
+ if (!ctorExpr || ctorExpr.kind !== "identifier") {
218
+ return {
219
+ kind: "error",
220
+ diagnostic: createDiagnostic("TSN4005", "error", `Invalid attribute marker: A.attr(...) attribute constructor must be an identifier`, createLocation(module.filePath, call.sourceSpan)),
221
+ };
222
+ }
223
+ const attributeCtor = ctorExpr;
224
+ const attributeTypeResult = makeAttributeType(attributeCtor, module);
225
+ if (attributeTypeResult.kind !== "ok") {
226
+ return attributeTypeResult;
227
+ }
228
+ const positionalArgs = [];
229
+ const namedArgs = new Map();
230
+ let sawNamed = false;
231
+ for (const arg of rawArgs.slice(1)) {
232
+ if (arg.kind === "object") {
233
+ sawNamed = true;
234
+ const obj = arg;
235
+ for (const prop of obj.properties) {
236
+ if (prop.kind === "spread") {
237
+ return {
238
+ kind: "error",
239
+ diagnostic: createDiagnostic("TSN4006", "error", `Invalid attribute argument: spreads are not allowed in named arguments`, createLocation(module.filePath, obj.sourceSpan)),
240
+ };
241
+ }
242
+ if (prop.kind !== "property" || typeof prop.key !== "string") {
243
+ return {
244
+ kind: "error",
245
+ diagnostic: createDiagnostic("TSN4006", "error", `Invalid attribute argument: named arguments must be simple { Name: value } properties`, createLocation(module.filePath, obj.sourceSpan)),
246
+ };
247
+ }
248
+ const v = tryExtractAttributeArg(prop.value);
249
+ if (!v) {
250
+ return {
251
+ kind: "error",
252
+ diagnostic: createDiagnostic("TSN4006", "error", `Invalid attribute argument: named argument '${prop.key}' must be a compile-time constant`, createLocation(module.filePath, prop.value.sourceSpan)),
253
+ };
254
+ }
255
+ namedArgs.set(prop.key, v);
256
+ }
257
+ continue;
258
+ }
259
+ if (sawNamed) {
260
+ return {
261
+ kind: "error",
262
+ diagnostic: createDiagnostic("TSN4006", "error", `Invalid attribute argument: positional arguments cannot appear after named arguments`, createLocation(module.filePath, arg.sourceSpan)),
263
+ };
264
+ }
265
+ const v = tryExtractAttributeArg(arg);
266
+ if (!v) {
267
+ return {
268
+ kind: "error",
269
+ diagnostic: createDiagnostic("TSN4006", "error", `Invalid attribute argument: attribute arguments must be compile-time constants (string/number/boolean/typeof/enum/array)`, createLocation(module.filePath, arg.sourceSpan)),
270
+ };
271
+ }
272
+ positionalArgs.push(v);
273
+ }
274
+ return {
275
+ kind: "ok",
276
+ value: {
277
+ attributeType: attributeTypeResult.value,
278
+ positionalArgs,
279
+ namedArgs,
280
+ sourceSpan: call.sourceSpan,
281
+ },
282
+ };
283
+ };
284
+ //# sourceMappingURL=arg-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arg-extractor.js","sourceRoot":"","sources":["../../../../src/ir/validation/attribute-collection/arg-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Attribute Collection — API Detection & Pattern Matching
3
+ *
4
+ * Detects attribute API usage patterns and parses marker call chains
5
+ * like A.on(Target).type.add(AttrCtor, ...args).
6
+ */
7
+ import { SourceLocation } from "../../../types/diagnostic.js";
8
+ import { IrModule, IrExpression, IrCallExpression, IrIdentifierExpression, IrAttributeTarget } from "../../types.js";
9
+ import { type ParseResult, type ParsedAttributeDescriptor, type AttributeMarker } from "./arg-extractor.js";
10
+ export declare const parseAttributeTarget: (expr: IrExpression, module: IrModule, attributeTargetsApiNames: ReadonlySet<string>) => ParseResult<IrAttributeTarget>;
11
+ export declare const getMemberName: (expr: IrExpression) => string | undefined;
12
+ export declare const looksLikeAttributesApiUsage: (expr: IrExpression, apiNames: ReadonlySet<string>) => boolean;
13
+ export declare const parseOnCall: (expr: IrExpression, module: IrModule, apiNames: ReadonlySet<string>) => ParseResult<{
14
+ readonly target: IrIdentifierExpression;
15
+ readonly sourceSpan?: SourceLocation;
16
+ }>;
17
+ export declare const parseSelector: (selector: IrExpression, module: IrModule) => ParseResult<string>;
18
+ /**
19
+ * Try to detect if a call expression is an attribute marker pattern.
20
+ *
21
+ * Patterns:
22
+ * - A.on(Target).type.add(...)
23
+ * - A.on(Target).ctor.add(...)
24
+ * - A.on(Target).method(selector).add(...)
25
+ * - A.on(Target).prop(selector).add(...)
26
+ */
27
+ export declare const tryDetectAttributeMarker: (call: IrCallExpression, module: IrModule, apiNames: ReadonlySet<string>, attributeTargetsApiNames: ReadonlySet<string>, descriptors: ReadonlyMap<string, ParsedAttributeDescriptor>) => ParseResult<AttributeMarker>;
28
+ //# sourceMappingURL=marker-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker-parser.d.ts","sourceRoot":"","sources":["../../../../src/ir/validation/attribute-collection/marker-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAoB,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAEhB,sBAAsB,EACtB,iBAAiB,EAIlB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EAMrB,MAAM,oBAAoB,CAAC;AAM5B,eAAO,MAAM,oBAAoB,GAC/B,MAAM,YAAY,EAClB,QAAQ,QAAQ,EAChB,0BAA0B,WAAW,CAAC,MAAM,CAAC,KAC5C,WAAW,CAAC,iBAAiB,CA0C/B,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,MAAM,YAAY,KAAG,MAAM,GAAG,SAK3D,CAAC;AAMF,eAAO,MAAM,2BAA2B,GACtC,MAAM,YAAY,EAClB,UAAU,WAAW,CAAC,MAAM,CAAC,KAC5B,OAmDF,CAAC;AAMF,eAAO,MAAM,WAAW,GACtB,MAAM,YAAY,EAClB,QAAQ,QAAQ,EAChB,UAAU,WAAW,CAAC,MAAM,CAAC,KAC5B,WAAW,CAAC;IACb,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;CACtC,CAwDA,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,UAAU,YAAY,EACtB,QAAQ,QAAQ,KACf,WAAW,CAAC,MAAM,CA8EpB,CAAC;AAMF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GACnC,MAAM,gBAAgB,EACtB,QAAQ,QAAQ,EAChB,UAAU,WAAW,CAAC,MAAM,CAAC,EAC7B,0BAA0B,WAAW,CAAC,MAAM,CAAC,EAC7C,aAAa,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,KAC1D,WAAW,CAAC,eAAe,CAkT7B,CAAC"}