@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
@@ -16,1140 +16,9 @@
16
16
  * - checker.getTypeOfSymbolAtLocation
17
17
  * - checker.getContextualType
18
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
- //
55
- // IMPORTANT:
56
- // Some symbols (notably tsbindgen facades) intentionally merge a value export
57
- // and a type export under the same name, e.g.:
58
- // export const Task: typeof Internal.Task;
59
- // export type Task<T1 = __> = ... Internal.Task_1<T1> ...
60
- //
61
- // For expression identifiers we want the value declaration, while for type
62
- // references we must be able to access the type declaration. We capture both.
63
- const decls = symbol.getDeclarations() ?? [];
64
- const valueDecl = decls.find((d) => ts.isVariableDeclaration(d) ||
65
- ts.isFunctionDeclaration(d) ||
66
- ts.isParameter(d) ||
67
- ts.isPropertyDeclaration(d) ||
68
- ts.isPropertySignature(d) ||
69
- ts.isMethodDeclaration(d) ||
70
- ts.isMethodSignature(d));
71
- const typeDecl = decls.find((d) => ts.isTypeAliasDeclaration(d) ||
72
- ts.isInterfaceDeclaration(d) ||
73
- ts.isClassDeclaration(d) ||
74
- ts.isEnumDeclaration(d) ||
75
- ts.isTypeParameterDeclaration(d));
76
- const decl = valueDecl ?? typeDecl ?? decls[0];
77
- // Capture class member names for override detection (TS-version safe)
78
- const classMemberNames = decl && ts.isClassDeclaration(decl)
79
- ? extractClassMemberNames(decl)
80
- : undefined;
81
- const entry = {
82
- symbol,
83
- decl,
84
- typeDeclNode: typeDecl,
85
- valueDeclNode: valueDecl,
86
- typeNode: decl ? getTypeNodeFromDeclaration(decl) : undefined,
87
- kind: decl ? getDeclKind(decl) : "variable",
88
- fqName: symbol.getName(),
89
- classMemberNames,
90
- };
91
- declMap.set(id.id, entry);
92
- return id;
93
- };
94
- const getOrCreateSignatureId = (signature) => {
95
- const existing = signatureToId.get(signature);
96
- if (existing)
97
- return existing;
98
- const id = makeSignatureId(nextSignatureId.value++);
99
- signatureToId.set(signature, id);
100
- // Extract signature info from declaration
101
- const decl = signature.getDeclaration();
102
- // Extract declaring identity (CRITICAL for Alice's spec: resolveCall needs this)
103
- const declaringIdentity = extractDeclaringIdentity(decl, checker);
104
- // Extract type predicate from return type (ALICE'S SPEC: pure syntax inspection)
105
- const returnTypeNode = getReturnTypeNode(decl);
106
- const typePredicate = extractTypePredicate(returnTypeNode, decl);
107
- const entry = {
108
- signature,
109
- decl,
110
- parameters: extractParameterNodes(decl),
111
- thisTypeNode: extractThisParameterTypeNode(decl),
112
- returnTypeNode,
113
- typeParameters: extractTypeParameterNodes(decl),
114
- declaringTypeTsName: declaringIdentity?.typeTsName,
115
- declaringMemberName: declaringIdentity?.memberName,
116
- typePredicate,
117
- };
118
- signatureMap.set(id.id, entry);
119
- return id;
120
- };
121
- const getOrCreateMemberId = (ownerDeclId, memberName, memberSymbol) => {
122
- const key = `${ownerDeclId.id}:${memberName}`;
123
- const existing = memberMap.get(key);
124
- if (existing)
125
- return existing.memberId;
126
- const id = makeMemberId(ownerDeclId, memberName);
127
- const decl = memberSymbol.getDeclarations()?.[0];
128
- const entry = {
129
- memberId: id,
130
- symbol: memberSymbol,
131
- decl,
132
- name: memberName,
133
- typeNode: decl ? getMemberTypeAnnotation(decl) : undefined,
134
- isOptional: isOptionalMember(memberSymbol),
135
- isReadonly: isReadonlyMember(decl),
136
- };
137
- memberMap.set(key, entry);
138
- return id;
139
- };
140
- // ─────────────────────────────────────────────────────────────────────────
141
- // BINDING IMPLEMENTATION
142
- // ─────────────────────────────────────────────────────────────────────────
143
- const resolveIdentifier = (node) => {
144
- const symbol = checker.getSymbolAtLocation(node);
145
- if (!symbol)
146
- return undefined;
147
- // Follow aliases for imports
148
- const resolvedSymbol = symbol.flags & ts.SymbolFlags.Alias
149
- ? checker.getAliasedSymbol(symbol)
150
- : symbol;
151
- return getOrCreateDeclId(resolvedSymbol);
152
- };
153
- const resolveTypeReference = (node) => {
154
- const resolveEntityNameSymbol = (typeName) => {
155
- const symbol = ts.isIdentifier(typeName)
156
- ? checker.getSymbolAtLocation(typeName)
157
- : checker.getSymbolAtLocation(typeName.right);
158
- if (!symbol)
159
- return undefined;
160
- return symbol.flags & ts.SymbolFlags.Alias
161
- ? checker.getAliasedSymbol(symbol)
162
- : symbol;
163
- };
164
- let symbol = resolveEntityNameSymbol(node.typeName);
165
- if (!symbol)
166
- return undefined;
167
- // Follow type aliases that are pure renames to another type reference:
168
- // type Foo<T> = Bar<T>
169
- //
170
- // This is required for tsbindgen facades, where ergonomic types are often
171
- // exported as aliases to arity-qualified internal CLR types.
172
- //
173
- // DETERMINISTIC: AST inspection only (no ts.Type queries).
174
- const seen = new Set();
175
- while (!seen.has(symbol)) {
176
- seen.add(symbol);
177
- const decls = symbol.getDeclarations() ?? [];
178
- const typeAliasDecl = decls.find(ts.isTypeAliasDeclaration);
179
- if (!typeAliasDecl)
180
- break;
181
- const aliasedType = typeAliasDecl.type;
182
- if (!ts.isTypeReferenceNode(aliasedType))
183
- break;
184
- // Only follow aliases that forward type parameters 1:1.
185
- //
186
- // SAFE EXAMPLES:
187
- // type Foo<T> = Bar<T>
188
- // type Foo<T1, T2> = Bar<T1, T2>
189
- // type Foo = Bar
190
- //
191
- // UNSAFE (requires substitution / rewrapping, so we must NOT follow):
192
- // type Foo<T> = Bar<Baz<T>>
193
- // type Foo<T, U> = Bar<U, T> // reorders args
194
- // type Foo = Bar<string> // applies args
195
- const aliasTypeParams = typeAliasDecl.typeParameters ?? [];
196
- const rhsArgs = aliasedType.typeArguments ?? [];
197
- if (aliasTypeParams.length === 0) {
198
- if (rhsArgs.length > 0)
199
- break;
200
- }
201
- else {
202
- if (rhsArgs.length !== aliasTypeParams.length)
203
- break;
204
- let forwardsIdentity = true;
205
- for (let i = 0; i < aliasTypeParams.length; i++) {
206
- const p = aliasTypeParams[i];
207
- const a = rhsArgs[i];
208
- if (!p || !a) {
209
- forwardsIdentity = false;
210
- break;
211
- }
212
- if (!ts.isTypeReferenceNode(a) || !ts.isIdentifier(a.typeName)) {
213
- forwardsIdentity = false;
214
- break;
215
- }
216
- if (a.typeArguments && a.typeArguments.length > 0) {
217
- forwardsIdentity = false;
218
- break;
219
- }
220
- if (a.typeName.text !== p.name.text) {
221
- forwardsIdentity = false;
222
- break;
223
- }
224
- }
225
- if (!forwardsIdentity)
226
- break;
227
- }
228
- const next = resolveEntityNameSymbol(aliasedType.typeName);
229
- if (!next)
230
- break;
231
- symbol = next;
232
- }
233
- return getOrCreateDeclId(symbol);
234
- };
235
- const resolvePropertyAccess = (node) => {
236
- const rawPropSymbol = checker.getSymbolAtLocation(node.name);
237
- if (!rawPropSymbol)
238
- return undefined;
239
- const propSymbol = rawPropSymbol.flags & ts.SymbolFlags.Alias
240
- ? checker.getAliasedSymbol(rawPropSymbol)
241
- : rawPropSymbol;
242
- // Get owner type's declaration
243
- const rawOwnerSymbol = checker.getSymbolAtLocation(node.expression);
244
- // Note: `getSymbolAtLocation(node.expression)` can be undefined for receivers
245
- // that are not identifiers/member-accesses (e.g., `xs.where(...).select`).
246
- // In that case we still want a stable MemberId for the member symbol itself,
247
- // so we key the member entry off the member symbol's own DeclId.
248
- const ownerSymbol = rawOwnerSymbol
249
- ? rawOwnerSymbol.flags & ts.SymbolFlags.Alias
250
- ? checker.getAliasedSymbol(rawOwnerSymbol)
251
- : rawOwnerSymbol
252
- : undefined;
253
- const ownerDeclId = getOrCreateDeclId(ownerSymbol ?? propSymbol);
254
- return getOrCreateMemberId(ownerDeclId, node.name.text, propSymbol);
255
- };
256
- const resolveElementAccess = (_node) => {
257
- // Element access member resolution requires type-level analysis
258
- // Return undefined (member not resolved via handles)
259
- return undefined;
260
- };
261
- const resolveCallSignature = (node) => {
262
- const signature = checker.getResolvedSignature(node);
263
- if (!signature)
264
- return undefined;
265
- // TypeScript can produce a resolved signature without a declaration for
266
- // implicit default constructors (e.g., `super()` when the base class has
267
- // no explicit constructor). We still want a SignatureId so TypeSystem can
268
- // treat this call deterministically as `void`.
269
- if (signature.declaration === undefined) {
270
- // Special case: `super()` implicit base constructor
271
- if (node.expression.kind === ts.SyntaxKind.SuperKeyword) {
272
- return getOrCreateSignatureId(signature);
273
- }
274
- // Recovery: calls through variables/properties typed as functions can
275
- // yield signatures without declarations. Attempt to re-anchor to a
276
- // function-like declaration we can capture syntactically.
277
- const symbol = (() => {
278
- const expr = node.expression;
279
- if (ts.isIdentifier(expr))
280
- return checker.getSymbolAtLocation(expr);
281
- if (ts.isPropertyAccessExpression(expr)) {
282
- return checker.getSymbolAtLocation(expr.name);
283
- }
284
- return undefined;
285
- })();
286
- const resolvedSymbol = symbol && symbol.flags & ts.SymbolFlags.Alias
287
- ? checker.getAliasedSymbol(symbol)
288
- : symbol;
289
- const decls = resolvedSymbol?.getDeclarations() ?? [];
290
- for (const decl of decls) {
291
- // Direct function-like declarations (function/method/signature)
292
- if (ts.isFunctionLike(decl)) {
293
- const sig = checker.getSignatureFromDeclaration(decl);
294
- if (sig)
295
- return getOrCreateSignatureId(sig);
296
- continue;
297
- }
298
- // Variable initializers: const f = (x) => ...
299
- if (ts.isVariableDeclaration(decl)) {
300
- const init = decl.initializer;
301
- if (init &&
302
- (ts.isArrowFunction(init) || ts.isFunctionExpression(init))) {
303
- const sig = checker.getSignatureFromDeclaration(init);
304
- if (sig)
305
- return getOrCreateSignatureId(sig);
306
- }
307
- }
308
- }
309
- return undefined;
310
- }
311
- const resolvedId = getOrCreateSignatureId(signature);
312
- // Airplane-grade overload selection for erased TS types:
313
- // In TypeScript, `char` is `string`, so overload sets that differ only by
314
- // `char` vs `string` can be resolved "wrong" due to declaration order
315
- // (e.g., string.split("/") picking the `char` overload).
316
- //
317
- // We apply a deterministic, syntax-driven tie-breaker:
318
- // - Prefer `string` parameters for non-charish arguments (string literals, etc.)
319
- // - Prefer `char` parameters only when the argument is explicitly marked char
320
- // (e.g., `expr as char`, or identifier declared `: char`).
321
- const candidates = resolveCallSignatureCandidates(node);
322
- if (!candidates || candidates.length < 2)
323
- return resolvedId;
324
- const stripParens = (expr) => {
325
- let current = expr;
326
- while (ts.isParenthesizedExpression(current)) {
327
- current = current.expression;
328
- }
329
- return current;
330
- };
331
- const isCharTypeNode = (typeNode) => {
332
- if (ts.isTypeReferenceNode(typeNode)) {
333
- const tn = typeNode.typeName;
334
- if (ts.isIdentifier(tn))
335
- return tn.text === "char";
336
- return tn.right.text === "char";
337
- }
338
- return false;
339
- };
340
- const isCharishArgument = (arg) => {
341
- const expr = stripParens(arg);
342
- // Explicit `as char` / `<char>` assertions.
343
- if (ts.isAsExpression(expr) || ts.isTypeAssertionExpression(expr)) {
344
- return isCharTypeNode(expr.type);
345
- }
346
- // Identifier declared with `: char`.
347
- if (ts.isIdentifier(expr)) {
348
- const sym = checker.getSymbolAtLocation(expr);
349
- if (!sym)
350
- return false;
351
- const resolvedSym = sym.flags & ts.SymbolFlags.Alias
352
- ? checker.getAliasedSymbol(sym)
353
- : sym;
354
- const decls = resolvedSym.getDeclarations() ?? [];
355
- for (const decl of decls) {
356
- const typeNode = getTypeNodeFromDeclaration(decl);
357
- if (typeNode && isCharTypeNode(typeNode))
358
- return true;
359
- }
360
- }
361
- return false;
362
- };
363
- const stringType = checker.getStringType();
364
- const prefersStringOverChar = (arg) => {
365
- const expr = stripParens(arg);
366
- if (isCharishArgument(expr))
367
- return false;
368
- // In TS, `char` is erased to `string`, so we must prefer `string` overloads
369
- // for *any* string-typed argument unless the user explicitly marks it as char.
370
- //
371
- // This keeps common code like `Console.WriteLine(condition ? "OK" : "BAD")`
372
- // from accidentally binding to `WriteLine(char)` (due to declaration order).
373
- const t = checker.getTypeAtLocation(expr);
374
- return checker.isTypeAssignableTo(t, stringType);
375
- };
376
- const classifyParamTypeNode = (typeNode) => {
377
- if (!typeNode)
378
- return "other";
379
- const node = typeNode;
380
- if (node.kind === ts.SyntaxKind.StringKeyword)
381
- return "string";
382
- if (isCharTypeNode(node))
383
- return "char";
384
- if (ts.isArrayTypeNode(node)) {
385
- return isCharTypeNode(node.elementType) ? "char" : "other";
386
- }
387
- return "other";
388
- };
389
- const paramClassForArgIndex = (entry, argIndex) => {
390
- const params = entry.parameters;
391
- const direct = params[argIndex];
392
- if (direct)
393
- return classifyParamTypeNode(direct.typeNode);
394
- // Rest parameter: map extra args to last param if it is rest.
395
- const last = params[params.length - 1];
396
- if (last && last.isRest)
397
- return classifyParamTypeNode(last.typeNode);
398
- return "other";
399
- };
400
- const args = node.arguments;
401
- const wantsStringAt = [];
402
- const wantsCharAt = [];
403
- for (let i = 0; i < args.length; i++) {
404
- const arg = args[i];
405
- if (!arg)
406
- continue;
407
- if (ts.isSpreadElement(arg))
408
- continue;
409
- if (isCharishArgument(arg)) {
410
- wantsCharAt.push(i);
411
- }
412
- else if (prefersStringOverChar(arg)) {
413
- wantsStringAt.push(i);
414
- }
415
- }
416
- if (wantsStringAt.length === 0 && wantsCharAt.length === 0)
417
- return resolvedId;
418
- const scoreSignature = (sigId) => {
419
- const entry = signatureMap.get(sigId.id);
420
- if (!entry)
421
- return 0;
422
- let score = 0;
423
- for (const i of wantsStringAt) {
424
- const pc = paramClassForArgIndex(entry, i);
425
- if (pc === "string")
426
- score += 2;
427
- if (pc === "char")
428
- score -= 2;
429
- }
430
- for (const i of wantsCharAt) {
431
- const pc = paramClassForArgIndex(entry, i);
432
- if (pc === "char")
433
- score += 2;
434
- if (pc === "string")
435
- score -= 2;
436
- }
437
- return score;
438
- };
439
- const resolvedScore = scoreSignature(resolvedId);
440
- let bestId = resolvedId;
441
- let bestScore = resolvedScore;
442
- for (const candidate of candidates) {
443
- const s = scoreSignature(candidate);
444
- if (s > bestScore) {
445
- bestScore = s;
446
- bestId = candidate;
447
- }
448
- }
449
- return bestId;
450
- };
451
- const resolveCallSignatureCandidates = (node) => {
452
- const expr = node.expression;
453
- const symbol = (() => {
454
- if (ts.isIdentifier(expr))
455
- return checker.getSymbolAtLocation(expr);
456
- if (ts.isPropertyAccessExpression(expr)) {
457
- return checker.getSymbolAtLocation(expr.name);
458
- }
459
- return undefined;
460
- })();
461
- if (!symbol)
462
- return undefined;
463
- const resolvedSymbol = symbol.flags & ts.SymbolFlags.Alias
464
- ? checker.getAliasedSymbol(symbol)
465
- : symbol;
466
- const decls = resolvedSymbol.getDeclarations();
467
- if (!decls || decls.length === 0)
468
- return undefined;
469
- const argCount = node.arguments.length;
470
- const candidates = [];
471
- for (const decl of decls) {
472
- if (!ts.isFunctionLike(decl))
473
- continue;
474
- // Exclude construct signatures / constructors for call expressions.
475
- if (ts.isConstructSignatureDeclaration(decl) ||
476
- ts.isConstructorDeclaration(decl)) {
477
- continue;
478
- }
479
- // Arity filtering (optional/rest aware)
480
- const params = extractParameterNodes(decl);
481
- const required = params.filter((p) => !p.isOptional && !p.isRest).length;
482
- const hasRest = params.some((p) => p.isRest);
483
- if (argCount < required)
484
- continue;
485
- if (!hasRest && argCount > params.length)
486
- continue;
487
- const sig = checker.getSignatureFromDeclaration(decl);
488
- if (!sig)
489
- continue;
490
- candidates.push(getOrCreateSignatureId(sig));
491
- }
492
- return candidates.length > 0 ? candidates : undefined;
493
- };
494
- const resolveConstructorSignature = (node) => {
495
- const signature = checker.getResolvedSignature(node);
496
- if (!signature)
497
- return undefined;
498
- const sigId = getOrCreateSignatureId(signature);
499
- // For implicit default constructors, TypeScript may return a signature with no declaration.
500
- // We still need a SignatureEntry that identifies the constructed type so TypeSystem can
501
- // synthesize the constructor return type deterministically.
502
- const entry = signatureMap.get(sigId.id);
503
- if (entry && !entry.decl) {
504
- const expr = node.expression;
505
- const symbol = (() => {
506
- if (ts.isIdentifier(expr))
507
- return checker.getSymbolAtLocation(expr);
508
- if (ts.isPropertyAccessExpression(expr)) {
509
- return checker.getSymbolAtLocation(expr.name);
510
- }
511
- return undefined;
512
- })();
513
- const resolvedSymbol = symbol && symbol.flags & ts.SymbolFlags.Alias
514
- ? checker.getAliasedSymbol(symbol)
515
- : symbol;
516
- const decl = resolvedSymbol?.getDeclarations()?.[0];
517
- const declaringTypeTsName = (() => {
518
- if (decl && ts.isClassDeclaration(decl) && decl.name)
519
- return decl.name.text;
520
- if (resolvedSymbol)
521
- return resolvedSymbol.getName();
522
- if (ts.isIdentifier(expr))
523
- return expr.text;
524
- if (ts.isPropertyAccessExpression(expr))
525
- return expr.name.text;
526
- return undefined;
527
- })();
528
- if (declaringTypeTsName) {
529
- signatureMap.set(sigId.id, {
530
- ...entry,
531
- declaringTypeTsName,
532
- declaringMemberName: "constructor",
533
- typeParameters: decl && ts.isClassDeclaration(decl)
534
- ? convertTypeParameterDeclarations(decl.typeParameters)
535
- : undefined,
536
- });
537
- }
538
- }
539
- return sigId;
540
- };
541
- const resolveConstructorSignatureCandidates = (node) => {
542
- const expr = node.expression;
543
- const symbol = (() => {
544
- if (ts.isIdentifier(expr))
545
- return checker.getSymbolAtLocation(expr);
546
- if (ts.isPropertyAccessExpression(expr)) {
547
- return checker.getSymbolAtLocation(expr.name);
548
- }
549
- return undefined;
550
- })();
551
- if (!symbol)
552
- return undefined;
553
- const resolvedSymbol = symbol.flags & ts.SymbolFlags.Alias
554
- ? checker.getAliasedSymbol(symbol)
555
- : symbol;
556
- const decls = resolvedSymbol.getDeclarations();
557
- if (!decls || decls.length === 0)
558
- return undefined;
559
- const argCount = node.arguments?.length ?? 0;
560
- const candidates = [];
561
- for (const decl of decls) {
562
- if (!ts.isFunctionLike(decl))
563
- continue;
564
- // Only include construct signatures / constructors for new expressions.
565
- if (!ts.isConstructSignatureDeclaration(decl) &&
566
- !ts.isConstructorDeclaration(decl)) {
567
- continue;
568
- }
569
- const params = extractParameterNodes(decl);
570
- const required = params.filter((p) => !p.isOptional && !p.isRest).length;
571
- const hasRest = params.some((p) => p.isRest);
572
- if (argCount < required)
573
- continue;
574
- if (!hasRest && argCount > params.length)
575
- continue;
576
- const sig = checker.getSignatureFromDeclaration(decl);
577
- if (!sig)
578
- continue;
579
- candidates.push(getOrCreateSignatureId(sig));
580
- }
581
- return candidates.length > 0 ? candidates : undefined;
582
- };
583
- const resolveImport = (node) => {
584
- const symbol = checker.getSymbolAtLocation(node.name);
585
- if (!symbol)
586
- return undefined;
587
- const aliased = checker.getAliasedSymbol(symbol);
588
- return getOrCreateDeclId(aliased);
589
- };
590
- const resolveShorthandAssignment = (node) => {
591
- const symbol = checker.getShorthandAssignmentValueSymbol(node);
592
- if (!symbol)
593
- return undefined;
594
- return getOrCreateDeclId(symbol);
595
- };
596
- const getDeclaringTypeNameOfMember = (member) => {
597
- const key = `${member.declId.id}:${member.name}`;
598
- const entry = memberMap.get(key);
599
- const decl = entry?.decl;
600
- if (!decl)
601
- return undefined;
602
- const parent = decl.parent;
603
- if (ts.isInterfaceDeclaration(parent) && parent.name)
604
- return parent.name.text;
605
- if (ts.isClassDeclaration(parent) && parent.name)
606
- return parent.name.text;
607
- if (ts.isTypeAliasDeclaration(parent) && parent.name)
608
- return parent.name.text;
609
- // tsbindgen static containers can be emitted as:
610
- // export const Foo: { bar(...): ... }
611
- //
612
- // In this case, member declarations live under a TypeLiteralNode whose parent
613
- // is the VariableDeclaration for `Foo`. We treat `Foo` as the declaring "type"
614
- // name for binding disambiguation purposes.
615
- if (ts.isTypeLiteralNode(parent)) {
616
- const container = parent.parent;
617
- if (ts.isVariableDeclaration(container) &&
618
- ts.isIdentifier(container.name)) {
619
- return container.name.text;
620
- }
621
- }
622
- return undefined;
623
- };
624
- const getSourceFilePathOfMember = (member) => {
625
- const key = `${member.declId.id}:${member.name}`;
626
- const entry = memberMap.get(key);
627
- const decl = entry?.decl;
628
- if (!decl)
629
- return undefined;
630
- return decl.getSourceFile().fileName;
631
- };
632
- const getSourceFilePathOfDecl = (declId) => {
633
- const entry = declMap.get(declId.id);
634
- if (!entry)
635
- return undefined;
636
- const decl = entry.decl ?? entry.typeDeclNode ?? entry.valueDeclNode;
637
- if (!decl)
638
- return undefined;
639
- return decl.getSourceFile().fileName;
640
- };
641
- const getFullyQualifiedName = (declId) => {
642
- const entry = declMap.get(declId.id);
643
- if (!entry)
644
- return undefined;
645
- return checker.getFullyQualifiedName(entry.symbol);
646
- };
647
- const getTypePredicateOfSignature = (sigId) => {
648
- const entry = signatureMap.get(sigId.id);
649
- if (!entry)
650
- return undefined;
651
- const predicate = checker.getTypePredicateOfSignature(entry.signature);
652
- if (!predicate || predicate.kind !== ts.TypePredicateKind.Identifier) {
653
- return undefined;
654
- }
655
- return {
656
- kind: "typePredicate",
657
- parameterIndex: predicate.parameterIndex ?? 0,
658
- typeNode: predicate.type
659
- ? checker.typeToTypeNode(predicate.type, undefined, ts.NodeBuilderFlags.None)
660
- : undefined,
661
- };
662
- };
663
- const getThisTypeNodeOfSignature = (sigId) => {
664
- const entry = signatureMap.get(sigId.id);
665
- return entry?.thisTypeNode;
666
- };
667
- const getDeclaringTypeNameOfSignature = (sigId) => {
668
- const entry = signatureMap.get(sigId.id);
669
- return entry?.declaringTypeTsName;
670
- };
671
- // ─────────────────────────────────────────────────────────────────────────
672
- // HANDLE REGISTRY IMPLEMENTATION
673
- // ─────────────────────────────────────────────────────────────────────────
674
- const handleRegistry = {
675
- getDecl: (id) => {
676
- const entry = declMap.get(id.id);
677
- if (!entry)
678
- return undefined;
679
- return {
680
- typeNode: entry.typeNode,
681
- kind: entry.kind,
682
- fqName: entry.fqName,
683
- declNode: entry.decl,
684
- typeDeclNode: entry.typeDeclNode,
685
- valueDeclNode: entry.valueDeclNode,
686
- classMemberNames: entry.classMemberNames,
687
- };
688
- },
689
- getSignature: (id) => {
690
- const entry = signatureMap.get(id.id);
691
- if (!entry)
692
- return undefined;
693
- return {
694
- parameters: entry.parameters,
695
- thisTypeNode: entry.thisTypeNode,
696
- returnTypeNode: entry.returnTypeNode,
697
- typeParameters: entry.typeParameters,
698
- // CRITICAL for Alice's spec: declaring identity for resolveCall()
699
- // Uses simple TS name, resolved via UnifiedTypeCatalog.resolveTsName()
700
- declaringTypeTsName: entry.declaringTypeTsName,
701
- declaringMemberName: entry.declaringMemberName,
702
- // Type predicate extracted at registration time (Alice's spec)
703
- typePredicate: entry.typePredicate,
704
- };
705
- },
706
- getMember: (id) => {
707
- const key = `${id.declId.id}:${id.name}`;
708
- const entry = memberMap.get(key);
709
- if (!entry)
710
- return undefined;
711
- return {
712
- name: entry.name,
713
- declNode: entry.decl,
714
- typeNode: entry.typeNode,
715
- isOptional: entry.isOptional,
716
- isReadonly: entry.isReadonly,
717
- };
718
- },
719
- getTypeSyntax: (id) => {
720
- const entry = typeSyntaxMap.get(id.id);
721
- if (!entry)
722
- return undefined;
723
- return {
724
- typeNode: entry.typeNode,
725
- };
726
- },
727
- };
728
- // ─────────────────────────────────────────────────────────────────────────
729
- // TYPE SYNTAX CAPTURE (Phase 2: TypeSyntaxId)
730
- // ─────────────────────────────────────────────────────────────────────────
731
- /**
732
- * Capture a type syntax node for later conversion.
733
- *
734
- * This creates an opaque TypeSyntaxId handle that can be passed to
735
- * TypeSystem.typeFromSyntax() for conversion. Used for inline type syntax
736
- * that cannot be captured at catalog-build time.
737
- */
738
- const captureTypeSyntax = (node) => {
739
- const id = makeTypeSyntaxId(nextTypeSyntaxId.value++);
740
- typeSyntaxMap.set(id.id, { typeNode: node });
741
- return id;
742
- };
743
- /**
744
- * Capture multiple type arguments.
745
- *
746
- * Convenience method for capturing generic type arguments.
747
- */
748
- const captureTypeArgs = (nodes) => {
749
- return nodes.map((node) => captureTypeSyntax(node));
750
- };
751
- return {
752
- resolveIdentifier,
753
- resolveTypeReference,
754
- resolvePropertyAccess,
755
- resolveElementAccess,
756
- resolveCallSignature,
757
- resolveCallSignatureCandidates,
758
- resolveConstructorSignature,
759
- resolveConstructorSignatureCandidates,
760
- resolveImport,
761
- resolveShorthandAssignment,
762
- getDeclaringTypeNameOfMember,
763
- getSourceFilePathOfMember,
764
- getSourceFilePathOfDecl,
765
- getFullyQualifiedName,
766
- getTypePredicateOfSignature,
767
- getThisTypeNodeOfSignature,
768
- getDeclaringTypeNameOfSignature,
769
- // Type syntax capture (Phase 2: TypeSyntaxId)
770
- captureTypeSyntax,
771
- captureTypeArgs,
772
- // Internal method for TypeSystem construction only
773
- _getHandleRegistry: () => handleRegistry,
774
- };
775
- };
776
- // ═══════════════════════════════════════════════════════════════════════════
777
- // HELPER FUNCTIONS
778
- // ═══════════════════════════════════════════════════════════════════════════
779
- const getTypeNodeFromDeclaration = (decl) => {
780
- if (ts.isVariableDeclaration(decl) && decl.type) {
781
- return decl.type;
782
- }
783
- if (ts.isFunctionDeclaration(decl) || ts.isMethodDeclaration(decl)) {
784
- return decl.type;
785
- }
786
- if (ts.isParameter(decl) && decl.type) {
787
- return decl.type;
788
- }
789
- if (ts.isPropertyDeclaration(decl) && decl.type) {
790
- return decl.type;
791
- }
792
- if (ts.isPropertySignature(decl) && decl.type) {
793
- return decl.type;
794
- }
795
- if (ts.isTypeAliasDeclaration(decl)) {
796
- return decl.type;
797
- }
798
- return undefined;
799
- };
800
- const getMemberTypeAnnotation = (decl) => {
801
- if (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl)) {
802
- return decl.type;
803
- }
804
- if (ts.isMethodDeclaration(decl) || ts.isMethodSignature(decl)) {
805
- // For methods, we could return a function type node if needed
806
- return decl.type;
807
- }
808
- if (ts.isGetAccessorDeclaration(decl)) {
809
- return decl.type;
810
- }
811
- if (ts.isSetAccessorDeclaration(decl)) {
812
- // Setter declarations have no return type; use the value parameter type.
813
- const valueParam = decl.parameters[0];
814
- return valueParam?.type;
815
- }
816
- return undefined;
817
- };
818
- const getDeclKind = (decl) => {
819
- if (ts.isVariableDeclaration(decl))
820
- return "variable";
821
- if (ts.isFunctionDeclaration(decl))
822
- return "function";
823
- if (ts.isClassDeclaration(decl))
824
- return "class";
825
- if (ts.isInterfaceDeclaration(decl))
826
- return "interface";
827
- if (ts.isTypeAliasDeclaration(decl))
828
- return "typeAlias";
829
- if (ts.isEnumDeclaration(decl))
830
- return "enum";
831
- if (ts.isParameter(decl))
832
- return "parameter";
833
- if (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl))
834
- return "property";
835
- if (ts.isGetAccessorDeclaration(decl) || ts.isSetAccessorDeclaration(decl))
836
- return "property";
837
- if (ts.isMethodDeclaration(decl) || ts.isMethodSignature(decl))
838
- return "method";
839
- return "variable";
840
- };
841
- const getReturnTypeNode = (decl) => {
842
- if (!decl)
843
- return undefined;
844
- return decl.type;
845
- };
846
- const isThisParameter = (p) => {
847
- return ts.isIdentifier(p.name) && p.name.text === "this";
848
- };
849
- const extractThisParameterTypeNode = (decl) => {
850
- if (!decl)
851
- return undefined;
852
- const thisParam = decl.parameters.find(isThisParameter);
853
- if (!thisParam)
854
- return undefined;
855
- const normalized = normalizeParameterTypeNode(thisParam.type);
856
- return normalized.typeNode;
857
- };
858
- /**
859
- * Extract and normalize parameter nodes from a signature declaration.
860
- *
861
- * ALICE'S SPEC: Parameter mode detection happens HERE during signature registration.
862
- * If the parameter type is `ref<T>`, `out<T>`, or `in<T>`:
863
- * - Set `mode` to that keyword
864
- * - Set `typeNode` to the INNER T node (unwrapped)
865
- *
866
- * This is PURE SYNTAX inspection, no TS type inference.
867
- */
868
- const extractParameterNodes = (decl) => {
869
- if (!decl)
870
- return [];
871
- // TypeScript `this:` parameters are not call arguments. Exclude them from arity,
872
- // but keep the typeNode available via extractThisParameterTypeNode().
873
- const params = decl.parameters.filter((p) => !isThisParameter(p));
874
- return params.map((p) => {
875
- const normalized = normalizeParameterTypeNode(p.type);
876
- return {
877
- name: ts.isIdentifier(p.name) ? p.name.text : "param",
878
- typeNode: normalized.typeNode,
879
- isOptional: !!p.questionToken || !!p.initializer,
880
- isRest: !!p.dotDotDotToken,
881
- mode: normalized.mode,
882
- };
883
- });
884
- };
885
- /**
886
- * Normalize a parameter type node by detecting ref<T>/out<T>/in<T> wrappers.
887
- *
888
- * This is PURE SYNTAX analysis - we look at the TypeNode AST structure:
889
- * - If it's a TypeReferenceNode with identifier name "ref"/"out"/"in"
890
- * - And exactly one type argument
891
- * - Then unwrap to get the inner type
892
- *
893
- * @param typeNode The parameter's type node
894
- * @returns { mode, typeNode } where typeNode is unwrapped if wrapper detected
895
- */
896
- const normalizeParameterTypeNode = (typeNode) => {
897
- if (!typeNode) {
898
- return { mode: "value", typeNode: undefined };
899
- }
900
- // Mirror IR conversion rules: wrappers may be nested and may appear in any order.
901
- // - thisarg<T> marks an extension-method receiver parameter (erases for typing)
902
- // - ref<T>/out<T>/in<T>/inref<T> set passing mode and erase to T for typing
903
- let mode = "value";
904
- let current = typeNode;
905
- while (current) {
906
- if (ts.isParenthesizedTypeNode(current)) {
907
- current = current.type;
908
- continue;
909
- }
910
- if (!ts.isTypeReferenceNode(current))
911
- break;
912
- if (!ts.isIdentifier(current.typeName))
913
- break;
914
- if (!current.typeArguments || current.typeArguments.length !== 1)
915
- break;
916
- const inner = current.typeArguments[0];
917
- if (!inner)
918
- break;
919
- const wrapperName = current.typeName.text;
920
- if (wrapperName === "thisarg") {
921
- current = inner;
922
- continue;
923
- }
924
- if (wrapperName === "ref" || wrapperName === "out") {
925
- mode = wrapperName;
926
- current = inner;
927
- continue;
928
- }
929
- if (wrapperName === "in" || wrapperName === "inref") {
930
- mode = "in";
931
- current = inner;
932
- continue;
933
- }
934
- break;
935
- }
936
- // No wrapper detected - regular parameter
937
- return { mode, typeNode: current ?? typeNode };
938
- };
939
- const convertTypeParameterDeclarations = (typeParameters) => {
940
- if (!typeParameters || typeParameters.length === 0)
941
- return undefined;
942
- return typeParameters.map((tp) => ({
943
- name: tp.name.text,
944
- constraintNode: tp.constraint,
945
- defaultNode: tp.default,
946
- }));
947
- };
948
- const extractTypeParameterNodes = (decl) => {
949
- if (!decl)
950
- return undefined;
951
- // Constructor declarations don't have their own type parameters in TS syntax,
952
- // but the enclosing class may be generic (class Box<T> { constructor(x: T) {} }).
953
- // For constructor signature typing/inference, the relevant type parameters are the
954
- // class type parameters.
955
- if (ts.isConstructorDeclaration(decl)) {
956
- const parent = decl.parent;
957
- if (ts.isClassDeclaration(parent)) {
958
- return convertTypeParameterDeclarations(parent.typeParameters);
959
- }
960
- return undefined;
961
- }
962
- return convertTypeParameterDeclarations(decl.typeParameters);
963
- };
964
- /**
965
- * Extract type predicate from a signature's return type.
966
- *
967
- * ALICE'S SPEC: This is PURE SYNTAX inspection at registration time.
968
- * We check if the return TypeNode is a TypePredicateNode (x is T or this is T).
969
- * No TS type inference is used.
970
- *
971
- * @param returnTypeNode The signature's return type node
972
- * @param decl The signature declaration (to find parameter index)
973
- * @returns SignatureTypePredicate or undefined if not a predicate
974
- */
975
- const extractTypePredicate = (returnTypeNode, decl) => {
976
- // Return type must be a TypePredicateNode
977
- if (!returnTypeNode || !ts.isTypePredicateNode(returnTypeNode)) {
978
- return undefined;
979
- }
980
- const predNode = returnTypeNode;
981
- // Must have a target type
982
- if (!predNode.type) {
983
- return undefined;
984
- }
985
- // Check if it's "this is T" predicate
986
- if (predNode.parameterName.kind === ts.SyntaxKind.ThisType) {
987
- return {
988
- kind: "this",
989
- targetTypeNode: predNode.type,
990
- };
991
- }
992
- // Check if it's "param is T" predicate
993
- if (ts.isIdentifier(predNode.parameterName)) {
994
- const paramName = predNode.parameterName.text;
995
- // Find parameter index
996
- const paramIndex = decl?.parameters.findIndex((p) => ts.isIdentifier(p.name) && p.name.text === paramName) ?? -1;
997
- if (paramIndex >= 0) {
998
- return {
999
- kind: "param",
1000
- parameterName: paramName,
1001
- parameterIndex: paramIndex,
1002
- targetTypeNode: predNode.type,
1003
- };
1004
- }
1005
- }
1006
- return undefined;
1007
- };
1008
- const isOptionalMember = (symbol) => {
1009
- return (symbol.flags & ts.SymbolFlags.Optional) !== 0;
1010
- };
1011
- const isReadonlyMember = (decl) => {
1012
- if (!decl)
1013
- return false;
1014
- if (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl)) {
1015
- return (decl.modifiers?.some((m) => m.kind === ts.SyntaxKind.ReadonlyKeyword) ??
1016
- false);
1017
- }
1018
- return false;
1019
- };
1020
- /**
1021
- * Extract declaring identity from a signature declaration.
1022
- *
1023
- * CRITICAL for Alice's spec: Without this, resolveCall() cannot compute
1024
- * inheritance substitution. It would have to "guess" the method name
1025
- * from the signature, which breaks on overloads, aliases, etc.
1026
- *
1027
- * DESIGN (Phase 5 Step 4): Store the declaring type as a **simple TS name**
1028
- * (identifier text like "Box"), NOT a TS "fully qualified name". TypeSystem
1029
- * uses UnifiedTypeCatalog.resolveTsName() to resolve this to the proper
1030
- * CLR FQ name for inheritance substitution.
1031
- *
1032
- * @param decl The signature declaration (method, function, etc.)
1033
- * @param _checker TypeChecker (kept for backwards compatibility, unused)
1034
- * @returns { typeTsName, memberName } or undefined if not a member
1035
- */
1036
- const extractDeclaringIdentity = (decl, _checker) => {
1037
- if (!decl)
1038
- return undefined;
1039
- const normalizeTsbindgenTypeName = (name) => {
1040
- if (name.endsWith("$instance")) {
1041
- return name.slice(0, -"$instance".length);
1042
- }
1043
- if (name.startsWith("__") && name.endsWith("$views")) {
1044
- return name.slice(2, -"$views".length);
1045
- }
1046
- return name;
1047
- };
1048
- // Check if this is a method (class or interface member)
1049
- if (ts.isMethodDeclaration(decl) || ts.isMethodSignature(decl)) {
1050
- const parent = decl.parent;
1051
- // Get the method name
1052
- const memberName = ts.isIdentifier(decl.name)
1053
- ? decl.name.text
1054
- : (decl.name?.getText() ?? "unknown");
1055
- // Get the containing type's simple name (identifier text)
1056
- if (ts.isClassDeclaration(parent) || ts.isInterfaceDeclaration(parent)) {
1057
- if (parent.name) {
1058
- // Use the simple identifier text, not checker.getFullyQualifiedName
1059
- const typeTsName = normalizeTsbindgenTypeName(parent.name.text);
1060
- return { typeTsName, memberName };
1061
- }
1062
- }
1063
- // tsbindgen static containers are commonly emitted as:
1064
- // export const Foo: { bar(...): ... }
1065
- //
1066
- // In this case, method signatures live under a TypeLiteralNode whose parent is
1067
- // the variable declaration for `Foo`. We still need declaring identity so
1068
- // TypeSystem can apply airplane-grade overload correction using CLR metadata.
1069
- if (ts.isTypeLiteralNode(parent)) {
1070
- const container = parent.parent;
1071
- if (ts.isVariableDeclaration(container) &&
1072
- ts.isIdentifier(container.name)) {
1073
- const typeTsName = normalizeTsbindgenTypeName(container.name.text);
1074
- return { typeTsName, memberName };
1075
- }
1076
- }
1077
- // Object literal method - use parent context
1078
- if (ts.isObjectLiteralExpression(parent)) {
1079
- // For object literals, we don't have a named type
1080
- return undefined;
1081
- }
1082
- }
1083
- // Constructor declarations
1084
- if (ts.isConstructorDeclaration(decl)) {
1085
- const parent = decl.parent;
1086
- if (ts.isClassDeclaration(parent) && parent.name) {
1087
- // Use the simple identifier text
1088
- const typeTsName = normalizeTsbindgenTypeName(parent.name.text);
1089
- return { typeTsName, memberName: "constructor" };
1090
- }
1091
- }
1092
- // Getter/setter declarations
1093
- if (ts.isGetAccessorDeclaration(decl) || ts.isSetAccessorDeclaration(decl)) {
1094
- const parent = decl.parent;
1095
- const memberName = ts.isIdentifier(decl.name)
1096
- ? decl.name.text
1097
- : (decl.name?.getText() ?? "unknown");
1098
- if (ts.isClassDeclaration(parent) || ts.isInterfaceDeclaration(parent)) {
1099
- if (parent.name) {
1100
- // Use the simple identifier text
1101
- const typeTsName = normalizeTsbindgenTypeName(parent.name.text);
1102
- return { typeTsName, memberName };
1103
- }
1104
- }
1105
- }
1106
- // Standalone functions don't have a declaring type
1107
- return undefined;
1108
- };
1109
- /**
1110
- * Extract class member names from a ClassDeclaration.
1111
- *
1112
- * ALICE'S SPEC: This is PURE SYNTAX inspection at registration time.
1113
- * We iterate class members and collect method/property names.
1114
- * This data is used by TypeSystem.checkTsClassMemberOverride without
1115
- * needing to inspect TS AST nodes or use hardcoded SyntaxKind numbers.
1116
19
  *
1117
- * @param classDecl The class declaration node
1118
- * @returns ClassMemberNames with method and property name sets
20
+ * Barrel re-export all public types and factory function are re-exported
21
+ * from their respective sub-modules.
1119
22
  */
