@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,765 @@
1
+ /**
2
+ * Binding Layer — Factory Function
3
+ *
4
+ * Contains the createBinding() factory which creates a BindingInternal instance.
5
+ * The factory uses a closure pattern with internal registries mapping handles
6
+ * to underlying TypeScript objects.
7
+ */
8
+ import ts from "typescript";
9
+ import { makeDeclId, makeSignatureId, makeMemberId, makeTypeSyntaxId, } from "../type-system/types.js";
10
+ import { getTypeNodeFromDeclaration, getMemberTypeAnnotation, getDeclKind, getReturnTypeNode, extractThisParameterTypeNode, extractParameterNodes, extractTypeParameterNodes, extractTypePredicate, extractDeclaringIdentity, extractClassMemberNames, isOptionalMember, isReadonlyMember, convertTypeParameterDeclarations, } from "./binding-helpers.js";
11
+ // ═══════════════════════════════════════════════════════════════════════════
12
+ // BINDING IMPLEMENTATION
13
+ // ═══════════════════════════════════════════════════════════════════════════
14
+ /**
15
+ * Create a Binding instance for a TypeScript program.
16
+ *
17
+ * Returns BindingInternal which includes _getHandleRegistry() for TypeSystem.
18
+ * Cast to Binding when passing to regular converters.
19
+ */
20
+ export const createBinding = (checker) => {
21
+ // Internal registries mapping handles to underlying TS objects
22
+ const declMap = new Map();
23
+ const signatureMap = new Map();
24
+ const memberMap = new Map(); // key: "declId:name"
25
+ const typeSyntaxMap = new Map(); // TypeSyntaxId → TypeNode
26
+ // Auto-increment IDs
27
+ const nextDeclId = { value: 0 };
28
+ const nextSignatureId = { value: 0 };
29
+ const nextTypeSyntaxId = { value: 0 };
30
+ // Symbol to DeclId cache (avoid duplicate DeclIds for same symbol)
31
+ const symbolToDeclId = new Map();
32
+ const signatureToId = new Map();
33
+ // ─────────────────────────────────────────────────────────────────────────
34
+ // INTERNAL HELPERS
35
+ // ─────────────────────────────────────────────────────────────────────────
36
+ const getOrCreateDeclId = (symbol) => {
37
+ const existing = symbolToDeclId.get(symbol);
38
+ if (existing)
39
+ return existing;
40
+ const id = makeDeclId(nextDeclId.value++);
41
+ symbolToDeclId.set(symbol, id);
42
+ // Get declaration info.
43
+ //
44
+ // IMPORTANT:
45
+ // Some symbols (notably tsbindgen facades) intentionally merge a value export
46
+ // and a type export under the same name, e.g.:
47
+ // export const Task: typeof Internal.Task;
48
+ // export type Task<T1 = __> = ... Internal.Task_1<T1> ...
49
+ //
50
+ // For expression identifiers we want the value declaration, while for type
51
+ // references we must be able to access the type declaration. We capture both.
52
+ const decls = symbol.getDeclarations() ?? [];
53
+ const valueDecl = decls.find((d) => ts.isVariableDeclaration(d) ||
54
+ ts.isFunctionDeclaration(d) ||
55
+ ts.isParameter(d) ||
56
+ ts.isPropertyDeclaration(d) ||
57
+ ts.isPropertySignature(d) ||
58
+ ts.isMethodDeclaration(d) ||
59
+ ts.isMethodSignature(d));
60
+ const typeDecl = decls.find((d) => ts.isTypeAliasDeclaration(d) ||
61
+ ts.isInterfaceDeclaration(d) ||
62
+ ts.isClassDeclaration(d) ||
63
+ ts.isEnumDeclaration(d) ||
64
+ ts.isTypeParameterDeclaration(d));
65
+ const decl = valueDecl ?? typeDecl ?? decls[0];
66
+ // Capture class member names for override detection (TS-version safe)
67
+ const classMemberNames = decl && ts.isClassDeclaration(decl)
68
+ ? extractClassMemberNames(decl)
69
+ : undefined;
70
+ const entry = {
71
+ symbol,
72
+ decl,
73
+ typeDeclNode: typeDecl,
74
+ valueDeclNode: valueDecl,
75
+ typeNode: decl ? getTypeNodeFromDeclaration(decl) : undefined,
76
+ kind: decl ? getDeclKind(decl) : "variable",
77
+ fqName: symbol.getName(),
78
+ classMemberNames,
79
+ };
80
+ declMap.set(id.id, entry);
81
+ return id;
82
+ };
83
+ const getOrCreateSignatureId = (signature) => {
84
+ const existing = signatureToId.get(signature);
85
+ if (existing)
86
+ return existing;
87
+ const id = makeSignatureId(nextSignatureId.value++);
88
+ signatureToId.set(signature, id);
89
+ // Extract signature info from declaration
90
+ const decl = signature.getDeclaration();
91
+ // Extract declaring identity (CRITICAL for Alice's spec: resolveCall needs this)
92
+ const declaringIdentity = extractDeclaringIdentity(decl);
93
+ // Extract type predicate from return type (ALICE'S SPEC: pure syntax inspection)
94
+ const returnTypeNode = getReturnTypeNode(decl);
95
+ const typePredicate = extractTypePredicate(returnTypeNode, decl);
96
+ const entry = {
97
+ signature,
98
+ decl,
99
+ parameters: extractParameterNodes(decl),
100
+ thisTypeNode: extractThisParameterTypeNode(decl),
101
+ returnTypeNode,
102
+ typeParameters: extractTypeParameterNodes(decl),
103
+ declaringTypeTsName: declaringIdentity?.typeTsName,
104
+ declaringMemberName: declaringIdentity?.memberName,
105
+ typePredicate,
106
+ };
107
+ signatureMap.set(id.id, entry);
108
+ return id;
109
+ };
110
+ const getOrCreateMemberId = (ownerDeclId, memberName, memberSymbol) => {
111
+ const key = `${ownerDeclId.id}:${memberName}`;
112
+ const existing = memberMap.get(key);
113
+ if (existing)
114
+ return existing.memberId;
115
+ const id = makeMemberId(ownerDeclId, memberName);
116
+ const decl = memberSymbol.getDeclarations()?.[0];
117
+ const entry = {
118
+ memberId: id,
119
+ symbol: memberSymbol,
120
+ decl,
121
+ name: memberName,
122
+ typeNode: decl ? getMemberTypeAnnotation(decl) : undefined,
123
+ isOptional: isOptionalMember(memberSymbol),
124
+ isReadonly: isReadonlyMember(decl),
125
+ };
126
+ memberMap.set(key, entry);
127
+ return id;
128
+ };
129
+ // ─────────────────────────────────────────────────────────────────────────
130
+ // BINDING IMPLEMENTATION
131
+ // ─────────────────────────────────────────────────────────────────────────
132
+ const resolveIdentifier = (node) => {
133
+ const symbol = checker.getSymbolAtLocation(node);
134
+ if (!symbol)
135
+ return undefined;
136
+ // Follow aliases for imports
137
+ const resolvedSymbol = symbol.flags & ts.SymbolFlags.Alias
138
+ ? checker.getAliasedSymbol(symbol)
139
+ : symbol;
140
+ return getOrCreateDeclId(resolvedSymbol);
141
+ };
142
+ const resolveTypeReference = (node) => {
143
+ const resolveEntityNameSymbol = (typeName) => {
144
+ const symbol = ts.isIdentifier(typeName)
145
+ ? checker.getSymbolAtLocation(typeName)
146
+ : checker.getSymbolAtLocation(typeName.right);
147
+ if (!symbol)
148
+ return undefined;
149
+ return symbol.flags & ts.SymbolFlags.Alias
150
+ ? checker.getAliasedSymbol(symbol)
151
+ : symbol;
152
+ };
153
+ let symbol = resolveEntityNameSymbol(node.typeName);
154
+ if (!symbol)
155
+ return undefined;
156
+ // Follow type aliases that are pure renames to another type reference:
157
+ // type Foo<T> = Bar<T>
158
+ //
159
+ // This is required for tsbindgen facades, where ergonomic types are often
160
+ // exported as aliases to arity-qualified internal CLR types.
161
+ //
162
+ // DETERMINISTIC: AST inspection only (no ts.Type queries).
163
+ const seen = new Set();
164
+ while (!seen.has(symbol)) {
165
+ seen.add(symbol);
166
+ const decls = symbol.getDeclarations() ?? [];
167
+ const typeAliasDecl = decls.find(ts.isTypeAliasDeclaration);
168
+ if (!typeAliasDecl)
169
+ break;
170
+ const aliasedType = typeAliasDecl.type;
171
+ if (!ts.isTypeReferenceNode(aliasedType))
172
+ break;
173
+ // Only follow aliases that forward type parameters 1:1.
174
+ //
175
+ // SAFE EXAMPLES:
176
+ // type Foo<T> = Bar<T>
177
+ // type Foo<T1, T2> = Bar<T1, T2>
178
+ // type Foo = Bar
179
+ //
180
+ // UNSAFE (requires substitution / rewrapping, so we must NOT follow):
181
+ // type Foo<T> = Bar<Baz<T>>
182
+ // type Foo<T, U> = Bar<U, T> // reorders args
183
+ // type Foo = Bar<string> // applies args
184
+ const aliasTypeParams = typeAliasDecl.typeParameters ?? [];
185
+ const rhsArgs = aliasedType.typeArguments ?? [];
186
+ if (aliasTypeParams.length === 0) {
187
+ if (rhsArgs.length > 0)
188
+ break;
189
+ }
190
+ else {
191
+ if (rhsArgs.length !== aliasTypeParams.length)
192
+ break;
193
+ let forwardsIdentity = true;
194
+ for (let i = 0; i < aliasTypeParams.length; i++) {
195
+ const p = aliasTypeParams[i];
196
+ const a = rhsArgs[i];
197
+ if (!p || !a) {
198
+ forwardsIdentity = false;
199
+ break;
200
+ }
201
+ if (!ts.isTypeReferenceNode(a) || !ts.isIdentifier(a.typeName)) {
202
+ forwardsIdentity = false;
203
+ break;
204
+ }
205
+ if (a.typeArguments && a.typeArguments.length > 0) {
206
+ forwardsIdentity = false;
207
+ break;
208
+ }
209
+ if (a.typeName.text !== p.name.text) {
210
+ forwardsIdentity = false;
211
+ break;
212
+ }
213
+ }
214
+ if (!forwardsIdentity)
215
+ break;
216
+ }
217
+ const next = resolveEntityNameSymbol(aliasedType.typeName);
218
+ if (!next)
219
+ break;
220
+ symbol = next;
221
+ }
222
+ return getOrCreateDeclId(symbol);
223
+ };
224
+ const resolvePropertyAccess = (node) => {
225
+ const rawPropSymbol = checker.getSymbolAtLocation(node.name);
226
+ if (!rawPropSymbol)
227
+ return undefined;
228
+ const propSymbol = rawPropSymbol.flags & ts.SymbolFlags.Alias
229
+ ? checker.getAliasedSymbol(rawPropSymbol)
230
+ : rawPropSymbol;
231
+ // Get owner type's declaration
232
+ const rawOwnerSymbol = checker.getSymbolAtLocation(node.expression);
233
+ // Note: `getSymbolAtLocation(node.expression)` can be undefined for receivers
234
+ // that are not identifiers/member-accesses (e.g., `xs.where(...).select`).
235
+ // In that case we still want a stable MemberId for the member symbol itself,
236
+ // so we key the member entry off the member symbol's own DeclId.
237
+ const ownerSymbol = rawOwnerSymbol
238
+ ? rawOwnerSymbol.flags & ts.SymbolFlags.Alias
239
+ ? checker.getAliasedSymbol(rawOwnerSymbol)
240
+ : rawOwnerSymbol
241
+ : undefined;
242
+ const ownerDeclId = getOrCreateDeclId(ownerSymbol ?? propSymbol);
243
+ return getOrCreateMemberId(ownerDeclId, node.name.text, propSymbol);
244
+ };
245
+ const resolveElementAccess = (_node) => {
246
+ // Element access member resolution requires type-level analysis
247
+ // Return undefined (member not resolved via handles)
248
+ return undefined;
249
+ };
250
+ const resolveCallSignature = (node) => {
251
+ const signature = checker.getResolvedSignature(node);
252
+ if (!signature)
253
+ return undefined;
254
+ // TypeScript can produce a resolved signature without a declaration for
255
+ // implicit default constructors (e.g., `super()` when the base class has
256
+ // no explicit constructor). We still want a SignatureId so TypeSystem can
257
+ // treat this call deterministically as `void`.
258
+ if (signature.declaration === undefined) {
259
+ // Special case: `super()` implicit base constructor
260
+ if (node.expression.kind === ts.SyntaxKind.SuperKeyword) {
261
+ return getOrCreateSignatureId(signature);
262
+ }
263
+ // Recovery: calls through variables/properties typed as functions can
264
+ // yield signatures without declarations. Attempt to re-anchor to a
265
+ // function-like declaration we can capture syntactically.
266
+ const symbol = (() => {
267
+ const expr = node.expression;
268
+ if (ts.isIdentifier(expr))
269
+ return checker.getSymbolAtLocation(expr);
270
+ if (ts.isPropertyAccessExpression(expr)) {
271
+ return checker.getSymbolAtLocation(expr.name);
272
+ }
273
+ return undefined;
274
+ })();
275
+ const resolvedSymbol = symbol && symbol.flags & ts.SymbolFlags.Alias
276
+ ? checker.getAliasedSymbol(symbol)
277
+ : symbol;
278
+ const decls = resolvedSymbol?.getDeclarations() ?? [];
279
+ for (const decl of decls) {
280
+ // Direct function-like declarations (function/method/signature)
281
+ if (ts.isFunctionLike(decl)) {
282
+ const sig = checker.getSignatureFromDeclaration(decl);
283
+ if (sig)
284
+ return getOrCreateSignatureId(sig);
285
+ continue;
286
+ }
287
+ // Variable initializers: const f = (x) => ...
288
+ if (ts.isVariableDeclaration(decl)) {
289
+ const init = decl.initializer;
290
+ if (init &&
291
+ (ts.isArrowFunction(init) || ts.isFunctionExpression(init))) {
292
+ const sig = checker.getSignatureFromDeclaration(init);
293
+ if (sig)
294
+ return getOrCreateSignatureId(sig);
295
+ }
296
+ }
297
+ }
298
+ return undefined;
299
+ }
300
+ const resolvedId = getOrCreateSignatureId(signature);
301
+ // Airplane-grade overload selection for erased TS types:
302
+ // In TypeScript, `char` is `string`, so overload sets that differ only by
303
+ // `char` vs `string` can be resolved "wrong" due to declaration order
304
+ // (e.g., string.split("/") picking the `char` overload).
305
+ //
306
+ // We apply a deterministic, syntax-driven tie-breaker:
307
+ // - Prefer `string` parameters for non-charish arguments (string literals, etc.)
308
+ // - Prefer `char` parameters only when the argument is explicitly marked char
309
+ // (e.g., `expr as char`, or identifier declared `: char`).
310
+ const candidates = resolveCallSignatureCandidates(node);
311
+ if (!candidates || candidates.length < 2)
312
+ return resolvedId;
313
+ const stripParens = (expr) => {
314
+ let current = expr;
315
+ while (ts.isParenthesizedExpression(current)) {
316
+ current = current.expression;
317
+ }
318
+ return current;
319
+ };
320
+ const isCharTypeNode = (typeNode) => {
321
+ if (ts.isTypeReferenceNode(typeNode)) {
322
+ const tn = typeNode.typeName;
323
+ if (ts.isIdentifier(tn))
324
+ return tn.text === "char";
325
+ return tn.right.text === "char";
326
+ }
327
+ return false;
328
+ };
329
+ const isCharishArgument = (arg) => {
330
+ const expr = stripParens(arg);
331
+ // Explicit `as char` / `<char>` assertions.
332
+ if (ts.isAsExpression(expr) || ts.isTypeAssertionExpression(expr)) {
333
+ return isCharTypeNode(expr.type);
334
+ }
335
+ // Identifier declared with `: char`.
336
+ if (ts.isIdentifier(expr)) {
337
+ const sym = checker.getSymbolAtLocation(expr);
338
+ if (!sym)
339
+ return false;
340
+ const resolvedSym = sym.flags & ts.SymbolFlags.Alias
341
+ ? checker.getAliasedSymbol(sym)
342
+ : sym;
343
+ const decls = resolvedSym.getDeclarations() ?? [];
344
+ for (const decl of decls) {
345
+ const typeNode = getTypeNodeFromDeclaration(decl);
346
+ if (typeNode && isCharTypeNode(typeNode))
347
+ return true;
348
+ }
349
+ }
350
+ return false;
351
+ };
352
+ const stringType = checker.getStringType();
353
+ const prefersStringOverChar = (arg) => {
354
+ const expr = stripParens(arg);
355
+ if (isCharishArgument(expr))
356
+ return false;
357
+ // In TS, `char` is erased to `string`, so we must prefer `string` overloads
358
+ // for *any* string-typed argument unless the user explicitly marks it as char.
359
+ //
360
+ // This keeps common code like `Console.WriteLine(condition ? "OK" : "BAD")`
361
+ // from accidentally binding to `WriteLine(char)` (due to declaration order).
362
+ const t = checker.getTypeAtLocation(expr);
363
+ return checker.isTypeAssignableTo(t, stringType);
364
+ };
365
+ const classifyParamTypeNode = (typeNode) => {
366
+ if (!typeNode)
367
+ return "other";
368
+ const node = typeNode;
369
+ if (node.kind === ts.SyntaxKind.StringKeyword)
370
+ return "string";
371
+ if (isCharTypeNode(node))
372
+ return "char";
373
+ if (ts.isArrayTypeNode(node)) {
374
+ return isCharTypeNode(node.elementType) ? "char" : "other";
375
+ }
376
+ return "other";
377
+ };
378
+ const paramClassForArgIndex = (entry, argIndex) => {
379
+ const params = entry.parameters;
380
+ const direct = params[argIndex];
381
+ if (direct)
382
+ return classifyParamTypeNode(direct.typeNode);
383
+ // Rest parameter: map extra args to last param if it is rest.
384
+ const last = params[params.length - 1];
385
+ if (last && last.isRest)
386
+ return classifyParamTypeNode(last.typeNode);
387
+ return "other";
388
+ };
389
+ const args = node.arguments;
390
+ const wantsStringAt = [];
391
+ const wantsCharAt = [];
392
+ for (let i = 0; i < args.length; i++) {
393
+ const arg = args[i];
394
+ if (!arg)
395
+ continue;
396
+ if (ts.isSpreadElement(arg))
397
+ continue;
398
+ if (isCharishArgument(arg)) {
399
+ wantsCharAt.push(i);
400
+ }
401
+ else if (prefersStringOverChar(arg)) {
402
+ wantsStringAt.push(i);
403
+ }
404
+ }
405
+ if (wantsStringAt.length === 0 && wantsCharAt.length === 0)
406
+ return resolvedId;
407
+ const scoreSignature = (sigId) => {
408
+ const entry = signatureMap.get(sigId.id);
409
+ if (!entry)
410
+ return 0;
411
+ let score = 0;
412
+ for (const i of wantsStringAt) {
413
+ const pc = paramClassForArgIndex(entry, i);
414
+ if (pc === "string")
415
+ score += 2;
416
+ if (pc === "char")
417
+ score -= 2;
418
+ }
419
+ for (const i of wantsCharAt) {
420
+ const pc = paramClassForArgIndex(entry, i);
421
+ if (pc === "char")
422
+ score += 2;
423
+ if (pc === "string")
424
+ score -= 2;
425
+ }
426
+ return score;
427
+ };
428
+ const resolvedScore = scoreSignature(resolvedId);
429
+ let bestId = resolvedId;
430
+ let bestScore = resolvedScore;
431
+ for (const candidate of candidates) {
432
+ const s = scoreSignature(candidate);
433
+ if (s > bestScore) {
434
+ bestScore = s;
435
+ bestId = candidate;
436
+ }
437
+ }
438
+ return bestId;
439
+ };
440
+ const resolveCallSignatureCandidates = (node) => {
441
+ const expr = node.expression;
442
+ const symbol = (() => {
443
+ if (ts.isIdentifier(expr))
444
+ return checker.getSymbolAtLocation(expr);
445
+ if (ts.isPropertyAccessExpression(expr)) {
446
+ return checker.getSymbolAtLocation(expr.name);
447
+ }
448
+ return undefined;
449
+ })();
450
+ if (!symbol)
451
+ return undefined;
452
+ const resolvedSymbol = symbol.flags & ts.SymbolFlags.Alias
453
+ ? checker.getAliasedSymbol(symbol)
454
+ : symbol;
455
+ const decls = resolvedSymbol.getDeclarations();
456
+ if (!decls || decls.length === 0)
457
+ return undefined;
458
+ const argCount = node.arguments.length;
459
+ const candidates = [];
460
+ for (const decl of decls) {
461
+ if (!ts.isFunctionLike(decl))
462
+ continue;
463
+ // Exclude construct signatures / constructors for call expressions.
464
+ if (ts.isConstructSignatureDeclaration(decl) ||
465
+ ts.isConstructorDeclaration(decl)) {
466
+ continue;
467
+ }
468
+ // Arity filtering (optional/rest aware)
469
+ const params = extractParameterNodes(decl);
470
+ const required = params.filter((p) => !p.isOptional && !p.isRest).length;
471
+ const hasRest = params.some((p) => p.isRest);
472
+ if (argCount < required)
473
+ continue;
474
+ if (!hasRest && argCount > params.length)
475
+ continue;
476
+ const sig = checker.getSignatureFromDeclaration(decl);
477
+ if (!sig)
478
+ continue;
479
+ candidates.push(getOrCreateSignatureId(sig));
480
+ }
481
+ return candidates.length > 0 ? candidates : undefined;
482
+ };
483
+ const resolveConstructorSignature = (node) => {
484
+ const signature = checker.getResolvedSignature(node);
485
+ if (!signature)
486
+ return undefined;
487
+ const sigId = getOrCreateSignatureId(signature);
488
+ // For implicit default constructors, TypeScript may return a signature with no declaration.
489
+ // We still need a SignatureEntry that identifies the constructed type so TypeSystem can
490
+ // synthesize the constructor return type deterministically.
491
+ const entry = signatureMap.get(sigId.id);
492
+ if (entry && !entry.decl) {
493
+ const expr = node.expression;
494
+ const symbol = (() => {
495
+ if (ts.isIdentifier(expr))
496
+ return checker.getSymbolAtLocation(expr);
497
+ if (ts.isPropertyAccessExpression(expr)) {
498
+ return checker.getSymbolAtLocation(expr.name);
499
+ }
500
+ return undefined;
501
+ })();
502
+ const resolvedSymbol = symbol && symbol.flags & ts.SymbolFlags.Alias
503
+ ? checker.getAliasedSymbol(symbol)
504
+ : symbol;
505
+ const decl = resolvedSymbol?.getDeclarations()?.[0];
506
+ const declaringTypeTsName = (() => {
507
+ if (decl && ts.isClassDeclaration(decl) && decl.name)
508
+ return decl.name.text;
509
+ if (resolvedSymbol)
510
+ return resolvedSymbol.getName();
511
+ if (ts.isIdentifier(expr))
512
+ return expr.text;
513
+ if (ts.isPropertyAccessExpression(expr))
514
+ return expr.name.text;
515
+ return undefined;
516
+ })();
517
+ if (declaringTypeTsName) {
518
+ signatureMap.set(sigId.id, {
519
+ ...entry,
520
+ declaringTypeTsName,
521
+ declaringMemberName: "constructor",
522
+ typeParameters: decl && ts.isClassDeclaration(decl)
523
+ ? convertTypeParameterDeclarations(decl.typeParameters)
524
+ : undefined,
525
+ });
526
+ }
527
+ }
528
+ return sigId;
529
+ };
530
+ const resolveConstructorSignatureCandidates = (node) => {
531
+ const expr = node.expression;
532
+ const symbol = (() => {
533
+ if (ts.isIdentifier(expr))
534
+ return checker.getSymbolAtLocation(expr);
535
+ if (ts.isPropertyAccessExpression(expr)) {
536
+ return checker.getSymbolAtLocation(expr.name);
537
+ }
538
+ return undefined;
539
+ })();
540
+ if (!symbol)
541
+ return undefined;
542
+ const resolvedSymbol = symbol.flags & ts.SymbolFlags.Alias
543
+ ? checker.getAliasedSymbol(symbol)
544
+ : symbol;
545
+ const decls = resolvedSymbol.getDeclarations();
546
+ if (!decls || decls.length === 0)
547
+ return undefined;
548
+ const argCount = node.arguments?.length ?? 0;
549
+ const candidates = [];
550
+ for (const decl of decls) {
551
+ if (!ts.isFunctionLike(decl))
552
+ continue;
553
+ // Only include construct signatures / constructors for new expressions.
554
+ if (!ts.isConstructSignatureDeclaration(decl) &&
555
+ !ts.isConstructorDeclaration(decl)) {
556
+ continue;
557
+ }
558
+ const params = extractParameterNodes(decl);
559
+ const required = params.filter((p) => !p.isOptional && !p.isRest).length;
560
+ const hasRest = params.some((p) => p.isRest);
561
+ if (argCount < required)
562
+ continue;
563
+ if (!hasRest && argCount > params.length)
564
+ continue;
565
+ const sig = checker.getSignatureFromDeclaration(decl);
566
+ if (!sig)
567
+ continue;
568
+ candidates.push(getOrCreateSignatureId(sig));
569
+ }
570
+ return candidates.length > 0 ? candidates : undefined;
571
+ };
572
+ const resolveImport = (node) => {
573
+ const symbol = checker.getSymbolAtLocation(node.name);
574
+ if (!symbol)
575
+ return undefined;
576
+ const aliased = checker.getAliasedSymbol(symbol);
577
+ return getOrCreateDeclId(aliased);
578
+ };
579
+ const resolveShorthandAssignment = (node) => {
580
+ const symbol = checker.getShorthandAssignmentValueSymbol(node);
581
+ if (!symbol)
582
+ return undefined;
583
+ return getOrCreateDeclId(symbol);
584
+ };
585
+ const getDeclaringTypeNameOfMember = (member) => {
586
+ const key = `${member.declId.id}:${member.name}`;
587
+ const entry = memberMap.get(key);
588
+ const decl = entry?.decl;
589
+ if (!decl)
590
+ return undefined;
591
+ const parent = decl.parent;
592
+ if (ts.isInterfaceDeclaration(parent) && parent.name)
593
+ return parent.name.text;
594
+ if (ts.isClassDeclaration(parent) && parent.name)
595
+ return parent.name.text;
596
+ if (ts.isTypeAliasDeclaration(parent) && parent.name)
597
+ return parent.name.text;
598
+ // tsbindgen static containers can be emitted as:
599
+ // export const Foo: { bar(...): ... }
600
+ //
601
+ // In this case, member declarations live under a TypeLiteralNode whose parent
602
+ // is the VariableDeclaration for `Foo`. We treat `Foo` as the declaring "type"
603
+ // name for binding disambiguation purposes.
604
+ if (ts.isTypeLiteralNode(parent)) {
605
+ const container = parent.parent;
606
+ if (ts.isVariableDeclaration(container) &&
607
+ ts.isIdentifier(container.name)) {
608
+ return container.name.text;
609
+ }
610
+ }
611
+ return undefined;
612
+ };
613
+ const getSourceFilePathOfMember = (member) => {
614
+ const key = `${member.declId.id}:${member.name}`;
615
+ const entry = memberMap.get(key);
616
+ const decl = entry?.decl;
617
+ if (!decl)
618
+ return undefined;
619
+ return decl.getSourceFile().fileName;
620
+ };
621
+ const getSourceFilePathOfDecl = (declId) => {
622
+ const entry = declMap.get(declId.id);
623
+ if (!entry)
624
+ return undefined;
625
+ const decl = entry.decl ?? entry.typeDeclNode ?? entry.valueDeclNode;
626
+ if (!decl)
627
+ return undefined;
628
+ return decl.getSourceFile().fileName;
629
+ };
630
+ const getFullyQualifiedName = (declId) => {
631
+ const entry = declMap.get(declId.id);
632
+ if (!entry)
633
+ return undefined;
634
+ return checker.getFullyQualifiedName(entry.symbol);
635
+ };
636
+ const getTypePredicateOfSignature = (sigId) => {
637
+ const entry = signatureMap.get(sigId.id);
638
+ if (!entry)
639
+ return undefined;
640
+ const predicate = checker.getTypePredicateOfSignature(entry.signature);
641
+ if (!predicate || predicate.kind !== ts.TypePredicateKind.Identifier) {
642
+ return undefined;
643
+ }
644
+ return {
645
+ kind: "typePredicate",
646
+ parameterIndex: predicate.parameterIndex ?? 0,
647
+ typeNode: predicate.type
648
+ ? checker.typeToTypeNode(predicate.type, undefined, ts.NodeBuilderFlags.None)
649
+ : undefined,
650
+ };
651
+ };
652
+ const getThisTypeNodeOfSignature = (sigId) => {
653
+ const entry = signatureMap.get(sigId.id);
654
+ return entry?.thisTypeNode;
655
+ };
656
+ const getDeclaringTypeNameOfSignature = (sigId) => {
657
+ const entry = signatureMap.get(sigId.id);
658
+ return entry?.declaringTypeTsName;
659
+ };
660
+ // ─────────────────────────────────────────────────────────────────────────
661
+ // HANDLE REGISTRY IMPLEMENTATION
662
+ // ─────────────────────────────────────────────────────────────────────────
663
+ const handleRegistry = {
664
+ getDecl: (id) => {
665
+ const entry = declMap.get(id.id);
666
+ if (!entry)
667
+ return undefined;
668
+ return {
669
+ typeNode: entry.typeNode,
670
+ kind: entry.kind,
671
+ fqName: entry.fqName,
672
+ declNode: entry.decl,
673
+ typeDeclNode: entry.typeDeclNode,
674
+ valueDeclNode: entry.valueDeclNode,
675
+ classMemberNames: entry.classMemberNames,
676
+ };
677
+ },
678
+ getSignature: (id) => {
679
+ const entry = signatureMap.get(id.id);
680
+ if (!entry)
681
+ return undefined;
682
+ return {
683
+ parameters: entry.parameters,
684
+ thisTypeNode: entry.thisTypeNode,
685
+ returnTypeNode: entry.returnTypeNode,
686
+ typeParameters: entry.typeParameters,
687
+ // CRITICAL for Alice's spec: declaring identity for resolveCall()
688
+ // Uses simple TS name, resolved via UnifiedTypeCatalog.resolveTsName()
689
+ declaringTypeTsName: entry.declaringTypeTsName,
690
+ declaringMemberName: entry.declaringMemberName,
691
+ // Type predicate extracted at registration time (Alice's spec)
692
+ typePredicate: entry.typePredicate,
693
+ };
694
+ },
695
+ getMember: (id) => {
696
+ const key = `${id.declId.id}:${id.name}`;
697
+ const entry = memberMap.get(key);
698
+ if (!entry)
699
+ return undefined;
700
+ return {
701
+ name: entry.name,
702
+ declNode: entry.decl,
703
+ typeNode: entry.typeNode,
704
+ isOptional: entry.isOptional,
705
+ isReadonly: entry.isReadonly,
706
+ };
707
+ },
708
+ getTypeSyntax: (id) => {
709
+ const entry = typeSyntaxMap.get(id.id);
710
+ if (!entry)
711
+ return undefined;
712
+ return {
713
+ typeNode: entry.typeNode,
714
+ };
715
+ },
716
+ };
717
+ // ─────────────────────────────────────────────────────────────────────────
718
+ // TYPE SYNTAX CAPTURE (Phase 2: TypeSyntaxId)
719
+ // ─────────────────────────────────────────────────────────────────────────
720
+ /**
721
+ * Capture a type syntax node for later conversion.
722
+ *
723
+ * This creates an opaque TypeSyntaxId handle that can be passed to
724
+ * TypeSystem.typeFromSyntax() for conversion. Used for inline type syntax
725
+ * that cannot be captured at catalog-build time.
726
+ */
727
+ const captureTypeSyntax = (node) => {
728
+ const id = makeTypeSyntaxId(nextTypeSyntaxId.value++);
729
+ typeSyntaxMap.set(id.id, { typeNode: node });
730
+ return id;
731
+ };
732
+ /**
733
+ * Capture multiple type arguments.
734
+ *
735
+ * Convenience method for capturing generic type arguments.
736
+ */
737
+ const captureTypeArgs = (nodes) => {
738
+ return nodes.map((node) => captureTypeSyntax(node));
739
+ };
740
+ return {
741
+ resolveIdentifier,
742
+ resolveTypeReference,
743
+ resolvePropertyAccess,
744
+ resolveElementAccess,
745
+ resolveCallSignature,
746
+ resolveCallSignatureCandidates,
747
+ resolveConstructorSignature,
748
+ resolveConstructorSignatureCandidates,
749
+ resolveImport,
750
+ resolveShorthandAssignment,
751
+ getDeclaringTypeNameOfMember,
752
+ getSourceFilePathOfMember,
753
+ getSourceFilePathOfDecl,
754
+ getFullyQualifiedName,
755
+ getTypePredicateOfSignature,
756
+ getThisTypeNodeOfSignature,
757
+ getDeclaringTypeNameOfSignature,
758
+ // Type syntax capture (Phase 2: TypeSyntaxId)
759
+ captureTypeSyntax,
760
+ captureTypeArgs,
761
+ // Internal method for TypeSystem construction only
762
+ _getHandleRegistry: () => handleRegistry,
763
+ };
764
+ };
765
+ //# sourceMappingURL=binding-factory.js.map