@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
@@ -13,37 +13,11 @@
13
13
  * - CALL -> CALLS -> METHOD (with isConditional: true for conditional calls)
14
14
  */
15
15
  import { Plugin, createSuccessResult } from '../Plugin.js';
16
+ import { traceValues, aggregateValues, NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS, } from '../../queries/traceValues.js';
17
+ // Re-export for backward compatibility
18
+ export { NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS };
16
19
  export class ValueDomainAnalyzer extends Plugin {
17
20
  static MAX_DEPTH = 10; // Maximum depth for tracing
18
- // Nondeterministic MemberExpression patterns
19
- // object.property patterns that are external/user input
20
- static NONDETERMINISTIC_PATTERNS = [
21
- // Environment variables
22
- { object: 'process', property: 'env' },
23
- // HTTP request data (Express.js patterns)
24
- { object: 'req', property: 'body' },
25
- { object: 'req', property: 'query' },
26
- { object: 'req', property: 'params' },
27
- { object: 'req', property: 'headers' },
28
- { object: 'req', property: 'cookies' },
29
- { object: 'request', property: 'body' },
30
- { object: 'request', property: 'query' },
31
- { object: 'request', property: 'params' },
32
- // Context patterns (Koa, etc.)
33
- { object: 'ctx', property: 'request' },
34
- { object: 'ctx', property: 'body' },
35
- { object: 'ctx', property: 'query' },
36
- { object: 'ctx', property: 'params' },
37
- ];
38
- // Nondeterministic object prefixes (any property access is nondeterministic)
39
- static NONDETERMINISTIC_OBJECTS = [
40
- 'process.env', // process.env.ANY_VAR
41
- 'req.body', // req.body.userId
42
- 'req.query', // req.query.filter
43
- 'req.params', // req.params.id
44
- 'request.body',
45
- 'ctx.request',
46
- ];
47
21
  get metadata() {
48
22
  return {
49
23
  name: 'ValueDomainAnalyzer',
@@ -51,15 +25,16 @@ export class ValueDomainAnalyzer extends Plugin {
51
25
  priority: 65, // After AliasTracker (60)
52
26
  creates: {
53
27
  nodes: [],
54
- edges: ['CALLS']
28
+ edges: ['CALLS', 'FLOWS_INTO'] // Added FLOWS_INTO (modifies existing)
55
29
  }
56
30
  };
57
31
  }
58
32
  async execute(context) {
59
33
  const { graph } = context;
34
+ const logger = this.log(context);
60
35
  const onProgress = context.onProgress;
61
36
  const graphTyped = graph;
62
- console.log('[ValueDomainAnalyzer] Starting value domain analysis...');
37
+ logger.info('Starting value domain analysis');
63
38
  let callsProcessed = 0;
64
39
  let callsResolved = 0;
65
40
  let edgesCreated = 0;
@@ -74,7 +49,7 @@ export class ValueDomainAnalyzer extends Plugin {
74
49
  computedCalls.push(callNode);
75
50
  }
76
51
  }
77
- console.log(`[ValueDomainAnalyzer] Found ${computedCalls.length} computed member calls`);
52
+ logger.info('Found computed member calls', { count: computedCalls.length });
78
53
  // 2. For each computed call get value set
79
54
  for (const call of computedCalls) {
80
55
  callsProcessed++;
@@ -130,15 +105,20 @@ export class ValueDomainAnalyzer extends Plugin {
130
105
  }
131
106
  }
132
107
  }
108
+ // 5. Resolve computed property mutations in FLOWS_INTO edges
109
+ logger.debug('Resolving computed property mutations');
110
+ const mutationStats = await this.resolveComputedMutations(graphTyped, logger);
111
+ logger.debug('Mutation resolution stats', mutationStats);
133
112
  const summary = {
134
113
  callsProcessed,
135
114
  callsResolved,
136
115
  edgesCreated,
137
116
  conditionalCalls,
138
- partialCalls
117
+ partialCalls,
118
+ computedMutations: mutationStats
139
119
  };
140
- console.log('[ValueDomainAnalyzer] Summary:', summary);
141
- return createSuccessResult({ nodes: 0, edges: edgesCreated }, summary);
120
+ logger.info('Summary', summary);
121
+ return createSuccessResult({ nodes: 0, edges: edgesCreated + mutationStats.resolved + mutationStats.conditional }, summary);
142
122
  }