1120
- const extractClassMemberNames = (classDecl) => {
1121
- const methods = new Set();
1122
- const properties = new Set();
1123
- for (const member of classDecl.members) {
1124
- // Get member name if it has an identifier
1125
- const name = ts.isMethodDeclaration(member)
1126
- ? ts.isIdentifier(member.name)
1127
- ? member.name.text
1128
- : undefined
1129
- : ts.isPropertyDeclaration(member)
1130
- ? ts.isIdentifier(member.name)
1131
- ? member.name.text
1132
- : undefined
1133
- : ts.isGetAccessorDeclaration(member) ||
1134
- ts.isSetAccessorDeclaration(member)
1135
- ? ts.isIdentifier(member.name)
1136
- ? member.name.text
1137
- : undefined
1138
- : undefined;
1139
- if (!name)
1140
- continue;
1141
- if (ts.isMethodDeclaration(member)) {
1142
- methods.add(name);
1143
- }
1144
- else if (ts.isPropertyDeclaration(member)) {
1145
- properties.add(name);
1146
- }
1147
- else if (ts.isGetAccessorDeclaration(member) ||
1148
- ts.isSetAccessorDeclaration(member)) {
1149
- // Accessors are treated as properties for override detection
1150
- properties.add(name);
1151
- }
1152
- }
1153
- return { methods, properties };
1154
- };
23
+ export { createBinding } from "./binding-factory.js";
1155
24
  //# sourceMappingURL=index.js.map