cgraphx 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (680) hide show
  1. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  2. package/dist/core/code/engine/cli/analyze.js +1086 -0
  3. package/dist/core/code/engine/cli/cli-message.js +83 -0
  4. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  5. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  6. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  7. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  8. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  9. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  10. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  11. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  12. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  13. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  14. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  15. package/dist/core/code/engine/cli/status.js +156 -0
  16. package/dist/core/code/engine/cli/tool.js +384 -0
  17. package/dist/core/code/engine/config/ignore-service.js +511 -0
  18. package/dist/core/code/engine/config/supported-languages.js +17 -0
  19. package/dist/core/code/engine/core/analysis-features.js +64 -0
  20. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  21. package/dist/core/code/engine/core/git-staleness.js +180 -0
  22. package/dist/core/code/engine/core/graph/graph.js +180 -0
  23. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  24. package/dist/core/code/engine/core/graph/types.js +2 -0
  25. package/dist/core/code/engine/core/index-freshness.js +12 -0
  26. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  27. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  28. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  29. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  30. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  31. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  32. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  33. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  34. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  35. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  36. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  37. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  38. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  39. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  40. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  41. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  42. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  43. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  44. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  45. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  46. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  47. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  48. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  49. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  50. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  51. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  52. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  53. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  54. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  55. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  56. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  57. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  58. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  59. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  60. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  61. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  62. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  63. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  64. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  65. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  66. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  67. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  81. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  82. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  83. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  84. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  85. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  86. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  87. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  88. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  89. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  90. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  91. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  92. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  93. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  94. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  95. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  96. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  97. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  98. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  99. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  100. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  101. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  102. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  103. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  104. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  105. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  106. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  107. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  108. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  109. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  110. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  111. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  112. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  113. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  114. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  115. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  116. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  117. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  118. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  119. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  120. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  121. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  122. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  123. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  124. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  125. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  126. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  127. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  128. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  129. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  130. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  131. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  132. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  133. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  134. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  135. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  136. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  137. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  138. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  139. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  140. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  141. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  142. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  143. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  144. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  145. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  146. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  147. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  148. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  149. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  150. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  151. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  152. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  153. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  154. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  155. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  156. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  157. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  158. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  159. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  160. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  161. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  162. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  163. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  164. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  165. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  166. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  167. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  168. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  169. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  170. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  171. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  172. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  173. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  174. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  175. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  176. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  177. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  178. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  179. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  180. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  181. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  182. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  183. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  184. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  185. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  186. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  187. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  188. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  189. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  190. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  191. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  192. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  193. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  194. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  195. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  196. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  197. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  198. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  199. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  200. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  201. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  202. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  203. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  204. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  205. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  206. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  207. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  208. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  209. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  210. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  211. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  212. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  213. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  214. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  215. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  216. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  217. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  218. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  219. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  220. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  221. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  222. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  223. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  224. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  225. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  226. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  227. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  228. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  229. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  230. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  231. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  232. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  233. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  234. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  235. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  236. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  237. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  238. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  239. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  240. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  241. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  242. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  243. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  244. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  245. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  246. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  247. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  248. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  249. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  250. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  251. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  252. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  253. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  254. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  255. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  256. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  257. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  258. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  259. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  260. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  261. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  262. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  263. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  264. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  265. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  266. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  267. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  268. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  269. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  270. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  271. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  272. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  273. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  274. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  275. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  276. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  277. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  278. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  279. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  280. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  281. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  282. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  283. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  284. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  285. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  286. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  287. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  288. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  289. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  290. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  291. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  292. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  293. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  294. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  295. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  296. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  297. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  298. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  299. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  300. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  301. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  302. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  303. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  304. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  305. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  306. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  307. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  308. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  309. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  310. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  311. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  312. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  313. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  314. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  315. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  316. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  317. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  318. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  319. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  320. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  321. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  322. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  323. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  324. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  325. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  326. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  327. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  328. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  329. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  330. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  331. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  332. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  333. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  334. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  335. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  336. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  337. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  338. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  339. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  340. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  341. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  342. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  343. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  344. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  345. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  346. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  347. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  348. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  349. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  350. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  351. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  352. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  353. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  354. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  355. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  356. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  357. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  358. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  359. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  360. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  361. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  362. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  363. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  364. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  365. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  366. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  367. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  368. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  369. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  370. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  371. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  372. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  373. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  374. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  375. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  376. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  377. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  378. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  379. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  380. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  381. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  382. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  383. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  384. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  385. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  386. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  387. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  388. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  389. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  390. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  391. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  392. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  393. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  394. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  395. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  396. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  397. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  398. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  399. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  400. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  401. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  402. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  403. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  404. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  405. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  406. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  407. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  408. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  409. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  410. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  411. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  412. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  413. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  414. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  415. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  416. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  417. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  418. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  419. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  420. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  421. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  422. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  423. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  424. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  425. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  426. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  427. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  428. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  429. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  430. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  431. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  432. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  433. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  434. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  435. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  436. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  437. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  438. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  439. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  440. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  441. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  442. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  443. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  444. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  445. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  446. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  447. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  448. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  449. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  450. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  451. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  452. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  453. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  454. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  455. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  456. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  457. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  458. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  459. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  460. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  461. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  462. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  463. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  464. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  465. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  466. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  467. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  468. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  469. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  470. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  471. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  472. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  473. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  474. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  475. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  476. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  477. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  478. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  479. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  480. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  481. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  482. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  483. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  484. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  485. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  486. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  487. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  488. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  489. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  490. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  491. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  492. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  493. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  494. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  495. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  496. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  497. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  498. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  499. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  500. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  501. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  502. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  503. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  504. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  505. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  506. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  507. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  508. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  509. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  510. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  511. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  513. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  514. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  515. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  516. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  517. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  518. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  519. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  520. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  521. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  522. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  523. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  524. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  525. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  526. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  527. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  528. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  529. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  530. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  531. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  532. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  533. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  534. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  535. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  536. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  537. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  538. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  539. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  540. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  541. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  542. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  543. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  544. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  545. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  546. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  547. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  548. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  549. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  550. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  551. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  552. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  553. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  554. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  555. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  556. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  557. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  558. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  559. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  560. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  561. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  562. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  563. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  564. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  565. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  566. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  567. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  568. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  569. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  570. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  571. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  572. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  573. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  574. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  575. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  576. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  577. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  578. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  579. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  580. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  581. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  582. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  583. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  584. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  585. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  586. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  587. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  588. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  589. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  590. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  591. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  592. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  593. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  594. package/dist/core/code/engine/core/logger.js +339 -0
  595. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  596. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  597. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  598. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  599. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  600. package/dist/core/code/engine/lib/utils.js +121 -0
  601. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  602. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  603. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  604. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  605. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  606. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  607. package/dist/core/code/engine/storage/branch-index.js +72 -0
  608. package/dist/core/code/engine/storage/file-hash.js +95 -0
  609. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  610. package/dist/core/code/engine/storage/git.js +555 -0
  611. package/dist/core/code/engine/storage/index-lock.js +664 -0
  612. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  613. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  614. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  615. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  616. package/dist/core/code/engine/types/pipeline.js +2 -0
  617. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  618. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  619. package/dist/core/code/shared/graph/types.js +8 -0
  620. package/dist/core/code/shared/index.js +105 -0
  621. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  622. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  623. package/dist/core/code/shared/integrations/retry.js +70 -0
  624. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  625. package/dist/core/code/shared/language-detection.js +162 -0
  626. package/dist/core/code/shared/languages.js +27 -0
  627. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  628. package/dist/core/code/shared/mro-strategy.js +2 -0
  629. package/dist/core/code/shared/pipeline.js +5 -0
  630. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  631. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  632. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  633. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  634. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  635. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  636. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  637. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  638. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  639. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  640. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  641. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  642. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  643. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  644. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  645. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  646. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  647. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  648. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  649. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  650. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  651. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  652. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  653. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  654. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  655. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  656. package/dist/core/code/shared/test-helpers.js +17 -0
  657. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  658. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  659. package/dist/core/timeline/cli.d.ts.map +1 -1
  660. package/dist/core/timeline/cli.js +13 -6
  661. package/dist/core/timeline/cli.js.map +1 -1
  662. package/dist/core/timeline/debris.d.ts +20 -0
  663. package/dist/core/timeline/debris.d.ts.map +1 -0
  664. package/dist/core/timeline/debris.js +124 -0
  665. package/dist/core/timeline/debris.js.map +1 -0
  666. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  667. package/dist/core/timeline/hook-runner.js +3 -1
  668. package/dist/core/timeline/hook-runner.js.map +1 -1
  669. package/dist/core/timeline/hooks.d.ts.map +1 -1
  670. package/dist/core/timeline/hooks.js +13 -5
  671. package/dist/core/timeline/hooks.js.map +1 -1
  672. package/dist/core/timeline/installer.d.ts +2 -0
  673. package/dist/core/timeline/installer.d.ts.map +1 -1
  674. package/dist/core/timeline/installer.js +12 -0
  675. package/dist/core/timeline/installer.js.map +1 -1
  676. package/dist/core/timeline/project-root.d.ts +21 -0
  677. package/dist/core/timeline/project-root.d.ts.map +1 -0
  678. package/dist/core/timeline/project-root.js +83 -0
  679. package/dist/core/timeline/project-root.js.map +1 -0
  680. package/package.json +1 -1