143
123
  /**
144
124
  * Get set of possible values for a variable
@@ -167,11 +147,9 @@ export class ValueDomainAnalyzer extends Plugin {
167
147
  }
168
148
  }
169
149
  if (variables.length === 0) {
170
- console.log(`[ValueDomainAnalyzer] No variable found for ${variableName} in ${file}`);
171
150
  result.hasUnknown = true;
172
151
  return result;
173
152
  }
174
- console.log(`[ValueDomainAnalyzer] Found ${variables.length} variable(s) for ${variableName}`);
175
153
  // Trace ASSIGNED_FROM to LITERAL or nondeterministic sources
176
154
  const visited = new Set();
177
155
  const valueSet = new Set();
@@ -223,8 +201,7 @@ export class ValueDomainAnalyzer extends Plugin {
223
201
  for await (const s of graph.queryNodes({ nodeType: 'SCOPE' })) {
224
202
  const scopeNode = s;
225
203
  if (scopeNode.id === currentScopeId ||
226
- scopeNode.originalId === currentScopeId ||
227
- scopeNode.stableId === currentScopeId) {
204
+ scopeNode.originalId === currentScopeId) {
228
205
  scope = scopeNode;
229
206
  break;
230
207
  }
@@ -324,107 +301,63 @@ export class ValueDomainAnalyzer extends Plugin {
324
301
  }
325
302
  }
326
303
  /**
327
- * Check if an EXPRESSION node represents a nondeterministic source
304
+ * Recursive value set tracing through ASSIGNED_FROM edges.
305
+ * Delegates to shared traceValues utility (REG-244).
328
306
  */
