@grafema/core 0.1.0-alpha.5 → 0.2.0-beta

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 (530) hide show
  1. package/README.md +0 -1
  2. package/dist/Orchestrator.d.ts +31 -2
  3. package/dist/Orchestrator.d.ts.map +1 -1
  4. package/dist/Orchestrator.js +222 -27
  5. package/dist/config/ConfigLoader.d.ts +90 -0
  6. package/dist/config/ConfigLoader.d.ts.map +1 -0
  7. package/dist/config/ConfigLoader.js +249 -0
  8. package/dist/config/index.d.ts +6 -0
  9. package/dist/config/index.d.ts.map +1 -0
  10. package/dist/config/index.js +4 -0
  11. package/dist/core/ASTWorker.d.ts +11 -36
  12. package/dist/core/ASTWorker.d.ts.map +1 -1
  13. package/dist/core/ASTWorker.js +93 -99
  14. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  15. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  16. package/dist/core/CoverageAnalyzer.js +198 -0
  17. package/dist/core/FileExplainer.d.ts +101 -0
  18. package/dist/core/FileExplainer.d.ts.map +1 -0
  19. package/dist/core/FileExplainer.js +139 -0
  20. package/dist/core/FileNodeManager.d.ts +40 -0
  21. package/dist/core/FileNodeManager.d.ts.map +1 -0
  22. package/dist/core/FileNodeManager.js +84 -0
  23. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  24. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  25. package/dist/core/GraphFreshnessChecker.js +101 -0
  26. package/dist/core/HashUtils.d.ts +24 -0
  27. package/dist/core/HashUtils.d.ts.map +1 -0
  28. package/dist/core/HashUtils.js +45 -0
  29. package/dist/core/IncrementalReanalyzer.d.ts +36 -0
  30. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  31. package/dist/core/IncrementalReanalyzer.js +132 -0
  32. package/dist/core/NodeFactory.d.ts +266 -19
  33. package/dist/core/NodeFactory.d.ts.map +1 -1
  34. package/dist/core/NodeFactory.js +256 -21
  35. package/dist/core/ScopeTracker.d.ts +84 -0
  36. package/dist/core/ScopeTracker.d.ts.map +1 -0
  37. package/dist/core/ScopeTracker.js +116 -0
  38. package/dist/core/SemanticId.d.ts +90 -0
  39. package/dist/core/SemanticId.d.ts.map +1 -0
  40. package/dist/core/SemanticId.js +115 -0
  41. package/dist/core/VersionManager.d.ts.map +1 -1
  42. package/dist/core/VersionManager.js +3 -2
  43. package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
  44. package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
  45. package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
  46. package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
  47. package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
  48. package/dist/core/nodes/ArrayLiteralNode.js +43 -0
  49. package/dist/core/nodes/BranchNode.d.ts +41 -0
  50. package/dist/core/nodes/BranchNode.d.ts.map +1 -0
  51. package/dist/core/nodes/BranchNode.js +82 -0
  52. package/dist/core/nodes/CallSiteNode.d.ts +30 -2
  53. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
  54. package/dist/core/nodes/CallSiteNode.js +54 -4
  55. package/dist/core/nodes/CaseNode.d.ts +43 -0
  56. package/dist/core/nodes/CaseNode.d.ts.map +1 -0
  57. package/dist/core/nodes/CaseNode.js +81 -0
  58. package/dist/core/nodes/ClassNode.d.ts +34 -2
  59. package/dist/core/nodes/ClassNode.d.ts.map +1 -1
  60. package/dist/core/nodes/ClassNode.js +52 -4
  61. package/dist/core/nodes/ConstantNode.d.ts +2 -2
  62. package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
  63. package/dist/core/nodes/ConstantNode.js +6 -4
  64. package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
  65. package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
  66. package/dist/core/nodes/ConstructorCallNode.js +171 -0
  67. package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
  68. package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
  69. package/dist/core/nodes/DatabaseQueryNode.js +5 -2
  70. package/dist/core/nodes/DecoratorNode.d.ts +42 -0
  71. package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
  72. package/dist/core/nodes/DecoratorNode.js +64 -0
  73. package/dist/core/nodes/EnumNode.d.ts +42 -0
  74. package/dist/core/nodes/EnumNode.d.ts.map +1 -0
  75. package/dist/core/nodes/EnumNode.js +56 -0
  76. package/dist/core/nodes/EventListenerNode.d.ts +4 -4
  77. package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
  78. package/dist/core/nodes/EventListenerNode.js +7 -4
  79. package/dist/core/nodes/ExportNode.d.ts +38 -2
  80. package/dist/core/nodes/ExportNode.d.ts.map +1 -1
  81. package/dist/core/nodes/ExportNode.js +54 -4
  82. package/dist/core/nodes/ExpressionNode.d.ts +97 -0
  83. package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
  84. package/dist/core/nodes/ExpressionNode.js +180 -0
  85. package/dist/core/nodes/ExternalModuleNode.d.ts +32 -0
  86. package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
  87. package/dist/core/nodes/ExternalModuleNode.js +49 -0
  88. package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
  89. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
  90. package/dist/core/nodes/ExternalStdioNode.js +15 -8
  91. package/dist/core/nodes/FunctionNode.d.ts +36 -0
  92. package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
  93. package/dist/core/nodes/FunctionNode.js +80 -1
  94. package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
  95. package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
  96. package/dist/core/nodes/HttpRequestNode.js +7 -4
  97. package/dist/core/nodes/ImportNode.d.ts +28 -6
  98. package/dist/core/nodes/ImportNode.d.ts.map +1 -1
  99. package/dist/core/nodes/ImportNode.js +43 -8
  100. package/dist/core/nodes/InterfaceNode.d.ts +46 -0
  101. package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
  102. package/dist/core/nodes/InterfaceNode.js +57 -0
  103. package/dist/core/nodes/IssueNode.d.ts +73 -0
  104. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  105. package/dist/core/nodes/IssueNode.js +129 -0
  106. package/dist/core/nodes/LiteralNode.d.ts +2 -2
  107. package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
  108. package/dist/core/nodes/LiteralNode.js +6 -4
  109. package/dist/core/nodes/MethodCallNode.d.ts +32 -2
  110. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
  111. package/dist/core/nodes/MethodCallNode.js +57 -4
  112. package/dist/core/nodes/MethodNode.d.ts +34 -2
  113. package/dist/core/nodes/MethodNode.d.ts.map +1 -1
  114. package/dist/core/nodes/MethodNode.js +55 -3
  115. package/dist/core/nodes/ModuleNode.d.ts +31 -0
  116. package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
  117. package/dist/core/nodes/ModuleNode.js +37 -0
  118. package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
  119. package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
  120. package/dist/core/nodes/NetworkRequestNode.js +65 -0
  121. package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
  122. package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
  123. package/dist/core/nodes/ObjectLiteralNode.js +43 -0
  124. package/dist/core/nodes/ParameterNode.d.ts +2 -2
  125. package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
  126. package/dist/core/nodes/ParameterNode.js +5 -3
  127. package/dist/core/nodes/ScopeNode.d.ts +31 -0
  128. package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
  129. package/dist/core/nodes/ScopeNode.js +49 -0
  130. package/dist/core/nodes/TypeNode.d.ts +36 -0
  131. package/dist/core/nodes/TypeNode.d.ts.map +1 -0
  132. package/dist/core/nodes/TypeNode.js +55 -0
  133. package/dist/core/nodes/VariableDeclarationNode.d.ts +29 -2
  134. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
  135. package/dist/core/nodes/VariableDeclarationNode.js +48 -4
  136. package/dist/core/nodes/index.d.ts +15 -1
  137. package/dist/core/nodes/index.d.ts.map +1 -1
  138. package/dist/core/nodes/index.js +17 -0
  139. package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
  140. package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
  141. package/dist/data/builtins/BuiltinRegistry.js +110 -0
  142. package/dist/data/builtins/definitions.d.ts +28 -0
  143. package/dist/data/builtins/definitions.d.ts.map +1 -0
  144. package/dist/data/builtins/definitions.js +250 -0
  145. package/dist/data/builtins/index.d.ts +10 -0
  146. package/dist/data/builtins/index.d.ts.map +1 -0
  147. package/dist/data/builtins/index.js +8 -0
  148. package/dist/data/builtins/jsGlobals.d.ts +18 -0
  149. package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
  150. package/dist/data/builtins/jsGlobals.js +26 -0
  151. package/dist/data/builtins/types.d.ts +34 -0
  152. package/dist/data/builtins/types.d.ts.map +1 -0
  153. package/dist/data/builtins/types.js +7 -0
  154. package/dist/data/globals/definitions.d.ts +27 -0
  155. package/dist/data/globals/definitions.d.ts.map +1 -0
  156. package/dist/data/globals/definitions.js +117 -0
  157. package/dist/data/globals/index.d.ts +36 -0
  158. package/dist/data/globals/index.d.ts.map +1 -0
  159. package/dist/data/globals/index.js +52 -0
  160. package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
  161. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  162. package/dist/diagnostics/DiagnosticCollector.js +129 -0
  163. package/dist/diagnostics/DiagnosticReporter.d.ts +100 -0
  164. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  165. package/dist/diagnostics/DiagnosticReporter.js +247 -0
  166. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  167. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  168. package/dist/diagnostics/DiagnosticWriter.js +43 -0
  169. package/dist/diagnostics/index.d.ts +14 -0
  170. package/dist/diagnostics/index.d.ts.map +1 -0
  171. package/dist/diagnostics/index.js +11 -0
  172. package/dist/errors/GrafemaError.d.ts +161 -0
  173. package/dist/errors/GrafemaError.d.ts.map +1 -0
  174. package/dist/errors/GrafemaError.js +181 -0
  175. package/dist/index.d.ts +73 -1
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +70 -1
  178. package/dist/logging/Logger.d.ts +48 -0
  179. package/dist/logging/Logger.d.ts.map +1 -0
  180. package/dist/logging/Logger.js +134 -0
  181. package/dist/plugins/Plugin.d.ts +5 -1
  182. package/dist/plugins/Plugin.d.ts.map +1 -1
  183. package/dist/plugins/Plugin.js +33 -0
  184. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  185. package/dist/plugins/analysis/DatabaseAnalyzer.js +14 -6
  186. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  187. package/dist/plugins/analysis/ExpressAnalyzer.js +29 -19
  188. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
  189. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
  190. package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
  191. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  192. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +71 -29
  193. package/dist/plugins/analysis/FetchAnalyzer.d.ts +41 -0
  194. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  195. package/dist/plugins/analysis/FetchAnalyzer.js +187 -19
  196. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
  197. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  198. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
  199. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +313 -19
  200. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  201. package/dist/plugins/analysis/JSASTAnalyzer.js +3430 -503
  202. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  203. package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
  204. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  205. package/dist/plugins/analysis/RustAnalyzer.js +16 -11
  206. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  207. package/dist/plugins/analysis/SQLiteAnalyzer.js +11 -7
  208. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  209. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
  210. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
  211. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  212. package/dist/plugins/analysis/SocketIOAnalyzer.js +117 -21
  213. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  214. package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
  215. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +207 -4
  216. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  217. package/dist/plugins/analysis/ast/GraphBuilder.js +1527 -316
  218. package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
  219. package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
  220. package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
  221. package/dist/plugins/analysis/ast/types.d.ts +470 -5
  222. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  223. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
  224. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
  225. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
  226. package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
  227. package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
  228. package/dist/plugins/analysis/ast/utils/index.js +5 -0
  229. package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
  230. package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
  231. package/dist/plugins/analysis/ast/utils/location.js +78 -0
  232. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +14 -5
  233. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  234. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
  235. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +100 -9
  236. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  237. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +674 -125
  238. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
  239. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  240. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
  241. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +14 -1
  242. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  243. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +190 -63
  244. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
  245. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
  246. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +112 -8
  247. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
  248. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  249. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
  250. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +20 -2
  251. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  252. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +243 -45
  253. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  254. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
  255. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
  256. package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
  257. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
  258. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
  259. package/dist/plugins/discovery/WorkspaceDiscovery.js +141 -0
  260. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
  261. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
  262. package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
  263. package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
  264. package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
  265. package/dist/plugins/discovery/workspaces/detector.js +49 -0
  266. package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
  267. package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
  268. package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
  269. package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
  270. package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
  271. package/dist/plugins/discovery/workspaces/index.js +8 -0
  272. package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
  273. package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
  274. package/dist/plugins/discovery/workspaces/parsers.js +80 -0
  275. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  276. package/dist/plugins/enrichment/AliasTracker.js +29 -8
  277. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
  278. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
  279. package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
  280. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
  281. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
  282. package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
  283. package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
  284. package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
  285. package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
  286. package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
  287. package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
  288. package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
  289. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
  290. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  291. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +78 -27
  292. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  293. package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
  294. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  295. package/dist/plugins/enrichment/MethodCallResolver.js +33 -13
  296. package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
  297. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  298. package/dist/plugins/enrichment/MountPointResolver.js +173 -147
  299. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
  300. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
  301. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
  302. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  303. package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
  304. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  305. package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
  306. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +22 -27
  307. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  308. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +185 -143
  309. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  310. package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
  311. package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
  312. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  313. package/dist/plugins/indexing/JSModuleIndexer.js +121 -31
  314. package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
  315. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  316. package/dist/plugins/indexing/RustModuleIndexer.js +8 -7
  317. package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
  318. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
  319. package/dist/plugins/indexing/ServiceDetector.js +28 -15
  320. package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
  321. package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
  322. package/dist/plugins/validation/BrokenImportValidator.js +249 -0
  323. package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
  324. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  325. package/dist/plugins/validation/CallResolverValidator.js +103 -77
  326. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
  327. package/dist/plugins/validation/DataFlowValidator.js +62 -49
  328. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
  329. package/dist/plugins/validation/EvalBanValidator.js +17 -16
  330. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  331. package/dist/plugins/validation/GraphConnectivityValidator.js +44 -24
  332. package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
  333. package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
  334. package/dist/plugins/validation/NodeCreationValidator.js +415 -0
  335. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  336. package/dist/plugins/validation/SQLInjectionValidator.js +61 -19
  337. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
  338. package/dist/plugins/validation/ShadowingDetector.js +6 -5
  339. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
  340. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
  341. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
  342. package/dist/plugins/vcs/GitPlugin.js +10 -12
  343. package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
  344. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
  345. package/dist/plugins/vcs/VCSPlugin.js +5 -5
  346. package/dist/queries/findCallsInFunction.d.ts +52 -0
  347. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  348. package/dist/queries/findCallsInFunction.js +135 -0
  349. package/dist/queries/findContainingFunction.d.ts +45 -0
  350. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  351. package/dist/queries/findContainingFunction.js +54 -0
  352. package/dist/queries/index.d.ts +14 -0
  353. package/dist/queries/index.d.ts.map +1 -0
  354. package/dist/queries/index.js +11 -0
  355. package/dist/queries/traceValues.d.ts +70 -0
  356. package/dist/queries/traceValues.d.ts.map +1 -0
  357. package/dist/queries/traceValues.js +299 -0
  358. package/dist/queries/types.d.ts +163 -0
  359. package/dist/queries/types.d.ts.map +1 -0
  360. package/dist/queries/types.js +9 -0
  361. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  362. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  363. package/dist/schema/GraphSchemaExtractor.js +124 -0
  364. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  365. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  366. package/dist/schema/InterfaceSchemaExtractor.js +112 -0
  367. package/dist/schema/index.d.ts +5 -0
  368. package/dist/schema/index.d.ts.map +1 -0
  369. package/dist/schema/index.js +2 -0
  370. package/dist/storage/backends/RFDBServerBackend.d.ts +21 -34
  371. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  372. package/dist/storage/backends/RFDBServerBackend.js +72 -62
  373. package/dist/storage/backends/typeValidation.d.ts.map +1 -1
  374. package/dist/storage/backends/typeValidation.js +1 -0
  375. package/dist/validation/PathValidator.d.ts +1 -2
  376. package/dist/validation/PathValidator.d.ts.map +1 -1
  377. package/package.json +3 -3
  378. package/src/Orchestrator.ts +272 -27
  379. package/src/config/ConfigLoader.ts +354 -0
  380. package/src/config/index.ts +5 -0
  381. package/src/core/ASTWorker.ts +143 -139
  382. package/src/core/CoverageAnalyzer.ts +243 -0
  383. package/src/core/FileExplainer.ts +179 -0
  384. package/src/core/FileNodeManager.ts +100 -0
  385. package/src/core/GraphFreshnessChecker.ts +143 -0
  386. package/src/core/HashUtils.ts +48 -0
  387. package/src/core/IncrementalReanalyzer.ts +192 -0
  388. package/src/core/NodeFactory.ts +470 -23
  389. package/src/core/ScopeTracker.ts +154 -0
  390. package/src/core/SemanticId.ts +192 -0
  391. package/src/core/VersionManager.ts +3 -2
  392. package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
  393. package/src/core/nodes/ArrayLiteralNode.ts +66 -0
  394. package/src/core/nodes/BranchNode.ts +113 -0
  395. package/src/core/nodes/CallSiteNode.ts +64 -4
  396. package/src/core/nodes/CaseNode.ts +123 -0
  397. package/src/core/nodes/ClassNode.ts +67 -4
  398. package/src/core/nodes/ConstantNode.ts +5 -4
  399. package/src/core/nodes/ConstructorCallNode.ts +217 -0
  400. package/src/core/nodes/DatabaseQueryNode.ts +5 -1
  401. package/src/core/nodes/DecoratorNode.ts +92 -0
  402. package/src/core/nodes/EnumNode.ts +87 -0
  403. package/src/core/nodes/EventListenerNode.ts +7 -4
  404. package/src/core/nodes/ExportNode.ts +74 -4
  405. package/src/core/nodes/ExpressionNode.ts +232 -0
  406. package/src/core/nodes/ExternalModuleNode.ts +65 -0
  407. package/src/core/nodes/ExternalStdioNode.ts +17 -9
  408. package/src/core/nodes/FunctionNode.ts +101 -1
  409. package/src/core/nodes/HttpRequestNode.ts +7 -4
  410. package/src/core/nodes/ImportNode.ts +62 -13
  411. package/src/core/nodes/InterfaceNode.ts +92 -0
  412. package/src/core/nodes/IssueNode.ts +177 -0
  413. package/src/core/nodes/LiteralNode.ts +5 -4
  414. package/src/core/nodes/MethodCallNode.ts +70 -4
  415. package/src/core/nodes/MethodNode.ts +68 -3
  416. package/src/core/nodes/ModuleNode.ts +50 -0
  417. package/src/core/nodes/NetworkRequestNode.ts +77 -0
  418. package/src/core/nodes/ObjectLiteralNode.ts +66 -0
  419. package/src/core/nodes/ParameterNode.ts +4 -3
  420. package/src/core/nodes/ScopeNode.ts +65 -0
  421. package/src/core/nodes/TypeNode.ts +79 -0
  422. package/src/core/nodes/VariableDeclarationNode.ts +58 -4
  423. package/src/core/nodes/index.ts +21 -1
  424. package/src/data/builtins/BuiltinRegistry.ts +124 -0
  425. package/src/data/builtins/definitions.ts +267 -0
  426. package/src/data/builtins/index.ts +10 -0
  427. package/src/data/builtins/jsGlobals.ts +28 -0
  428. package/src/data/builtins/types.ts +36 -0
  429. package/src/data/globals/definitions.ts +156 -0
  430. package/src/data/globals/index.ts +66 -0
  431. package/src/diagnostics/DiagnosticCollector.ts +163 -0
  432. package/src/diagnostics/DiagnosticReporter.ts +324 -0
  433. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  434. package/src/diagnostics/index.ts +16 -0
  435. package/src/errors/GrafemaError.ts +239 -0
  436. package/src/index.ts +193 -1
  437. package/src/logging/Logger.ts +152 -0
  438. package/src/plugins/Plugin.ts +42 -0
  439. package/src/plugins/analysis/DatabaseAnalyzer.ts +16 -8
  440. package/src/plugins/analysis/ExpressAnalyzer.ts +33 -19
  441. package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
  442. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +76 -36
  443. package/src/plugins/analysis/FetchAnalyzer.ts +232 -21
  444. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
  445. package/src/plugins/analysis/JSASTAnalyzer.ts +4265 -587
  446. package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
  447. package/src/plugins/analysis/RustAnalyzer.ts +16 -11
  448. package/src/plugins/analysis/SQLiteAnalyzer.ts +13 -7
  449. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
  450. package/src/plugins/analysis/SocketIOAnalyzer.ts +151 -28
  451. package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
  452. package/src/plugins/analysis/ast/GraphBuilder.ts +1947 -327
  453. package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
  454. package/src/plugins/analysis/ast/types.ts +596 -6
  455. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
  456. package/src/plugins/analysis/ast/utils/index.ts +12 -0
  457. package/src/plugins/analysis/ast/utils/location.ts +103 -0
  458. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +19 -8
  459. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +924 -83
  460. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
  461. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +234 -93
  462. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +124 -9
  463. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
  464. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +294 -49
  465. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
  466. package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
  467. package/src/plugins/discovery/WorkspaceDiscovery.ts +184 -0
  468. package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
  469. package/src/plugins/discovery/workspaces/detector.ts +63 -0
  470. package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
  471. package/src/plugins/discovery/workspaces/index.ts +23 -0
  472. package/src/plugins/discovery/workspaces/parsers.ts +99 -0
  473. package/src/plugins/enrichment/AliasTracker.ts +35 -8
  474. package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
  475. package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
  476. package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
  477. package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
  478. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +84 -27
  479. package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
  480. package/src/plugins/enrichment/MethodCallResolver.ts +39 -13
  481. package/src/plugins/enrichment/MountPointResolver.ts +208 -195
  482. package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
  483. package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
  484. package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
  485. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +209 -189
  486. package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
  487. package/src/plugins/indexing/JSModuleIndexer.ts +140 -34
  488. package/src/plugins/indexing/RustModuleIndexer.ts +8 -7
  489. package/src/plugins/validation/BrokenImportValidator.ts +325 -0
  490. package/src/plugins/validation/CallResolverValidator.ts +131 -110
  491. package/src/plugins/validation/DataFlowValidator.ts +88 -67
  492. package/src/plugins/validation/EvalBanValidator.ts +17 -16
  493. package/src/plugins/validation/GraphConnectivityValidator.ts +58 -24
  494. package/src/plugins/validation/NodeCreationValidator.ts +554 -0
  495. package/src/plugins/validation/SQLInjectionValidator.ts +63 -20
  496. package/src/plugins/validation/ShadowingDetector.ts +6 -5
  497. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
  498. package/src/plugins/vcs/GitPlugin.ts +40 -12
  499. package/src/plugins/vcs/VCSPlugin.ts +7 -5
  500. package/src/queries/README.md +46 -0
  501. package/src/queries/findCallsInFunction.ts +206 -0
  502. package/src/queries/findContainingFunction.ts +83 -0
  503. package/src/queries/index.ts +23 -0
  504. package/src/queries/traceValues.ts +398 -0
  505. package/src/queries/types.ts +187 -0
  506. package/src/schema/GraphSchemaExtractor.ts +177 -0
  507. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  508. package/src/schema/index.ts +5 -0
  509. package/src/storage/backends/RFDBServerBackend.ts +100 -98
  510. package/src/storage/backends/typeValidation.ts +1 -0
  511. package/src/validation/PathValidator.ts +1 -1
  512. package/dist/core/AnalysisWorker.d.ts +0 -14
  513. package/dist/core/AnalysisWorker.d.ts.map +0 -1
  514. package/dist/core/AnalysisWorker.js +0 -307
  515. package/dist/core/ParallelAnalyzer.d.ts +0 -120
  516. package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
  517. package/dist/core/ParallelAnalyzer.js +0 -331
  518. package/dist/core/QueueWorker.d.ts +0 -12
  519. package/dist/core/QueueWorker.d.ts.map +0 -1
  520. package/dist/core/QueueWorker.js +0 -567
  521. package/dist/core/RFDBClient.d.ts +0 -179
  522. package/dist/core/RFDBClient.d.ts.map +0 -1
  523. package/dist/core/RFDBClient.js +0 -429
  524. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
  525. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
  526. package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
  527. package/src/core/AnalysisWorker.ts +0 -410
  528. package/src/core/ParallelAnalyzer.ts +0 -476
  529. package/src/core/QueueWorker.ts +0 -780
  530. package/src/plugins/indexing/ServiceDetector.ts +0 -230
