@tsonic/frontend 0.0.13 → 0.0.15

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 (513) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/graph/builder.js +2 -2
  3. package/dist/graph/builder.js.map +1 -1
  4. package/dist/graph/extraction/imports.js +1 -1
  5. package/dist/graph/extraction/imports.js.map +1 -1
  6. package/dist/graph/extraction/orchestrator.d.ts.map +1 -1
  7. package/dist/graph/extraction/orchestrator.js +1 -1
  8. package/dist/graph/extraction/orchestrator.js.map +1 -1
  9. package/dist/ir/binding/index.d.ts +134 -0
  10. package/dist/ir/binding/index.d.ts.map +1 -0
  11. package/dist/ir/binding/index.js +725 -0
  12. package/dist/ir/binding/index.js.map +1 -0
  13. package/dist/ir/binding-resolution.test.js +193 -52
  14. package/dist/ir/binding-resolution.test.js.map +1 -1
  15. package/dist/ir/builder/exports.d.ts +20 -2
  16. package/dist/ir/builder/exports.d.ts.map +1 -1
  17. package/dist/ir/builder/exports.js +65 -6
  18. package/dist/ir/builder/exports.js.map +1 -1
  19. package/dist/ir/builder/imports.d.ts +9 -5
  20. package/dist/ir/builder/imports.d.ts.map +1 -1
  21. package/dist/ir/builder/imports.js +20 -31
  22. package/dist/ir/builder/imports.js.map +1 -1
  23. package/dist/ir/builder/orchestrator.d.ts +10 -1
  24. package/dist/ir/builder/orchestrator.d.ts.map +1 -1
  25. package/dist/ir/builder/orchestrator.js +25 -14
  26. package/dist/ir/builder/orchestrator.js.map +1 -1
  27. package/dist/ir/builder/statements.d.ts +7 -1
  28. package/dist/ir/builder/statements.d.ts.map +1 -1
  29. package/dist/ir/builder/statements.js +7 -2
  30. package/dist/ir/builder/statements.js.map +1 -1
  31. package/dist/ir/builder/types.d.ts +3 -0
  32. package/dist/ir/builder/types.d.ts.map +1 -1
  33. package/dist/ir/builder/validation.d.ts +4 -1
  34. package/dist/ir/builder/validation.d.ts.map +1 -1
  35. package/dist/ir/builder/validation.js +37 -37
  36. package/dist/ir/builder/validation.js.map +1 -1
  37. package/dist/ir/builder.test.js +54 -111
  38. package/dist/ir/builder.test.js.map +1 -1
  39. package/dist/ir/clr-type-mappings.d.ts +42 -0
  40. package/dist/ir/clr-type-mappings.d.ts.map +1 -0
  41. package/dist/ir/clr-type-mappings.js +139 -0
  42. package/dist/ir/clr-type-mappings.js.map +1 -0
  43. package/dist/ir/converters/anonymous-synthesis.d.ts +30 -8
  44. package/dist/ir/converters/anonymous-synthesis.d.ts.map +1 -1
  45. package/dist/ir/converters/anonymous-synthesis.js +46 -55
  46. package/dist/ir/converters/anonymous-synthesis.js.map +1 -1
  47. package/dist/ir/converters/context.d.ts +40 -0
  48. package/dist/ir/converters/context.d.ts.map +1 -0
  49. package/dist/ir/converters/context.js +24 -0
  50. package/dist/ir/converters/context.js.map +1 -0
  51. package/dist/ir/converters/expressions/access.d.ts +6 -1
  52. package/dist/ir/converters/expressions/access.d.ts.map +1 -1
  53. package/dist/ir/converters/expressions/access.js +239 -15
  54. package/dist/ir/converters/expressions/access.js.map +1 -1
  55. package/dist/ir/converters/expressions/calls.d.ts +24 -3
  56. package/dist/ir/converters/expressions/calls.d.ts.map +1 -1
  57. package/dist/ir/converters/expressions/calls.js +450 -385
  58. package/dist/ir/converters/expressions/calls.js.map +1 -1
  59. package/dist/ir/converters/expressions/collections.d.ts +16 -3
  60. package/dist/ir/converters/expressions/collections.d.ts.map +1 -1
  61. package/dist/ir/converters/expressions/collections.js +300 -46
  62. package/dist/ir/converters/expressions/collections.js.map +1 -1
  63. package/dist/ir/converters/expressions/functions.d.ts +10 -3
  64. package/dist/ir/converters/expressions/functions.d.ts.map +1 -1
  65. package/dist/ir/converters/expressions/functions.js +140 -32
  66. package/dist/ir/converters/expressions/functions.js.map +1 -1
  67. package/dist/ir/converters/expressions/helpers.d.ts +22 -23
  68. package/dist/ir/converters/expressions/helpers.d.ts.map +1 -1
  69. package/dist/ir/converters/expressions/helpers.js +242 -239
  70. package/dist/ir/converters/expressions/helpers.js.map +1 -1
  71. package/dist/ir/converters/expressions/index.d.ts +1 -1
  72. package/dist/ir/converters/expressions/index.d.ts.map +1 -1
  73. package/dist/ir/converters/expressions/index.js +1 -1
  74. package/dist/ir/converters/expressions/index.js.map +1 -1
  75. package/dist/ir/converters/expressions/literals.d.ts +12 -12
  76. package/dist/ir/converters/expressions/literals.d.ts.map +1 -1
  77. package/dist/ir/converters/expressions/literals.js +62 -17
  78. package/dist/ir/converters/expressions/literals.js.map +1 -1
  79. package/dist/ir/converters/expressions/numeric-recovery.test.d.ts +5 -2
  80. package/dist/ir/converters/expressions/numeric-recovery.test.d.ts.map +1 -1
  81. package/dist/ir/converters/expressions/numeric-recovery.test.js +62 -49
  82. package/dist/ir/converters/expressions/numeric-recovery.test.js.map +1 -1
  83. package/dist/ir/converters/expressions/operators.d.ts +13 -4
  84. package/dist/ir/converters/expressions/operators.d.ts.map +1 -1
  85. package/dist/ir/converters/expressions/operators.js +179 -33
  86. package/dist/ir/converters/expressions/operators.js.map +1 -1
  87. package/dist/ir/converters/expressions/other.d.ts +11 -3
  88. package/dist/ir/converters/expressions/other.d.ts.map +1 -1
  89. package/dist/ir/converters/expressions/other.js +26 -10
  90. package/dist/ir/converters/expressions/other.js.map +1 -1
  91. package/dist/ir/converters/statements/control/blocks.d.ts +8 -2
  92. package/dist/ir/converters/statements/control/blocks.d.ts.map +1 -1
  93. package/dist/ir/converters/statements/control/blocks.js +7 -2
  94. package/dist/ir/converters/statements/control/blocks.js.map +1 -1
  95. package/dist/ir/converters/statements/control/conditionals.d.ts +14 -4
  96. package/dist/ir/converters/statements/control/conditionals.d.ts.map +1 -1
  97. package/dist/ir/converters/statements/control/conditionals.js +19 -10
  98. package/dist/ir/converters/statements/control/conditionals.js.map +1 -1
  99. package/dist/ir/converters/statements/control/exceptions.d.ts +10 -3
  100. package/dist/ir/converters/statements/control/exceptions.d.ts.map +1 -1
  101. package/dist/ir/converters/statements/control/exceptions.js +13 -7
  102. package/dist/ir/converters/statements/control/exceptions.js.map +1 -1
  103. package/dist/ir/converters/statements/control/loops.d.ts +16 -5
  104. package/dist/ir/converters/statements/control/loops.d.ts.map +1 -1
  105. package/dist/ir/converters/statements/control/loops.js +25 -15
  106. package/dist/ir/converters/statements/control/loops.js.map +1 -1
  107. package/dist/ir/converters/statements/declarations/classes/constructors.d.ts +3 -2
  108. package/dist/ir/converters/statements/declarations/classes/constructors.d.ts.map +1 -1
  109. package/dist/ir/converters/statements/declarations/classes/constructors.js +11 -7
  110. package/dist/ir/converters/statements/declarations/classes/constructors.js.map +1 -1
  111. package/dist/ir/converters/statements/declarations/classes/methods.d.ts +2 -1
  112. package/dist/ir/converters/statements/declarations/classes/methods.d.ts.map +1 -1
  113. package/dist/ir/converters/statements/declarations/classes/methods.js +63 -11
  114. package/dist/ir/converters/statements/declarations/classes/methods.js.map +1 -1
  115. package/dist/ir/converters/statements/declarations/classes/orchestrator.d.ts +2 -1
  116. package/dist/ir/converters/statements/declarations/classes/orchestrator.d.ts.map +1 -1
  117. package/dist/ir/converters/statements/declarations/classes/orchestrator.js +60 -40
  118. package/dist/ir/converters/statements/declarations/classes/orchestrator.js.map +1 -1
  119. package/dist/ir/converters/statements/declarations/classes/override-detection.d.ts +6 -2
  120. package/dist/ir/converters/statements/declarations/classes/override-detection.d.ts.map +1 -1
  121. package/dist/ir/converters/statements/declarations/classes/override-detection.js +49 -50
  122. package/dist/ir/converters/statements/declarations/classes/override-detection.js.map +1 -1
  123. package/dist/ir/converters/statements/declarations/classes/properties.d.ts +9 -1
  124. package/dist/ir/converters/statements/declarations/classes/properties.d.ts.map +1 -1
  125. package/dist/ir/converters/statements/declarations/classes/properties.js +119 -16
  126. package/dist/ir/converters/statements/declarations/classes/properties.js.map +1 -1
  127. package/dist/ir/converters/statements/declarations/enums.d.ts +2 -1
  128. package/dist/ir/converters/statements/declarations/enums.d.ts.map +1 -1
  129. package/dist/ir/converters/statements/declarations/enums.js +8 -2
  130. package/dist/ir/converters/statements/declarations/enums.js.map +1 -1
  131. package/dist/ir/converters/statements/declarations/functions.d.ts +2 -1
  132. package/dist/ir/converters/statements/declarations/functions.d.ts.map +1 -1
  133. package/dist/ir/converters/statements/declarations/functions.js +11 -6
  134. package/dist/ir/converters/statements/declarations/functions.js.map +1 -1
  135. package/dist/ir/converters/statements/declarations/index.d.ts +3 -1
  136. package/dist/ir/converters/statements/declarations/index.d.ts.map +1 -1
  137. package/dist/ir/converters/statements/declarations/index.js +3 -1
  138. package/dist/ir/converters/statements/declarations/index.js.map +1 -1
  139. package/dist/ir/converters/statements/declarations/interfaces.d.ts +3 -2
  140. package/dist/ir/converters/statements/declarations/interfaces.d.ts.map +1 -1
  141. package/dist/ir/converters/statements/declarations/interfaces.js +26 -20
  142. package/dist/ir/converters/statements/declarations/interfaces.js.map +1 -1
  143. package/dist/ir/converters/statements/declarations/registry.d.ts +72 -0
  144. package/dist/ir/converters/statements/declarations/registry.d.ts.map +1 -1
  145. package/dist/ir/converters/statements/declarations/registry.js +92 -0
  146. package/dist/ir/converters/statements/declarations/registry.js.map +1 -1
  147. package/dist/ir/converters/statements/declarations/type-aliases.d.ts +2 -1
  148. package/dist/ir/converters/statements/declarations/type-aliases.d.ts.map +1 -1
  149. package/dist/ir/converters/statements/declarations/type-aliases.js +6 -4
  150. package/dist/ir/converters/statements/declarations/type-aliases.js.map +1 -1
  151. package/dist/ir/converters/statements/declarations/variables.d.ts +11 -1
  152. package/dist/ir/converters/statements/declarations/variables.d.ts.map +1 -1
  153. package/dist/ir/converters/statements/declarations/variables.js +123 -19
  154. package/dist/ir/converters/statements/declarations/variables.js.map +1 -1
  155. package/dist/ir/converters/statements/declarations.d.ts +4 -1
  156. package/dist/ir/converters/statements/declarations.d.ts.map +1 -1
  157. package/dist/ir/converters/statements/declarations.js +4 -1
  158. package/dist/ir/converters/statements/declarations.js.map +1 -1
  159. package/dist/ir/converters/statements/helpers.d.ts +4 -3
  160. package/dist/ir/converters/statements/helpers.d.ts.map +1 -1
  161. package/dist/ir/converters/statements/helpers.js +55 -31
  162. package/dist/ir/converters/statements/helpers.js.map +1 -1
  163. package/dist/ir/converters/statements/index.d.ts +1 -1
  164. package/dist/ir/converters/statements/index.d.ts.map +1 -1
  165. package/dist/ir/converters/statements/index.js +2 -1
  166. package/dist/ir/converters/statements/index.js.map +1 -1
  167. package/dist/ir/expression-converter.d.ts +10 -3
  168. package/dist/ir/expression-converter.d.ts.map +1 -1
  169. package/dist/ir/expression-converter.js +150 -56
  170. package/dist/ir/expression-converter.js.map +1 -1
  171. package/dist/ir/hierarchical-bindings-e2e.test.js +10 -6
  172. package/dist/ir/hierarchical-bindings-e2e.test.js.map +1 -1
  173. package/dist/ir/index.d.ts +5 -0
  174. package/dist/ir/index.d.ts.map +1 -1
  175. package/dist/ir/index.js +5 -0
  176. package/dist/ir/index.js.map +1 -1
  177. package/dist/ir/no-ts-type-inference.test.d.ts +17 -0
  178. package/dist/ir/no-ts-type-inference.test.d.ts.map +1 -0
  179. package/dist/ir/no-ts-type-inference.test.js +171 -0
  180. package/dist/ir/no-ts-type-inference.test.js.map +1 -0
  181. package/dist/ir/program-context.d.ts +74 -0
  182. package/dist/ir/program-context.d.ts.map +1 -0
  183. package/dist/ir/program-context.js +286 -0
  184. package/dist/ir/program-context.js.map +1 -0
  185. package/dist/ir/statement-converter.d.ts +14 -4
  186. package/dist/ir/statement-converter.d.ts.map +1 -1
  187. package/dist/ir/statement-converter.js +31 -21
  188. package/dist/ir/statement-converter.js.map +1 -1
  189. package/dist/ir/syntax/binding-patterns.d.ts +22 -0
  190. package/dist/ir/syntax/binding-patterns.d.ts.map +1 -0
  191. package/dist/ir/syntax/binding-patterns.js +92 -0
  192. package/dist/ir/syntax/binding-patterns.js.map +1 -0
  193. package/dist/ir/thisarg-inference.test.d.ts +8 -0
  194. package/dist/ir/thisarg-inference.test.d.ts.map +1 -0
  195. package/dist/ir/thisarg-inference.test.js +94 -0
  196. package/dist/ir/thisarg-inference.test.js.map +1 -0
  197. package/dist/ir/type-converter.d.ts +5 -2
  198. package/dist/ir/type-converter.d.ts.map +1 -1
  199. package/dist/ir/type-converter.js +5 -2
  200. package/dist/ir/type-converter.js.map +1 -1
  201. package/dist/ir/type-system/core.d.ts +29 -0
  202. package/dist/ir/type-system/core.d.ts.map +1 -0
  203. package/dist/ir/type-system/core.js +456 -0
  204. package/dist/ir/type-system/core.js.map +1 -0
  205. package/dist/ir/type-system/index.d.ts +21 -0
  206. package/dist/ir/type-system/index.d.ts.map +1 -0
  207. package/dist/ir/type-system/index.js +43 -0
  208. package/dist/ir/type-system/index.js.map +1 -0
  209. package/dist/ir/type-system/internal/handle-types.d.ts +98 -0
  210. package/dist/ir/type-system/internal/handle-types.d.ts.map +1 -0
  211. package/dist/ir/type-system/internal/handle-types.js +13 -0
  212. package/dist/ir/type-system/internal/handle-types.js.map +1 -0
  213. package/dist/ir/type-system/internal/nominal-env.d.ts +66 -0
  214. package/dist/ir/type-system/internal/nominal-env.d.ts.map +1 -0
  215. package/dist/ir/type-system/internal/nominal-env.js +301 -0
  216. package/dist/ir/type-system/internal/nominal-env.js.map +1 -0
  217. package/dist/ir/type-system/internal/type-converter/arrays.d.ts +11 -0
  218. package/dist/ir/type-system/internal/type-converter/arrays.d.ts.map +1 -0
  219. package/dist/ir/{type-converter → type-system/internal/type-converter}/arrays.js +2 -2
  220. package/dist/ir/type-system/internal/type-converter/arrays.js.map +1 -0
  221. package/dist/ir/type-system/internal/type-converter/converter.d.ts +17 -0
  222. package/dist/ir/type-system/internal/type-converter/converter.d.ts.map +1 -0
  223. package/dist/ir/type-system/internal/type-converter/converter.js +16 -0
  224. package/dist/ir/type-system/internal/type-converter/converter.js.map +1 -0
  225. package/dist/ir/type-system/internal/type-converter/functions.d.ts +14 -0
  226. package/dist/ir/type-system/internal/type-converter/functions.d.ts.map +1 -0
  227. package/dist/ir/type-system/internal/type-converter/functions.js +66 -0
  228. package/dist/ir/type-system/internal/type-converter/functions.js.map +1 -0
  229. package/dist/ir/type-system/internal/type-converter/index.d.ts +11 -0
  230. package/dist/ir/type-system/internal/type-converter/index.d.ts.map +1 -0
  231. package/dist/ir/type-system/internal/type-converter/index.js +11 -0
  232. package/dist/ir/type-system/internal/type-converter/index.js.map +1 -0
  233. package/dist/ir/type-system/internal/type-converter/inference.d.ts +37 -0
  234. package/dist/ir/type-system/internal/type-converter/inference.d.ts.map +1 -0
  235. package/dist/ir/type-system/internal/type-converter/inference.js +32 -0
  236. package/dist/ir/type-system/internal/type-converter/inference.js.map +1 -0
  237. package/dist/ir/{type-converter → type-system/internal/type-converter}/literals.d.ts +1 -1
  238. package/dist/ir/type-system/internal/type-converter/literals.d.ts.map +1 -0
  239. package/dist/ir/type-system/internal/type-converter/literals.js.map +1 -0
  240. package/dist/ir/type-system/internal/type-converter/objects.d.ts +20 -0
  241. package/dist/ir/type-system/internal/type-converter/objects.d.ts.map +1 -0
  242. package/dist/ir/{type-converter → type-system/internal/type-converter}/objects.js +56 -6
  243. package/dist/ir/type-system/internal/type-converter/objects.js.map +1 -0
  244. package/dist/ir/{type-converter → type-system/internal/type-converter}/orchestrator.d.ts +3 -2
  245. package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts.map +1 -0
  246. package/dist/ir/{type-converter → type-system/internal/type-converter}/orchestrator.js +63 -21
  247. package/dist/ir/type-system/internal/type-converter/orchestrator.js.map +1 -0
  248. package/dist/ir/type-system/internal/type-converter/patterns.d.ts +12 -0
  249. package/dist/ir/type-system/internal/type-converter/patterns.d.ts.map +1 -0
  250. package/dist/ir/{type-converter → type-system/internal/type-converter}/patterns.js +22 -6
  251. package/dist/ir/type-system/internal/type-converter/patterns.js.map +1 -0
  252. package/dist/ir/{type-converter → type-system/internal/type-converter}/primitives.d.ts +1 -1
  253. package/dist/ir/type-system/internal/type-converter/primitives.d.ts.map +1 -0
  254. package/dist/ir/type-system/internal/type-converter/primitives.js.map +1 -0
  255. package/dist/ir/{type-converter → type-system/internal/type-converter}/references.d.ts +3 -2
  256. package/dist/ir/type-system/internal/type-converter/references.d.ts.map +1 -0
  257. package/dist/ir/type-system/internal/type-converter/references.js +551 -0
  258. package/dist/ir/type-system/internal/type-converter/references.js.map +1 -0
  259. package/dist/ir/type-system/internal/type-converter/unions-intersections.d.ts +15 -0
  260. package/dist/ir/type-system/internal/type-converter/unions-intersections.d.ts.map +1 -0
  261. package/dist/ir/type-system/internal/type-converter/unions-intersections.js +22 -0
  262. package/dist/ir/type-system/internal/type-converter/unions-intersections.js.map +1 -0
  263. package/dist/ir/{type-converter → type-system/internal/type-converter}/utility-types.d.ts +23 -36
  264. package/dist/ir/type-system/internal/type-converter/utility-types.d.ts.map +1 -0
  265. package/dist/ir/type-system/internal/type-converter/utility-types.js +879 -0
  266. package/dist/ir/type-system/internal/type-converter/utility-types.js.map +1 -0
  267. package/dist/ir/type-system/internal/type-converter/utility-types.test.d.ts.map +1 -0
  268. package/dist/ir/{type-converter → type-system/internal/type-converter}/utility-types.test.js +398 -120
  269. package/dist/ir/type-system/internal/type-converter/utility-types.test.js.map +1 -0
  270. package/dist/ir/type-system/internal/type-converter.d.ts +9 -0
  271. package/dist/ir/type-system/internal/type-converter.d.ts.map +1 -0
  272. package/dist/ir/type-system/internal/type-converter.js +9 -0
  273. package/dist/ir/type-system/internal/type-converter.js.map +1 -0
  274. package/dist/ir/type-system/internal/type-registry.d.ts +107 -0
  275. package/dist/ir/type-system/internal/type-registry.d.ts.map +1 -0
  276. package/dist/ir/type-system/internal/type-registry.js +534 -0
  277. package/dist/ir/type-system/internal/type-registry.js.map +1 -0
  278. package/dist/ir/type-system/internal/universe/alias-table.d.ts +92 -0
  279. package/dist/ir/type-system/internal/universe/alias-table.d.ts.map +1 -0
  280. package/dist/ir/type-system/internal/universe/alias-table.js +222 -0
  281. package/dist/ir/type-system/internal/universe/alias-table.js.map +1 -0
  282. package/dist/ir/type-system/internal/universe/clr-catalog.d.ts +44 -0
  283. package/dist/ir/type-system/internal/universe/clr-catalog.d.ts.map +1 -0
  284. package/dist/ir/type-system/internal/universe/clr-catalog.js +1176 -0
  285. package/dist/ir/type-system/internal/universe/clr-catalog.js.map +1 -0
  286. package/dist/ir/type-system/internal/universe/index.d.ts +26 -0
  287. package/dist/ir/type-system/internal/universe/index.d.ts.map +1 -0
  288. package/dist/ir/type-system/internal/universe/index.js +30 -0
  289. package/dist/ir/type-system/internal/universe/index.js.map +1 -0
  290. package/dist/ir/type-system/internal/universe/resolution.d.ts +115 -0
  291. package/dist/ir/type-system/internal/universe/resolution.d.ts.map +1 -0
  292. package/dist/ir/type-system/internal/universe/resolution.js +181 -0
  293. package/dist/ir/type-system/internal/universe/resolution.js.map +1 -0
  294. package/dist/ir/type-system/internal/universe/source-catalog.d.ts +62 -0
  295. package/dist/ir/type-system/internal/universe/source-catalog.d.ts.map +1 -0
  296. package/dist/ir/type-system/internal/universe/source-catalog.js +91 -0
  297. package/dist/ir/type-system/internal/universe/source-catalog.js.map +1 -0
  298. package/dist/ir/type-system/internal/universe/types.d.ts +436 -0
  299. package/dist/ir/type-system/internal/universe/types.d.ts.map +1 -0
  300. package/dist/ir/type-system/internal/universe/types.js +69 -0
  301. package/dist/ir/type-system/internal/universe/types.js.map +1 -0
  302. package/dist/ir/type-system/internal/universe/unified-universe.d.ts +70 -0
  303. package/dist/ir/type-system/internal/universe/unified-universe.d.ts.map +1 -0
  304. package/dist/ir/type-system/internal/universe/unified-universe.js +319 -0
  305. package/dist/ir/type-system/internal/universe/unified-universe.js.map +1 -0
  306. package/dist/ir/type-system/type-system.d.ts +617 -0
  307. package/dist/ir/type-system/type-system.d.ts.map +1 -0
  308. package/dist/ir/type-system/type-system.js +2420 -0
  309. package/dist/ir/type-system/type-system.js.map +1 -0
  310. package/dist/ir/type-system/types.d.ts +176 -0
  311. package/dist/ir/type-system/types.d.ts.map +1 -0
  312. package/dist/ir/type-system/types.js +80 -0
  313. package/dist/ir/type-system/types.js.map +1 -0
  314. package/dist/ir/type-universe/assembly-catalog.d.ts +44 -0
  315. package/dist/ir/type-universe/assembly-catalog.d.ts.map +1 -0
  316. package/dist/ir/type-universe/assembly-catalog.js +532 -0
  317. package/dist/ir/type-universe/assembly-catalog.js.map +1 -0
  318. package/dist/ir/type-universe/assembly-catalog.test.d.ts +7 -0
  319. package/dist/ir/type-universe/assembly-catalog.test.d.ts.map +1 -0
  320. package/dist/ir/type-universe/assembly-catalog.test.js +105 -0
  321. package/dist/ir/type-universe/assembly-catalog.test.js.map +1 -0
  322. package/dist/ir/type-universe/index.d.ts +19 -0
  323. package/dist/ir/type-universe/index.d.ts.map +1 -0
  324. package/dist/ir/type-universe/index.js +21 -0
  325. package/dist/ir/type-universe/index.js.map +1 -0
  326. package/dist/ir/type-universe/types.d.ts +436 -0
  327. package/dist/ir/type-universe/types.d.ts.map +1 -0
  328. package/dist/ir/type-universe/types.js +69 -0
  329. package/dist/ir/type-universe/types.js.map +1 -0
  330. package/dist/ir/type-universe/unified-catalog.d.ts +70 -0
  331. package/dist/ir/type-universe/unified-catalog.d.ts.map +1 -0
  332. package/dist/ir/type-universe/unified-catalog.js +319 -0
  333. package/dist/ir/type-universe/unified-catalog.js.map +1 -0
  334. package/dist/ir/type-universe/unified-catalog.test.d.ts +7 -0
  335. package/dist/ir/type-universe/unified-catalog.test.d.ts.map +1 -0
  336. package/dist/ir/type-universe/unified-catalog.test.js +135 -0
  337. package/dist/ir/type-universe/unified-catalog.test.js.map +1 -0
  338. package/dist/ir/types/expressions.d.ts +74 -2
  339. package/dist/ir/types/expressions.d.ts.map +1 -1
  340. package/dist/ir/types/helpers.d.ts +22 -2
  341. package/dist/ir/types/helpers.d.ts.map +1 -1
  342. package/dist/ir/types/index.d.ts +4 -2
  343. package/dist/ir/types/index.d.ts.map +1 -1
  344. package/dist/ir/types/index.js +1 -0
  345. package/dist/ir/types/index.js.map +1 -1
  346. package/dist/ir/types/ir-substitution.d.ts +144 -0
  347. package/dist/ir/types/ir-substitution.d.ts.map +1 -0
  348. package/dist/ir/types/ir-substitution.js +569 -0
  349. package/dist/ir/types/ir-substitution.js.map +1 -0
  350. package/dist/ir/types/ir-types.d.ts +9 -3
  351. package/dist/ir/types/ir-types.d.ts.map +1 -1
  352. package/dist/ir/types/numeric-helpers.d.ts +2 -1
  353. package/dist/ir/types/numeric-helpers.d.ts.map +1 -1
  354. package/dist/ir/types/numeric-helpers.js +9 -3
  355. package/dist/ir/types/numeric-helpers.js.map +1 -1
  356. package/dist/ir/types/statements.d.ts +13 -1
  357. package/dist/ir/types/statements.d.ts.map +1 -1
  358. package/dist/ir/types.d.ts +1 -1
  359. package/dist/ir/types.d.ts.map +1 -1
  360. package/dist/ir/types.js.map +1 -1
  361. package/dist/ir/validation/anonymous-type-lowering-pass.d.ts.map +1 -1
  362. package/dist/ir/validation/anonymous-type-lowering-pass.js +165 -7
  363. package/dist/ir/validation/anonymous-type-lowering-pass.js.map +1 -1
  364. package/dist/ir/validation/arrow-return-finalization-pass.d.ts +28 -0
  365. package/dist/ir/validation/arrow-return-finalization-pass.d.ts.map +1 -0
  366. package/dist/ir/validation/arrow-return-finalization-pass.js +416 -0
  367. package/dist/ir/validation/arrow-return-finalization-pass.js.map +1 -0
  368. package/dist/ir/validation/attribute-collection-pass.d.ts.map +1 -1
  369. package/dist/ir/validation/attribute-collection-pass.js +40 -6
  370. package/dist/ir/validation/attribute-collection-pass.js.map +1 -1
  371. package/dist/ir/validation/attribute-collection-pass.test.js +43 -36
  372. package/dist/ir/validation/attribute-collection-pass.test.js.map +1 -1
  373. package/dist/ir/validation/index.d.ts +3 -0
  374. package/dist/ir/validation/index.d.ts.map +1 -1
  375. package/dist/ir/validation/index.js +3 -0
  376. package/dist/ir/validation/index.js.map +1 -1
  377. package/dist/ir/validation/numeric-coercion-pass.d.ts +22 -16
  378. package/dist/ir/validation/numeric-coercion-pass.d.ts.map +1 -1
  379. package/dist/ir/validation/numeric-coercion-pass.js +159 -51
  380. package/dist/ir/validation/numeric-coercion-pass.js.map +1 -1
  381. package/dist/ir/validation/numeric-invariants.test.js +72 -108
  382. package/dist/ir/validation/numeric-invariants.test.js.map +1 -1
  383. package/dist/ir/validation/numeric-proof-pass.d.ts.map +1 -1
  384. package/dist/ir/validation/numeric-proof-pass.js +71 -23
  385. package/dist/ir/validation/numeric-proof-pass.js.map +1 -1
  386. package/dist/ir/validation/rest-type-synthesis-pass.d.ts +24 -0
  387. package/dist/ir/validation/rest-type-synthesis-pass.d.ts.map +1 -0
  388. package/dist/ir/validation/rest-type-synthesis-pass.js +417 -0
  389. package/dist/ir/validation/rest-type-synthesis-pass.js.map +1 -0
  390. package/dist/ir/validation/soundness-gate.d.ts +11 -1
  391. package/dist/ir/validation/soundness-gate.d.ts.map +1 -1
  392. package/dist/ir/validation/soundness-gate.js +42 -10
  393. package/dist/ir/validation/soundness-gate.js.map +1 -1
  394. package/dist/ir/validation/soundness-gate.test.js +19 -2
  395. package/dist/ir/validation/soundness-gate.test.js.map +1 -1
  396. package/dist/ir/validation/virtual-marking-pass.d.ts +16 -0
  397. package/dist/ir/validation/virtual-marking-pass.d.ts.map +1 -0
  398. package/dist/ir/validation/virtual-marking-pass.js +77 -0
  399. package/dist/ir/validation/virtual-marking-pass.js.map +1 -0
  400. package/dist/ir/validation/yield-lowering-pass.test.js +2 -2
  401. package/dist/ir/validation/yield-lowering-pass.test.js.map +1 -1
  402. package/dist/program/bindings.d.ts +28 -0
  403. package/dist/program/bindings.d.ts.map +1 -1
  404. package/dist/program/bindings.js +204 -2
  405. package/dist/program/bindings.js.map +1 -1
  406. package/dist/program/bindings.test.js +30 -0
  407. package/dist/program/bindings.test.js.map +1 -1
  408. package/dist/program/creation.d.ts.map +1 -1
  409. package/dist/program/creation.js +251 -4
  410. package/dist/program/creation.js.map +1 -1
  411. package/dist/program/dependency-graph.d.ts.map +1 -1
  412. package/dist/program/dependency-graph.js +25 -25
  413. package/dist/program/dependency-graph.js.map +1 -1
  414. package/dist/program/diagnostics.d.ts.map +1 -1
  415. package/dist/program/diagnostics.js +6 -0
  416. package/dist/program/diagnostics.js.map +1 -1
  417. package/dist/program/index.d.ts +1 -1
  418. package/dist/program/index.d.ts.map +1 -1
  419. package/dist/program/types.d.ts +8 -8
  420. package/dist/program/types.d.ts.map +1 -1
  421. package/dist/resolver/clr-bindings-resolver.d.ts +1 -0
  422. package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -1
  423. package/dist/resolver/clr-bindings-resolver.js +90 -34
  424. package/dist/resolver/clr-bindings-resolver.js.map +1 -1
  425. package/dist/resolver/import-resolution.d.ts +16 -1
  426. package/dist/resolver/import-resolution.d.ts.map +1 -1
  427. package/dist/resolver/import-resolution.js +29 -12
  428. package/dist/resolver/import-resolution.js.map +1 -1
  429. package/dist/resolver/naming.d.ts +1 -1
  430. package/dist/resolver/naming.d.ts.map +1 -1
  431. package/dist/resolver/naming.js +13 -2
  432. package/dist/resolver/naming.js.map +1 -1
  433. package/dist/resolver.test.js +4 -0
  434. package/dist/resolver.test.js.map +1 -1
  435. package/dist/symbol-table/builder.d.ts +3 -1
  436. package/dist/symbol-table/builder.d.ts.map +1 -1
  437. package/dist/symbol-table/builder.js +9 -8
  438. package/dist/symbol-table/builder.js.map +1 -1
  439. package/dist/symbol-table/types.d.ts +2 -2
  440. package/dist/symbol-table/types.d.ts.map +1 -1
  441. package/dist/types/diagnostic.d.ts +12 -2
  442. package/dist/types/diagnostic.d.ts.map +1 -1
  443. package/dist/types/diagnostic.js +5 -1
  444. package/dist/types/diagnostic.js.map +1 -1
  445. package/dist/validation/extension-methods.d.ts +17 -0
  446. package/dist/validation/extension-methods.d.ts.map +1 -0
  447. package/dist/validation/extension-methods.js +133 -0
  448. package/dist/validation/extension-methods.js.map +1 -0
  449. package/dist/validation/generics.d.ts.map +1 -1
  450. package/dist/validation/generics.js +1 -129
  451. package/dist/validation/generics.js.map +1 -1
  452. package/dist/validation/imports.js +1 -1
  453. package/dist/validation/imports.js.map +1 -1
  454. package/dist/validation/index.d.ts +1 -0
  455. package/dist/validation/index.d.ts.map +1 -1
  456. package/dist/validation/index.js +1 -0
  457. package/dist/validation/index.js.map +1 -1
  458. package/dist/validation/orchestrator.d.ts.map +1 -1
  459. package/dist/validation/orchestrator.js +2 -0
  460. package/dist/validation/orchestrator.js.map +1 -1
  461. package/dist/validation/static-safety.d.ts +1 -0
  462. package/dist/validation/static-safety.d.ts.map +1 -1
  463. package/dist/validation/static-safety.js +366 -96
  464. package/dist/validation/static-safety.js.map +1 -1
  465. package/dist/validator.test.js +77 -1
  466. package/dist/validator.test.js.map +1 -1
  467. package/package.json +2 -2
  468. package/dist/ir/type-converter/arrays.d.ts +0 -10
  469. package/dist/ir/type-converter/arrays.d.ts.map +0 -1
  470. package/dist/ir/type-converter/arrays.js.map +0 -1
  471. package/dist/ir/type-converter/converter.d.ts +0 -6
  472. package/dist/ir/type-converter/converter.d.ts.map +0 -1
  473. package/dist/ir/type-converter/converter.js +0 -6
  474. package/dist/ir/type-converter/converter.js.map +0 -1
  475. package/dist/ir/type-converter/functions.d.ts +0 -10
  476. package/dist/ir/type-converter/functions.d.ts.map +0 -1
  477. package/dist/ir/type-converter/functions.js +0 -15
  478. package/dist/ir/type-converter/functions.js.map +0 -1
  479. package/dist/ir/type-converter/index.d.ts +0 -7
  480. package/dist/ir/type-converter/index.d.ts.map +0 -1
  481. package/dist/ir/type-converter/index.js +0 -7
  482. package/dist/ir/type-converter/index.js.map +0 -1
  483. package/dist/ir/type-converter/inference.d.ts +0 -32
  484. package/dist/ir/type-converter/inference.d.ts.map +0 -1
  485. package/dist/ir/type-converter/inference.js +0 -297
  486. package/dist/ir/type-converter/inference.js.map +0 -1
  487. package/dist/ir/type-converter/literals.d.ts.map +0 -1
  488. package/dist/ir/type-converter/literals.js.map +0 -1
  489. package/dist/ir/type-converter/objects.d.ts +0 -16
  490. package/dist/ir/type-converter/objects.d.ts.map +0 -1
  491. package/dist/ir/type-converter/objects.js.map +0 -1
  492. package/dist/ir/type-converter/orchestrator.d.ts.map +0 -1
  493. package/dist/ir/type-converter/orchestrator.js.map +0 -1
  494. package/dist/ir/type-converter/patterns.d.ts +0 -10
  495. package/dist/ir/type-converter/patterns.d.ts.map +0 -1
  496. package/dist/ir/type-converter/patterns.js.map +0 -1
  497. package/dist/ir/type-converter/primitives.d.ts.map +0 -1
  498. package/dist/ir/type-converter/primitives.js.map +0 -1
  499. package/dist/ir/type-converter/references.d.ts.map +0 -1
  500. package/dist/ir/type-converter/references.js +0 -371
  501. package/dist/ir/type-converter/references.js.map +0 -1
  502. package/dist/ir/type-converter/unions-intersections.d.ts +0 -14
  503. package/dist/ir/type-converter/unions-intersections.d.ts.map +0 -1
  504. package/dist/ir/type-converter/unions-intersections.js +0 -22
  505. package/dist/ir/type-converter/unions-intersections.js.map +0 -1
  506. package/dist/ir/type-converter/utility-types.d.ts.map +0 -1
  507. package/dist/ir/type-converter/utility-types.js +0 -528
  508. package/dist/ir/type-converter/utility-types.js.map +0 -1
  509. package/dist/ir/type-converter/utility-types.test.d.ts.map +0 -1
  510. package/dist/ir/type-converter/utility-types.test.js.map +0 -1
  511. /package/dist/ir/{type-converter → type-system/internal/type-converter}/literals.js +0 -0
  512. /package/dist/ir/{type-converter → type-system/internal/type-converter}/primitives.js +0 -0
  513. /package/dist/ir/{type-converter → type-system/internal/type-converter}/utility-types.test.d.ts +0 -0