329
- isNondeterministicExpression(node) {
330
- const expressionType = node.expressionType || node.attrs?.expressionType;
331
- if (expressionType !== 'MemberExpression') {
332
- return false;
333
- }
334
- const object = node.object || node.attrs?.object;
335
- const property = node.property || node.attrs?.property;
336
- if (!object || !property) {
337
- return false;
338
- }
339
- // Check exact patterns (object.property)
340
- for (const pattern of ValueDomainAnalyzer.NONDETERMINISTIC_PATTERNS) {
341
- if (object === pattern.object && property === pattern.property) {
342
- return true;
343
- }
344
- }
345
- // Check if object is a known nondeterministic prefix
346
- // e.g., process.env.VAR where object is 'process.env'
347
- for (const prefix of ValueDomainAnalyzer.NONDETERMINISTIC_OBJECTS) {
348
- if (object === prefix || object.startsWith(prefix + '.')) {
349
- return true;
350
- }
351
- }
352
- return false;
353
- }
354
- /**
355
- * Recursive value set tracing through ASSIGNED_FROM edges
356
- */
357
- async traceValueSet(node, graph, visited, depth) {
358
- const result = { values: [], hasUnknown: false };
359
- // Cycle protection
360
- if (visited.has(node.id)) {
361
- return result;
362
- }
363
- visited.add(node.id);
364
- // Depth protection
365
- if (depth > ValueDomainAnalyzer.MAX_DEPTH) {
366
- result.hasUnknown = true;
367
- return result;
368
- }
369
- // Support both fields: nodeType (from getNode) and type (alias)
370
- const nodeType = node.nodeType ||
371
- node.type;
372
- // If it's a LITERAL - add value
373
- if (nodeType === 'LITERAL') {
374
- const value = node.value;
375
- if (value !== undefined && value !== null) {
376
- result.values.push(value);
377
- }
378
- return result;
379
- }
380
- // If it's a PARAMETER or nondeterministic source
381
- if (nodeType === 'PARAMETER') {
382
- result.hasUnknown = true;
383
- return result;
384
- }
385
- // If it's a CALL - consider nondeterministic (for now)
386
- if (nodeType === 'CALL') {
387
- result.hasUnknown = true;
388
- return result;
389
- }
390
- // If it's an EXPRESSION - check nondeterministic patterns
391
- if (nodeType === 'EXPRESSION') {
392
- if (this.isNondeterministicExpression(node)) {
393
- result.hasUnknown = true;
394
- return result;
395
- }
396
- }
397
- // Follow ASSIGNED_FROM and DERIVES_FROM edges
398
- // DERIVES_FROM is used for template literals and other composite expressions
399
- const outgoing = await graph.getOutgoingEdges(node.id);
400
- // edgeType (from getOutgoingEdges) or edge_type (from other APIs)
401
- const dataFlowEdges = outgoing.filter(e => {
402
- const edgeType = e.edgeType ||
403
- e.edge_type;
404
- return edgeType === 'ASSIGNED_FROM' || edgeType === 'DERIVES_FROM';
307
+ async traceValueSet(node, graph, _visited, depth) {
308
+ // Create adapter from Graph interface to TraceValuesGraphBackend
309
+ const backend = {
310
+ getNode: async (id) => {
311
+ const n = await graph.getNode(id);
312
+ if (!n)
313
+ return null;
314
+ return {
315
+ id: n.id,
316
+ type: n.type,
317
+ nodeType: n.nodeType,
318
+ value: n.value,
319
+ file: n.file,
320
+ line: n.line,
321
+ expressionType: n.expressionType,
322
+ object: n.object,
323
+ property: n.property,
324
+ };
325
+ },
326
+ getOutgoingEdges: async (nodeId, edgeTypes) => {
327
+ const edges = await graph.getOutgoingEdges(nodeId);
328
+ const filtered = edgeTypes === null
329
+ ? edges
330
+ : edges.filter(e => edgeTypes.includes(e.type));
331
+ return filtered.map(e => ({
332
+ src: e.src ||
333
+ e.source_id || '',
334
+ dst: e.dst ||
335
+ e.target_id || '',
336
+ type: e.type,
337
+ }));
338
+ },
339
+ // REG-334: getIncomingEdges required for Promise tracing
340
+ getIncomingEdges: async (nodeId, edgeTypes) => {
341
+ const edges = await graph.getIncomingEdges(nodeId);
342
+ const filtered = edgeTypes === null
343
+ ? edges
344
+ : edges.filter(e => edgeTypes.includes(e.type));
345
+ return filtered.map(e => ({
346
+ src: e.src ||
347
+ e.source_id || '',
348
+ dst: e.dst ||
349
+ e.target_id || '',
350
+ type: e.type,
351
+ }));
352
+ },
353
+ };
354
+ // Use shared utility
355
+ const traced = await traceValues(backend, node.id, {
356
+ maxDepth: ValueDomainAnalyzer.MAX_DEPTH - depth,
357
+ followDerivesFrom: true,
358
+ detectNondeterministic: true,
405
359
  });
406
- if (dataFlowEdges.length === 0) {
407
- // No sources - unknown
408
- result.hasUnknown = true;
409
- return result;
410
- }
411
- // Recursively trace each source
412
- for (const edge of dataFlowEdges) {
413
- // dst (from getOutgoingEdges) or target_id (from other APIs)
414
- const targetId = edge.dst ||
415
- edge.target_id;
416
- if (!targetId)
417
- continue;
418
- const sourceNode = await graph.getNode(targetId);
419
- if (!sourceNode)
420
- continue;
421
- const sourceResult = await this.traceValueSet(sourceNode, graph, visited, depth + 1);
422
- sourceResult.values.forEach(v => result.values.push(v));
423
- if (sourceResult.hasUnknown) {
424
- result.hasUnknown = true;
425
- }
426
- }
427
- return result;
360
+ return aggregateValues(traced);
428
361
  }
429
362
  /**
430
363
  * Find method by object name and method name
@@ -437,11 +370,7 @@ export class ValueDomainAnalyzer extends Plugin {
437
370
  // Check if this is a method of the right object
438
371
  // Simplified: check via incoming CONTAINS edges from CLASS
439
372
  const incoming = await graph.getIncomingEdges(node.id);
440
- const containsEdges = incoming.filter(e => {
441
- const edgeType = e.edgeType ||
442
- e.edge_type;
443
- return edgeType === 'CONTAINS';
444
- });
373
+ const containsEdges = incoming.filter(e => e.type === 'CONTAINS');
445
374
  for (const edge of containsEdges) {
446
375
  const sourceId = edge.src ||
447
376
  edge.source_id;
@@ -460,5 +389,118 @@ export class ValueDomainAnalyzer extends Plugin {
460
389
  }
461
390
  return null;
462
391
  }
392
+ /**
393
+ * Resolve computed property names for object mutations.
394
+ * Finds FLOWS_INTO edges with mutationType: 'computed' and resolves
395
+ * the property name using value set tracing.
396
+ *
397
+ * @param graph - Graph backend with edge operations
398
+ * @returns Statistics about resolution
399
+ */
400
+ async resolveComputedMutations(graph, logger) {
401
+ const stats = {
402
+ resolved: 0,
403
+ conditional: 0,
404
+ unknownParameter: 0,
405
+ unknownRuntime: 0,
406
+ deferredCrossFile: 0,
407
+ total: 0
408
+ };
409
+ // Process edges by finding all VARIABLE and CONSTANT nodes and checking their outgoing edges
410
+ const processedEdges = new Set();
411
+ // Helper to process a node's outgoing edges
412
+ const processNodeEdges = async (node) => {
413
+ const outgoing = await graph.getOutgoingEdges(node.id);
414
+ for (const edge of outgoing) {
415
+ if (edge.type !== 'FLOWS_INTO')
416
+ continue;
417
+ const edgeKey = `${edge.src}->${edge.dst}:FLOWS_INTO`;
418
+ if (processedEdges.has(edgeKey))
419
+ continue;
420
+ processedEdges.add(edgeKey);
421
+ const mutationType = edge.metadata?.mutationType;
422
+ const computedPropertyVar = edge.metadata?.computedPropertyVar;
423
+ if (mutationType !== 'computed' || !computedPropertyVar)
424
+ continue;
425
+ stats.total++;
426
+ // Get file from source node
427
+ const sourceNode = await graph.getNode(edge.src);
428
+ const file = sourceNode?.file;
429
+ if (!file)
430
+ continue;
431
+ // Resolve the computed property variable using existing getValueSet
432
+ const valueSet = await this.getValueSet(computedPropertyVar, file, graph);
433
+ // Check if the variable is a PARAMETER node
434
+ let isParameter = false;
435
+ for await (const node of graph.queryNodes({ nodeType: 'PARAMETER' })) {
436
+ const paramNode = node;
437
+ const nodeName = paramNode.name || paramNode.attrs?.name;
438
+ const nodeFile = paramNode.file || paramNode.attrs?.file;
439
+ if (nodeName === computedPropertyVar && nodeFile === file) {
440
+ isParameter = true;
441
+ break;
442
+ }
443
+ }
444
+ // Determine resolution status based on value set
445
+ let resolutionStatus;
446
+ let resolvedPropertyNames = [];
447
+ if (valueSet.values.length === 0 && isParameter) {
448
+ // Variable is a function parameter - cannot be statically resolved
449
+ resolutionStatus = 'UNKNOWN_PARAMETER';
450
+ stats.unknownParameter++;
451
+ }
452
+ else if (valueSet.values.length === 0 && valueSet.hasUnknown) {
453
+ // Completely nondeterministic - runtime value (function call result, etc.)
454
+ resolutionStatus = 'UNKNOWN_RUNTIME';
455
+ stats.unknownRuntime++;
456
+ }
457
+ else if (valueSet.values.length === 0) {
458
+ // No values found at all - treat as unknown
459
+ resolutionStatus = 'UNKNOWN_RUNTIME';
460
+ stats.unknownRuntime++;
461
+ }
462
+ else if (valueSet.values.length === 1 && !valueSet.hasUnknown) {
463
+ // Single deterministic value
464
+ resolutionStatus = 'RESOLVED';
465
+ resolvedPropertyNames = valueSet.values.map(v => String(v));
466
+ stats.resolved++;
467
+ }
468
+ else {
469
+ // Multiple values (conditional) or partial resolution
470
+ resolutionStatus = 'RESOLVED_CONDITIONAL';
471
+ resolvedPropertyNames = valueSet.values.map(v => String(v));
472
+ stats.conditional++;
473
+ }
474
+ // Update edge: delete old, create new with resolved data
475
+ // Following the same pattern as InstanceOfResolver
476
+ if (graph.deleteEdge) {
477
+ await graph.deleteEdge(edge.src, edge.dst, 'FLOWS_INTO');
478
+ }
479
+ // Preserve original edge data and add resolution info
480
+ // For UNKNOWN cases, keep propertyName as '<computed>' and resolvedPropertyNames empty
481
+ await graph.addEdge({
482
+ src: edge.src,
483
+ dst: edge.dst,
484
+ type: 'FLOWS_INTO',
485
+ metadata: {
486
+ mutationType,
487
+ propertyName: resolvedPropertyNames[0] || '<computed>',
488
+ computedPropertyVar,
489
+ resolvedPropertyNames,
490
+ resolutionStatus
491
+ }
492
+ });
493
+ }
494
+ };
495
+ // Process VARIABLE nodes
496
+ for await (const node of graph.queryNodes({ nodeType: 'VARIABLE' })) {
497
+ await processNodeEdges(node);
498
+ }
499
+ // Process CONSTANT nodes
500
+ for await (const node of graph.queryNodes({ nodeType: 'CONSTANT' })) {
501
+ await processNodeEdges(node);
502
+ }
503
+ return stats;
504
+ }
463
505
  }
464
506
  export default ValueDomainAnalyzer;
@@ -1 +1 @@
1
- {"version":3,"file":"IncrementalModuleIndexer.d.ts","sourceRoot":"","sources":["../../../src/plugins/indexing/IncrementalModuleIndexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAyBhF,qBAAa,wBAAyB,SAAQ,MAAM;IAClD,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAuBlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqCd,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAgI7D"}
1
+ {"version":3,"file":"IncrementalModuleIndexer.d.ts","sourceRoot":"","sources":["../../../src/plugins/indexing/IncrementalModuleIndexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAyBhF,qBAAa,wBAAyB,SAAQ,MAAM;IAClD,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAuBlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqCd,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAyI7D"}
@@ -119,11 +119,12 @@ export class IncrementalModuleIndexer extends Plugin {
119
119
  return imports;
120
120
  }
121
121
  catch (err) {
122
- console.error(` ⚠️ Failed to parse imports from ${relative(projectRoot, filePath)}: ${err.message}`);
122
+ // Parse error will be logged by execute() when it needs logger context
123
123
  return [];
124
124
  }
125
125
  }
126
126
  async execute(context) {
127
+ const logger = this.log(context);
127
128
  try {
128
129
  const { manifest, graph } = context;
129
130
  // Cast manifest to expected shape
@@ -139,17 +140,18 @@ export class IncrementalModuleIndexer extends Plugin {
139
140
  let edgesCreated = 0;
140
141
  let totalImportsParsed = 0;
141
142
  let unresolvedImports = 0;
142
- console.log(`📦 Starting incremental indexing from: ${relative(projectPath, entryFile)}\n`);
143
+ logger.info('Starting incremental indexing', { entryFile: relative(projectPath, entryFile) });
143
144
  while (queue.length > 0) {
144
145
  const file = queue.shift();
145
146
  if (processed.has(file))
146
147
  continue;
147
148
  processed.add(file);
148
- // Create MODULE node
149
+ // Create MODULE node with semantic ID
149
150
  const fileHash = this.calculateFileHash(file);
150
151
  const relativePath = relative(projectPath, file);
152
+ const semanticId = `${relativePath}->global->MODULE->module`;
151
153
  const moduleNode = {
152
- id: `${file}:MODULE:${file}:0`,
154
+ id: semanticId,
153
155
  type: 'MODULE',
154
156
  name: relativePath,
155
157
  file: file,
@@ -169,10 +171,12 @@ export class IncrementalModuleIndexer extends Plugin {
169
171
  const imports = this.parseImports(file, projectPath);
170
172
  totalImportsParsed += imports.length;
171
173
  for (const importFile of imports) {
172
- // Store for later edge creation
174
+ // Store for later edge creation with semantic ID format
175
+ const importRelativePath = relative(projectPath, importFile);
176
+ const importSemanticId = `${importRelativePath}->global->MODULE->module`;
173
177
  pendingImports.push({
174
178
  src: moduleNode.id,
175
- dst: `${importFile}:MODULE:${importFile}:0`
179
+ dst: importSemanticId
176
180
  });
177
181
  if (!processed.has(importFile)) {
178
182
  queue.push(importFile);
@@ -209,13 +213,15 @@ export class IncrementalModuleIndexer extends Plugin {
209
213
  // Ignore parse errors for unresolved count
210
214
  }
211
215
  if (processed.size % 10 === 0) {
212
- process.stdout.write(`\r 📦 Indexed ${processed.size} modules (${queue.length} in queue)...`);
216
+ logger.debug('Indexing progress', { indexed: processed.size, queueLength: queue.length });
213
217
  }
214
218
  }
215
- console.log(`\r ✅ Indexed ${processed.size} modules\n`);
216
- console.log(` 📥 Parsed ${totalImportsParsed} import specifiers (unresolved: ${unresolvedImports})`);
217
- console.log(` 🔗 Pending IMPORTS edges to create: ${pendingImports.length}\n`);
218
- console.log(` 📊 Creating IMPORTS edges...\n`);
219
+ logger.info('Modules indexed', { count: processed.size });
220
+ logger.debug('Import statistics', {
221
+ totalImportsParsed,
222
+ unresolvedImports,
223
+ pendingEdges: pendingImports.length
224
+ });
219
225
  // Now create all IMPORTS edges after all MODULE nodes exist
220
226
  for (const { src, dst } of pendingImports) {
221
227
  await graph.addEdge({
@@ -226,12 +232,15 @@ export class IncrementalModuleIndexer extends Plugin {
226
232
  });
227
233
  edgesCreated++;
228
234
  }
229
- console.log(` 📊 Created ${nodesCreated} MODULE nodes and ${edgesCreated} edges`);
230
- console.log(` 📈 IMPORTS edges created: ${pendingImports.length}\n`);
235
+ logger.info('Indexing complete', {
236
+ nodesCreated,
237
+ edgesCreated,
238
+ importsEdgesCreated: pendingImports.length
239
+ });
231
240
  return createSuccessResult({ nodes: nodesCreated, edges: edgesCreated }, { filesScanned: processed.size });
232
241
  }
233
242
  catch (error) {
234
- console.error(`[IncrementalModuleIndexer] Error:`, error);
243
+ logger.error('Indexing failed', { error });
235
244
  return createErrorResult(error);
236
245
  }
237
246
  }
@@ -9,11 +9,26 @@ export declare class JSModuleIndexer extends Plugin {
9
9
  private cache;
10
10
  private testPatterns;
11
11
  private markTestFiles;
12
+ private includePatterns?;
13
+ private excludePatterns?;
14
+ private projectPath;
12
15
  constructor();
13
16
  /**
14
17
  * Check if file is a test file based on path patterns
15
18
  */
16
19
  private isTestFile;
20
+ /**
21
+ * Check if a file should be skipped based on include/exclude patterns.
22
+ *
23
+ * Logic:
24
+ * 1. If file matches any exclude pattern -> SKIP
25
+ * 2. If include patterns specified AND file doesn't match any -> SKIP
26
+ * 3. Otherwise -> PROCESS
27
+ *
28
+ * @param absolutePath - Absolute path to the file
29
+ * @returns true if file should be skipped, false if it should be processed
30
+ */
31
+ private shouldSkipFile;
17
32
  get metadata(): PluginMetadata;
18
33
  private calculateFileHash;
19
34
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"JSModuleIndexer.d.ts","sourceRoot":"","sources":["../../../src/plugins/indexing/JSModuleIndexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA2DhF,qBAAa,eAAgB,SAAQ,MAAM;IACzC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,aAAa,CAAU;;IAU/B;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAED,OAAO,CAAC,iBAAiB;IASzB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAuEnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBnB,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAoK7D"}
1
+ {"version":3,"file":"JSModuleIndexer.d.ts","sourceRoot":"","sources":["../../../src/plugins/indexing/JSModuleIndexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,MAAM,EAAqB,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgEhF,qBAAa,eAAgB,SAAQ,MAAM;IACzC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,aAAa,CAAU;IAE/B,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,WAAW,CAAc;;IAYjC;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IA0BtB,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAED,OAAO,CAAC,iBAAiB;IASzB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAuEnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBnB,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA6N7D"}