@@ -28,11 +28,12 @@ export class TypeScriptDeadCodeValidator extends Plugin {
28
28
  }
29
29
  async execute(context) {
30
30
  const { graph } = context;
31
- console.log('[TypeScriptDeadCodeValidator] Checking for dead TypeScript code...');
31
+ const logger = this.log(context);
32
+ logger.info('Starting TypeScript dead code analysis');
32
33
  const startTime = Date.now();
33
34
  const issues = [];
34
35
  // Collect all interfaces
35
- console.log('[TypeScriptDeadCodeValidator] Collecting interfaces...');
36
+ logger.debug('Collecting interfaces');
36
37
  const interfaces = new Map();
37
38
  for await (const node of graph.queryNodes({ nodeType: 'INTERFACE' })) {
38
39
  // Skip external/reference interfaces
@@ -46,9 +47,9 @@ export class TypeScriptDeadCodeValidator extends Plugin {
46
47
  properties: node.properties
47
48
  });
48
49
  }
49
- console.log(`[TypeScriptDeadCodeValidator] Found ${interfaces.size} interfaces`);
50
+ logger.debug('Interfaces collected', { count: interfaces.size });
50
51
  // Find interfaces with IMPLEMENTS or EXTENDS edges
51
- console.log('[TypeScriptDeadCodeValidator] Checking implementations...');
52
+ logger.debug('Checking implementations');
52
53
  const implementedInterfaces = new Map();
