@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
@@ -12,6 +12,7 @@ import { readFileSync } from 'fs';
12
12
  import { parse } from '@babel/parser';
13
13
  import traverseModule from '@babel/traverse';
14
14
  import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
15
+ import { getLine } from './ast/utils/location.js';
15
16
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
17
  const traverse = traverseModule.default || traverseModule;
17
18
  export class ServiceLayerAnalyzer extends Plugin {
@@ -28,11 +29,12 @@ export class ServiceLayerAnalyzer extends Plugin {
28
29
  };
29
30
  }
30
31
  async execute(context) {
32
+ const logger = this.log(context);
31
33
  try {
32
34
  const { graph } = context;
33
35
  // Получаем все модули
34
36
  const modules = await this.getModules(graph);
35
- console.log(`[ServiceLayerAnalyzer] Processing ${modules.length} modules...`);
37
+ logger.info('Processing modules', { count: modules.length });
36
38
  let classesCount = 0;
37
39
  let instancesCount = 0;
38
40
  let registrationsCount = 0;
@@ -49,10 +51,20 @@ export class ServiceLayerAnalyzer extends Plugin {
49
51
  if ((i + 1) % 20 === 0 || i === modules.length - 1) {
50
52
  const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
51
53
  const avgTime = ((Date.now() - startTime) / (i + 1)).toFixed(0);
52
- console.log(`[ServiceLayerAnalyzer] Progress: ${i + 1}/${modules.length} (${elapsed}s, avg ${avgTime}ms/module)`);
54
+ logger.debug('Progress', {
55
+ current: i + 1,
56
+ total: modules.length,
57
+ elapsed: `${elapsed}s`,
58
+ avgTime: `${avgTime}ms/module`
59
+ });
53
60
  }
54
61
  }
55
- console.log(`[ServiceLayerAnalyzer] Found ${classesCount} service classes, ${instancesCount} instances, ${registrationsCount} registrations, ${usagesCount} usages`);
62
+ logger.info('Analysis complete', {
63
+ classesCount,
64
+ instancesCount,
65
+ registrationsCount,
66
+ usagesCount
67
+ });
56
68
  return createSuccessResult({
57
69
  nodes: classesCount + instancesCount + registrationsCount + usagesCount,
58
70
  edges: 0
@@ -64,7 +76,7 @@ export class ServiceLayerAnalyzer extends Plugin {
64
76
  });
65
77
  }
66
78
  catch (error) {
67
- console.error('[ServiceLayerAnalyzer] Error:', error);
79
+ logger.error('Analysis failed', { error });
68
80
  return createErrorResult(error);
69
81
  }
70
82
  }
@@ -95,7 +107,7 @@ export class ServiceLayerAnalyzer extends Plugin {
95
107
  const node = path.node;
96
108
  const className = node.id?.name;
97
109
  if (className && this.isServiceClass(className)) {
98
- const line = node.loc.start.line;
110
+ const line = getLine(node);
99
111
  // Извлекаем методы сервиса
100
112
  const methods = node.body.body
101
113
  .filter(m => m.type === 'ClassMethod' && m.kind === 'method')
@@ -117,7 +129,7 @@ export class ServiceLayerAnalyzer extends Plugin {
117
129
  if (callee.type === 'Identifier') {
118
130
  const className = callee.name;
119
131
  if (this.isServiceClass(className)) {
120
- const line = node.loc.start.line;
132
+ const line = getLine(node);
121
133
  serviceInstances.push({
122
134
  id: `${module.file}:SERVICE_INSTANCE:${className}:${line}`,
123
135
  type: 'SERVICE_INSTANCE',
@@ -139,7 +151,7 @@ export class ServiceLayerAnalyzer extends Plugin {
139
151
  const objectName = this.getObjectName(callee.object);
140
152
  if (objectName === 'app' && node.arguments.length >= 2) {
141
153
  const serviceName = this.extractStringArg(node.arguments[0]);
142
- const line = node.loc.start.line;
154
+ const line = getLine(node);
143
155
  // Проверяем что это похоже на service (имя содержит 'service' или '*Service')
144
156
  if (serviceName.toLowerCase().includes('service') ||
145
157
  this.isServiceClass(serviceName)) {
@@ -164,7 +176,7 @@ export class ServiceLayerAnalyzer extends Plugin {
164
176
  objectChain.includes('app')) {
165
177
  if (node.arguments.length >= 1) {
166
178
  const serviceName = this.extractStringArg(node.arguments[0]);
167
- const line = node.loc.start.line;
179
+ const line = getLine(node);
168
180
  // Проверяем что это похоже на service
169
181
  if (serviceName.toLowerCase().includes('service') ||
170
182
  this.isServiceClass(serviceName)) {
@@ -237,7 +249,7 @@ export class ServiceLayerAnalyzer extends Plugin {
237
249
  };
238
250
  }
239
251
  catch (error) {
240
- console.error(`[ServiceLayerAnalyzer] Error analyzing ${module.file}:`, error.message);
252
+ // Silent - per-module errors shouldn't spam logs
241
253
  return { classes: 0, instances: 0, registrations: 0, usages: 0 };
242
254
  }
243
255
  }
@@ -19,6 +19,15 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
19
19
  export declare class SocketIOAnalyzer extends Plugin {
20
20
  get metadata(): PluginMetadata;
21
21
  execute(context: PluginContext): Promise<PluginResult>;
22
+ /**
23
+ * Create event channel nodes and connect them to emits/listeners
24
+ *
25
+ * This runs AFTER all modules are analyzed, so all emit/listener nodes exist.
26
+ * Creates one socketio:event node per unique event name, then connects:
27
+ * - socketio:emit → EMITS_EVENT → socketio:event
28
+ * - socketio:event → LISTENED_BY → socketio:on
29
+ */
30
+ private createEventChannels;
22
31
  private analyzeModule;
23
32
  /**
24
33
  * Извлекает имя объекта из MemberExpression
@@ -1 +1 @@
1
- {"version":3,"file":"SocketIOAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/plugins/analysis/SocketIOAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAyDhF,qBAAa,gBAAiB,SAAQ,MAAM;IAC1C,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YA+C9C,aAAa;IA+M3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CA4BzB"}
1
+ {"version":3,"file":"SocketIOAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/plugins/analysis/SocketIOAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAwEhF,qBAAa,gBAAiB,SAAQ,MAAM;IAC1C,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA2D5D;;;;;;;OAOG;YACW,mBAAmB;YAiFnB,aAAa;IAsN3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CA4BzB"}
@@ -18,6 +18,7 @@ import { readFileSync } from 'fs';
18
18
  import { parse } from '@babel/parser';
19
19
  import traverseModule from '@babel/traverse';
20
20
  import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
21
+ import { getLine, getColumn } from './ast/utils/location.js';
21
22
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
23
  const traverse = traverseModule.default || traverseModule;
23
24
  export class SocketIOAnalyzer extends Plugin {
@@ -27,22 +28,24 @@ export class SocketIOAnalyzer extends Plugin {
27
28
  phase: 'ANALYSIS',
28
29
  priority: 75, // После JSASTAnalyzer (80)
29
30
  creates: {
30
- nodes: ['socketio:emit', 'socketio:on', 'socketio:room'],
31
- edges: ['CONTAINS', 'EMITS_EVENT', 'LISTENS_TO', 'JOINS_ROOM']
31
+ nodes: ['socketio:emit', 'socketio:on', 'socketio:room', 'socketio:event'],
32
+ edges: ['CONTAINS', 'EMITS_EVENT', 'LISTENS_TO', 'JOINS_ROOM', 'LISTENED_BY']
32
33
  },
33
34
  dependencies: ['JSModuleIndexer', 'JSASTAnalyzer']
34
35
  };
35
36
  }
36
37
  async execute(context) {
38
+ const logger = this.log(context);
37
39
  try {
38
40
  const { graph } = context;
39
41
  // Получаем все модули
40
42
  const modules = await this.getModules(graph);
41
- console.log(`[SocketIOAnalyzer] Processing ${modules.length} modules...`);
43
+ logger.info('Processing modules', { count: modules.length });
42
44
  let emitsCount = 0;
43
45
  let listenersCount = 0;
44
46
  let roomsCount = 0;
45
47
  const startTime = Date.now();
48
+ // PHASE 1: Analyze modules and create emit/listener/room nodes
46
49
  for (let i = 0; i < modules.length; i++) {
47
50
  const module = modules[i];
48
51
  const result = await this.analyzeModule(module, graph);
@@ -53,20 +56,106 @@ export class SocketIOAnalyzer extends Plugin {
53
56
  if ((i + 1) % 20 === 0 || i === modules.length - 1) {
54
57
  const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
55
58
  const avgTime = ((Date.now() - startTime) / (i + 1)).toFixed(0);
56
- console.log(`[SocketIOAnalyzer] Progress: ${i + 1}/${modules.length} (${elapsed}s, avg ${avgTime}ms/module)`);
59
+ logger.debug('Progress', {
60
+ current: i + 1,
61
+ total: modules.length,
62
+ elapsed: `${elapsed}s`,
63
+ avgTime: `${avgTime}ms/module`
64
+ });
57
65
  }
58
66
  }
59
- console.log(`[SocketIOAnalyzer] Found ${emitsCount} emits, ${listenersCount} listeners, ${roomsCount} rooms`);
67
+ // PHASE 2: Create event channel nodes and edges
68
+ const eventCount = await this.createEventChannels(graph, logger);
69
+ logger.info('Analysis complete', {
70
+ emitsCount,
71
+ listenersCount,
72
+ roomsCount,
73
+ eventCount
74
+ });
60
75
  return createSuccessResult({
61
- nodes: emitsCount + listenersCount + roomsCount,
76
+ nodes: emitsCount + listenersCount + roomsCount + eventCount,
62
77
  edges: 0
63
- }, { emitsCount, listenersCount, roomsCount });
78
+ }, { emitsCount, listenersCount, roomsCount, eventCount });
64
79
  }
65
80
  catch (error) {
66
- console.error('[SocketIOAnalyzer] Error:', error);
81
+ logger.error('Analysis failed', { error });
67
82
  return createErrorResult(error);
68
83
  }
69
84
  }
85
+ /**
86
+ * Create event channel nodes and connect them to emits/listeners
87
+ *
88
+ * This runs AFTER all modules are analyzed, so all emit/listener nodes exist.
89
+ * Creates one socketio:event node per unique event name, then connects:
90
+ * - socketio:emit → EMITS_EVENT → socketio:event
91
+ * - socketio:event → LISTENED_BY → socketio:on
92
+ */
93
+ async createEventChannels(graph, logger) {
94
+ try {
95
+ // Step 1: Get all emit and listener nodes
96
+ const allEmits = await graph.getAllNodes({ type: 'socketio:emit' });
97
+ const allListeners = await graph.getAllNodes({ type: 'socketio:on' });
98
+ logger.debug('Creating event channels', {
99
+ emits: allEmits.length,
100
+ listeners: allListeners.length
101
+ });
102
+ // Step 2: Extract unique event names
103
+ const eventNames = new Set();
104
+ for (const emit of allEmits) {
105
+ if (emit.event && typeof emit.event === 'string') {
106
+ eventNames.add(emit.event);
107
+ }
108
+ }
109
+ for (const listener of allListeners) {
110
+ if (listener.event && typeof listener.event === 'string') {
111
+ eventNames.add(listener.event);
112
+ }
113
+ }
114
+ logger.debug('Unique events found', { count: eventNames.size });
115
+ // Step 3: Create event channel node for each unique event
116
+ let createdCount = 0;
117
+ for (const eventName of eventNames) {
118
+ const eventNodeId = `socketio:event#${eventName}`;
119
+ // Create event channel node
120
+ const eventNode = {
121
+ id: eventNodeId,
122
+ type: 'socketio:event',
123
+ name: eventName,
124
+ event: eventName
125
+ };
126
+ await graph.addNode(eventNode);
127
+ createdCount++;
128
+ // Step 4: Connect all emits of this event to the channel
129
+ const matchingEmits = allEmits.filter(e => e.event === eventName);
130
+ for (const emit of matchingEmits) {
131
+ await graph.addEdge({
132
+ type: 'EMITS_EVENT',
133
+ src: emit.id,
134
+ dst: eventNodeId
135
+ });
136
+ }
137
+ // Step 5: Connect event channel to all listeners of this event
138
+ const matchingListeners = allListeners.filter(l => l.event === eventName);
139
+ for (const listener of matchingListeners) {
140
+ await graph.addEdge({
141
+ type: 'LISTENED_BY',
142
+ src: eventNodeId,
143
+ dst: listener.id
144
+ });
145
+ }
146
+ logger.debug('Created event channel', {
147
+ event: eventName,
148
+ emits: matchingEmits.length,
149
+ listeners: matchingListeners.length
150
+ });
151
+ }
152
+ return createdCount;
153
+ }
154
+ catch (error) {
155
+ logger.error('Failed to create event channels', { error });
156
+ return 0;
157
+ }
158
+ }
70
159
  async analyzeModule(module, graph) {
71
160
  try {
72
161
  const code = readFileSync(module.file, 'utf-8');
@@ -97,8 +186,8 @@ export class SocketIOAnalyzer extends Plugin {
97
186
  callee.property.name === 'emit') {
98
187
  const objectName = this.getObjectName(callee.object);
99
188
  const event = this.extractStringArg(node.arguments[0]);
100
- const line = node.loc.start.line;
101
- const column = node.loc.start.column;
189
+ const line = getLine(node);
190
+ const column = getColumn(node);
102
191
  // io.to('room').emit() - room-based emit
103
192
  let room = null;
104
193
  if (callee.object.type === 'CallExpression' &&
@@ -138,7 +227,7 @@ export class SocketIOAnalyzer extends Plugin {
138
227
  callee.property.name === 'on') {
139
228
  const objectName = this.getObjectName(callee.object);
140
229
  const event = this.extractStringArg(node.arguments[0]);
141
- const line = node.loc.start.line;
230
+ const line = getLine(node);
142
231
  const handler = node.arguments[1];
143
232
  // Извлекаем имя handler функции
144
233
  let handlerName = 'anonymous';
@@ -146,8 +235,8 @@ export class SocketIOAnalyzer extends Plugin {
146
235
  if (handler) {
147
236
  if (handler.type === 'FunctionExpression' ||
148
237
  handler.type === 'ArrowFunctionExpression') {
149
- handlerName = `anonymous:${handler.loc.start.line}`;
150
- handlerLine = handler.loc.start.line;
238
+ handlerName = `anonymous:${getLine(handler)}`;
239
+ handlerLine = getLine(handler);
151
240
  }
152
241
  else if (handler.type === 'Identifier') {
153
242
  handlerName = handler.name;
@@ -161,7 +250,8 @@ export class SocketIOAnalyzer extends Plugin {
161
250
  handlerName: handlerName,
162
251
  handlerLine: handlerLine,
163
252
  file: module.file,
164
- line: line
253
+ line: line,
254
+ column: getColumn(node)
165
255
  });
166
256
  }
167
257
  // Pattern: socket.join(room)
@@ -170,7 +260,7 @@ export class SocketIOAnalyzer extends Plugin {
170
260
  callee.property.name === 'join') {
171
261
  const objectName = this.getObjectName(callee.object);
172
262
  const roomName = this.extractStringArg(node.arguments[0]);
173
- const line = node.loc.start.line;
263
+ const line = getLine(node);
174
264
  if (objectName === 'socket') {
175
265
  rooms.push({
176
266
  id: `socketio:room#${roomName}#${module.file}#${line}`,
@@ -178,7 +268,8 @@ export class SocketIOAnalyzer extends Plugin {
178
268
  room: roomName,
179
269
  objectName: objectName,
180
270
  file: module.file,
181
- line: line
271
+ line: line,
272
+ column: getColumn(node)
182
273
  });
183
274
  }
184
275
  }
@@ -202,14 +293,19 @@ export class SocketIOAnalyzer extends Plugin {
202
293
  src: module.id,
203
294
  dst: listener.id
204
295
  });
205
- // Ищем FUNCTION node для handler и создаём ребро LISTENS_TO
206
- const handlerFunctionId = `FUNCTION#${listener.handlerName}#${listener.file}#${listener.handlerLine}`;
207
- const handlerFunction = await graph.getNode(handlerFunctionId);
296
+ // Find FUNCTION node for handler by name and file (supports both legacy and semantic IDs)
297
+ const handlerFunctions = await graph.getAllNodes({
298
+ type: 'FUNCTION',
299
+ name: listener.handlerName,
300
+ file: listener.file
301
+ });
302
+ // Find the handler at the matching line
303
+ const handlerFunction = handlerFunctions.find(fn => fn.line === listener.handlerLine);
208
304
  if (handlerFunction) {
209
305
  await graph.addEdge({
210
306
  type: 'LISTENS_TO',
211
307
  src: listener.id,
212
- dst: handlerFunctionId
308
+ dst: handlerFunction.id
213
309
  });
214
310
  }
215
311
  }
@@ -229,7 +325,7 @@ export class SocketIOAnalyzer extends Plugin {
229
325
  };
230
326
  }
231
327
  catch (error) {
232
- console.error(`[SocketIOAnalyzer] Error analyzing ${module.file}:`, error.message);
328
+ // Silent - per-module errors shouldn't spam logs
233
329
  return { emits: 0, listeners: 0, rooms: 0 };
234
330
  }
235
331
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SystemDbAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/plugins/analysis/SystemDbAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA2BhF,qBAAa,gBAAiB,SAAQ,MAAM;IAC1C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAuL5D;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAkB1B"}
1
+ {"version":3,"file":"SystemDbAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/plugins/analysis/SystemDbAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA2BhF,qBAAa,gBAAiB,SAAQ,MAAM;IAC1C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA4L5D;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAkB1B"}
@@ -29,13 +29,14 @@ export class SystemDbAnalyzer extends Plugin {
29
29
  };
30
30
  }
31
31
  async execute(context) {
32
+ const logger = this.log(context);
32
33
  try {
33
34
  const { graph } = context;
34
35
  let nodesCreated = 0;
35
36
  let edgesCreated = 0;
36
37
  // Get all MODULE nodes
37
38
  const modules = await this.getModules(graph);
38
- console.log(`[SystemDbAnalyzer] Analyzing ${modules.length} modules for system_db patterns...\n`);
39
+ logger.info('Analyzing modules for system_db patterns', { count: modules.length });
39
40
  for (const module of modules) {
40
41
  if (!module.file)
41
42
  continue;
@@ -114,7 +115,13 @@ export class SystemDbAnalyzer extends Plugin {
114
115
  // Create SYSTEM_DB_VIEW_REGISTRATION nodes
115
116
  for (const reg of registrations) {
116
117
  const nodeId = `${module.file}:SYSTEM_DB_VIEW_REGISTRATION:${reg.viewName}:${reg.line}`;
117
- console.log(` 📌 Found: ${reg.type}('${reg.viewName}', '${reg.serverName}') at ${module.file.split('/').pop()}:${reg.line}`);
118
+ logger.debug('Found registration', {
119
+ type: reg.type,
120
+ viewName: reg.viewName,
121
+ serverName: reg.serverName,
122
+ file: module.file.split('/').pop(),
123
+ line: reg.line
124
+ });
118
125
  await graph.addNode({
119
126
  id: nodeId,
120
127
  type: 'SYSTEM_DB_VIEW_REGISTRATION',
@@ -160,15 +167,18 @@ export class SystemDbAnalyzer extends Plugin {
160
167
  catch (err) {
161
168
  // Skip files that can't be parsed
162
169
  if (err.code !== 'ENOENT') {
163
- console.error(` ⚠️ Failed to analyze ${module.file}: ${err.message}`);
170
+ logger.warn('Failed to analyze module', {
171
+ file: module.file,
172
+ error: err.message
173
+ });
164
174
  }
165
175
  }
166
176
  }
167
- console.log(`[SystemDbAnalyzer] Created ${nodesCreated} system_db nodes, ${edgesCreated} edges\n`);
177
+ logger.info('Analysis complete', { nodesCreated, edgesCreated });
168
178
  return createSuccessResult({ nodes: nodesCreated, edges: edgesCreated }, { modulesAnalyzed: modules.length });
169
179
  }
170
180
  catch (error) {
171
- console.error(`[SystemDbAnalyzer] Error:`, error);
181
+ logger.error('Analysis failed', { error });
172
182
  return createErrorResult(error);
173
183
  }
174
184
  }
@@ -31,6 +31,69 @@ export declare class GraphBuilder {
31
31
  build(module: ModuleNode, graph: GraphBackend, projectPath: string, data: ASTCollections): Promise<BuildResult>;
32
32
  private bufferFunctionEdges;
33
33
  private bufferScopeEdges;
34
+ /**
35
+ * Buffer LOOP edges (CONTAINS, HAS_BODY, ITERATES_OVER)
36
+ *
37
+ * Creates edges for:
38
+ * - Parent -> CONTAINS -> LOOP
39
+ * - LOOP -> HAS_BODY -> body SCOPE
40
+ * - LOOP -> ITERATES_OVER -> collection VARIABLE/PARAMETER (for for-in/for-of)
41
+ *
42
+ * Scope-aware variable lookup for ITERATES_OVER:
43
+ * For for-of/for-in, finds the iterated variable preferring:
44
+ * 1. Variables declared before the loop on same or earlier line (closest first)
45
+ * 2. Parameters (function arguments)
46
+ */
47
+ private bufferLoopEdges;
48
+ /**
49
+ * Buffer HAS_CONDITION edges from LOOP to condition EXPRESSION/CALL nodes.
50
+ * Also creates EXPRESSION nodes for non-CallExpression conditions.
51
+ *
52
+ * REG-280: For while/do-while/for loops, creates HAS_CONDITION edge to the
53
+ * condition expression. For-in/for-of loops don't have conditions (use ITERATES_OVER).
54
+ *
55
+ * For CallExpression conditions, links to existing CALL_SITE node by coordinates.
56
+ */
57
+ private bufferLoopConditionEdges;
58
+ /**
59
+ * Buffer EXPRESSION nodes for loop condition expressions (non-CallExpression).
60
+ * Similar to bufferDiscriminantExpressions but for loops.
61
+ *
62
+ * REG-280: Creates EXPRESSION nodes for while/do-while/for loop conditions.
63
+ * CallExpression conditions use existing CALL_SITE nodes (no EXPRESSION created).
64
+ */
65
+ private bufferLoopConditionExpressions;
66
+ /**
67
+ * Buffer BRANCH edges (CONTAINS, HAS_CONDITION, HAS_CONSEQUENT, HAS_ALTERNATE)
68
+ *
69
+ * REG-275: For CallExpression discriminants (switch(getType())), looks up the
70
+ * actual CALL_SITE node by coordinates since the CALL_SITE uses semantic IDs.
71
+ *
72
+ * Phase 3 (REG-267): For if-branches, creates HAS_CONSEQUENT and HAS_ALTERNATE edges
73
+ * pointing to the if-body and else-body SCOPEs.
74
+ */
75
+ private bufferBranchEdges;
76
+ /**
77
+ * Buffer CASE edges (HAS_CASE, HAS_DEFAULT)
78
+ */
79
+ private bufferCaseEdges;
80
+ /**
81
+ * Buffer edges for TRY_BLOCK, CATCH_BLOCK, FINALLY_BLOCK nodes (Phase 4)
82
+ *
83
+ * Creates edges for:
84
+ * - Parent -> CONTAINS -> TRY_BLOCK
85
+ * - TRY_BLOCK -> HAS_CATCH -> CATCH_BLOCK
86
+ * - TRY_BLOCK -> HAS_FINALLY -> FINALLY_BLOCK
87
+ */
88
+ private bufferTryCatchFinallyEdges;
89
+ /**
90
+ * Buffer EXPRESSION nodes for switch discriminants
91
+ * Uses stored metadata directly instead of parsing from ID (Linus improvement)
92
+ *
93
+ * REG-275: For CallExpression discriminants, we don't create nodes here since
94
+ * bufferBranchEdges links to the existing CALL_SITE node by coordinates.
95
+ */
96
+ private bufferDiscriminantExpressions;
34
97
  private bufferVariableEdges;
35
98
  private bufferCallSiteEdges;
36
99
  private bufferMethodCalls;
@@ -47,6 +110,10 @@ export declare class GraphBuilder {
47
110
  private bufferArgumentEdges;
48
111
  /**
49
112
  * Buffer INTERFACE nodes and EXTENDS edges
113
+ *
114
+ * Uses two-pass approach:
115
+ * 1. First pass: create all interface nodes, store in Map
116
+ * 2. Second pass: create EXTENDS edges using stored node IDs
50
117
  */
51
118
  private bufferInterfaceNodes;
52
119
  /**
@@ -55,6 +122,7 @@ export declare class GraphBuilder {
55
122
  private bufferTypeAliasNodes;
56
123
  /**
57
124
  * Buffer ENUM nodes
125
+ * Uses EnumNode.create() to ensure consistent ID format (colon separator)
58
126
  */
59
127
  private bufferEnumNodes;
60
128
  /**
@@ -66,12 +134,147 @@ export declare class GraphBuilder {
66
134
  */
67
135
  private bufferImplementsEdges;
68
136
  /**
69
- * Handle CLASS ASSIGNED_FROM edges asynchronously (needs graph queries)
137
+ * Buffer FLOWS_INTO edges for array mutations (push, unshift, splice, indexed assignment)
138
+ * Creates edges from inserted values to the array variable
139
+ *
140
+ * REG-117: Now handles nested mutations like obj.arr.push(item):
141
+ * - For nested mutations, falls back to base object if array property not found
142
+ * - Adds nestedProperty metadata for tracking
143
+ *
144
+ * OPTIMIZED: Uses Map-based lookup cache for O(1) variable lookups instead of O(n) find()
70
145
  */
71
- private createClassAssignmentEdges;
146
+ private bufferArrayMutationEdges;
147
+ /**
148
+ * Buffer FLOWS_INTO edges for object mutations (property assignment, Object.assign)
149
+ * Creates edges from source values to the object variable being mutated.
150
+ *
151
+ * REG-152: For 'this.prop = value' patterns inside classes, creates edges
152
+ * to the CLASS node with mutationType: 'this_property'.
153
+ */
154
+ private bufferObjectMutationEdges;
155
+ /**
156
+ * Resolve variable by name using scope chain lookup (REG-309).
157
+ * Mirrors JavaScript lexical scoping: search current scope, then parent, then grandparent, etc.
158
+ *
159
+ * @param name - Variable name
160
+ * @param scopePath - Scope path where reference occurs (from ScopeTracker)
161
+ * @param file - File path
162
+ * @param variables - All variable declarations
163
+ * @returns Variable declaration or null if not found
164
+ */
165
+ private resolveVariableInScope;
166
+ /**
167
+ * Resolve parameter by name using scope chain lookup (REG-309).
168
+ * Same semantics as resolveVariableInScope but for parameters.
169
+ *
170
+ * @param name - Parameter name
171
+ * @param scopePath - Scope path where reference occurs (from ScopeTracker)
172
+ * @param file - File path
173
+ * @param parameters - All parameter declarations
174
+ * @returns Parameter declaration or null if not found
175
+ */
176
+ private resolveParameterInScope;
72
177
  /**
73
- * Create IMPORTS_FROM edges linking imports to their target exports
178
+ * Check if two scope paths match (REG-309).
179
+ * Handles: ['foo', 'if#0'] vs ['foo', 'if#0']
74
180
  */
75
- private createImportExportEdges;
181
+ private scopePathsMatch;
182
+ /**
183
+ * Buffer FLOWS_INTO edges for variable reassignments.
184
+ * Handles: x = y, x += y (when x is already declared, not initialization)
185
+ *
186
+ * Edge patterns:
187
+ * - Simple assignment (=): source --FLOWS_INTO--> variable
188
+ * - Compound operators (+=, -=, etc.):
189
+ * - source --FLOWS_INTO--> variable (write new value)
190
+ * - variable --READS_FROM--> variable (self-loop: reads current value before write)
191
+ *
192
+ * REG-309: Uses scope-aware variable lookup via resolveVariableInScope().
193
+ *
194
+ * REG-290: Complete implementation with inline node creation (no continue statements).
195
+ */
196
+ private bufferVariableReassignmentEdges;
197
+ /**
198
+ * Buffer RETURNS edges connecting return expressions to their containing functions.
199
+ *
200
+ * Edge direction: returnExpression --RETURNS--> function
201
+ *
202
+ * This enables tracing data flow through function calls:
203
+ * - Query: "What does formatDate return?"
204
+ * - Answer: Follow RETURNS edges from function to see all possible return values
205
+ */
206
+ private bufferReturnEdges;
207
+ /**
208
+ * Buffer UPDATE_EXPRESSION nodes and edges for increment/decrement operations.
209
+ *
210
+ * Handles two target types:
211
+ * - IDENTIFIER: Simple variable (i++, --count)
212
+ * - MEMBER_EXPRESSION: Object property (obj.prop++, arr[i]++, this.count++)
213
+ *
214
+ * Creates:
215
+ * - UPDATE_EXPRESSION node with operator and target metadata
216
+ * - MODIFIES edge: UPDATE_EXPRESSION -> target (VARIABLE, PARAMETER, or CLASS)
217
+ * - READS_FROM self-loop: target -> target (reads current value before update)
218
+ * - CONTAINS edge: SCOPE -> UPDATE_EXPRESSION
219
+ *
220
+ * REG-288: Initial implementation for IDENTIFIER targets
221
+ * REG-312: Extended for MEMBER_EXPRESSION targets
222
+ */
223
+ private bufferUpdateExpressionEdges;
224
+ /**
225
+ * Buffer UPDATE_EXPRESSION node and edges for simple identifier updates (i++, --count)
226
+ * REG-288: Original implementation extracted for clarity
227
+ */
228
+ private bufferIdentifierUpdate;
229
+ /**
230
+ * Buffer UPDATE_EXPRESSION node and edges for member expression updates (obj.prop++, arr[i]++)
231
+ * REG-312: New implementation for member expression targets
232
+ *
233
+ * Creates:
234
+ * - UPDATE_EXPRESSION node with member expression metadata
235
+ * - MODIFIES edge: UPDATE_EXPRESSION -> VARIABLE(object) or CLASS (for this.prop++)
236
+ * - READS_FROM self-loop: VARIABLE(object) -> VARIABLE(object)
237
+ * - CONTAINS edge: SCOPE -> UPDATE_EXPRESSION
238
+ */
239
+ private bufferMemberExpressionUpdate;
240
+ /**
241
+ * Buffer RESOLVES_TO edges for Promise resolution data flow (REG-334).
242
+ *
243
+ * Links resolve/reject CALL nodes to their parent Promise CONSTRUCTOR_CALL.
244
+ * This enables traceValues to follow Promise data flow:
245
+ *
246
+ * Example:
247
+ * ```
248
+ * const result = new Promise((resolve) => {
249
+ * resolve(42); // CALL[resolve] --RESOLVES_TO--> CONSTRUCTOR_CALL[Promise]
250
+ * });
251
+ * ```
252
+ *
253
+ * The edge direction (CALL -> CONSTRUCTOR_CALL) matches data flow semantics:
254
+ * data flows FROM resolve(value) TO the Promise result.
255
+ */
256
+ private bufferPromiseResolutionEdges;
257
+ /**
258
+ * Buffer OBJECT_LITERAL nodes to the graph.
259
+ * These are object literals passed as function arguments or nested in other literals.
260
+ */
261
+ private bufferObjectLiteralNodes;
262
+ /**
263
+ * Buffer ARRAY_LITERAL nodes to the graph.
264
+ * These are array literals passed as function arguments or nested in other literals.
265
+ */
266
+ private bufferArrayLiteralNodes;
267
+ /**
268
+ * Buffer HAS_PROPERTY edges connecting OBJECT_LITERAL nodes to their property values.
269
+ * Creates edges from object literal to its property value nodes (LITERAL, nested OBJECT_LITERAL, ARRAY_LITERAL, etc.)
270
+ *
271
+ * REG-329: Adds scope-aware variable resolution for VARIABLE property values.
272
+ * Uses the same resolveVariableInScope infrastructure as mutation handlers.
273
+ */
274
+ private bufferObjectPropertyEdges;
275
+ /**
276
+ * Handle CLASS ASSIGNED_FROM edges asynchronously (needs graph queries)
277
+ */
278
+ private createClassAssignmentEdges;
76
279
  }
77
280
  //# sourceMappingURL=GraphBuilder.d.ts.map