@@ -0,0 +1,1122 @@
1
+ "use strict";
2
+ /**
3
+ * `emitScopeCaptures` for JavaScript.
4
+ *
5
+ * Adapts `emitTsScopeCaptures` for the JavaScript grammar:
6
+ *
7
+ * 1. **JS grammar** — uses `tree-sitter-javascript` instead of
8
+ * `tree-sitter-typescript`. The JS scope query is a subset of the
9
+ * TypeScript one (TypeScript-only node types dropped).
10
+ *
11
+ * 2. **CJS `require()` decomposition** — `const { X } = require('./m')`
12
+ * and `const X = require('./m')` are walked in a post-query pass and
13
+ * synthesized as `@import.kind/name/alias/source` markers so that
14
+ * `interpretJsImport` can recover a `ParsedImport` using the same
15
+ * shape as the TypeScript ESM decomposer.
16
+ *
17
+ * 3. **JSDoc type bindings** — JavaScript has no static type annotations
18
+ * so `@type-binding.parameter` / `@type-binding.return` must be
19
+ * inferred from leading JSDoc comments. A lightweight regex scanner
20
+ * (`parseJsDocParams` / `parseJsDocReturn`) extracts `@param {T} n`
21
+ * and `@returns {T}` tags and emits synthetic captures positioned on
22
+ * the annotated function node. `@type {T}` on a class FIELD is the same
23
+ * story one level down — it is the only way JavaScript can declare a
24
+ * field's type at all — and emits `@type-binding.class-field` (#2833).
25
+ *
26
+ * 4. **Shared synthesis passes** — destructuring, for-of map-tuple, and
27
+ * instanceof narrowing passes are duplicated from `typescript/captures.ts`
28
+ * (they are pure AST operations with no grammar-specific logic).
29
+ *
30
+ * Pure given the input source text. No I/O, no globals consulted.
31
+ */
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.FUNCTION_NODE_TYPES = void 0;
34
+ exports.emitJsScopeCaptures = emitJsScopeCaptures;
35
+ const ast_helpers_js_1 = require("../../utils/ast-helpers.js");
36
+ const import_decomposer_js_1 = require("../typescript/import-decomposer.js");
37
+ const query_js_1 = require("./query.js");
38
+ const arity_metadata_js_1 = require("../typescript/arity-metadata.js");
39
+ const receiver_binding_js_1 = require("../typescript/receiver-binding.js");
40
+ const array_callback_js_1 = require("../typescript/array-callback.js");
41
+ const captures_js_1 = require("../typescript/captures.js");
42
+ const interpret_js_1 = require("../typescript/interpret.js");
43
+ /** JavaScript's spelling of a class-field declaration — the TypeScript grammar
44
+ * calls the same construct `public_field_definition`. Named here, not in the
45
+ * shared predicate, so each literal is checked against the grammar of the file
46
+ * it lives in (`grammar-literal-validation`). */
47
+ const JS_CLASS_FIELD_DEFINITION_TYPES = new Set(['field_definition']);
48
+ const helpers_js_1 = require("../../field-extractors/configs/helpers.js");
49
+ const cjs_module_exports_js_1 = require("../typescript/cjs-module-exports.js");
50
+ const cjs_export_assignment_js_1 = require("../typescript/cjs-export-assignment.js");
51
+ const constants_js_1 = require("../../constants.js");
52
+ const safe_parse_js_1 = require("../../../tree-sitter/safe-parse.js");
53
+ const callable_flow_captures_js_1 = require("../../utils/callable-flow-captures.js");
54
+ const receiver_chain_captures_js_1 = require("../../utils/receiver-chain-captures.js");
55
+ const ts_js_hoc_utils_js_1 = require("../../ts-js-hoc-utils.js");
56
+ /** JS function-like node types that may carry a synthesized `this` binding.
57
+ * Kept in sync with the `@scope.function` patterns in `query.ts`. */
58
+ exports.FUNCTION_NODE_TYPES = [
59
+ 'method_definition',
60
+ 'arrow_function',
61
+ 'function_expression',
62
+ 'function_declaration',
63
+ 'generator_function_declaration',
64
+ // The EXPRESSION form (`const g = function* () {}`) — see the matching note
65
+ // in `typescript/captures.ts`.
66
+ 'generator_function',
67
+ ];
68
+ /** Nodes whose `statement_block` child is their BODY, not a nested block. */
69
+ const JS_FUNCTION_BODY_OWNER_TYPES = new Set(exports.FUNCTION_NODE_TYPES);
70
+ /** Direct-child node types that create a BINDING in their enclosing block.
71
+ * `variable_declaration` (`var`) is deliberately absent: it hoists past the
72
+ * block to the function, so a block containing only `var` binds nothing. */
73
+ const BLOCK_BINDING_CHILD_TYPES = new Set([
74
+ 'lexical_declaration',
75
+ 'class_declaration',
76
+ 'function_declaration',
77
+ 'generator_function_declaration',
78
+ ]);
79
+ /** True when `block` directly declares a name, i.e. it is a real environment
80
+ * record rather than punctuation. A block that binds nothing is transparent to
81
+ * every scope-chain walk — a lookup finds nothing in it and continues to the
82
+ * parent — so emitting a scope for it costs tree size and walk depth and buys
83
+ * exactly nothing. Only DIRECT children count: a declaration in a nested block
84
+ * belongs to that block, which gets its own scope by the same rule. */
85
+ const blockDeclaresBinding = (block) => {
86
+ for (let i = 0; i < block.namedChildCount; i++) {
87
+ const child = block.namedChild(i);
88
+ if (child !== null && BLOCK_BINDING_CHILD_TYPES.has(child.type))
89
+ return true;
90
+ }
91
+ return false;
92
+ };
93
+ /** Declaration anchors that carry function-like arity metadata. */
94
+ const FUNCTION_DECL_TAGS = ['@declaration.method', '@declaration.function'];
95
+ /** Callsite anchors that should carry `@reference.arity` + param types. */
96
+ const CALL_TAGS = [
97
+ '@reference.call.free',
98
+ '@reference.call.member',
99
+ '@reference.call.constructor',
100
+ ];
101
+ const JS_CALLABLE_CAPTURE_OPTIONS = {
102
+ functionNodeTypes: new Set(exports.FUNCTION_NODE_TYPES),
103
+ callNodeTypes: new Set(['call_expression']),
104
+ parameterListNodeTypes: new Set(['formal_parameters', 'arguments']),
105
+ parameterNodeTypes: new Set(['identifier', 'rest_pattern', 'assignment_pattern']),
106
+ bindingNodeTypes: new Set(['variable_declarator']),
107
+ assignmentNodeTypes: new Set(['assignment_expression', 'augmented_assignment_expression']),
108
+ identifierNodeTypes: new Set([
109
+ 'identifier',
110
+ 'property_identifier',
111
+ 'shorthand_property_identifier_pattern',
112
+ 'private_property_identifier',
113
+ ]),
114
+ };
115
+ function pickFirstDefined(grouped, tags) {
116
+ for (const tag of tags) {
117
+ const cap = grouped[tag];
118
+ if (cap !== undefined)
119
+ return cap;
120
+ }
121
+ return undefined;
122
+ }
123
+ function pickFirstNode(groupedNodes, tags) {
124
+ for (const tag of tags) {
125
+ const node = groupedNodes[tag];
126
+ if (node !== undefined)
127
+ return node;
128
+ }
129
+ return undefined;
130
+ }
131
+ /** Walks the parent chain from `node` (inclusive), returning the first node
132
+ * whose type matches, or null. Faster than `findNodeAtRange` when the caller
133
+ * already holds the anchor node — avoids re-scanning the tree from the root. */
134
+ function findSelfOrAncestorOfType(node, type) {
135
+ if (node === undefined)
136
+ return null;
137
+ let current = node;
138
+ while (current !== null) {
139
+ if (current.type === type)
140
+ return current;
141
+ current = current.parent;
142
+ }
143
+ return null;
144
+ }
145
+ /** Walks the parent chain from `node` (inclusive), returning the first node
146
+ * whose type is in the set, or null. Plural form of {@link findSelfOrAncestorOfType}. */
147
+ function findSelfOrAncestorOfTypes(node, types) {
148
+ if (node === undefined)
149
+ return null;
150
+ let current = node;
151
+ while (current !== null) {
152
+ if (types.includes(current.type))
153
+ return current;
154
+ current = current.parent;
155
+ }
156
+ return null;
157
+ }
158
+ /** Filter `@reference.read.member` in non-read contexts (same logic as TS). */
159
+ function shouldEmitReadMember(memberNode) {
160
+ const parent = memberNode.parent;
161
+ if (parent === null)
162
+ return true;
163
+ switch (parent.type) {
164
+ case 'call_expression':
165
+ return parent.childForFieldName('function')?.id !== memberNode.id;
166
+ case 'new_expression':
167
+ return parent.childForFieldName('constructor')?.id !== memberNode.id;
168
+ case 'assignment_expression':
169
+ case 'augmented_assignment_expression':
170
+ return parent.childForFieldName('left')?.id !== memberNode.id;
171
+ case 'jsx_self_closing_element':
172
+ case 'jsx_opening_element':
173
+ return parent.childForFieldName('name')?.id !== memberNode.id;
174
+ default:
175
+ return true;
176
+ }
177
+ }
178
+ /** Find the first JS function-like node at the given range.
179
+ * Prefers the threaded anchor node (walk up its parent chain) so the common
180
+ * case avoids a root re-scan; falls back to a range scan from root only when
181
+ * the anchor isn't a function-like (or isn't supplied). */
182
+ function findFunctionNode(rootNode, range, anchorNode) {
183
+ const fromAnchor = findSelfOrAncestorOfTypes(anchorNode, exports.FUNCTION_NODE_TYPES);
184
+ if (fromAnchor !== null)
185
+ return fromAnchor;
186
+ for (const nodeType of exports.FUNCTION_NODE_TYPES) {
187
+ const n = (0, ast_helpers_js_1.findNodeAtRange)(rootNode, range, nodeType);
188
+ if (n !== null)
189
+ return n;
190
+ }
191
+ return null;
192
+ }
193
+ /** Infer a callsite argument's static type from literal shapes. */
194
+ function inferArgType(argNode) {
195
+ switch (argNode.type) {
196
+ case 'number':
197
+ return 'number';
198
+ case 'string':
199
+ case 'template_string':
200
+ return 'string';
201
+ case 'true':
202
+ case 'false':
203
+ return 'boolean';
204
+ case 'null':
205
+ return 'null';
206
+ case 'undefined':
207
+ return 'undefined';
208
+ case 'array':
209
+ return 'Array';
210
+ case 'object':
211
+ return 'object';
212
+ case 'regex':
213
+ return 'RegExp';
214
+ case 'new_expression': {
215
+ const ctor = argNode.childForFieldName('constructor');
216
+ return ctor?.text ?? '';
217
+ }
218
+ default:
219
+ return '';
220
+ }
221
+ }
222
+ // ─── CJS require() decomposition ─────────────────────────────────────────
223
+ /**
224
+ * Walk the AST and synthesize `@import.*` captures for CJS `require()` calls:
225
+ *
226
+ * - `const { X, Y } = require('./m')` → one match per destructured name,
227
+ * `@import.kind = 'named'`, `@import.name = X / Y`.
228
+ * - `const X = require('./m')` → `@import.kind = 'namespace'`,
229
+ * `@import.alias = X` (the whole module is bound to X).
230
+ * - `require('./m')` as a bare expression-statement → side-effect.
231
+ *
232
+ * CJS named-alias form (`const { X: alias } = require('./m')`) emits
233
+ * `@import.kind = 'named-alias'` with `@import.name = X` and
234
+ * `@import.alias = alias`.
235
+ *
236
+ * The synthesized markers are identical to those produced by
237
+ * `splitImportStatement` for ESM, so `interpretJsImport` can delegate
238
+ * unchanged to `interpretTsImport` for all cases.
239
+ */
240
+ function synthesizeCjsImports(root, out) {
241
+ const stack = [root];
242
+ for (;;) {
243
+ const node = stack.pop();
244
+ if (node === undefined)
245
+ break;
246
+ for (const child of node.namedChildren) {
247
+ if (child !== null)
248
+ stack.push(child);
249
+ }
250
+ if (node.type !== 'call_expression')
251
+ continue;
252
+ // Require call: function must be bare identifier "require".
253
+ const fn = node.childForFieldName('function');
254
+ if (fn === null || fn.type !== 'identifier' || fn.text !== 'require')
255
+ continue;
256
+ const argsNode = node.childForFieldName('arguments');
257
+ if (argsNode === null)
258
+ continue;
259
+ // Source must be a string literal.
260
+ const firstArg = argsNode.namedChild(0);
261
+ if (firstArg === null || firstArg.type !== 'string')
262
+ continue;
263
+ const rawSource = firstArg.text; // includes surrounding quotes
264
+ const source = firstArg.namedChild(0)?.text ?? rawSource.slice(1, -1);
265
+ const parent = node.parent;
266
+ // Case 1: const { X } = require('./m') OR const X = require('./m')
267
+ if (parent?.type === 'variable_declarator') {
268
+ const nameNode = parent.childForFieldName('name');
269
+ if (nameNode === null)
270
+ continue;
271
+ if (nameNode.type === 'object_pattern') {
272
+ // Destructured: emit one match per specifier.
273
+ for (const field of nameNode.namedChildren) {
274
+ if (field === null)
275
+ continue;
276
+ if (field.type === 'shorthand_property_identifier_pattern') {
277
+ const name = field.text;
278
+ out.push({
279
+ '@import.statement': (0, ast_helpers_js_1.syntheticCapture)('@import.statement', node, rawSource),
280
+ '@import.kind': (0, ast_helpers_js_1.syntheticCapture)('@import.kind', node, 'named'),
281
+ '@import.name': (0, ast_helpers_js_1.syntheticCapture)('@import.name', field, name),
282
+ '@import.source': (0, ast_helpers_js_1.syntheticCapture)('@import.source', firstArg, source),
283
+ });
284
+ }
285
+ else if (field.type === 'pair_pattern') {
286
+ const key = field.childForFieldName('key');
287
+ const value = field.childForFieldName('value');
288
+ if (key === null || value === null || value.type !== 'identifier')
289
+ continue;
290
+ out.push({
291
+ '@import.statement': (0, ast_helpers_js_1.syntheticCapture)('@import.statement', node, rawSource),
292
+ '@import.kind': (0, ast_helpers_js_1.syntheticCapture)('@import.kind', node, 'named-alias'),
293
+ '@import.name': (0, ast_helpers_js_1.syntheticCapture)('@import.name', key, key.text),
294
+ '@import.alias': (0, ast_helpers_js_1.syntheticCapture)('@import.alias', value, value.text),
295
+ '@import.source': (0, ast_helpers_js_1.syntheticCapture)('@import.source', firstArg, source),
296
+ });
297
+ }
298
+ }
299
+ }
300
+ else if (nameNode.type === 'identifier') {
301
+ // Namespace-style: const X = require('./m') → bind whole module to X.
302
+ out.push({
303
+ '@import.statement': (0, ast_helpers_js_1.syntheticCapture)('@import.statement', node, rawSource),
304
+ '@import.kind': (0, ast_helpers_js_1.syntheticCapture)('@import.kind', node, 'namespace'),
305
+ '@import.alias': (0, ast_helpers_js_1.syntheticCapture)('@import.alias', nameNode, nameNode.text),
306
+ '@import.source': (0, ast_helpers_js_1.syntheticCapture)('@import.source', firstArg, source),
307
+ });
308
+ }
309
+ continue;
310
+ }
311
+ // Case 2: bare require('./m') — side-effect import.
312
+ if (parent?.type === 'expression_statement') {
313
+ out.push({
314
+ '@import.statement': (0, ast_helpers_js_1.syntheticCapture)('@import.statement', node, rawSource),
315
+ '@import.kind': (0, ast_helpers_js_1.syntheticCapture)('@import.kind', node, 'side-effect'),
316
+ '@import.source': (0, ast_helpers_js_1.syntheticCapture)('@import.source', firstArg, source),
317
+ });
318
+ }
319
+ }
320
+ }
321
+ /** Extract `@param {Type} name` entries from a JSDoc comment block. */
322
+ function parseJsDocParams(text) {
323
+ const results = [];
324
+ // Match @param {Type} name or @param {Type} [name] (optional)
325
+ const re = /@param\s+\{([^}]+)\}\s+\[?(\w+)\]?/g;
326
+ let m;
327
+ while ((m = re.exec(text)) !== null) {
328
+ results.push({ type: m[1].trim(), name: m[2].trim() });
329
+ }
330
+ return results;
331
+ }
332
+ /** Extract `@returns {Type}` or `@return {Type}` from a JSDoc comment. */
333
+ function parseJsDocReturn(text) {
334
+ const m = /@returns?\s+\{([^}]+)\}/.exec(text);
335
+ return m ? m[1].trim() : null;
336
+ }
337
+ /** Extract `@type {Type}` from a JSDoc comment (variable-level annotation). */
338
+ function parseJsDocType(text) {
339
+ const m = /@type\s+\{([^}]+)\}/.exec(text);
340
+ return m ? m[1].trim() : null;
341
+ }
342
+ /**
343
+ * A type REFERENCE, possibly qualified, generic, or unioned:
344
+ * `Repo`, `Repo<User>`, `models.Repo`, `Handler<Req, Res>`, `Repo|null`,
345
+ * `Repo<User> | null`.
346
+ *
347
+ * Applied only to a string already capped by {@link JSDOC_TYPE_MAX_LENGTH}:
348
+ * the union and generic groups both nest quantifiers, so an unbounded
349
+ * non-matching input is a backtracking hazard, and a docblock's `{…}` payload
350
+ * is attacker-shaped text (it is whatever the file says).
351
+ *
352
+ * JSDoc's `{…}` payload is free text and carries shapes that are not
353
+ * references at all — record types (`{{a: number}}`), function types
354
+ * (`{function(string): void}`), the any-type `{*}`, parenthesized unions
355
+ * (`{(Repo|Other)}`). None of those name a class, so a field annotated with
356
+ * one is DECLINED rather than bound to whatever substring survives
357
+ * normalization. (`parseJsDocType`'s `[^}]+` also truncates a record type at
358
+ * its first `}`, which this rejects too.)
359
+ */
360
+ /** Longest `@type {…}` payload considered. A type REFERENCE that names a class
361
+ * is far shorter; past this the string is a structural type or generated
362
+ * noise, which this pass declines anyway, and the cap is what keeps
363
+ * {@link JSDOC_TYPE_REFERENCE_RE}'s nested quantifiers off an unbounded
364
+ * input. */
365
+ const JSDOC_TYPE_MAX_LENGTH = 200;
366
+ const JSDOC_TYPE_REFERENCE_RE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*(?:\s*<[\w$.,<>\s]*>)?(?:\s*\|\s*[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*(?:\s*<[\w$.,<>\s]*>)?)*$/;
367
+ /**
368
+ * The spelling a JSDoc `@type` should bind a class FIELD to, or `null` to
369
+ * decline.
370
+ *
371
+ * The as-written spelling is returned, NOT a reduced one: `interpretJsTypeBinding`
372
+ * carries `Repo<User>` through to `TypeRef.rawName` untouched (user generics are
373
+ * not on `stripGeneric`'s wrapper list), and `resolveClassBindingForName` erases
374
+ * the arguments to `Repo` at lookup time. That is the same erasure every other
375
+ * language in #2833 relies on, so generics need no code here — verified, not
376
+ * assumed, by the capture probe in that issue.
377
+ *
378
+ * Two declines:
379
+ * - `reducesToContainedType` — the container spellings whose interpretation
380
+ * would yield the ELEMENT (`Repo[]`, `Array<Repo>`, `Promise<Repo>`). See
381
+ * that predicate for why a field must not take its element's type.
382
+ * - anything that is not a type reference (see JSDOC_TYPE_REFERENCE_RE).
383
+ *
384
+ * The leading `?` / `!` nullability sigils are JSDoc-specific decoration with no
385
+ * bearing on which class is named, so they are peeled first — `{?Repo}` binds
386
+ * `Repo` exactly as `{Repo|null}` does.
387
+ */
388
+ function jsDocFieldTypeSpelling(rawType) {
389
+ const spelling = rawType
390
+ .trim()
391
+ .replace(/^[?!]+/, '')
392
+ .trim();
393
+ if (spelling === '' || spelling.length > JSDOC_TYPE_MAX_LENGTH)
394
+ return null;
395
+ if ((0, interpret_js_1.reducesToContainedType)(spelling))
396
+ return null;
397
+ if (!JSDOC_TYPE_REFERENCE_RE.test(spelling))
398
+ return null;
399
+ return spelling;
400
+ }
401
+ /**
402
+ * The identifier a JSDoc `@type` may bind a `field_definition` to, or `null` if
403
+ * this field takes no docblock binding at all (#2833).
404
+ *
405
+ * Two refusals, and both are cheaper to answer than the docblock search they
406
+ * gate, which is why they run before it:
407
+ *
408
+ * - `static` fields are dropped, exactly as the query-driven annotation path
409
+ * drops them in `emitJsScopeCaptures` — a static member belongs to the class
410
+ * object and would silently RETYPE an instance field of the same name. The
411
+ * full cost of that trade, measured, is in `isStaticClassFieldBinding`
412
+ * (#2807). Re-checked here because the synthesis pass runs outside the
413
+ * match loop that applies it.
414
+ * - a name that is not a plain identifier (a computed key, a string key)
415
+ * names nothing `this.x` could look up.
416
+ *
417
+ * The JavaScript grammar names a field's name `property:`, not `name:`. `#priv`
418
+ * arrives as `private_property_identifier`; TypeScript binds those under their
419
+ * `#`-prefixed spelling, which is how `this.#priv` looks it up.
420
+ */
421
+ function jsDocBindableFieldName(node) {
422
+ if ((0, captures_js_1.isStaticClassFieldBinding)(node, JS_CLASS_FIELD_DEFINITION_TYPES))
423
+ return null;
424
+ const nameNode = node.childForFieldName('property');
425
+ if (nameNode === null ||
426
+ (nameNode.type !== 'property_identifier' && nameNode.type !== 'private_property_identifier')) {
427
+ return null;
428
+ }
429
+ return nameNode;
430
+ }
431
+ /**
432
+ * Emit the class-FIELD type binding a JSDoc `@type {T}` block declares (#2833).
433
+ *
434
+ * JavaScript has no type annotations, so a docblock is the only way a field
435
+ * can declare one — and measured before this branch, `/** @type {Repo<User>} *​/
436
+ * repo;` bound NOTHING, taking down the non-generic control (`{Plain}`) with
437
+ * it. TypeScript's equivalent `repo: Repo<User>` has always bound, via the
438
+ * `@type-binding.annotation` rule on `public_field_definition`; this reaches the
439
+ * same DESTINATION from the docblock — an annotation-strength binding on the
440
+ * enclosing Class scope, which is the only place `typeOfMemberOnClass` reads a
441
+ * field's type — so the compound-receiver resolver finds it the way it always
442
+ * has. No resolution-side change. See the tag note on the emit below for why
443
+ * the marker is `class-field` rather than `annotation`.
444
+ */
445
+ function emitJsDocFieldBinding(docComment, nameNode, out) {
446
+ const rawType = parseJsDocType(docComment);
447
+ const spelling = rawType === null ? null : jsDocFieldTypeSpelling(rawType);
448
+ if (spelling === null)
449
+ return;
450
+ out.push({
451
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', nameNode, nameNode.text),
452
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', nameNode, spelling),
453
+ // `class-field`, not `annotation`: this is the JS provider's own
454
+ // marker for a binding that must be HOISTED to the enclosing Class
455
+ // scope, which is where `typeOfMemberOnClass` reads a field's type.
456
+ // `jsBindingScopeFor` does that walk; `interpretJsTypeBinding` then
457
+ // remaps the tag to `annotation` so the source strength is the same
458
+ // as TypeScript's `repo: Repo<User>`. Measured: with `annotation`
459
+ // the binding lands on the innermost scope and the field never
460
+ // types — the same shape `synthesizeConstructorFieldBindings` needs
461
+ // for `this.p = new Outer()`.
462
+ '@type-binding.class-field': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.class-field', nameNode, '1'),
463
+ });
464
+ }
465
+ /**
466
+ * Walk the AST and synthesize `@type-binding.*` captures from JSDoc
467
+ * comments immediately preceding function declarations / expressions and class
468
+ * field definitions.
469
+ *
470
+ * Only `/** … *​/` block comments are scanned. Line comments (`//`) are
471
+ * intentionally excluded — JSDoc lives in block comments.
472
+ *
473
+ * Emits:
474
+ * - `@type-binding.parameter` for each `@param {T} n` tag.
475
+ * - `@type-binding.return` for `@returns {T}` / `@return {T}`.
476
+ * - `@type-binding.annotation` for `@type {T}` on `let`/`const`/`var`
477
+ * declarations — covers the common `/** @type {User} *​/ const u = …`
478
+ * pattern (ECMA-262 §14.3.1/§14.3.2 variable declarations).
479
+ * - `@type-binding.class-field` for `@type {T}` on a `field_definition`
480
+ * (#2833) — see {@link emitJsDocFieldBinding}.
481
+ *
482
+ * The binding is anchored on the function node so `tsBindingScopeFor`
483
+ * can hoist method return-type bindings to Module scope (matching the
484
+ * TypeScript path where `hoistTypeBindingsToModule: true`).
485
+ *
486
+ * `field_definition` is a node kind of THIS walk rather than a pass of its own,
487
+ * even though a field's anchor and name are the field itself while every other
488
+ * branch keys off a function-like anchor. A separate pass would be a ninth
489
+ * full-tree traversal of `emitJsScopeCaptures`, and measured on
490
+ * `dist/core/ingestion/workers/parse-worker.js` (2.4k lines, 17.3k nodes) one
491
+ * `namedChildren` walk costs 14.3 ms against 7.5 ms to PARSE the whole file —
492
+ * `node.namedChildren` materializes a fresh array of node wrappers across the
493
+ * N-API boundary at every node. The two node kinds share this walk's preceding-
494
+ * comment search and nothing else, so the branch below returns as soon as it
495
+ * has emitted.
496
+ */
497
+ function synthesizeJsDocBindings(root, out) {
498
+ const stack = [root];
499
+ for (;;) {
500
+ const node = stack.pop();
501
+ if (node === undefined)
502
+ break;
503
+ for (const child of node.namedChildren) {
504
+ if (child !== null)
505
+ stack.push(child);
506
+ }
507
+ const isFnDecl = node.type === 'function_declaration' || node.type === 'generator_function_declaration';
508
+ const isMethodDef = node.type === 'method_definition';
509
+ // Also check lexical_declaration containing an arrow/fn-expression
510
+ const isLexDecl = node.type === 'lexical_declaration' || node.type === 'variable_declaration';
511
+ const isFieldDef = node.type === 'field_definition';
512
+ if (!isFnDecl && !isMethodDef && !isLexDecl && !isFieldDef)
513
+ continue;
514
+ // Non-null exactly for a field that can carry a binding, so it doubles as
515
+ // the branch selector inside the comment search below. Answered before that
516
+ // search because an unbindable field has no reason to look for a docblock.
517
+ const fieldNameNode = isFieldDef ? jsDocBindableFieldName(node) : null;
518
+ if (isFieldDef && fieldNameNode === null)
519
+ continue;
520
+ // For `export function foo() { ... }`, the JSDoc comment precedes the
521
+ // wrapping export_statement, not the inner function_declaration.
522
+ // Walk up to the export_statement so the preceding-sibling search finds it.
523
+ const lookupNode = (isFnDecl || isLexDecl) && node.parent?.type === 'export_statement' ? node.parent : node;
524
+ // Find the preceding sibling comment.
525
+ let sibling = lookupNode.previousNamedSibling;
526
+ while (sibling !== null && sibling.type === 'comment') {
527
+ const text = sibling.text;
528
+ if (text.startsWith('/**')) {
529
+ // A field's docblock declares its own type and nothing else — `@param` /
530
+ // `@returns` on a field name no callable — so this branch does not fall
531
+ // through to the function-like tags below.
532
+ if (fieldNameNode !== null) {
533
+ emitJsDocFieldBinding(text, fieldNameNode, out);
534
+ break;
535
+ }
536
+ // Found a JSDoc block.
537
+ const params = parseJsDocParams(text);
538
+ const retType = parseJsDocReturn(text);
539
+ const varType = isLexDecl ? parseJsDocType(text) : null;
540
+ // Determine the anchor node (the function-like node, for hoisting).
541
+ const anchor = node;
542
+ for (const p of params) {
543
+ out.push({
544
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', anchor, p.name),
545
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', anchor, p.type),
546
+ '@type-binding.parameter': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.parameter', anchor, '1'),
547
+ });
548
+ }
549
+ if (retType !== null) {
550
+ // For named functions, use the function name as the binding name so
551
+ // `hoistTypeBindingsToModule` knows which function's return type this is.
552
+ let fnName = null;
553
+ if (isFnDecl) {
554
+ fnName = node.childForFieldName('name')?.text ?? null;
555
+ }
556
+ else if (isMethodDef) {
557
+ // method_definition uses `name:` field for the method name
558
+ const nameNode = node.childForFieldName('name');
559
+ if (nameNode?.type === 'property_identifier')
560
+ fnName = nameNode.text;
561
+ }
562
+ else if (isLexDecl) {
563
+ const declarator = node.namedChild(0);
564
+ const nameNode = declarator?.childForFieldName('name');
565
+ if (nameNode?.type === 'identifier')
566
+ fnName = nameNode.text;
567
+ }
568
+ if (fnName !== null) {
569
+ out.push({
570
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', anchor, fnName),
571
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', anchor, retType),
572
+ '@type-binding.return': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.return', anchor, '1'),
573
+ });
574
+ }
575
+ }
576
+ // @type {T} on let/const/var: `/** @type {User} */ const u = getUser()`.
577
+ // Emits annotation-strength binding (source = 'annotation') so it
578
+ // overrides any weaker constructor/alias inference on the same name.
579
+ if (varType !== null) {
580
+ for (const declarator of node.namedChildren) {
581
+ if (declarator === null || declarator.type !== 'variable_declarator')
582
+ continue;
583
+ const nameNode = declarator.childForFieldName('name');
584
+ if (nameNode === null || nameNode.type !== 'identifier')
585
+ continue;
586
+ out.push({
587
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', nameNode, nameNode.text),
588
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', nameNode, varType),
589
+ '@type-binding.annotation': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.annotation', nameNode, '1'),
590
+ });
591
+ }
592
+ }
593
+ break;
594
+ }
595
+ sibling = sibling.previousNamedSibling;
596
+ }
597
+ }
598
+ }
599
+ // ─── Destructuring / for-of / instanceof (shared with TS captures) ───────
600
+ function synthesizeDestructuringBindings(root, out) {
601
+ const stack = [root];
602
+ for (;;) {
603
+ const node = stack.pop();
604
+ if (node === undefined)
605
+ break;
606
+ for (const child of node.namedChildren) {
607
+ if (child !== null)
608
+ stack.push(child);
609
+ }
610
+ if (node.type !== 'variable_declarator')
611
+ continue;
612
+ const nameNode = node.childForFieldName('name');
613
+ const valueNode = node.childForFieldName('value');
614
+ if (nameNode === null || valueNode === null)
615
+ continue;
616
+ if (nameNode.type !== 'object_pattern')
617
+ continue;
618
+ if (valueNode.type !== 'identifier')
619
+ continue;
620
+ const rhsName = valueNode.text;
621
+ for (const fieldNode of nameNode.namedChildren) {
622
+ if (fieldNode === null)
623
+ continue;
624
+ if (fieldNode.type === 'shorthand_property_identifier_pattern') {
625
+ const localName = fieldNode.text;
626
+ out.push({
627
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', fieldNode, localName),
628
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', fieldNode, `${rhsName}.${localName}`),
629
+ '@type-binding.destructured': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.destructured', fieldNode, fieldNode.text),
630
+ });
631
+ }
632
+ else if (fieldNode.type === 'pair_pattern') {
633
+ const key = fieldNode.childForFieldName('key');
634
+ const value = fieldNode.childForFieldName('value');
635
+ if (key === null || value === null || value.type !== 'identifier')
636
+ continue;
637
+ const fieldName = key.text;
638
+ const localName = value.text;
639
+ out.push({
640
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', value, localName),
641
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', fieldNode, `${rhsName}.${fieldName}`),
642
+ '@type-binding.destructured': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.destructured', fieldNode, fieldNode.text),
643
+ });
644
+ }
645
+ }
646
+ }
647
+ }
648
+ function synthesizeForOfMapTupleBindings(root, out) {
649
+ const stack = [root];
650
+ for (;;) {
651
+ const node = stack.pop();
652
+ if (node === undefined)
653
+ break;
654
+ for (const child of node.namedChildren) {
655
+ if (child !== null)
656
+ stack.push(child);
657
+ }
658
+ if (node.type !== 'for_in_statement')
659
+ continue;
660
+ const left = node.childForFieldName('left');
661
+ const right = node.childForFieldName('right');
662
+ if (left === null || right === null)
663
+ continue;
664
+ if (left.type !== 'array_pattern' || right.type !== 'identifier')
665
+ continue;
666
+ const rhs = right.text;
667
+ let slot = 0;
668
+ for (const child of left.namedChildren) {
669
+ if (child === null || child.type !== 'identifier')
670
+ continue;
671
+ const localName = child.text;
672
+ out.push({
673
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', child, localName),
674
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', child, `__MAP_TUPLE_${slot}__:${rhs}`),
675
+ '@type-binding.map-tuple-entry': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.map-tuple-entry', child, String(slot)),
676
+ });
677
+ slot++;
678
+ }
679
+ }
680
+ }
681
+ function synthesizeInstanceofNarrowings(root, out) {
682
+ const stack = [root];
683
+ for (;;) {
684
+ const node = stack.pop();
685
+ if (node === undefined)
686
+ break;
687
+ for (const child of node.namedChildren) {
688
+ if (child !== null)
689
+ stack.push(child);
690
+ }
691
+ if (node.type !== 'if_statement')
692
+ continue;
693
+ const cond = node.childForFieldName('condition');
694
+ if (cond === null)
695
+ continue;
696
+ const inner = cond.type === 'parenthesized_expression' ? cond.namedChildren[0] : cond;
697
+ if (inner === null || inner.type !== 'binary_expression')
698
+ continue;
699
+ const op = inner.childForFieldName('operator');
700
+ const left = inner.childForFieldName('left');
701
+ const right = inner.childForFieldName('right');
702
+ if (op === null || left === null || right === null)
703
+ continue;
704
+ if (op.type !== 'instanceof')
705
+ continue;
706
+ if (left.type !== 'identifier')
707
+ continue;
708
+ if (right.type !== 'identifier')
709
+ continue;
710
+ const varName = left.text;
711
+ const typeName = right.text;
712
+ const cons = node.childForFieldName('consequence');
713
+ if (cons === null)
714
+ continue;
715
+ out.push({
716
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', cons, varName),
717
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', right, typeName),
718
+ '@type-binding.instanceof-narrow': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.instanceof-narrow', cons, '1'),
719
+ });
720
+ }
721
+ }
722
+ // ─── Constructor field type bindings ─────────────────────────────────────
723
+ /**
724
+ * Synthesize class-scope type bindings from `this.X = new Y()` assignments
725
+ * inside constructor method bodies. Covers the traditional ES5+ OOP pattern:
726
+ *
727
+ * class User {
728
+ * constructor() {
729
+ * /** @type {Address} *\/
730
+ * this.address = new Address();
731
+ * }
732
+ * }
733
+ *
734
+ * The emitted `@type-binding.class-field` is hoisted to the Class scope by
735
+ * `tsBindingScopeFor` so that compound-receiver resolution can look up
736
+ * `User.address → Address` when resolving `user.address.save()`.
737
+ *
738
+ * Type source priority:
739
+ * 1. JSDoc `@type {T}` comment immediately preceding the statement
740
+ * 2. `new Y()` constructor inference
741
+ */
742
+ function synthesizeConstructorFieldBindings(root, out) {
743
+ const stack = [root];
744
+ for (;;) {
745
+ const node = stack.pop();
746
+ if (node === undefined)
747
+ break;
748
+ for (const child of node.namedChildren) {
749
+ if (child !== null)
750
+ stack.push(child);
751
+ }
752
+ // Only process constructor method definitions
753
+ if (node.type !== 'method_definition')
754
+ continue;
755
+ // …and only a CLASS's. An object literal's members are `method_definition`
756
+ // too, so `{ constructor() { this.p = new Alien(); } }` reached here and
757
+ // typed a field on whatever class the hoist walked up to — an object
758
+ // literal's `this` is the literal, never that class's instance (#2807).
759
+ // TypeScript's sibling pattern carries the same constraint in its query
760
+ // nesting; the two must not read one source differently.
761
+ if (node.parent?.type !== 'class_body')
762
+ continue;
763
+ const nameNode = node.childForFieldName('name');
764
+ if (nameNode?.text !== 'constructor')
765
+ continue;
766
+ // `static constructor() {}` is legal JavaScript — the reserved-name rule
767
+ // applies to instance methods only — and its `this` is the CLASS object, so
768
+ // `this.p = new Alien()` there writes a static property and must not type
769
+ // the instance field `p`. TypeScript's sibling guard (`isStaticMethodThis`)
770
+ // already drops this shape; without the same test here `.js` and `.ts` read
771
+ // one source differently. `hasKeyword` skips the `name` field, so a method
772
+ // named `static` cannot false-positive.
773
+ if ((0, helpers_js_1.hasKeyword)(node, 'static'))
774
+ continue;
775
+ const body = node.childForFieldName('body');
776
+ if (body === null)
777
+ continue;
778
+ for (const stmt of body.namedChildren) {
779
+ if (stmt === null || stmt.type !== 'expression_statement')
780
+ continue;
781
+ const expr = stmt.namedChild(0);
782
+ if (expr === null || expr.type !== 'assignment_expression')
783
+ continue;
784
+ const left = expr.childForFieldName('left');
785
+ const right = expr.childForFieldName('right');
786
+ if (left === null || right === null)
787
+ continue;
788
+ if (left.type !== 'member_expression')
789
+ continue;
790
+ const obj = left.childForFieldName('object');
791
+ const prop = left.childForFieldName('property');
792
+ if (obj === null || prop === null)
793
+ continue;
794
+ if (obj.text !== 'this' || prop.type !== 'property_identifier')
795
+ continue;
796
+ const fieldName = prop.text;
797
+ // Prefer JSDoc @type annotation on the preceding sibling comment.
798
+ let typeName = null;
799
+ const prevSib = stmt.previousNamedSibling;
800
+ if (prevSib !== null && prevSib.type === 'comment') {
801
+ const m = /@type\s*\{([^}]+)\}/.exec(prevSib.text);
802
+ if (m?.[1])
803
+ typeName = m[1].trim();
804
+ }
805
+ // Fall back to constructor inference from `new Y()`.
806
+ if (typeName === null && right.type === 'new_expression') {
807
+ const ctor = right.childForFieldName('constructor');
808
+ if (ctor !== null && ctor.type === 'identifier')
809
+ typeName = ctor.text;
810
+ }
811
+ if (typeName === null)
812
+ continue;
813
+ out.push({
814
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', prop, fieldName),
815
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', prop, typeName),
816
+ // Anchor: positioned inside the constructor body so tsBindingScopeFor
817
+ // can walk up from the Function (constructor) scope to the Class scope.
818
+ '@type-binding.class-field': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.class-field', stmt, '1'),
819
+ });
820
+ }
821
+ }
822
+ }
823
+ // ─── Inheritance references (EXTENDS) ────────────────────────────────────
824
+ /**
825
+ * Synthesize `@reference.inherits` captures from JavaScript class heritage so
826
+ * the registry-primary scope-resolution path emits EXTENDS edges (mirrors C#
827
+ * `synthesizeCsharpInheritanceReferences` / C++ `emitCppInheritanceCaptures`).
828
+ * Without this, JS inheritance edges came only from the legacy heritage-capture
829
+ * leg (removed in #942), which the worker pipeline drops for registry-primary
830
+ * languages, yielding 0 inheritance edges in worker mode (issue #1951).
831
+ *
832
+ * Scope is intentionally limited to a `class_declaration`'s `class_heritage`
833
+ * base, matching the legacy JavaScript heritage query's class scope and its
834
+ * supertype shape descriptor (`javascriptHeritageShapes`:
835
+ * `['identifier', 'member_expression']`). JavaScript classes have a single
836
+ * `extends` base and no `implements`, so every emission is an EXTENDS (decided
837
+ * downstream from the resolved target's symbol kind in
838
+ * `preEmitInheritanceEdges`).
839
+ *
840
+ * Bases handled (at parity with the legacy heritage leg, #1951):
841
+ * - `(identifier)` base (`extends Base`) — bare simple name.
842
+ * - `(member_expression)` base (`extends ns.Base`, `extends a.b.Base`) —
843
+ * qualified; reduced to its trailing `property_identifier` (`Base`) so the
844
+ * V1 `findClassBindingInScope` simple-name contract holds. This mirrors the
845
+ * TypeScript `terminalTsTypeNameNode` member_expression arm.
846
+ *
847
+ * Deliberately NOT emitted (preserving parity with the legacy query, incl. the
848
+ * #1943 HOC behavior):
849
+ * - `class` EXPRESSION nodes (legacy captures `class_declaration` only).
850
+ * - `call_expression` / HOC bases (`extends withFoo(Bar)`) — not a legacy
851
+ * heritage shape; left to the normal call-resolution path.
852
+ *
853
+ * The `@reference.name` bare-name text emitted for each base equals
854
+ * `normalizeSupertypeName(base)` (the legacy leg's reduction): `Base` → `Base`,
855
+ * `ns.Base` → `Base`, `a.b.Base` → `Base` — keeping the two legs at parity.
856
+ */
857
+ function synthesizeJsInheritanceReferences(root, out) {
858
+ const stack = [root];
859
+ for (;;) {
860
+ const node = stack.pop();
861
+ if (node === undefined)
862
+ break;
863
+ for (const child of node.namedChildren) {
864
+ if (child !== null)
865
+ stack.push(child);
866
+ }
867
+ if (node.type !== 'class_declaration')
868
+ continue;
869
+ // Find the `class_heritage` child (holds the single `extends` base).
870
+ let heritage = null;
871
+ for (const child of node.namedChildren) {
872
+ if (child !== null && child.type === 'class_heritage') {
873
+ heritage = child;
874
+ break;
875
+ }
876
+ }
877
+ if (heritage === null)
878
+ continue;
879
+ // Emit for `(identifier)` and `(member_expression)` bases — matching the
880
+ // legacy heritage shape descriptor (`call_expression` HOC bases excluded).
881
+ for (const base of heritage.namedChildren) {
882
+ if (base === null)
883
+ continue;
884
+ const nameNode = terminalJsHeritageNameNode(base);
885
+ if (nameNode === null)
886
+ continue;
887
+ out.push({
888
+ '@reference.inherits': (0, ast_helpers_js_1.nodeToCapture)('@reference.inherits', base),
889
+ '@reference.name': (0, ast_helpers_js_1.nodeToCapture)('@reference.name', nameNode),
890
+ });
891
+ }
892
+ }
893
+ }
894
+ /** Resolve a JavaScript heritage base node to its bare simple-identifier node.
895
+ * `Base` (identifier) → `Base`, `ns.Base` / `a.b.Base` (member_expression) →
896
+ * the trailing `property_identifier` `Base`. Mirrors the TypeScript
897
+ * `terminalTsTypeNameNode` member_expression arm. Returns null for any other
898
+ * shape (e.g. `call_expression` HOC bases), which is then skipped — keeping
899
+ * parity with the legacy `javascriptHeritageShapes` descriptor and
900
+ * `normalizeSupertypeName`'s reduction of each shape. */
901
+ function terminalJsHeritageNameNode(node) {
902
+ switch (node.type) {
903
+ case 'identifier':
904
+ // `extends ns.Base` parses as a member_expression whose tail is a
905
+ // `property_identifier` (not an identifier) — treat it as a leaf name.
906
+ case 'property_identifier':
907
+ return node;
908
+ case 'member_expression': {
909
+ // Qualified `ns.Base` / `a.b.Base` → tail identifier `Base`.
910
+ const tail = node.lastNamedChild;
911
+ return tail === null ? null : terminalJsHeritageNameNode(tail);
912
+ }
913
+ default:
914
+ return null;
915
+ }
916
+ }
917
+ // ─── Main emitter ──────────────────────────────────────────────────────────
918
+ function emitJsScopeCaptures(sourceText, filePath, cachedTree) {
919
+ let tree = cachedTree;
920
+ if (tree !== undefined && !(0, query_js_1.jsCachedTreeMatchesGrammar)(tree)) {
921
+ tree = undefined;
922
+ }
923
+ if (tree === undefined) {
924
+ tree = (0, safe_parse_js_1.parseSourceSafe)((0, query_js_1.getJsParser)(filePath), sourceText, undefined, {
925
+ bufferSize: (0, constants_js_1.getTreeSitterBufferSize)(sourceText),
926
+ });
927
+ }
928
+ const rawMatches = (0, query_js_1.getJsScopeQuery)(filePath).matches(tree.rootNode);
929
+ const out = [];
930
+ for (const m of rawMatches) {
931
+ const grouped = {};
932
+ // Parallel tag -> captured SyntaxNode map. The query hands us each matched
933
+ // node as c.node, so anchors resolve by walking up from the captured node
934
+ // (findSelfOrAncestorOfType[s]) instead of re-deriving them with
935
+ // findNodeAtRange(tree.rootNode, ...) per match — the O(matches x N)
936
+ // root-walk fixed for go #1915 / python #1918 / csharp, mirrored here
937
+ // (mirrors typescript/captures.ts groupedNodes).
938
+ const groupedNodes = {};
939
+ for (const c of m.captures) {
940
+ const tag = '@' + c.name;
941
+ grouped[tag] = (0, ast_helpers_js_1.nodeToCapture)(tag, c.node);
942
+ groupedNodes[tag] = c.node;
943
+ }
944
+ if (Object.keys(grouped).length === 0)
945
+ continue;
946
+ // Decompose ESM import_statement / re-export export_statement.
947
+ if (grouped['@import.statement'] !== undefined) {
948
+ const stmtCapture = grouped['@import.statement'];
949
+ const stmtNode = findSelfOrAncestorOfTypes(groupedNodes['@import.statement'], [
950
+ 'import_statement',
951
+ 'export_statement',
952
+ ]) ??
953
+ (0, ast_helpers_js_1.findNodeAtRange)(tree.rootNode, stmtCapture.range, 'import_statement') ??
954
+ (0, ast_helpers_js_1.findNodeAtRange)(tree.rootNode, stmtCapture.range, 'export_statement');
955
+ if (stmtNode !== null) {
956
+ const decomposed = (0, import_decomposer_js_1.splitImportStatement)(stmtNode);
957
+ for (const d of decomposed)
958
+ out.push(d);
959
+ }
960
+ continue;
961
+ }
962
+ // Decompose dynamic import() calls.
963
+ if (grouped['@import.dynamic'] !== undefined) {
964
+ const dynCapture = grouped['@import.dynamic'];
965
+ const callNode = findSelfOrAncestorOfType(groupedNodes['@import.dynamic'], 'call_expression') ??
966
+ (0, ast_helpers_js_1.findNodeAtRange)(tree.rootNode, dynCapture.range, 'call_expression');
967
+ if (callNode !== null) {
968
+ const decomposed = (0, import_decomposer_js_1.splitImportStatement)(callNode);
969
+ for (const d of decomposed)
970
+ out.push(d);
971
+ }
972
+ continue;
973
+ }
974
+ // Filter @reference.read.member false-positives.
975
+ // See the matching filter in typescript/captures.ts: a `statement_block`
976
+ // that IS a function body duplicates the enclosing Function scope, and
977
+ // keeping it puts a redundant level inside every function for every
978
+ // scope-chain walk to step through (~6% of analyze wall time, measured).
979
+ if (grouped['@scope.block'] !== undefined) {
980
+ const blockNode = groupedNodes['@scope.block'];
981
+ const parentType = blockNode?.parent?.type;
982
+ if (parentType !== undefined && JS_FUNCTION_BODY_OWNER_TYPES.has(parentType))
983
+ continue;
984
+ if (blockNode === undefined || !blockDeclaresBinding(blockNode))
985
+ continue;
986
+ }
987
+ if (grouped['@reference.read.member'] !== undefined) {
988
+ const anchor = grouped['@reference.read.member'];
989
+ const memberNode = findSelfOrAncestorOfType(groupedNodes['@reference.read.member'], 'member_expression') ??
990
+ (0, ast_helpers_js_1.findNodeAtRange)(tree.rootNode, anchor.range, 'member_expression');
991
+ if (memberNode === null || !shouldEmitReadMember(memberNode)) {
992
+ continue;
993
+ }
994
+ }
995
+ // A `static` class field is a member of the class object, not of instances,
996
+ // so `static p = new Wrong()` must not retype the `p = new Right()` beside
997
+ // it — the two land on one Class scope and the later match wins the `>=`
998
+ // tie-break. Shared with TypeScript (`isStaticClassFieldBinding`), which is
999
+ // where the reasoning and the grammar evidence live; the two languages read
1000
+ // the same source and must not read it differently. JavaScript has no type
1001
+ // annotations, so `field_definition` initializers are the only class-field
1002
+ // type binding its query emits and `@type-binding.constructor` is the only
1003
+ // anchor that can carry the modifier.
1004
+ if ((0, captures_js_1.isStaticClassFieldBinding)(groupedNodes['@type-binding.constructor'], JS_CLASS_FIELD_DEFINITION_TYPES)) {
1005
+ continue;
1006
+ }
1007
+ // #1876: drop @declaration.function for array higher-order-method
1008
+ // callbacks (`const x = arr.map(a => …)`). The HOC-wrapped-arrow
1009
+ // pattern matches them, but the binding holds a value, not a callable.
1010
+ // The binding keeps its separate @declaration.const / .variable match,
1011
+ // and the arrow's own @scope.function match (a different pattern) is
1012
+ // untouched, so inner-call attribution falls through to the enclosing
1013
+ // scope instead of a phantom Function.
1014
+ const fnDeclAnchor = grouped['@declaration.function'];
1015
+ if (fnDeclAnchor !== undefined) {
1016
+ const arrowNode = findFunctionNode(tree.rootNode, fnDeclAnchor.range, groupedNodes['@declaration.function']);
1017
+ if (arrowNode !== null && (0, array_callback_js_1.isArrayMethodCallbackArrow)(arrowNode)) {
1018
+ continue;
1019
+ }
1020
+ if (arrowNode !== null && (0, ts_js_hoc_utils_js_1.isBlockedDefaultExportHoc)(arrowNode)) {
1021
+ continue;
1022
+ }
1023
+ // #2723 — see the matching filter in `typescript/captures.ts`.
1024
+ if (arrowNode !== null && (0, cjs_export_assignment_js_1.isShadowedCjsExportAssignment)(arrowNode, tree.rootNode)) {
1025
+ continue;
1026
+ }
1027
+ // #2723 follow-up: the member-assignment rule matches ANY identifier
1028
+ // receiver so an `exports` alias can be recognised. A receiver that is
1029
+ // not the exports object declares nothing at module scope — drop it, or
1030
+ // every `obj.handler = fn` would bind `handler` as a module symbol.
1031
+ if (arrowNode !== null && (0, cjs_export_assignment_js_1.isUnexportedMemberAssignmentValue)(arrowNode, tree.rootNode)) {
1032
+ continue;
1033
+ }
1034
+ // A `this.X = fn` declares a module symbol ONLY at the top level of a
1035
+ // CommonJS file, where `this` is `module.exports`. Inside a function it
1036
+ // is an instance member (a Method with an owner, no module binding), and
1037
+ // in ESM top-level `this` is undefined and exports nothing.
1038
+ if (arrowNode !== null && (0, cjs_export_assignment_js_1.isUndeclarableThisMemberValue)(arrowNode, tree.rootNode)) {
1039
+ continue;
1040
+ }
1041
+ }
1042
+ if (fnDeclAnchor !== undefined) {
1043
+ const fnNode = findFunctionNode(tree.rootNode, fnDeclAnchor.range, groupedNodes['@declaration.function']);
1044
+ if (fnNode !== null && (0, ts_js_hoc_utils_js_1.isDefaultExportHocFunctionNode)(fnNode)) {
1045
+ grouped['@declaration.name'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.name', fnNode, (0, ts_js_hoc_utils_js_1.deriveDefaultExportHocName)(filePath));
1046
+ }
1047
+ }
1048
+ // Synthesize arity metadata on function-like declarations.
1049
+ const declAnchor = pickFirstDefined(grouped, FUNCTION_DECL_TAGS);
1050
+ const declAnchorNode = pickFirstNode(groupedNodes, FUNCTION_DECL_TAGS);
1051
+ if (declAnchor !== undefined) {
1052
+ const fnNode = findFunctionNode(tree.rootNode, declAnchor.range, declAnchorNode);
1053
+ if (fnNode !== null) {
1054
+ const arity = (0, arity_metadata_js_1.computeTsArityMetadata)(fnNode);
1055
+ if (arity.parameterCount !== undefined) {
1056
+ grouped['@declaration.parameter-count'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.parameter-count', fnNode, String(arity.parameterCount));
1057
+ }
1058
+ if (arity.requiredParameterCount !== undefined) {
1059
+ grouped['@declaration.required-parameter-count'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.required-parameter-count', fnNode, String(arity.requiredParameterCount));
1060
+ }
1061
+ if (arity.parameterTypes !== undefined) {
1062
+ grouped['@declaration.parameter-types'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.parameter-types', fnNode, JSON.stringify(arity.parameterTypes));
1063
+ }
1064
+ }
1065
+ }
1066
+ // Synthesize @reference.arity on callsites. Skip JSX element anchors: a JSX
1067
+ // component used as a call argument (e.g. `render(<Foo .../>)`) is itself a
1068
+ // @reference.call.* anchor, and the ascent below would climb into the
1069
+ // enclosing call_expression and mis-attribute that call's arity to the
1070
+ // component. A JSX component reference has no call arity here — this restores
1071
+ // the pre-#1951 range-based behavior (no call_expression at the JSX range).
1072
+ // The guard lives at this call site, not inside findSelfOrAncestorOfTypes,
1073
+ // which is also used by the import-statement and function-scope ascents.
1074
+ const callAnchor = pickFirstDefined(grouped, CALL_TAGS);
1075
+ const callAnchorNode = pickFirstNode(groupedNodes, CALL_TAGS);
1076
+ const anchorIsJsxElement = callAnchorNode?.type === 'jsx_self_closing_element' ||
1077
+ callAnchorNode?.type === 'jsx_opening_element';
1078
+ if (callAnchor !== undefined &&
1079
+ grouped['@reference.arity'] === undefined &&
1080
+ !anchorIsJsxElement) {
1081
+ const callNode = findSelfOrAncestorOfTypes(callAnchorNode, ['call_expression', 'new_expression']) ??
1082
+ (0, ast_helpers_js_1.findNodeAtRange)(tree.rootNode, callAnchor.range, 'call_expression') ??
1083
+ (0, ast_helpers_js_1.findNodeAtRange)(tree.rootNode, callAnchor.range, 'new_expression');
1084
+ if (callNode !== null) {
1085
+ const argList = callNode.childForFieldName('arguments');
1086
+ const args = argList === null
1087
+ ? []
1088
+ : argList.namedChildren.filter((c) => c !== null && c.type !== 'comment');
1089
+ grouped['@reference.arity'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.arity', callNode, String(args.length));
1090
+ grouped['@reference.parameter-types'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.parameter-types', callNode, JSON.stringify(args.map(inferArgType)));
1091
+ }
1092
+ }
1093
+ // Structural receiver chain for a call whose receiver is itself an
1094
+ // expression, so resolution can type it by folding over structure
1095
+ // instead of re-parsing the receiver's source text. Self-gating: a
1096
+ // non-call match, an absent receiver, or a chain with no nameable base
1097
+ // all leave `grouped` untouched.
1098
+ (0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, groupedNodes['@reference.receiver']);
1099
+ out.push(grouped);
1100
+ // Synthesize `this` receiver type-bindings on class member functions.
1101
+ const scopeFnAnchor = grouped['@scope.function'];
1102
+ if (scopeFnAnchor !== undefined) {
1103
+ const fnNode = findFunctionNode(tree.rootNode, scopeFnAnchor.range, groupedNodes['@scope.function']);
1104
+ if (fnNode !== null) {
1105
+ const synth = (0, receiver_binding_js_1.synthesizeTsReceiverBinding)(fnNode);
1106
+ if (synth !== null)
1107
+ out.push(synth);
1108
+ }
1109
+ }
1110
+ }
1111
+ // Post-query synthesis passes.
1112
+ synthesizeCjsImports(tree.rootNode, out);
1113
+ (0, cjs_module_exports_js_1.synthesizeCjsModuleExports)(tree.rootNode, filePath, out);
1114
+ synthesizeJsDocBindings(tree.rootNode, out);
1115
+ synthesizeConstructorFieldBindings(tree.rootNode, out);
1116
+ synthesizeDestructuringBindings(tree.rootNode, out);
1117
+ synthesizeForOfMapTupleBindings(tree.rootNode, out);
1118
+ synthesizeInstanceofNarrowings(tree.rootNode, out);
1119
+ synthesizeJsInheritanceReferences(tree.rootNode, out);
1120
+ out.push(...(0, callable_flow_captures_js_1.synthesizeCallableFlowCaptures)(tree.rootNode, JS_CALLABLE_CAPTURE_OPTIONS));
1121
+ return out;
1122
+ }