53
54
  // Get all edges and filter by type (no queryEdges in GraphBackend yet)
54
55
  const allEdges = await graph.getAllEdges?.() ?? [];
@@ -124,27 +125,27 @@ export class TypeScriptDeadCodeValidator extends Plugin {
124
125
  totalTypes: typeCount,
125
126
  timeSeconds: totalTime
126
127
  };
127
- console.log('[TypeScriptDeadCodeValidator] Summary:', summary);
128
+ logger.info('Analysis complete', { ...summary });
128
129
  // Report issues
129
130
  const warnings = issues.filter(i => i.severity === 'WARNING');
130
131
  const infos = issues.filter(i => i.severity === 'INFO');
131
132
  if (warnings.length > 0) {
132
- console.log(`[TypeScriptDeadCodeValidator] ⚠️ ${warnings.length} warning(s):`);
133
+ logger.warn('Warnings found', { count: warnings.length });
133
134
  for (const issue of warnings) {
134
- console.log(` ⚠️ ${issue.message}`);
135
+ logger.warn(issue.message);
135
136
  }
136
137
  }
137
138
  if (infos.length > 0) {
138
- console.log(`[TypeScriptDeadCodeValidator] ℹ️ ${infos.length} info(s):`);
139
+ logger.info('Info messages', { count: infos.length });
139
140
  for (const issue of infos.slice(0, 5)) { // Limit to first 5
140
- console.log(` ℹ️ ${issue.message}`);
141
+ logger.info(issue.message);
141
142
  }
142
143
  if (infos.length > 5) {
143
- console.log(` ... and ${infos.length - 5} more`);
144
+ logger.debug(`... and ${infos.length - 5} more`);
144
145
  }
145
146
  }
