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,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NO_IPDOM = void 0;
4
+ exports.computePostDominators = computePostDominators;
5
+ exports.postDominates = postDominates;
6
+ exports.isExitReachableFromAllBlocks = isExitReachableFromAllBlocks;
7
+ /**
8
+ * Sentinel `ipdom` value: the block has no immediate post-dominator. True for
9
+ * the EXIT block itself (the reverse-CFG root) and for any block that cannot
10
+ * reach EXIT. Chosen as -1 so the {@link postDominates} climb terminates
11
+ * naturally instead of self-looping on the root.
12
+ */
13
+ exports.NO_IPDOM = -1;
14
+ /**
15
+ * Compute the immediate-post-dominator tree for one function's CFG. See the
16
+ * module doc for the purity/determinism contract and EXIT-root assumptions.
17
+ */
18
+ function computePostDominators(cfg) {
19
+ const n = cfg.blocks.length;
20
+ const exit = cfg.exitIndex;
21
+ if (n === 0 || exit < 0 || exit >= n) {
22
+ return { ipdom: new Array(n).fill(exports.NO_IPDOM) };
23
+ }
24
+ // Forward adjacency (sorted for deterministic intersect order). The reverse
25
+ // CFG, on which we compute dominators, flips these: a node's reverse-CFG
26
+ // successors are its CFG predecessors, and its reverse-CFG predecessors
27
+ // (the "preds" CHK intersects over) are its CFG successors.
28
+ const cfgPreds = Array.from({ length: n }, () => []);
29
+ const cfgSuccs = Array.from({ length: n }, () => []);
30
+ for (const e of cfg.edges) {
31
+ if (e.from < 0 || e.from >= n || e.to < 0 || e.to >= n)
32
+ continue;
33
+ cfgSuccs[e.from].push(e.to);
34
+ cfgPreds[e.to].push(e.from);
35
+ }
36
+ for (const l of cfgPreds)
37
+ l.sort((a, b) => a - b);
38
+ for (const l of cfgSuccs)
39
+ l.sort((a, b) => a - b);
40
+ // Postorder of the reverse CFG from EXIT (traversing CFG-predecessor edges).
41
+ // Iterative DFS with an explicit phase stack; children pushed in sorted order
42
+ // for determinism. postNum is the CHK comparison key: higher = closer to root.
43
+ const postNum = new Array(n).fill(-1);
44
+ const postorder = [];
45
+ const visited = new Array(n).fill(false);
46
+ const stack = [{ node: exit, childIdx: 0 }];
47
+ visited[exit] = true;
48
+ while (stack.length) {
49
+ const top = stack[stack.length - 1];
50
+ const revSuccs = cfgPreds[top.node]; // reverse-CFG successors
51
+ if (top.childIdx < revSuccs.length) {
52
+ const next = revSuccs[top.childIdx];
53
+ top.childIdx += 1;
54
+ if (!visited[next]) {
55
+ visited[next] = true;
56
+ stack.push({ node: next, childIdx: 0 });
57
+ }
58
+ }
59
+ else {
60
+ postNum[top.node] = postorder.length;
61
+ postorder.push(top.node);
62
+ stack.pop();
63
+ }
64
+ }
65
+ const rpo = [...postorder].reverse();
66
+ // CHK fixpoint. ipdom[exit] = exit DURING computation (the root dominates
67
+ // itself, so the intersect climb has a common terminus); it is reset to
68
+ // NO_IPDOM before returning so callers' climbs terminate at the root.
69
+ const ipdom = new Array(n).fill(exports.NO_IPDOM);
70
+ ipdom[exit] = exit;
71
+ const intersect = (a, b) => {
72
+ let f1 = a;
73
+ let f2 = b;
74
+ while (f1 !== f2) {
75
+ while (postNum[f1] < postNum[f2])
76
+ f1 = ipdom[f1];
77
+ while (postNum[f2] < postNum[f1])
78
+ f2 = ipdom[f2];
79
+ }
80
+ return f1;
81
+ };
82
+ let changed = true;
83
+ while (changed) {
84
+ changed = false;
85
+ for (const b of rpo) {
86
+ if (b === exit)
87
+ continue;
88
+ // CHK "predecessors in the reverse CFG" = this block's CFG successors.
89
+ // Fold only those already processed (ipdom assigned); RPO guarantees at
90
+ // least one for every block reverse-reachable from EXIT.
91
+ let newIpdom = exports.NO_IPDOM;
92
+ for (const s of cfgSuccs[b]) {
93
+ if (ipdom[s] !== exports.NO_IPDOM) {
94
+ newIpdom = newIpdom === exports.NO_IPDOM ? s : intersect(s, newIpdom);
95
+ }
96
+ }
97
+ if (newIpdom !== exports.NO_IPDOM && ipdom[b] !== newIpdom) {
98
+ ipdom[b] = newIpdom;
99
+ changed = true;
100
+ }
101
+ }
102
+ }
103
+ ipdom[exit] = exports.NO_IPDOM; // root: no post-dominator above it
104
+ return { ipdom };
105
+ }
106
+ /**
107
+ * Does block `p` post-dominate block `b`? Climbs the post-dom tree from `b`
108
+ * toward EXIT and tests membership of `p`. Reflexive: a block post-dominates
109
+ * itself. A block with no post-dominator (EXIT, or one that cannot reach EXIT)
110
+ * is post-dominated only by itself. The step guard is purely defensive — the
111
+ * `ipdom` chain is a tree and always terminates at {@link NO_IPDOM}.
112
+ */
113
+ function postDominates(tree, p, b) {
114
+ const { ipdom } = tree;
115
+ const n = ipdom.length;
116
+ if (p < 0 || b < 0 || p >= n || b >= n)
117
+ return false;
118
+ let cur = b;
119
+ let steps = 0;
120
+ while (cur !== exports.NO_IPDOM && steps <= n) {
121
+ if (cur === p)
122
+ return true;
123
+ cur = ipdom[cur];
124
+ steps += 1;
125
+ }
126
+ return false;
127
+ }
128
+ /**
129
+ * Precondition for SOUND post-dominance (#2188 review): EXIT must be reachable
130
+ * (forward) from every block that is itself reachable from ENTRY. When it
131
+ * fails — an entry-reachable region that cannot reach EXIT, e.g. a
132
+ * non-terminating loop or a multi-terminal CFG a future language visitor might
133
+ * emit — the EXIT-rooted reverse walk degenerates (every such block gets
134
+ * {@link NO_IPDOM}), which both DROPS real control dependences and INVENTS
135
+ * spurious ones (the unsoundness documented in the module header). Consumers
136
+ * ({@link emitFileCdg}) check this and skip CDG for the function rather than
137
+ * persist an unsound projection — CFG and REACHING_DEF, which do not depend on
138
+ * post-dominance, are unaffected.
139
+ *
140
+ * The current TS visitor always satisfies this (every loop is given a
141
+ * structural `header → loopExit` edge, keeping EXIT reverse-reachable), so this
142
+ * is a guard for future visitors and hand-built CFGs, not a behavior change
143
+ * today. Pure and O(V+E).
144
+ */
145
+ function isExitReachableFromAllBlocks(cfg) {
146
+ const n = cfg.blocks.length;
147
+ if (n === 0)
148
+ return true;
149
+ const { entryIndex, exitIndex } = cfg;
150
+ if (entryIndex < 0 || entryIndex >= n || exitIndex < 0 || exitIndex >= n)
151
+ return false;
152
+ const succ = Array.from({ length: n }, () => []);
153
+ const pred = Array.from({ length: n }, () => []);
154
+ for (const e of cfg.edges) {
155
+ if (e.from < 0 || e.from >= n || e.to < 0 || e.to >= n)
156
+ continue;
157
+ succ[e.from].push(e.to);
158
+ pred[e.to].push(e.from);
159
+ }
160
+ const reach = (start, adj) => {
161
+ const seen = new Uint8Array(n);
162
+ const stack = [start];
163
+ seen[start] = 1;
164
+ while (stack.length > 0) {
165
+ const b = stack.pop();
166
+ for (const next of adj[b]) {
167
+ if (!seen[next]) {
168
+ seen[next] = 1;
169
+ stack.push(next);
170
+ }
171
+ }
172
+ }
173
+ return seen;
174
+ };
175
+ const fromEntry = reach(entryIndex, succ); // forward-reachable from ENTRY
176
+ const canReachExit = reach(exitIndex, pred); // can reach EXIT (reverse from EXIT)
177
+ for (let i = 0; i < n; i++) {
178
+ if (fromEntry[i] && !canReachExit[i])
179
+ return false;
180
+ }
181
+ return true;
182
+ }
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ /**
3
+ * REACHING_DEF reason codec (PDG FU-B-2) — the ONE shared encoder/decoder for
4
+ * the source-level annotation carried on a persisted `REACHING_DEF` edge's
5
+ * `reason` column.
6
+ *
7
+ * A `REACHING_DEF` edge is `(defBlock:BasicBlock)->(useBlock:BasicBlock)` for one
8
+ * binding. The persisted columns (`from,to,type,confidence,reason,step`) are
9
+ * DEDUPED to `(defBlock, useBlock, bindingIdx)` (emit.ts), so the persisted
10
+ * edge cannot, by itself, recover the def→use chain WITHIN a coalesced
11
+ * straight-line BasicBlock: lines 7-9 of `chainCompute` collapse to one block
12
+ * and `a@7 -> b@8 -> c@9` become block-self edges with no line information. This
13
+ * codec ANNOTATES each edge with the ORDERED LIST of (defLine, useLine) source
14
+ * lines for that (block-pair, binding) group — the full set of def→use steps the
15
+ * solver produced for it — so the statement-granular intra-block chain is
16
+ * recoverable at projection time (pdg-impact.ts) WITHOUT widening the dedup key:
17
+ * the edge COUNT is unchanged (still one edge per group), only the `reason`
18
+ * carries the pair LIST (RD/taint substrate + cfg-bench budgets protected — the
19
+ * cfg-bench canon does not include the persisted `reason`).
20
+ *
21
+ * Carrying the FULL list (not just the FIRST pair) is what makes a SAME-BINDING
22
+ * reassignment chain recoverable: `acc = f(acc); acc = g(acc); acc = h(acc)`
23
+ * coalesces into one block, and ALL of `acc@24->acc@25`, `acc@25->acc@26`,
24
+ * `acc@26->acc@27` share the one `(self-block, self-block, accIdx)` group. A
25
+ * first-pair-only annotation could chain `24->25` but never reach `26`; the full
26
+ * list lets the projection walk the whole chain to fixpoint.
27
+ *
28
+ * ## Wire format (version `1`)
29
+ *
30
+ * ```
31
+ * <name> (legacy / pre-FU-B-2 — bare name)
32
+ * <name>|1:<d1>:<u1> (FU-B-2, single pair)
33
+ * <name>|1:<d1>:<u1>;<d2>:<u2>;... (FU-B-2, ordered pair LIST)
34
+ * ```
35
+ *
36
+ * The binding NAME comes FIRST, verbatim, so the established read paths keep
37
+ * working with a trivial change: `pdg_query` mode:'flows' filters the variable
38
+ * by `r.reason = $variable OR r.reason STARTS WITH $variable|` and projects the
39
+ * name via {@link decodeReachingDefReason}. Source identifiers never contain `|`
40
+ * (the structural separator), so the name is unambiguously the substring before
41
+ * the first `|`; an un-annotated reason has no `|` and decodes to itself with no
42
+ * line info. Within the annotation, `;` separates pairs and `:` separates the
43
+ * version + the two lines of each pair. `<defLine>`/`<useLine>` are 1-based
44
+ * decimal source lines.
45
+ *
46
+ * ## Delimiter / round-trip discipline (mirrors call-summary-codec KTD6)
47
+ *
48
+ * Every structural character (`|`, `:`, `;`, the version digit, decimal digits)
49
+ * is printable ASCII, so the encoding survives `escapeCSVField ∘ sanitizeUTF8`
50
+ * (csv-generator.ts) byte-exact. The decoder NEVER throws — anything not a
51
+ * well-formed version-`1` annotation degrades to "name only, no pairs" (the sound
52
+ * default: the projection then falls back to block-start granularity exactly as
53
+ * before FU-B-2). A malformed individual pair within an otherwise-well-formed
54
+ * list is dropped; the well-formed pairs are kept.
55
+ */
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.REACHING_DEF_REASON_CODEC_VERSION = void 0;
58
+ exports.encodeReachingDefReasonPairs = encodeReachingDefReasonPairs;
59
+ exports.encodeReachingDefReason = encodeReachingDefReason;
60
+ exports.decodeReachingDefReason = decodeReachingDefReason;
61
+ /** One-character format version prefix. Bump on any wire-format change. */
62
+ exports.REACHING_DEF_REASON_CODEC_VERSION = '1';
63
+ /**
64
+ * Structural separator between the binding name and the versioned annotation.
65
+ * Source identifiers cannot contain it, so the name is the substring before the
66
+ * first occurrence (and a name with no occurrence is a legacy bare-name reason).
67
+ */
68
+ const NAME_SEP = '|';
69
+ /** Separator between consecutive (defLine:useLine) pairs in the annotation. */
70
+ const PAIR_SEP = ';';
71
+ /** Whether a (defLine, useLine) pair is a well-formed 1-based-or-0 integer pair. */
72
+ function isValidPair(defLine, useLine) {
73
+ return Number.isInteger(defLine) && Number.isInteger(useLine) && defLine >= 0 && useLine >= 0;
74
+ }
75
+ /**
76
+ * Encode a binding name + its ordered (defLine, useLine) step list into the
77
+ * versioned `reason` wire string. Deterministic; never throws. Malformed /
78
+ * negative pairs are dropped (defensive — the solver always passes 1-based
79
+ * integers); if NO valid pair survives the result degrades to the bare name
80
+ * (legacy form) so a malformed annotation never fabricates bad lines. The name
81
+ * is written verbatim FIRST (see the module doc), so a name that —
82
+ * pathologically — already contains `|` would be re-decoded with a truncated
83
+ * name; binding names are source identifiers, which never contain `|`, so this
84
+ * cannot occur for real input (and would only lose line precision, never corrupt
85
+ * the substrate).
86
+ */
87
+ function encodeReachingDefReasonPairs(name, pairs) {
88
+ const valid = pairs.filter((p) => isValidPair(p.defLine, p.useLine));
89
+ if (valid.length === 0)
90
+ return name;
91
+ const body = valid.map((p) => `${p.defLine}:${p.useLine}`).join(PAIR_SEP);
92
+ return `${name}${NAME_SEP}${exports.REACHING_DEF_REASON_CODEC_VERSION}:${body}`;
93
+ }
94
+ /**
95
+ * Single-pair convenience over {@link encodeReachingDefReasonPairs} — kept for
96
+ * call sites and tests that carry exactly one def→use step.
97
+ */
98
+ function encodeReachingDefReason(name, defLine, useLine) {
99
+ return encodeReachingDefReasonPairs(name, [{ defLine, useLine }]);
100
+ }
101
+ /**
102
+ * Decode a REACHING_DEF `reason` wire string into its binding name + (when
103
+ * present) the FU-B-2 def/use source-line pair LIST. Never throws — a non-string,
104
+ * an un-annotated bare name, or a malformed annotation all yield `{ name, pairs:
105
+ * [] }` (the sound default: the consumer falls back to block-start granularity).
106
+ * A well-formed `<name>|1:<d1>:<u1>;<d2>:<u2>;...` yields every well-formed pair
107
+ * (a single malformed pair is dropped, the rest kept); `defLine`/`useLine` mirror
108
+ * the first pair for back-compat consumers.
109
+ */
110
+ function decodeReachingDefReason(reason) {
111
+ const raw = typeof reason === 'string' ? reason : '';
112
+ const sep = raw.indexOf(NAME_SEP);
113
+ if (sep === -1)
114
+ return { name: raw, pairs: [] };
115
+ const name = raw.slice(0, sep);
116
+ const annotation = raw.slice(sep + 1);
117
+ // Annotation is `<version>:<d1>:<u1>;<d2>:<u2>;...`. Split off the version
118
+ // prefix once: the first colon ends the version token; the remainder is the
119
+ // `;`-separated pair body.
120
+ const firstColon = annotation.indexOf(':');
121
+ if (firstColon === -1 || annotation.slice(0, firstColon) !== exports.REACHING_DEF_REASON_CODEC_VERSION) {
122
+ return { name, pairs: [] };
123
+ }
124
+ const body = annotation.slice(firstColon + 1);
125
+ const pairs = [];
126
+ for (const chunk of body.split(PAIR_SEP)) {
127
+ const parts = chunk.split(':');
128
+ if (parts.length !== 2)
129
+ continue; // malformed pair — drop it, keep the rest
130
+ const defLine = Number(parts[0]);
131
+ const useLine = Number(parts[1]);
132
+ if (!isValidPair(defLine, useLine))
133
+ continue;
134
+ pairs.push({ defLine, useLine });
135
+ }
136
+ if (pairs.length === 0)
137
+ return { name, pairs: [] };
138
+ return { name, pairs, defLine: pairs[0].defLine, useLine: pairs[0].useLine };
139
+ }
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+ /**
3
+ * Pure graph sub-stages for the reaching-definitions solvers (#2201 review R4).
4
+ *
5
+ * Extracted from reaching-defs.ts to keep that module focused on the
6
+ * orchestrator, the dense oracle, the statement sweep, and the dispatcher.
7
+ * Everything here is a pure function of plain arrays — no CFG, no harvest, no
8
+ * solver state — so this module has NO dependency on reaching-defs.ts (a strict
9
+ * one-way import) and each stage is independently testable. The SSA pipeline
10
+ * (dominators → dominance frontiers → Tarjan SCC → reach-set condensation)
11
+ * implements Cooper-Harvey-Kennedy + Cytron + Tarjan; reverse-post-order, the
12
+ * loop-reachability check, and the def-set/lattice primitives are shared with
13
+ * the dense GEN/KILL solver and the dispatcher.
14
+ *
15
+ * These are held byte-identical to their former inline form by the differential
16
+ * equivalence fuzz (test/unit/cfg/reaching-defs-equivalence.test.ts) — any diff
17
+ * after extraction is an extraction bug, never the oracle.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.reversePostOrder = reversePostOrder;
21
+ exports.buildDominators = buildDominators;
22
+ exports.buildDominanceFrontiers = buildDominanceFrontiers;
23
+ exports.tarjanScc = tarjanScc;
24
+ exports.condenseReachingSets = condenseReachingSets;
25
+ exports.hasReachableLoop = hasReachableLoop;
26
+ exports.unionSets = unionSets;
27
+ exports.latticeEquals = latticeEquals;
28
+ /**
29
+ * RPO over blocks reachable from `entry`; unreachable blocks appended by index.
30
+ * Returns the order AND the reachability bitmap the DFS already computed, so a
31
+ * caller needing "is every block reachable?" reuses this pass instead of a
32
+ * separate BFS (#2201 review R8 — the SSA path's reachability gate).
33
+ *
34
+ * @internal
35
+ */
36
+ function reversePostOrder(entry, succs, n) {
37
+ const visited = new Array(n).fill(false);
38
+ const post = [];
39
+ // Iterative DFS with an explicit phase stack (children pushed in reverse so
40
+ // they pop in sorted order — determinism).
41
+ const stack = [{ node: entry, childIdx: 0 }];
42
+ visited[entry] = true;
43
+ while (stack.length) {
44
+ const top = stack[stack.length - 1];
45
+ const children = succs[top.node];
46
+ if (top.childIdx < children.length) {
47
+ const next = children[top.childIdx];
48
+ top.childIdx += 1;
49
+ if (!visited[next]) {
50
+ visited[next] = true;
51
+ stack.push({ node: next, childIdx: 0 });
52
+ }
53
+ }
54
+ else {
55
+ post.push(top.node);
56
+ stack.pop();
57
+ }
58
+ }
59
+ const order = post.reverse();
60
+ for (let b = 0; b < n; b++)
61
+ if (!visited[b])
62
+ order.push(b);
63
+ return { order, visited };
64
+ }
65
+ /**
66
+ * Immediate dominators (Cooper-Harvey-Kennedy; correct on irreducible CFGs).
67
+ * `rpo` is the reverse-post-order rooted at the synthetic start `S`, `dPredsX`
68
+ * the dominator-graph predecessors (incl. S→entry). Returns idom[b] for every
69
+ * node in [0, nx); idom[S] === S.
70
+ *
71
+ * @internal
72
+ */
73
+ function buildDominators(rpo, dPredsX, S, nx) {
74
+ const rpoIdx = new Array(nx);
75
+ rpo.forEach((b, i) => (rpoIdx[b] = i));
76
+ const idom = new Array(nx).fill(-1);
77
+ idom[S] = S;
78
+ const intersect = (a, b) => {
79
+ while (a !== b) {
80
+ while (rpoIdx[a] > rpoIdx[b])
81
+ a = idom[a];
82
+ while (rpoIdx[b] > rpoIdx[a])
83
+ b = idom[b];
84
+ }
85
+ return a;
86
+ };
87
+ for (let changed = true; changed;) {
88
+ changed = false;
89
+ for (const b of rpo) {
90
+ if (b === S)
91
+ continue;
92
+ let nd = -1;
93
+ for (const p of dPredsX[b])
94
+ if (idom[p] !== -1)
95
+ nd = nd === -1 ? p : intersect(nd, p);
96
+ if (nd !== -1 && idom[b] !== nd) {
97
+ idom[b] = nd;
98
+ changed = true;
99
+ }
100
+ }
101
+ }
102
+ return idom;
103
+ }
104
+ /**
105
+ * Dominance frontiers (Cytron). df[b] is the set of nodes where b's dominance
106
+ * ends — the φ-placement targets for any binding defined in b.
107
+ *
108
+ * @internal
109
+ */
110
+ function buildDominanceFrontiers(dPredsX, idom, nx) {
111
+ const df = Array.from({ length: nx }, () => new Set());
112
+ for (let b = 0; b < nx; b++) {
113
+ const dp = dPredsX[b];
114
+ if (dp.length < 2)
115
+ continue;
116
+ for (const p of dp) {
117
+ let runner = p;
118
+ while (runner !== idom[b] && runner !== -1) {
119
+ df[runner].add(b);
120
+ runner = idom[runner];
121
+ }
122
+ }
123
+ }
124
+ return df;
125
+ }
126
+ /**
127
+ * Tarjan strongly-connected components over the value-graph operand edges
128
+ * (`nodeOps[node]` = operand node ids). Iterative (explicit work stack — the
129
+ * graph can be deep). SCCs are emitted in REVERSE topological order, so an
130
+ * SCC's operand SCCs are numbered before it — the property
131
+ * {@link condenseReachingSets} relies on for its single forward pass.
132
+ *
133
+ * @internal
134
+ */
135
+ function tarjanScc(nodeOps) {
136
+ const N = nodeOps.length;
137
+ const sccOf = new Array(N).fill(-1);
138
+ const sccMembers = [];
139
+ const index = new Array(N).fill(-1);
140
+ const low = new Array(N).fill(0);
141
+ const onStk = new Array(N).fill(false);
142
+ const tarjanStk = [];
143
+ let counter = 0;
144
+ for (let start = 0; start < N; start++) {
145
+ if (index[start] !== -1)
146
+ continue;
147
+ const work = [{ node: start, oi: 0 }];
148
+ index[start] = low[start] = counter++;
149
+ tarjanStk.push(start);
150
+ onStk[start] = true;
151
+ while (work.length) {
152
+ const top = work[work.length - 1];
153
+ const ops = nodeOps[top.node];
154
+ if (top.oi < ops.length) {
155
+ const w = ops[top.oi++];
156
+ if (index[w] === -1) {
157
+ index[w] = low[w] = counter++;
158
+ tarjanStk.push(w);
159
+ onStk[w] = true;
160
+ work.push({ node: w, oi: 0 });
161
+ }
162
+ else if (onStk[w] && index[w] < low[top.node]) {
163
+ low[top.node] = index[w];
164
+ }
165
+ }
166
+ else {
167
+ if (low[top.node] === index[top.node]) {
168
+ const members = [];
169
+ let w;
170
+ do {
171
+ w = tarjanStk.pop();
172
+ onStk[w] = false;
173
+ sccOf[w] = sccMembers.length;
174
+ members.push(w);
175
+ } while (w !== top.node);
176
+ sccMembers.push(members);
177
+ }
178
+ work.pop();
179
+ if (work.length) {
180
+ const par = work[work.length - 1].node;
181
+ if (low[top.node] < low[par])
182
+ low[par] = low[top.node];
183
+ }
184
+ }
185
+ }
186
+ }
187
+ return { sccOf, sccMembers };
188
+ }
189
+ /**
190
+ * Reaching def-key set per SCC via condensation (cycle-safe union). Tarjan emits
191
+ * SCCs in reverse topological order, so a single forward pass over SCCs resolves
192
+ * every union: an SCC's reaching set is its members' own leaf keys plus the
193
+ * already-computed reaching sets of its cross-SCC operands.
194
+ *
195
+ * Alias fast path (#2201 review R2): an SCC with NO own leaf keys whose cross-SCC
196
+ * operands all resolve to a SINGLE source SCC has exactly that source's reaching
197
+ * set — share it BY REFERENCE instead of copying element-by-element (the O(defs²)
198
+ * cost at wide-fan-in φ merges). Safe: the returned sets are read-only after this
199
+ * pass, and contents are identical (set iteration order is irrelevant — the
200
+ * sweep sorts each use's keys before emission, KTD6).
201
+ *
202
+ * @internal
203
+ */
204
+ function condenseReachingSets(sccMembers, sccOf, nodeKeys, nodeOps) {
205
+ const reachByScc = new Array(sccMembers.length);
206
+ for (let s = 0; s < sccMembers.length; s++) {
207
+ const members = sccMembers[s];
208
+ let aliasTarget = -1; // the unique cross-SCC source SCC, or -1 if none/many
209
+ let hasOwnKeys = false;
210
+ let multiSource = false;
211
+ for (const node of members) {
212
+ if (nodeKeys[node]) {
213
+ hasOwnKeys = true;
214
+ break;
215
+ }
216
+ for (const w of nodeOps[node]) {
217
+ const ws = sccOf[w];
218
+ if (ws === s)
219
+ continue; // intra-SCC operand: same set being built, adds nothing
220
+ if (aliasTarget === -1)
221
+ aliasTarget = ws;
222
+ else if (aliasTarget !== ws) {
223
+ multiSource = true;
224
+ break;
225
+ }
226
+ }
227
+ if (multiSource)
228
+ break;
229
+ }
230
+ if (!hasOwnKeys && !multiSource && aliasTarget !== -1) {
231
+ reachByScc[s] = reachByScc[aliasTarget]; // zero-copy share
232
+ continue;
233
+ }
234
+ // General case: union own leaf keys + every distinct cross-SCC operand set.
235
+ const set = new Set();
236
+ for (const node of members) {
237
+ const keys = nodeKeys[node];
238
+ if (keys)
239
+ for (const k of keys)
240
+ set.add(k);
241
+ for (const w of nodeOps[node]) {
242
+ const ws = sccOf[w];
243
+ if (ws !== s)
244
+ for (const k of reachByScc[ws])
245
+ set.add(k);
246
+ }
247
+ }
248
+ reachByScc[s] = set;
249
+ }
250
+ return reachByScc;
251
+ }
252
+ /**
253
+ * True iff a cycle is reachable from `entry` (the CFG has a loop). Iterative DFS
254
+ * with a gray/black coloring; a gray successor is a back-edge. O(V+E). Used by
255
+ * the production dispatcher to decide SSA-vs-dense.
256
+ *
257
+ * @internal
258
+ */
259
+ function hasReachableLoop(entry, succs, n) {
260
+ const color = new Uint8Array(n); // 0 white, 1 gray, 2 black
261
+ const stack = [{ node: entry, i: 0 }];
262
+ color[entry] = 1;
263
+ while (stack.length) {
264
+ const top = stack[stack.length - 1];
265
+ const ss = succs[top.node];
266
+ if (top.i < ss.length) {
267
+ const next = ss[top.i++];
268
+ if (color[next] === 1)
269
+ return true;
270
+ if (color[next] === 0) {
271
+ color[next] = 1;
272
+ stack.push({ node: next, i: 0 });
273
+ }
274
+ }
275
+ else {
276
+ color[top.node] = 2;
277
+ stack.pop();
278
+ }
279
+ }
280
+ return false;
281
+ }
282
+ /**
283
+ * Order-stable union of two def-sets (shares `a` when `b` adds nothing).
284
+ *
285
+ * @internal
286
+ */
287
+ function unionSets(a, b) {
288
+ let target = a;
289
+ let copied = false;
290
+ for (const key of b) {
291
+ if (!target.has(key)) {
292
+ if (!copied) {
293
+ target = new Set(a);
294
+ copied = true;
295
+ }
296
+ target.add(key);
297
+ }
298
+ }
299
+ return target;
300
+ }
301
+ /**
302
+ * Per-binding lattice equality with a reference fast path (sets only ever grow).
303
+ *
304
+ * @internal
305
+ */
306
+ function latticeEquals(a, b) {
307
+ if (a === b)
308
+ return true;
309
+ if (a.size !== b.size)
310
+ return false;
311
+ for (const [k, bSet] of b) {
312
+ const aSet = a.get(k);
313
+ if (aSet === bSet)
314
+ continue;
315
+ if (!aSet || aSet.size !== bSet.size)
316
+ return false;
317
+ for (const v of bSet)
318
+ if (!aSet.has(v))
319
+ return false;
320
+ }
321
+ return true;
322
+ }