@@ -0,0 +1,725 @@
1
+ /**
2
+ * Binding Layer — TS Symbol Resolution with Opaque Handles
3
+ *
4
+ * This module wraps TypeScript's symbol resolution APIs and returns opaque
5
+ * handles (DeclId, SignatureId, MemberId) instead of ts.Symbol/ts.Signature.
6
+ *
7
+ * ALLOWED APIs (symbol resolution only):
8
+ * - checker.getSymbolAtLocation(node) — Find symbol at AST node
9
+ * - checker.getAliasedSymbol(symbol) — Resolve import alias
10
+ * - checker.getExportSymbolOfSymbol(symbol) — Resolve export
11
+ * - symbol.getDeclarations() — Get AST declaration nodes
12
+ * - checker.getResolvedSignature(call) — Pick overload (type from declaration)
13
+ *
14
+ * BANNED APIs (these produce ts.Type, which violates INV-0):
15
+ * - checker.getTypeAtLocation
16
+ * - checker.getTypeOfSymbolAtLocation
17
+ * - checker.getContextualType
18
+ * - checker.typeToTypeNode
19
+ */
20
+ import ts from "typescript";
21
+ import { makeDeclId, makeSignatureId, makeMemberId, makeTypeSyntaxId, } from "../type-system/types.js";
22
+ // ═══════════════════════════════════════════════════════════════════════════
23
+ // BINDING IMPLEMENTATION
24
+ // ═══════════════════════════════════════════════════════════════════════════
25
+ /**
26
+ * Create a Binding instance for a TypeScript program.
27
+ *
28
+ * Returns BindingInternal which includes _getHandleRegistry() for TypeSystem.
29
+ * Cast to Binding when passing to regular converters.
30
+ */
31
+ export const createBinding = (checker) => {
32
+ // Internal registries mapping handles to underlying TS objects
33
+ const declMap = new Map();
34
+ const signatureMap = new Map();
35
+ const memberMap = new Map(); // key: "declId:name"
36
+ const typeSyntaxMap = new Map(); // TypeSyntaxId → TypeNode
37
+ // Auto-increment IDs
38
+ const nextDeclId = { value: 0 };
39
+ const nextSignatureId = { value: 0 };
40
+ const nextTypeSyntaxId = { value: 0 };
41
+ // Symbol to DeclId cache (avoid duplicate DeclIds for same symbol)
42
+ const symbolToDeclId = new Map();
43
+ const signatureToId = new Map();
44
+ // ─────────────────────────────────────────────────────────────────────────
45
+ // INTERNAL HELPERS
46
+ // ─────────────────────────────────────────────────────────────────────────
47
+ const getOrCreateDeclId = (symbol) => {
48
+ const existing = symbolToDeclId.get(symbol);
49
+ if (existing)
50
+ return existing;
51
+ const id = makeDeclId(nextDeclId.value++);
52
+ symbolToDeclId.set(symbol, id);
53
+ // Get declaration info
54
+ const decl = symbol.getDeclarations()?.[0];
55
+ // Capture class member names for override detection (TS-version safe)
56
+ const classMemberNames = decl && ts.isClassDeclaration(decl)
57
+ ? extractClassMemberNames(decl)
58
+ : undefined;
59
+ const entry = {
60
+ symbol,
61
+ decl,
62
+ typeNode: decl ? getTypeNodeFromDeclaration(decl) : undefined,
63
+ kind: decl ? getDeclKind(decl) : "variable",
64
+ fqName: symbol.getName(),
65
+ classMemberNames,
66
+ };
67
+ declMap.set(id.id, entry);
68
+ return id;
69
+ };
70
+ const getOrCreateSignatureId = (signature) => {
71
+ const existing = signatureToId.get(signature);
72
+ if (existing)
73
+ return existing;
74
+ const id = makeSignatureId(nextSignatureId.value++);
75
+ signatureToId.set(signature, id);
76
+ // Extract signature info from declaration
77
+ const decl = signature.getDeclaration();
78
+ // Extract declaring identity (CRITICAL for Alice's spec: resolveCall needs this)
79
+ const declaringIdentity = extractDeclaringIdentity(decl, checker);
80
+ // Extract type predicate from return type (ALICE'S SPEC: pure syntax inspection)
81
+ const returnTypeNode = getReturnTypeNode(decl);
82
+ const typePredicate = extractTypePredicate(returnTypeNode, decl);
83
+ const entry = {
84
+ signature,
85
+ decl,
86
+ parameters: extractParameterNodes(decl),
87
+ returnTypeNode,
88
+ typeParameters: extractTypeParameterNodes(decl),
89
+ declaringTypeTsName: declaringIdentity?.typeTsName,
90
+ declaringMemberName: declaringIdentity?.memberName,
91
+ typePredicate,
92
+ };
93
+ signatureMap.set(id.id, entry);
94
+ return id;
95
+ };
96
+ const getOrCreateMemberId = (ownerDeclId, memberName, memberSymbol) => {
97
+ const key = `${ownerDeclId.id}:${memberName}`;
98
+ const existing = memberMap.get(key);
99
+ if (existing)
100
+ return existing.memberId;
101
+ const id = makeMemberId(ownerDeclId, memberName);
102
+ const decl = memberSymbol.getDeclarations()?.[0];
103
+ const entry = {
104
+ memberId: id,
105
+ symbol: memberSymbol,
106
+ decl,
107
+ name: memberName,
108
+ typeNode: decl ? getMemberTypeAnnotation(decl) : undefined,
109
+ isOptional: isOptionalMember(memberSymbol),
110
+ isReadonly: isReadonlyMember(decl),
111
+ };
112
+ memberMap.set(key, entry);
113
+ return id;
114
+ };
115
+ // ─────────────────────────────────────────────────────────────────────────
116
+ // BINDING IMPLEMENTATION
117
+ // ─────────────────────────────────────────────────────────────────────────
118
+ const resolveIdentifier = (node) => {
119
+ const symbol = checker.getSymbolAtLocation(node);
120
+ if (!symbol)
121
+ return undefined;
122
+ // Follow aliases for imports
123
+ const resolvedSymbol = symbol.flags & ts.SymbolFlags.Alias
124
+ ? checker.getAliasedSymbol(symbol)
125
+ : symbol;
126
+ return getOrCreateDeclId(resolvedSymbol);
127
+ };
128
+ const resolveTypeReference = (node) => {
129
+ const typeName = node.typeName;
130
+ const symbol = ts.isIdentifier(typeName)
131
+ ? checker.getSymbolAtLocation(typeName)
132
+ : checker.getSymbolAtLocation(typeName.right);
133
+ if (!symbol)
134
+ return undefined;
135
+ // Follow aliases
136
+ const resolvedSymbol = symbol.flags & ts.SymbolFlags.Alias
137
+ ? checker.getAliasedSymbol(symbol)
138
+ : symbol;
139
+ return getOrCreateDeclId(resolvedSymbol);
140
+ };
141
+ const resolvePropertyAccess = (node) => {
142
+ const rawPropSymbol = checker.getSymbolAtLocation(node.name);
143
+ if (!rawPropSymbol)
144
+ return undefined;
145
+ const propSymbol = rawPropSymbol.flags & ts.SymbolFlags.Alias
146
+ ? checker.getAliasedSymbol(rawPropSymbol)
147
+ : rawPropSymbol;
148
+ // Get owner type's declaration
149
+ const rawOwnerSymbol = checker.getSymbolAtLocation(node.expression);
150
+ // Note: `getSymbolAtLocation(node.expression)` can be undefined for receivers
151
+ // that are not identifiers/member-accesses (e.g., `xs.where(...).select`).
152
+ // In that case we still want a stable MemberId for the member symbol itself,
153
+ // so we key the member entry off the member symbol's own DeclId.
154
+ const ownerSymbol = rawOwnerSymbol
155
+ ? rawOwnerSymbol.flags & ts.SymbolFlags.Alias
156
+ ? checker.getAliasedSymbol(rawOwnerSymbol)
157
+ : rawOwnerSymbol
158
+ : undefined;
159
+ const ownerDeclId = getOrCreateDeclId(ownerSymbol ?? propSymbol);
160
+ return getOrCreateMemberId(ownerDeclId, node.name.text, propSymbol);
161
+ };
162
+ const resolveElementAccess = (_node) => {
163
+ // Element access member resolution requires type-level analysis
164
+ // Return undefined (member not resolved via handles)
165
+ return undefined;
166
+ };
167
+ const resolveCallSignature = (node) => {
168
+ const signature = checker.getResolvedSignature(node);
169
+ if (!signature)
170
+ return undefined;
171
+ // TypeScript can produce a resolved signature without a declaration for
172
+ // implicit default constructors (e.g., `super()` when the base class has
173
+ // no explicit constructor). We still want a SignatureId so TypeSystem can
174
+ // treat this call deterministically as `void`.
175
+ if (signature.declaration === undefined) {
176
+ return node.expression.kind === ts.SyntaxKind.SuperKeyword
177
+ ? getOrCreateSignatureId(signature)
178
+ : undefined;
179
+ }
180
+ return getOrCreateSignatureId(signature);
181
+ };
182
+ const resolveConstructorSignature = (node) => {
183
+ const signature = checker.getResolvedSignature(node);
184
+ if (!signature)
185
+ return undefined;
186
+ const sigId = getOrCreateSignatureId(signature);
187
+ // For implicit default constructors, TypeScript may return a signature with no declaration.
188
+ // We still need a SignatureEntry that identifies the constructed type so TypeSystem can
189
+ // synthesize the constructor return type deterministically.
190
+ const entry = signatureMap.get(sigId.id);
191
+ if (entry && !entry.decl) {
192
+ const expr = node.expression;
193
+ const symbol = (() => {
194
+ if (ts.isIdentifier(expr))
195
+ return checker.getSymbolAtLocation(expr);
196
+ if (ts.isPropertyAccessExpression(expr)) {
197
+ return checker.getSymbolAtLocation(expr.name);
198
+ }
199
+ return undefined;
200
+ })();
201
+ const resolvedSymbol = symbol && symbol.flags & ts.SymbolFlags.Alias
202
+ ? checker.getAliasedSymbol(symbol)
203
+ : symbol;
204
+ const decl = resolvedSymbol?.getDeclarations()?.[0];
205
+ const declaringTypeTsName = (() => {
206
+ if (decl && ts.isClassDeclaration(decl) && decl.name)
207
+ return decl.name.text;
208
+ if (resolvedSymbol)
209
+ return resolvedSymbol.getName();
210
+ if (ts.isIdentifier(expr))
211
+ return expr.text;
212
+ if (ts.isPropertyAccessExpression(expr))
213
+ return expr.name.text;
214
+ return undefined;
215
+ })();
216
+ if (declaringTypeTsName) {
217
+ signatureMap.set(sigId.id, {
218
+ ...entry,
219
+ declaringTypeTsName,
220
+ declaringMemberName: "constructor",
221
+ typeParameters: decl && ts.isClassDeclaration(decl)
222
+ ? convertTypeParameterDeclarations(decl.typeParameters)
223
+ : undefined,
224
+ });
225
+ }
226
+ }
227
+ return sigId;
228
+ };
229
+ const resolveImport = (node) => {
230
+ const symbol = checker.getSymbolAtLocation(node.name);
231
+ if (!symbol)
232
+ return undefined;
233
+ const aliased = checker.getAliasedSymbol(symbol);
234
+ return getOrCreateDeclId(aliased);
235
+ };
236
+ const resolveShorthandAssignment = (node) => {
237
+ const symbol = checker.getShorthandAssignmentValueSymbol(node);
238
+ if (!symbol)
239
+ return undefined;
240
+ return getOrCreateDeclId(symbol);
241
+ };
242
+ const getDeclaringTypeNameOfMember = (member) => {
243
+ const key = `${member.declId.id}:${member.name}`;
244
+ const entry = memberMap.get(key);
245
+ const decl = entry?.decl;
246
+ if (!decl)
247
+ return undefined;
248
+ const parent = decl.parent;
249
+ if (ts.isInterfaceDeclaration(parent) && parent.name)
250
+ return parent.name.text;
251
+ if (ts.isClassDeclaration(parent) && parent.name)
252
+ return parent.name.text;
253
+ if (ts.isTypeAliasDeclaration(parent) && parent.name)
254
+ return parent.name.text;
255
+ return undefined;
256
+ };
257
+ const getFullyQualifiedName = (declId) => {
258
+ const entry = declMap.get(declId.id);
259
+ if (!entry)
260
+ return undefined;
261
+ return checker.getFullyQualifiedName(entry.symbol);
262
+ };
263
+ const getTypePredicateOfSignature = (sigId) => {
264
+ const entry = signatureMap.get(sigId.id);
265
+ if (!entry)
266
+ return undefined;
267
+ const predicate = checker.getTypePredicateOfSignature(entry.signature);
268
+ if (!predicate || predicate.kind !== ts.TypePredicateKind.Identifier) {
269
+ return undefined;
270
+ }
271
+ return {
272
+ kind: "typePredicate",
273
+ parameterIndex: predicate.parameterIndex ?? 0,
274
+ typeNode: predicate.type
275
+ ? checker.typeToTypeNode(predicate.type, undefined, ts.NodeBuilderFlags.None)
276
+ : undefined,
277
+ };
278
+ };
279
+ // ─────────────────────────────────────────────────────────────────────────
280
+ // HANDLE REGISTRY IMPLEMENTATION
281
+ // ─────────────────────────────────────────────────────────────────────────
282
+ const handleRegistry = {
283
+ getDecl: (id) => {
284
+ const entry = declMap.get(id.id);
285
+ if (!entry)
286
+ return undefined;
287
+ return {
288
+ typeNode: entry.typeNode,
289
+ kind: entry.kind,
290
+ fqName: entry.fqName,
291
+ declNode: entry.decl,
292
+ classMemberNames: entry.classMemberNames,
293
+ };
294
+ },
295
+ getSignature: (id) => {
296
+ const entry = signatureMap.get(id.id);
297
+ if (!entry)
298
+ return undefined;
299
+ return {
300
+ parameters: entry.parameters,
301
+ returnTypeNode: entry.returnTypeNode,
302
+ typeParameters: entry.typeParameters,
303
+ // CRITICAL for Alice's spec: declaring identity for resolveCall()
304
+ // Uses simple TS name, resolved via UnifiedTypeCatalog.resolveTsName()
305
+ declaringTypeTsName: entry.declaringTypeTsName,
306
+ declaringMemberName: entry.declaringMemberName,
307
+ // Type predicate extracted at registration time (Alice's spec)
308
+ typePredicate: entry.typePredicate,
309
+ };
310
+ },
311
+ getMember: (id) => {
312
+ const key = `${id.declId.id}:${id.name}`;
313
+ const entry = memberMap.get(key);
314
+ if (!entry)
315
+ return undefined;
316
+ return {
317
+ name: entry.name,
318
+ declNode: entry.decl,
319
+ typeNode: entry.typeNode,
320
+ isOptional: entry.isOptional,
321
+ isReadonly: entry.isReadonly,
322
+ };
323
+ },
324
+ getTypeSyntax: (id) => {
325
+ const entry = typeSyntaxMap.get(id.id);
326
+ if (!entry)
327
+ return undefined;
328
+ return {
329
+ typeNode: entry.typeNode,
330
+ };
331
+ },
332
+ };
333
+ // ─────────────────────────────────────────────────────────────────────────
334
+ // TYPE SYNTAX CAPTURE (Phase 2: TypeSyntaxId)
335
+ // ─────────────────────────────────────────────────────────────────────────
336
+ /**
337
+ * Capture a type syntax node for later conversion.
338
+ *
339
+ * This creates an opaque TypeSyntaxId handle that can be passed to
340
+ * TypeSystem.typeFromSyntax() for conversion. Used for inline type syntax
341
+ * that cannot be captured at catalog-build time.
342
+ */
343
+ const captureTypeSyntax = (node) => {
344
+ const id = makeTypeSyntaxId(nextTypeSyntaxId.value++);
345
+ typeSyntaxMap.set(id.id, { typeNode: node });
346
+ return id;
347
+ };
348
+ /**
349
+ * Capture multiple type arguments.
350
+ *
351
+ * Convenience method for capturing generic type arguments.
352
+ */
353
+ const captureTypeArgs = (nodes) => {
354
+ return nodes.map((node) => captureTypeSyntax(node));
355
+ };
356
+ return {
357
+ resolveIdentifier,
358
+ resolveTypeReference,
359
+ resolvePropertyAccess,
360
+ resolveElementAccess,
361
+ resolveCallSignature,
362
+ resolveConstructorSignature,
363
+ resolveImport,
364
+ resolveShorthandAssignment,
365
+ getDeclaringTypeNameOfMember,
366
+ getFullyQualifiedName,
367
+ getTypePredicateOfSignature,
368
+ // Type syntax capture (Phase 2: TypeSyntaxId)
369
+ captureTypeSyntax,
370
+ captureTypeArgs,
371
+ // Internal method for TypeSystem construction only
372
+ _getHandleRegistry: () => handleRegistry,
373
+ };
374
+ };
375
+ // ═══════════════════════════════════════════════════════════════════════════
376
+ // HELPER FUNCTIONS
377
+ // ═══════════════════════════════════════════════════════════════════════════
378
+ const getTypeNodeFromDeclaration = (decl) => {
379
+ if (ts.isVariableDeclaration(decl) && decl.type) {
380
+ return decl.type;
381
+ }
382
+ if (ts.isFunctionDeclaration(decl) || ts.isMethodDeclaration(decl)) {
383
+ return decl.type;
384
+ }
385
+ if (ts.isParameter(decl) && decl.type) {
386
+ return decl.type;
387
+ }
388
+ if (ts.isPropertyDeclaration(decl) && decl.type) {
389
+ return decl.type;
390
+ }
391
+ if (ts.isPropertySignature(decl) && decl.type) {
392
+ return decl.type;
393
+ }
394
+ if (ts.isTypeAliasDeclaration(decl)) {
395
+ return decl.type;
396
+ }
397
+ return undefined;
398
+ };
399
+ const getMemberTypeAnnotation = (decl) => {
400
+ if (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl)) {
401
+ return decl.type;
402
+ }
403
+ if (ts.isMethodDeclaration(decl) || ts.isMethodSignature(decl)) {
404
+ // For methods, we could return a function type node if needed
405
+ return decl.type;
406
+ }
407
+ if (ts.isGetAccessorDeclaration(decl)) {
408
+ return decl.type;
409
+ }
410
+ if (ts.isSetAccessorDeclaration(decl)) {
411
+ // Setter declarations have no return type; use the value parameter type.
412
+ const valueParam = decl.parameters[0];
413
+ return valueParam?.type;
414
+ }
415
+ return undefined;
416
+ };
417
+ const getDeclKind = (decl) => {
418
+ if (ts.isVariableDeclaration(decl))
419
+ return "variable";
420
+ if (ts.isFunctionDeclaration(decl))
421
+ return "function";
422
+ if (ts.isClassDeclaration(decl))
423
+ return "class";
424
+ if (ts.isInterfaceDeclaration(decl))
425
+ return "interface";
426
+ if (ts.isTypeAliasDeclaration(decl))
427
+ return "typeAlias";
428
+ if (ts.isEnumDeclaration(decl))
429
+ return "enum";
430
+ if (ts.isParameter(decl))
431
+ return "parameter";
432
+ if (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl))
433
+ return "property";
434
+ if (ts.isGetAccessorDeclaration(decl) || ts.isSetAccessorDeclaration(decl))
435
+ return "property";
436
+ if (ts.isMethodDeclaration(decl) || ts.isMethodSignature(decl))
437
+ return "method";
438
+ return "variable";
439
+ };
440
+ const getReturnTypeNode = (decl) => {
441
+ if (!decl)
442
+ return undefined;
443
+ return decl.type;
444
+ };
445
+ /**
446
+ * Extract and normalize parameter nodes from a signature declaration.
447
+ *
448
+ * ALICE'S SPEC: Parameter mode detection happens HERE during signature registration.
449
+ * If the parameter type is `ref<T>`, `out<T>`, or `in<T>`:
450
+ * - Set `mode` to that keyword
451
+ * - Set `typeNode` to the INNER T node (unwrapped)
452
+ *
453
+ * This is PURE SYNTAX inspection, no TS type inference.
454
+ */
455
+ const extractParameterNodes = (decl) => {
456
+ if (!decl)
457
+ return [];
458
+ return decl.parameters.map((p) => {
459
+ const normalized = normalizeParameterTypeNode(p.type);
460
+ return {
461
+ name: ts.isIdentifier(p.name) ? p.name.text : "param",
462
+ typeNode: normalized.typeNode,
463
+ isOptional: !!p.questionToken || !!p.initializer,
464
+ isRest: !!p.dotDotDotToken,
465
+ mode: normalized.mode,
466
+ };
467
+ });
468
+ };
469
+ /**
470
+ * Normalize a parameter type node by detecting ref<T>/out<T>/in<T> wrappers.
471
+ *
472
+ * This is PURE SYNTAX analysis - we look at the TypeNode AST structure:
473
+ * - If it's a TypeReferenceNode with identifier name "ref"/"out"/"in"
474
+ * - And exactly one type argument
475
+ * - Then unwrap to get the inner type
476
+ *
477
+ * @param typeNode The parameter's type node
478
+ * @returns { mode, typeNode } where typeNode is unwrapped if wrapper detected
479
+ */
480
+ const normalizeParameterTypeNode = (typeNode) => {
481
+ if (!typeNode) {
482
+ return { mode: "value", typeNode: undefined };
483
+ }
484
+ // Mirror IR conversion rules: wrappers may be nested and may appear in any order.
485
+ // - thisarg<T> marks an extension-method receiver parameter (erases for typing)
486
+ // - ref<T>/out<T>/in<T>/inref<T> set passing mode and erase to T for typing
487
+ let mode = "value";
488
+ let current = typeNode;
489
+ while (current) {
490
+ if (ts.isParenthesizedTypeNode(current)) {
491
+ current = current.type;
492
+ continue;
493
+ }
494
+ if (!ts.isTypeReferenceNode(current))
495
+ break;
496
+ if (!ts.isIdentifier(current.typeName))
497
+ break;
498
+ if (!current.typeArguments || current.typeArguments.length !== 1)
499
+ break;
500
+ const inner = current.typeArguments[0];
501
+ if (!inner)
502
+ break;
503
+ const wrapperName = current.typeName.text;
504
+ if (wrapperName === "thisarg") {
505
+ current = inner;
506
+ continue;
507
+ }
508
+ if (wrapperName === "ref" || wrapperName === "out") {
509
+ mode = wrapperName;
510
+ current = inner;
511
+ continue;
512
+ }
513
+ if (wrapperName === "in" || wrapperName === "inref") {
514
+ mode = "in";
515
+ current = inner;
516
+ continue;
517
+ }
518
+ break;
519
+ }
520
+ // No wrapper detected - regular parameter
521
+ return { mode, typeNode: current ?? typeNode };
522
+ };
523
+ const convertTypeParameterDeclarations = (typeParameters) => {
524
+ if (!typeParameters || typeParameters.length === 0)
525
+ return undefined;
526
+ return typeParameters.map((tp) => ({
527
+ name: tp.name.text,
528
+ constraintNode: tp.constraint,
529
+ defaultNode: tp.default,
530
+ }));
531
+ };
532
+ const extractTypeParameterNodes = (decl) => {
533
+ if (!decl)
534
+ return undefined;
535
+ // Constructor declarations don't have their own type parameters in TS syntax,
536
+ // but the enclosing class may be generic (class Box<T> { constructor(x: T) {} }).
537
+ // For constructor signature typing/inference, the relevant type parameters are the
538
+ // class type parameters.
539
+ if (ts.isConstructorDeclaration(decl)) {
540
+ const parent = decl.parent;
541
+ if (ts.isClassDeclaration(parent)) {
542
+ return convertTypeParameterDeclarations(parent.typeParameters);
543
+ }
544
+ return undefined;
545
+ }
546
+ return convertTypeParameterDeclarations(decl.typeParameters);
547
+ };
548
+ /**
549
+ * Extract type predicate from a signature's return type.
550
+ *
551
+ * ALICE'S SPEC: This is PURE SYNTAX inspection at registration time.
552
+ * We check if the return TypeNode is a TypePredicateNode (x is T or this is T).
553
+ * No TS type inference is used.
554
+ *
555
+ * @param returnTypeNode The signature's return type node
556
+ * @param decl The signature declaration (to find parameter index)
557
+ * @returns SignatureTypePredicate or undefined if not a predicate
558
+ */
559
+ const extractTypePredicate = (returnTypeNode, decl) => {
560
+ // Return type must be a TypePredicateNode
561
+ if (!returnTypeNode || !ts.isTypePredicateNode(returnTypeNode)) {
562
+ return undefined;
563
+ }
564
+ const predNode = returnTypeNode;
565
+ // Must have a target type
566
+ if (!predNode.type) {
567
+ return undefined;
568
+ }
569
+ // Check if it's "this is T" predicate
570
+ if (predNode.parameterName.kind === ts.SyntaxKind.ThisType) {
571
+ return {
572
+ kind: "this",
573
+ targetTypeNode: predNode.type,
574
+ };
575
+ }
576
+ // Check if it's "param is T" predicate
577
+ if (ts.isIdentifier(predNode.parameterName)) {
578
+ const paramName = predNode.parameterName.text;
579
+ // Find parameter index
580
+ const paramIndex = decl?.parameters.findIndex((p) => ts.isIdentifier(p.name) && p.name.text === paramName) ?? -1;
581
+ if (paramIndex >= 0) {
582
+ return {
583
+ kind: "param",
584
+ parameterName: paramName,
585
+ parameterIndex: paramIndex,
586
+ targetTypeNode: predNode.type,
587
+ };
588
+ }
589
+ }
590
+ return undefined;
591
+ };
592
+ const isOptionalMember = (symbol) => {
593
+ return (symbol.flags & ts.SymbolFlags.Optional) !== 0;
594
+ };
595
+ const isReadonlyMember = (decl) => {
596
+ if (!decl)
597
+ return false;
598
+ if (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl)) {
599
+ return (decl.modifiers?.some((m) => m.kind === ts.SyntaxKind.ReadonlyKeyword) ??
600
+ false);
601
+ }
602
+ return false;
603
+ };
604
+ /**
605
+ * Extract declaring identity from a signature declaration.
606
+ *
607
+ * CRITICAL for Alice's spec: Without this, resolveCall() cannot compute
608
+ * inheritance substitution. It would have to "guess" the method name
609
+ * from the signature, which breaks on overloads, aliases, etc.
610
+ *
611
+ * DESIGN (Phase 5 Step 4): Store the declaring type as a **simple TS name**
612
+ * (identifier text like "Box"), NOT a TS "fully qualified name". TypeSystem
613
+ * uses UnifiedTypeCatalog.resolveTsName() to resolve this to the proper
614
+ * CLR FQ name for inheritance substitution.
615
+ *
616
+ * @param decl The signature declaration (method, function, etc.)
617
+ * @param _checker TypeChecker (kept for backwards compatibility, unused)
618
+ * @returns { typeTsName, memberName } or undefined if not a member
619
+ */
620
+ const extractDeclaringIdentity = (decl, _checker) => {
621
+ if (!decl)
622
+ return undefined;
623
+ const normalizeTsbindgenTypeName = (name) => {
624
+ if (name.endsWith("$instance")) {
625
+ return name.slice(0, -"$instance".length);
626
+ }
627
+ if (name.startsWith("__") && name.endsWith("$views")) {
628
+ return name.slice(2, -"$views".length);
629
+ }
630
+ return name;
631
+ };
632
+ // Check if this is a method (class or interface member)
633
+ if (ts.isMethodDeclaration(decl) || ts.isMethodSignature(decl)) {
634
+ const parent = decl.parent;
635
+ // Get the method name
636
+ const memberName = ts.isIdentifier(decl.name)
637
+ ? decl.name.text
638
+ : (decl.name?.getText() ?? "unknown");
639
+ // Get the containing type's simple name (identifier text)
640
+ if (ts.isClassDeclaration(parent) || ts.isInterfaceDeclaration(parent)) {
641
+ if (parent.name) {
642
+ // Use the simple identifier text, not checker.getFullyQualifiedName
643
+ const typeTsName = normalizeTsbindgenTypeName(parent.name.text);
644
+ return { typeTsName, memberName };
645
+ }
646
+ }
647
+ // Object literal method - use parent context
648
+ if (ts.isObjectLiteralExpression(parent)) {
649
+ // For object literals, we don't have a named type
650
+ return undefined;
651
+ }
652
+ }
653
+ // Constructor declarations
654
+ if (ts.isConstructorDeclaration(decl)) {
655
+ const parent = decl.parent;
656
+ if (ts.isClassDeclaration(parent) && parent.name) {
657
+ // Use the simple identifier text
658
+ const typeTsName = normalizeTsbindgenTypeName(parent.name.text);
659
+ return { typeTsName, memberName: "constructor" };
660
+ }
661
+ }
662
+ // Getter/setter declarations
663
+ if (ts.isGetAccessorDeclaration(decl) || ts.isSetAccessorDeclaration(decl)) {
664
+ const parent = decl.parent;
665
+ const memberName = ts.isIdentifier(decl.name)
666
+ ? decl.name.text
667
+ : (decl.name?.getText() ?? "unknown");
668
+ if (ts.isClassDeclaration(parent) || ts.isInterfaceDeclaration(parent)) {
669
+ if (parent.name) {
670
+ // Use the simple identifier text
671
+ const typeTsName = normalizeTsbindgenTypeName(parent.name.text);
672
+ return { typeTsName, memberName };
673
+ }
674
+ }
675
+ }
676
+ // Standalone functions don't have a declaring type
677
+ return undefined;
678
+ };
679
+ /**
680
+ * Extract class member names from a ClassDeclaration.
681
+ *
682
+ * ALICE'S SPEC: This is PURE SYNTAX inspection at registration time.
683
+ * We iterate class members and collect method/property names.
684
+ * This data is used by TypeSystem.checkTsClassMemberOverride without
685
+ * needing to inspect TS AST nodes or use hardcoded SyntaxKind numbers.
686
+ *
687
+ * @param classDecl The class declaration node
688
+ * @returns ClassMemberNames with method and property name sets
689
+ */
690
+ const extractClassMemberNames = (classDecl) => {
691
+ const methods = new Set();
692
+ const properties = new Set();
693
+ for (const member of classDecl.members) {
694
+ // Get member name if it has an identifier
695
+ const name = ts.isMethodDeclaration(member)
696
+ ? ts.isIdentifier(member.name)
697
+ ? member.name.text
698
+ : undefined
699
+ : ts.isPropertyDeclaration(member)
700
+ ? ts.isIdentifier(member.name)
701
+ ? member.name.text
702
+ : undefined
703
+ : ts.isGetAccessorDeclaration(member) ||
704
+ ts.isSetAccessorDeclaration(member)
705
+ ? ts.isIdentifier(member.name)
706
+ ? member.name.text
707
+ : undefined
708
+ : undefined;
709
+ if (!name)
710
+ continue;
711
+ if (ts.isMethodDeclaration(member)) {
712
+ methods.add(name);
713
+ }
714
+ else if (ts.isPropertyDeclaration(member)) {
715
+ properties.add(name);
716
+ }
717
+ else if (ts.isGetAccessorDeclaration(member) ||
718
+ ts.isSetAccessorDeclaration(member)) {
719
+ // Accessors are treated as properties for override detection
720
+ properties.add(name);
721
+ }
722
+ }
723
+ return { methods, properties };
724
+ };
725
+ //# sourceMappingURL=index.js.map