146
147
  if (issues.length === 0) {
147
- console.log('[TypeScriptDeadCodeValidator] ✅ No dead TypeScript code detected');
148
+ logger.info('No dead TypeScript code detected');
148
149
  }
149
150
  return createSuccessResult({ nodes: 0, edges: 0 }, { summary, issues });
150
151
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GitPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/vcs/GitPlugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,QAAQ,EAAY,MAAM,gBAAgB,CAAC;AAUpG;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,SAAU,SAAQ,SAAS;IACtC,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,SAAc;IAKlC,IAAI,QAAQ,IAAI,iBAAiB,CAMhC;IAED;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAerC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAsD/C;;OAEG;IACG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBnE;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgBtD;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IASzC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASjD;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASnD;;OAEG;IAEH;;OAEG;YACW,KAAK;IAOnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgCvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgDzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU7C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAiBrD;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;CAIhD"}
1
+ {"version":3,"file":"GitPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/vcs/GitPlugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,QAAQ,EAAY,MAAM,gBAAgB,CAAC;AAWpG;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,SAAU,SAAQ,SAAS;IACtC,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,SAAc;IAKlC,IAAI,QAAQ,IAAI,iBAAiB,CAMhC;IAED;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAerC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IA0D/C;;OAEG;IACG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBnE;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoBtD;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAczC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAcjD;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASnD;;OAEG;IAEH;;OAEG;YACW,KAAK;IAOnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgCvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgDzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAc7C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAsBrD;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;CAIhD"}
@@ -5,6 +5,7 @@
5
5
  * Обнаруживает изменённые файлы и предоставляет их содержимое
6
6
  */
7
7
  import { VCSPlugin, FileStatus } from './VCSPlugin.js';
8
+ import { FileAccessError } from '../../errors/GrafemaError.js';
8
9
  import { exec } from 'child_process';
9
10
  import { promisify } from 'util';
10
11
  import { join } from 'path';
@@ -88,8 +89,7 @@ export class GitPlugin extends VCSPlugin {
88
89
  return files;
89
90
  }
90
91
  catch (error) {
91
- console.error('[GitPlugin] Failed to get changed files:', error.message);
92
- return [];
92
+ throw new FileAccessError(`Failed to get changed files: ${error.message}`, 'ERR_GIT_ACCESS_DENIED', { plugin: 'GitPlugin' }, 'Check that git is installed and this is a valid git repository');
93
93
  }
94
94
  }
95
95
  /**
@@ -124,8 +124,7 @@ export class GitPlugin extends VCSPlugin {
124
124
  return this._parseUnifiedDiff(filePath, stdout);
125
125
  }
126
126
  catch (error) {
127
- console.error(`[GitPlugin] Failed to get diff for ${filePath}:`, error.message);
128
- return { path: filePath, hunks: [] };
127
+ throw new FileAccessError(`Failed to get diff for ${filePath}: ${error.message}`, 'ERR_GIT_ACCESS_DENIED', { plugin: 'GitPlugin', filePath }, 'Ensure the file is tracked by git and the working directory is accessible');
129
128
  }
130
129
  }
131
130
  /**
@@ -136,8 +135,8 @@ export class GitPlugin extends VCSPlugin {
136
135
  const { stdout } = await this._exec('git rev-parse --abbrev-ref HEAD');
137
136
  return stdout.trim();
138
137
  }
139
- catch {
140
- return 'unknown';
138
+ catch (error) {
139
+ throw new FileAccessError(`Failed to get current branch: ${error.message}`, 'ERR_GIT_ACCESS_DENIED', { plugin: 'GitPlugin' }, 'Ensure this is a valid git repository with at least one commit');
141
140
  }
142
141
  }
143
142
  /**
@@ -148,8 +147,8 @@ export class GitPlugin extends VCSPlugin {
148
147
  const { stdout } = await this._exec('git rev-parse HEAD');
149
148
  return stdout.trim();
150
149
  }
151
- catch {
152
- return null;
150
+ catch (error) {
151
+ throw new FileAccessError(`Failed to get last commit hash: ${error.message}`, 'ERR_GIT_NOT_FOUND', { plugin: 'GitPlugin' }, 'Ensure this is a valid git repository with at least one commit');
153
152
  }
154
153
  }
155
154
  /**
@@ -262,8 +261,7 @@ export class GitPlugin extends VCSPlugin {
262
261
  return stdout.trim().split('\n').filter(line => line.length > 0);
263
262
  }
264
263
  catch (error) {
265
- console.error('[GitPlugin] Failed to get tracked files:', error.message);
266
- return [];
264
+ throw new FileAccessError(`Failed to get tracked files: ${error.message}`, 'ERR_GIT_ACCESS_DENIED', { plugin: 'GitPlugin' }, 'Check that git is installed and this is a valid git repository');
267
265
  }
268
266
  }
269
267
  /**
@@ -281,8 +279,8 @@ export class GitPlugin extends VCSPlugin {
281
279
  message: lines[4]
282
280
  };
283
281
  }
284
- catch {
285
- return null;
282
+ catch (error) {
283
+ throw new FileAccessError(`Failed to get last commit info: ${error.message}`, 'ERR_GIT_NOT_FOUND', { plugin: 'GitPlugin' }, 'Ensure this is a valid git repository with at least one commit');
286
284
  }
287
285
  }
288
286
  /**
@@ -11,6 +11,7 @@
11
11
  * - Mercurial
12
12
  * - Perforce
13
13
  */
14
+ import type { Logger } from '../../logging/Logger.js';
14
15
  /**
15
16
  * VCS Plugin configuration
16
17
  */
@@ -124,10 +125,10 @@ export declare class VCSPluginFactory {
124
125
  /**
125
126
  * Автоматически определить и создать подходящий VCS плагин
126
127
  */
127
- static detect(config?: VCSConfig): Promise<VCSPlugin | null>;
128
+ static detect(config?: VCSConfig, logger?: Logger): Promise<VCSPlugin | null>;
128
129
  /**
129
130
  * Создать плагин по имени
130
131
  */
131
- static create(name: string, config?: VCSConfig): VCSPlugin | null;
132
+ static create(name: string, config?: VCSConfig, logger?: Logger): VCSPlugin | null;
132
133
  }
133
134
  //# sourceMappingURL=VCSPlugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VCSPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/vcs/VCSPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,8BAAsB,SAAS;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;gBAEL,MAAM,GAAE,SAAc;IAKlC;;OAEG;IACH,QAAQ,KAAK,QAAQ,IAAI,iBAAiB,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAEtE;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEzD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEtD;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;CAIhD;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,CAAM;IAErD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,GAAG,IAAI;IAIxD;;OAEG;WACU,MAAM,CAAC,MAAM,GAAE,SAAc,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAkBtE;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,SAAc,GAAG,SAAS,GAAG,IAAI;CAYtE"}
1
+ {"version":3,"file":"VCSPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/vcs/VCSPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,8BAAsB,SAAS;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;gBAEL,MAAM,GAAE,SAAc;IAKlC;;OAEG;IACH,QAAQ,KAAK,QAAQ,IAAI,iBAAiB,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAEtE;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEzD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEtD;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;CAIhD;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,CAAM;IAErD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,GAAG,IAAI;IAIxD;;OAEG;WACU,MAAM,CAAC,MAAM,GAAE,SAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAkBvF;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,SAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAYvF"}
@@ -52,12 +52,12 @@ export class VCSPluginFactory {
52
52
  /**
53
53
  * Автоматически определить и создать подходящий VCS плагин
54
54
  */
55
- static async detect(config = {}) {
55
+ static async detect(config = {}, logger) {
56
56
  for (const PluginClass of this.availablePlugins) {
57
57
  const plugin = new PluginClass(config);
58
58
  try {
59
59
  if (await plugin.isAvailable()) {
60
- console.log(`[VCS] Detected ${plugin.metadata.name}`);
60
+ logger?.info('VCS detected', { name: plugin.metadata.name });
61
61
  return plugin;
62
62
  }
63
63
  }
@@ -65,16 +65,16 @@ export class VCSPluginFactory {
65
65
  // Игнорируем ошибки и пробуем следующий плагин
66
66
  }
67
67
  }
68
- console.warn('[VCS] No VCS system detected');
68
+ logger?.warn('No VCS system detected');
69
69
  return null;
70
70
  }
71
71
  /**
72
72
  * Создать плагин по имени
73
73
  */
74
- static create(name, config = {}) {
74
+ static create(name, config = {}, logger) {
75
75
  const PluginClass = this.availablePlugins.find(Plugin => new Plugin(config).metadata.name === name);
76
76
  if (!PluginClass) {
77
- console.error(`[VCS] Plugin "${name}" not found`);
77
+ logger?.error('VCS plugin not found', { name });
78
78
  return null;
79
79
  }
80
80
  return new PluginClass(config);
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Find all CALL and METHOD_CALL nodes inside a function.
3
+ *
4
+ * Graph structure:
5
+ * ```
6
+ * FUNCTION -[HAS_SCOPE]-> SCOPE -[CONTAINS]-> CALL
7
+ * SCOPE -[CONTAINS]-> METHOD_CALL
8
+ * SCOPE -[CONTAINS]-> SCOPE (nested blocks)
9
+ * ```
10
+ *
11
+ * Algorithm:
12
+ * 1. Get function's scope via HAS_SCOPE edge
13
+ * 2. BFS through CONTAINS edges, collecting CALL and METHOD_CALL nodes
14
+ * 3. Stop at nested FUNCTION/CLASS boundaries (don't enter inner functions)
15
+ * 4. For each call, check CALLS edge to determine if resolved
16
+ * 5. If transitive=true, recursively follow resolved CALLS edges
17
+ *
18
+ * Performance: O(S + C) where S = scopes, C = calls
19
+ * For functions with 100 calls, expect ~200 DB operations.
20
+ *
21
+ * @module queries/findCallsInFunction
22
+ */
23
+ import type { CallInfo, FindCallsOptions } from './types.js';
24
+ /**
25
+ * Graph backend interface (minimal surface)
26
+ */
27
+ interface GraphBackend {
28
+ getNode(id: string): Promise<{
29
+ id: string;
30
+ type: string;
31
+ name: string;
32
+ file?: string;
33
+ line?: number;
34
+ object?: string;
35
+ } | null>;
36
+ getOutgoingEdges(nodeId: string, edgeTypes: string[] | null): Promise<Array<{
37
+ src: string;
38
+ dst: string;
39
+ type: string;
40
+ }>>;
41
+ }
42
+ /**
43
+ * Find all CALL and METHOD_CALL nodes inside a function.
44
+ *
45
+ * @param backend - Graph backend for queries
46
+ * @param functionId - ID of the FUNCTION node
47
+ * @param options - Options for traversal
48
+ * @returns Array of CallInfo objects
49
+ */
50
+ export declare function findCallsInFunction(backend: GraphBackend, functionId: string, options?: FindCallsOptions): Promise<CallInfo[]>;
51
+ export {};
52
+ //# sourceMappingURL=findCallsInFunction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findCallsInFunction.d.ts","sourceRoot":"","sources":["../../src/queries/findCallsInFunction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7D;;GAEG;AACH,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAC3B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC,CAAC;IACV,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,GACzB,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC/D;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAkErB"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Find all CALL and METHOD_CALL nodes inside a function.
3
+ *
4
+ * Graph structure:
5
+ * ```
6
+ * FUNCTION -[HAS_SCOPE]-> SCOPE -[CONTAINS]-> CALL
7
+ * SCOPE -[CONTAINS]-> METHOD_CALL
8
+ * SCOPE -[CONTAINS]-> SCOPE (nested blocks)
9
+ * ```
10
+ *
11
+ * Algorithm:
12
+ * 1. Get function's scope via HAS_SCOPE edge
13
+ * 2. BFS through CONTAINS edges, collecting CALL and METHOD_CALL nodes
14
+ * 3. Stop at nested FUNCTION/CLASS boundaries (don't enter inner functions)
15
+ * 4. For each call, check CALLS edge to determine if resolved
16
+ * 5. If transitive=true, recursively follow resolved CALLS edges
17
+ *
18
+ * Performance: O(S + C) where S = scopes, C = calls
19
+ * For functions with 100 calls, expect ~200 DB operations.
20
+ *
21
+ * @module queries/findCallsInFunction
22
+ */
23
+ /**
24
+ * Find all CALL and METHOD_CALL nodes inside a function.
25
+ *
26
+ * @param backend - Graph backend for queries
27
+ * @param functionId - ID of the FUNCTION node
28
+ * @param options - Options for traversal
29
+ * @returns Array of CallInfo objects
30
+ */
31
+ export async function findCallsInFunction(backend, functionId, options = {}) {
32
+ const { maxDepth = 10, transitive = false, transitiveDepth = 5, } = options;
33
+ const calls = [];
34
+ const visited = new Set();
35
+ const seenTargets = new Set(); // For deduplication in transitive mode
36
+ // Add the starting function to seenTargets to prevent cycles back to it
37
+ if (transitive) {
38
+ seenTargets.add(functionId);
39
+ }
40
+ // Step 1: Get function's scope via HAS_SCOPE
41
+ const hasScopeEdges = await backend.getOutgoingEdges(functionId, ['HAS_SCOPE']);
42
+ // BFS queue: { nodeId, currentDepth }
43
+ const queue = [];
44
+ for (const edge of hasScopeEdges) {
45
+ queue.push({ id: edge.dst, depth: 0 });
46
+ }
47
+ // Step 2: BFS through scopes
48
+ while (queue.length > 0) {
49
+ const { id, depth } = queue.shift();
50
+ if (visited.has(id) || depth > maxDepth)
51
+ continue;
52
+ visited.add(id);
53
+ const containsEdges = await backend.getOutgoingEdges(id, ['CONTAINS']);
54
+ for (const edge of containsEdges) {
55
+ const child = await backend.getNode(edge.dst);
56
+ if (!child)
57
+ continue;
58
+ // Collect CALL and METHOD_CALL nodes
59
+ if (child.type === 'CALL' || child.type === 'METHOD_CALL') {
60
+ const callInfo = await buildCallInfo(backend, child, 0);
61
+ calls.push(callInfo);
62
+ // Transitive: follow resolved calls
63
+ if (transitive && callInfo.resolved && callInfo.target) {
64
+ await collectTransitiveCalls(backend, callInfo.target.id, 1, // Starting at depth 1
65
+ transitiveDepth, calls, seenTargets);
66
+ }
67
+ }
68
+ // Continue into nested scopes, but NOT into nested functions/classes
69
+ if (child.type === 'SCOPE') {
70
+ queue.push({ id: child.id, depth: depth + 1 });
71
+ }
72
+ // Skip FUNCTION, CLASS - they have their own scope hierarchy
73
+ }
74
+ }
75
+ return calls;
76
+ }
77
+ /**
78
+ * Build CallInfo from a call node
79
+ */
80
+ async function buildCallInfo(backend, callNode, depth) {
81
+ // Check for CALLS edge (resolved target)
82
+ const callsEdges = await backend.getOutgoingEdges(callNode.id, ['CALLS']);
83
+ const isResolved = callsEdges.length > 0;
84
+ let target = undefined;
85
+ if (isResolved) {
86
+ const targetNode = await backend.getNode(callsEdges[0].dst);
87
+ if (targetNode) {
88
+ target = {
89
+ id: targetNode.id,
90
+ name: targetNode.name,
91
+ file: targetNode.file,
92
+ line: targetNode.line,
93
+ };
94
+ }
95
+ }
96
+ return {
97
+ id: callNode.id,
98
+ name: callNode.name,
99
+ type: callNode.type,
100
+ object: callNode.object,
101
+ resolved: isResolved,
102
+ target,
103
+ file: callNode.file,
104
+ line: callNode.line,
105
+ depth,
106
+ };
107
+ }
108
+ /**
109
+ * Recursively collect transitive calls
110
+ *
111
+ * Infinite loop prevention:
112
+ * - Track seen function IDs in seenTargets
113
+ * - Stop when we've seen a function before (handles recursion)
114
+ * - Stop at transitiveDepth limit
115
+ */
116
+ async function collectTransitiveCalls(backend, functionId, currentDepth, maxTransitiveDepth, calls, seenTargets) {
117
+ // Prevent infinite loops and limit depth
118
+ if (seenTargets.has(functionId) || currentDepth > maxTransitiveDepth) {
119
+ return;
120
+ }
121
+ seenTargets.add(functionId);
122
+ // Find calls in this function (non-transitive to avoid recursion)
123
+ const innerCalls = await findCallsInFunction(backend, functionId, {
124
+ maxDepth: 10,
125
+ transitive: false,
126
+ });
127
+ for (const call of innerCalls) {
128
+ // Add with updated depth
129
+ calls.push({ ...call, depth: currentDepth });
130
+ // Continue transitively if resolved
131
+ if (call.resolved && call.target) {
132
+ await collectTransitiveCalls(backend, call.target.id, currentDepth + 1, maxTransitiveDepth, calls, seenTargets);
133
+ }
134
+ }
135
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Find the FUNCTION, CLASS, or MODULE that contains a node.
3
+ *
4
+ * Graph structure (backward traversal):
5
+ * ```
6
+ * CALL <- CONTAINS <- SCOPE <- ... <- SCOPE <- HAS_SCOPE <- FUNCTION
7
+ * VARIABLE <- DECLARES <- SCOPE <- ... <- SCOPE <- HAS_SCOPE <- FUNCTION
8
+ * ```
9
+ *
10
+ * Algorithm:
11
+ * 1. BFS up the containment tree via CONTAINS and DECLARES edges
12
+ * 2. Also follow HAS_SCOPE edges (connects FUNCTION to its body SCOPE)
13
+ * 3. Stop when we find FUNCTION, CLASS, or MODULE
14
+ *
15
+ * @module queries/findContainingFunction
16
+ */
17
+ import type { CallerInfo } from './types.js';
18
+ /**
19
+ * Graph backend interface (minimal surface)
20
+ */
21
+ interface GraphBackend {
22
+ getNode(id: string): Promise<{
23
+ id: string;
24
+ type: string;
25
+ name: string;
26
+ file?: string;
27
+ line?: number;
28
+ } | null>;
29
+ getIncomingEdges(nodeId: string, edgeTypes: string[] | null): Promise<Array<{
30
+ src: string;
31
+ dst: string;
32
+ type: string;
33
+ }>>;
34
+ }
35
+ /**
36
+ * Find the FUNCTION, CLASS, or MODULE that contains a node.
37
+ *
38
+ * @param backend - Graph backend for queries
39
+ * @param nodeId - ID of the node to find container for
40
+ * @param maxDepth - Maximum traversal depth (default: 15)
41
+ * @returns CallerInfo or null if no container found
42
+ */
43
+ export declare function findContainingFunction(backend: GraphBackend, nodeId: string, maxDepth?: number): Promise<CallerInfo | null>;
44
+ export {};
45
+ //# sourceMappingURL=findContainingFunction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findContainingFunction.d.ts","sourceRoot":"","sources":["../../src/queries/findContainingFunction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;GAEG;AACH,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAC3B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI,CAAC,CAAC;IACV,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,GACzB,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC/D;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAkC5B"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Find the FUNCTION, CLASS, or MODULE that contains a node.
3
+ *
4
+ * Graph structure (backward traversal):
5
+ * ```
6
+ * CALL <- CONTAINS <- SCOPE <- ... <- SCOPE <- HAS_SCOPE <- FUNCTION
7
+ * VARIABLE <- DECLARES <- SCOPE <- ... <- SCOPE <- HAS_SCOPE <- FUNCTION
8
+ * ```
9
+ *
10
+ * Algorithm:
11
+ * 1. BFS up the containment tree via CONTAINS and DECLARES edges
12
+ * 2. Also follow HAS_SCOPE edges (connects FUNCTION to its body SCOPE)
13
+ * 3. Stop when we find FUNCTION, CLASS, or MODULE
14
+ *
15
+ * @module queries/findContainingFunction
16
+ */
17
+ /**
18
+ * Find the FUNCTION, CLASS, or MODULE that contains a node.
19
+ *
20
+ * @param backend - Graph backend for queries
21
+ * @param nodeId - ID of the node to find container for
22
+ * @param maxDepth - Maximum traversal depth (default: 15)
23
+ * @returns CallerInfo or null if no container found
24
+ */
25
+ export async function findContainingFunction(backend, nodeId, maxDepth = 15) {
26
+ const visited = new Set();
27
+ const queue = [{ id: nodeId, depth: 0 }];
28
+ while (queue.length > 0) {
29
+ const { id, depth } = queue.shift();
30
+ if (visited.has(id) || depth > maxDepth)
31
+ continue;
32
+ visited.add(id);
33
+ // Get incoming edges: CONTAINS, HAS_SCOPE, and DECLARES (for variables)
34
+ const edges = await backend.getIncomingEdges(id, ['CONTAINS', 'HAS_SCOPE', 'DECLARES']);
35
+ for (const edge of edges) {
36
+ const parentNode = await backend.getNode(edge.src);
37
+ if (!parentNode || visited.has(parentNode.id))
38
+ continue;
39
+ // Found container!
40
+ if (parentNode.type === 'FUNCTION' || parentNode.type === 'CLASS' || parentNode.type === 'MODULE') {
41
+ return {
42
+ id: parentNode.id,
43
+ name: parentNode.name || '<anonymous>',
44
+ type: parentNode.type,
45
+ file: parentNode.file,
46
+ line: parentNode.line,
47
+ };
48
+ }
49
+ // Continue searching
50
+ queue.push({ id: parentNode.id, depth: depth + 1 });
51
+ }
52
+ }
53
+ return null;
54
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Graph Query Utilities
3
+ *
4
+ * Shared utilities for querying the code graph.
5
+ * Used by MCP, CLI, and other tools.
6
+ *
7
+ * @module queries
8
+ */
9
+ export { findCallsInFunction } from './findCallsInFunction.js';
10
+ export { findContainingFunction } from './findContainingFunction.js';
11
+ export { traceValues, aggregateValues, NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS } from './traceValues.js';
12
+ export type { CallInfo, CallerInfo, FindCallsOptions } from './types.js';
13
+ export type { TracedValue, ValueSource, UnknownReason, TraceValuesOptions, ValueSetResult, TraceValuesGraphBackend, NondeterministicPattern, } from './types.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queries/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAErH,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Graph Query Utilities
3
+ *
4
+ * Shared utilities for querying the code graph.
5
+ * Used by MCP, CLI, and other tools.
6
+ *
7
+ * @module queries
8
+ */
9
+ export { findCallsInFunction } from './findCallsInFunction.js';
10
+ export { findContainingFunction } from './findContainingFunction.js';
11
+ export { traceValues, aggregateValues, NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS } from './traceValues.js';
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Value Tracing Utility (REG-244)
3
+ *
4
+ * Traces a node through ASSIGNED_FROM/DERIVES_FROM edges to find
5
+ * all possible literal values or mark as unknown.
6
+ *
7
+ * Graph structure:
8
+ * ```
9
+ * VARIABLE -[ASSIGNED_FROM]-> LITERAL (concrete value)
10
+ * VARIABLE -[ASSIGNED_FROM]-> PARAMETER (unknown: runtime input)
11
+ * VARIABLE -[ASSIGNED_FROM]-> CALL (unknown: function return)
12
+ * VARIABLE -[DERIVES_FROM]-> EXPRESSION (check nondeterministic patterns)
13
+ * VARIABLE -[ASSIGNED_FROM]-> VARIABLE (chain - recurse)
14
+ * ```
15
+ *
16
+ * Used by:
17
+ * - CLI trace command (sink-based tracing)
18
+ * - ValueDomainAnalyzer (computed member access resolution)
19
+ *
20
+ * @module queries/traceValues
21
+ */
22
+ import type { TracedValue, TraceValuesOptions, TraceValuesGraphBackend, ValueSetResult, NondeterministicPattern } from './types.js';
23
+ /**
24
+ * Nondeterministic MemberExpression patterns.
25
+ * object.property combinations that represent external/user input.
26
+ */
27
+ export declare const NONDETERMINISTIC_PATTERNS: NondeterministicPattern[];
28
+ /**
29
+ * Nondeterministic object prefixes.
30
+ * Any property access on these is nondeterministic.
31
+ */
32
+ export declare const NONDETERMINISTIC_OBJECTS: string[];
33
+ /**
34
+ * Trace a node to all its possible literal values.
35
+ *
36
+ * Starting from the given node, follows ASSIGNED_FROM (and optionally
37
+ * DERIVES_FROM) edges backwards to find:
38
+ * - LITERAL nodes: concrete values
39
+ * - PARAMETER nodes: runtime inputs (unknown)
40
+ * - CALL nodes: function return values (unknown)
41
+ * - EXPRESSION nodes: checks for nondeterministic patterns
42
+ *
43
+ * @param backend - Graph backend for queries
44
+ * @param nodeId - Starting node ID
45
+ * @param options - Traversal options
46
+ * @returns Array of traced values with sources
47
+ *
48
+ * @example
49
+ * const values = await traceValues(backend, variableId);
50
+ * for (const v of values) {
51
+ * if (v.isUnknown) {
52
+ * console.log(`Unknown from ${v.source.file}:${v.source.line} (${v.reason})`);
53
+ * } else {
54
+ * console.log(`Value: ${v.value} from ${v.source.file}:${v.source.line}`);
55
+ * }
56
+ * }
57
+ */
58
+ export declare function traceValues(backend: TraceValuesGraphBackend, nodeId: string, options?: TraceValuesOptions): Promise<TracedValue[]>;
59
+ /**
60
+ * Aggregate traced values into a simplified result.
61
+ * Useful for consumers who don't need source locations.
62
+ *
63
+ * Note: null and undefined values are NOT included in the values array.
64
+ * If you need to detect "assigned to null", check the raw TracedValue[] instead.
65
+ *
66
+ * @param traced - Array of traced values
67
+ * @returns Aggregated result with unique values and hasUnknown flag
68
+ */
69
+ export declare function aggregateValues(traced: TracedValue[]): ValueSetResult;
70
+ //# sourceMappingURL=traceValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceValues.d.ts","sourceRoot":"","sources":["../../src/queries/traceValues.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,uBAAuB,EAExB,MAAM,YAAY,CAAC;AAMpB;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,uBAAuB,EAiB9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,EAO5C,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,EAAE,CAAC,CAoBxB;AAuPD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,cAAc,CAgBrE"}