@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
@@ -1,58 +1,45 @@
1
1
  /**
2
- * CallResolverValidator - проверяет что все вызовы функций ссылаются на определения
2
+ * CallResolverValidator - validates function call resolution (REG-227)
3
3
  *
4
- * Использует Datalog для декларативной проверки гарантии:
5
- * "Все внутренние вызовы функций (CALL_SITE) должны иметь CALLS ребро к FUNCTION"
4
+ * Checks that all function calls are properly resolved:
5
+ * - Internal calls: CALLS edge to FUNCTION node
6
+ * - External calls: CALLS edge to EXTERNAL_MODULE node
7
+ * - Builtin calls: recognized by name (no edge needed)
8
+ * - Unresolved: no edge, not builtin -> WARNING
6
9
  *
7
- * ПРАВИЛО (Datalog):
8
- * violation(X) :- node(X, "CALL"), \+ attr(X, "object", _), \+ edge(X, _, "CALLS").
9
- *
10
- * Это находит CALL узлы без "object" метаданных (т.е. CALL_SITE, не METHOD_CALL),
11
- * которые не имеют CALLS ребра к определению функции.
10
+ * This validator runs AFTER FunctionCallResolver and ExternalCallResolver
11
+ * to verify resolution quality and report issues.
12
12
  */
13
13
 
14
14
  import { Plugin, createSuccessResult } from '../Plugin.js';
15
15
  import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
16
- import type { NodeRecord } from '@grafema/types';
16
+ import type { BaseNodeRecord } from '@grafema/types';
17
+ import { ValidationError } from '../../errors/GrafemaError.js';
18
+ import { JS_GLOBAL_FUNCTIONS } from '../../data/builtins/index.js';
17
19
 
18
20
  /**
19
- * Call resolver issue
21
+ * Resolution type for a CALL node
20
22
  */
21
- interface CallResolverIssue {
22
- type: string;
23
- severity: string;
24
- message: string;
25
- callName: string;
26
- nodeId: string;
27
- file?: string;
28
- line?: number;
29
- }
23
+ type ResolutionType = 'internal' | 'external' | 'builtin' | 'method' | 'unresolved';
30
24
 
31
25
  /**
32
- * Method call statistics
26
+ * Call node with optional attributes
33
27
  */
34
- interface MethodCallStats {
35
- total: number;
36
- resolved: number;
37
- external: number;
28
+ interface CallNode extends BaseNodeRecord {
29
+ object?: string; // If present, this is a method call
38
30
  }
39
31
 
40
32
  /**
41
- * Validation summary
33
+ * Validation summary showing resolution breakdown
42
34
  */
43
35
  interface ValidationSummary {
44
36
  totalCalls: number;
45
- resolvedInternalCalls: number;
46
- unresolvedInternalCalls: number;
47
- externalMethodCalls: number;
48
- issues: number;
49
- }
50
-
51
- /**
52
- * Datalog violation result
53
- */
54
- interface DatalogViolation {
55
- bindings: Array<{ name: string; value: string }>;
37
+ resolvedInternal: number; // CALLS -> FUNCTION
38
+ resolvedExternal: number; // CALLS -> EXTERNAL_MODULE
39
+ resolvedBuiltin: number; // Name in JS_GLOBAL_FUNCTIONS
40
+ methodCalls: number; // Has 'object' attribute (not validated)
41
+ unresolvedCalls: number; // No edge, not builtin
42
+ warnings: number; // = unresolvedCalls
56
43
  }
57
44
 
58
45
  export class CallResolverValidator extends Plugin {
@@ -64,107 +51,141 @@ export class CallResolverValidator extends Plugin {
64
51
  creates: {
65
52
  nodes: [],
66
53
  edges: []
67
- }
54
+ },
55
+ dependencies: ['FunctionCallResolver', 'ExternalCallResolver']
68
56
  };
69
57
  }
70
58
 
71
59
  async execute(context: PluginContext): Promise<PluginResult> {
72
60
  const { graph } = context;
61
+ const logger = this.log(context);
73
62
 
74
- console.log('[CallResolverValidator] Starting call resolution validation using Datalog...');
63
+ logger.info('Starting call resolution validation');
75
64
 
76
- // Check if graph supports checkGuarantee
77
- if (!graph.checkGuarantee) {
78
- console.log('[CallResolverValidator] Graph does not support checkGuarantee, skipping validation');
79
- return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true });
80
- }
65
+ const warnings: ValidationError[] = [];
66
+ const summary: ValidationSummary = {
67
+ totalCalls: 0,
68
+ resolvedInternal: 0,
69
+ resolvedExternal: 0,
70
+ resolvedBuiltin: 0,
71
+ methodCalls: 0,
72
+ unresolvedCalls: 0,
73
+ warnings: 0
74
+ };
81
75
 
82
- // Datalog гарантия:
83
- // CALL без "object" (т.е. CALL_SITE) должен иметь CALLS ребро
84
- const violations = await graph.checkGuarantee(`
85
- violation(X) :- node(X, "CALL"), \\+ attr(X, "object", _), \\+ edge(X, _, "CALLS").
86
- `) as DatalogViolation[];
87
-
88
- const issues: CallResolverIssue[] = [];
89
-
90
- if (violations.length > 0) {
91
- console.log(`[CallResolverValidator] Found ${violations.length} unresolved function calls`);
92
-
93
- for (const v of violations) {
94
- const nodeId = v.bindings.find(b => b.name === 'X')?.value;
95
- if (nodeId) {
96
- const node = await graph.getNode(nodeId);
97
- if (node) {
98
- issues.push({
99
- type: 'UNRESOLVED_FUNCTION_CALL',
100
- severity: 'WARNING',
101
- message: `Call to "${node.name}" at ${node.file}:${node.line || '?'} does not resolve to a function definition`,
102
- callName: node.name as string,
103
- nodeId: nodeId,
104
- file: node.file,
105
- line: node.line as number | undefined
106
- });
107
- }
108
- }
76
+ // Process all CALL nodes
77
+ for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
78
+ summary.totalCalls++;
79
+ const callNode = node as CallNode;
80
+
81
+ const resolutionType = await this.determineResolutionType(graph, callNode);
82
+
83
+ switch (resolutionType) {
84
+ case 'internal':
85
+ summary.resolvedInternal++;
86
+ break;
87
+ case 'external':
88
+ summary.resolvedExternal++;
89
+ break;
90
+ case 'builtin':
91
+ summary.resolvedBuiltin++;
92
+ break;
93
+ case 'method':
94
+ summary.methodCalls++;
95
+ break;
96
+ case 'unresolved':
97
+ summary.unresolvedCalls++;
98
+ summary.warnings++;
99
+ warnings.push(this.createWarning(callNode));
100
+ break;
109
101
  }
110
102
  }
111
103
 
112
- // Также проверим METHOD_CALL на известные внешние методы
113
- // (это информационно, не ошибка)
114
- const methodCallStats = await this.countMethodCalls(graph);
115
-
116
- const summary: ValidationSummary = {
117
- totalCalls: methodCallStats.total,
118
- resolvedInternalCalls: methodCallStats.resolved,
119
- unresolvedInternalCalls: issues.length,
120
- externalMethodCalls: methodCallStats.external,
121
- issues: issues.length
122
- };
104
+ logger.info('Validation complete', { ...summary });
123
105
 
124
- console.log('[CallResolverValidator] Summary:', summary);
125
-
126
- if (issues.length > 0) {
127
- console.log(`[CallResolverValidator] Unresolved calls:`);
128
- for (const issue of issues.slice(0, 10)) { // Show first 10
129
- console.log(` ⚠️ ${issue.message}`);
106
+ if (warnings.length > 0) {
107
+ logger.warn('Unresolved calls detected', { count: warnings.length });
108
+ for (const warning of warnings.slice(0, 10)) {
109
+ logger.warn(warning.message);
130
110
  }
131
- if (issues.length > 10) {
132
- console.log(` ... and ${issues.length - 10} more`);
111
+ if (warnings.length > 10) {
112
+ logger.debug(`... and ${warnings.length - 10} more`);
133
113
  }
134
114
  }
135
115
 
136
116
  return createSuccessResult(
137
117
  { nodes: 0, edges: 0 },
138
- { summary, issues }
118
+ { summary },
119
+ warnings
139
120
  );
140
121
  }
141
122
 
142
123
  /**
143
- * Подсчитывает статистику по вызовам
124
+ * Determine the resolution type for a CALL node.
125
+ *
126
+ * Resolution priority:
127
+ * 1. Method call (has 'object' attribute) -> 'method'
128
+ * 2. Has CALLS edge to FUNCTION -> 'internal'
129
+ * 3. Has CALLS edge to EXTERNAL_MODULE -> 'external'
130
+ * 4. Name in JS_GLOBAL_FUNCTIONS -> 'builtin'
131
+ * 5. Otherwise -> 'unresolved'
144
132
  */
145
- private async countMethodCalls(graph: PluginContext['graph']): Promise<MethodCallStats> {
146
- const stats: MethodCallStats = {
147
- total: 0,
148
- resolved: 0,
149
- external: 0
150
- };
133
+ private async determineResolutionType(
134
+ graph: PluginContext['graph'],
135
+ callNode: CallNode
136
+ ): Promise<ResolutionType> {
137
+ // 1. Check if method call (has object attribute)
138
+ if (callNode.object) {
139
+ return 'method';
140
+ }
151
141
 
152
- // Подсчитываем все CALL узлы
153
- for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
154
- stats.total++;
155
-
156
- // Проверяем наличие "object" в метаданных (METHOD_CALL)
157
- if ((node as NodeRecord & { object?: string }).object) {
158
- stats.external++;
159
- } else {
160
- // CALL_SITE - проверяем есть ли CALLS ребро
161
- const edges = await graph.getOutgoingEdges(node.id, ['CALLS']);
162
- if (edges.length > 0) {
163
- stats.resolved++;
142
+ // 2. Check for CALLS edges
143
+ const edges = await graph.getOutgoingEdges(callNode.id, ['CALLS']);
144
+ if (edges.length > 0) {
145
+ // Determine destination type
146
+ const edge = edges[0];
147
+ const dstNode = await graph.getNode(edge.dst);
148
+
149
+ if (dstNode) {
150
+ if (dstNode.type === 'FUNCTION') {
151
+ return 'internal';
152
+ }
153
+ if (dstNode.type === 'EXTERNAL_MODULE') {
154
+ return 'external';
164
155
  }
165
156
  }
157
+
158
+ // Has edge but unknown destination type - treat as resolved
159
+ return 'internal';
166
160
  }
167
161
 
168
- return stats;
162
+ // 3. Check if builtin
163
+ const calledName = callNode.name as string;
164
+ if (calledName && JS_GLOBAL_FUNCTIONS.has(calledName)) {
165
+ return 'builtin';
166
+ }
167
+
168
+ // 4. Unresolved
169
+ return 'unresolved';
170
+ }
171
+
172
+ /**
173
+ * Create a warning for an unresolved call.
174
+ */
175
+ private createWarning(callNode: CallNode): ValidationError {
176
+ return new ValidationError(
177
+ `Unresolved call to "${callNode.name}" at ${callNode.file}:${callNode.line || '?'}`,
178
+ 'WARN_UNRESOLVED_CALL',
179
+ {
180
+ filePath: callNode.file,
181
+ lineNumber: callNode.line as number | undefined,
182
+ phase: 'VALIDATION',
183
+ plugin: 'CallResolverValidator',
184
+ nodeId: callNode.id,
185
+ callName: callNode.name as string,
186
+ },
187
+ 'Ensure the function is defined, imported, or is a known global',
188
+ 'warning' // Severity: warning (not error)
189
+ );
169
190
  }
170
191
  }
@@ -15,6 +15,7 @@
15
15
  import { Plugin, createSuccessResult } from '../Plugin.js';
16
16
  import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
17
17
  import type { NodeRecord } from '@grafema/types';
18
+ import { ValidationError } from '../../errors/GrafemaError.js';
18
19
 
19
20
  /**
20
21
  * Edge structure
@@ -26,19 +27,6 @@ interface EdgeRecord {
26
27
  [key: string]: unknown;
27
28
  }
28
29
 
29
- /**
30
- * Data flow issue
31
- */
32
- interface DataFlowIssue {
33
- type: string;
34
- severity: string;
35
- message: string;
36
- variable: string;
37
- file?: string;
38
- line?: number;
39
- chain?: string[];
40
- }
41
-
42
30
  /**
43
31
  * Path finding result
44
32
  */
@@ -72,12 +60,13 @@ export class DataFlowValidator extends Plugin {
72
60
 
73
61
  async execute(context: PluginContext): Promise<PluginResult> {
74
62
  const { graph } = context;
63
+ const logger = this.log(context);
75
64
 
76
- console.log('[DataFlowValidator] Starting data flow validation...');
65
+ logger.info('Starting data flow validation');
77
66
 
78
67
  // Check if graph supports getAllEdges
79
68
  if (!graph.getAllEdges) {
80
- console.log('[DataFlowValidator] Graph does not support getAllEdges, skipping validation');
69
+ logger.debug('Graph does not support getAllEdges, skipping validation');
81
70
  return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true });
82
71
  }
83
72
 
@@ -89,16 +78,16 @@ export class DataFlowValidator extends Plugin {
89
78
  n.type === 'VARIABLE_DECLARATION' || n.type === 'CONSTANT'
90
79
  );
91
80
 
92
- console.log(`[DataFlowValidator] Found ${variables.length} variables to validate`);
81
+ logger.debug('Variables collected', { count: variables.length });
93
82
 
94
- const issues: DataFlowIssue[] = [];
83
+ const errors: ValidationError[] = [];
95
84
  const leafTypes = new Set([
96
85
  'LITERAL',
97
- 'EXTERNAL_STDIO',
98
- 'EXTERNAL_DATABASE',
99
- 'EXTERNAL_NETWORK',
100
- 'EXTERNAL_FILESYSTEM',
101
- 'EVENT_LISTENER',
86
+ 'net:stdio',
87
+ 'db:query',
88
+ 'net:request',
89
+ 'fs:operation',
90
+ 'event:listener',
102
91
  'CLASS', // NewExpression - конструкторы классов
103
92
  'FUNCTION', // Arrow functions и function expressions
104
93
  'METHOD_CALL', // Вызовы методов (промежуточные узлы)
@@ -112,75 +101,96 @@ export class DataFlowValidator extends Plugin {
112
101
  );
113
102
 
114
103
  if (!assignment) {
115
- issues.push({
116
- type: 'MISSING_ASSIGNMENT',
117
- severity: 'WARNING',
118
- message: `Variable "${variable.name}" (${variable.file}:${variable.line}) has no ASSIGNED_FROM edge`,
119
- variable: variable.name as string,
120
- file: variable.file,
121
- line: variable.line as number | undefined
122
- });
104
+ errors.push(new ValidationError(
105
+ `Variable "${variable.name}" (${variable.file}:${variable.line}) has no ASSIGNED_FROM edge`,
106
+ 'ERR_MISSING_ASSIGNMENT',
107
+ {
108
+ filePath: variable.file,
109
+ lineNumber: variable.line as number | undefined,
110
+ phase: 'VALIDATION',
111
+ plugin: 'DataFlowValidator',
112
+ variable: variable.name as string,
113
+ },
114
+ undefined,
115
+ 'warning'
116
+ ));
123
117
  continue;
124
118
  }
125
119
 
126
120
  // Проверяем что источник существует
127
121
  const source = allNodes.find(n => n.id === assignment.dst);
128
122
  if (!source) {
129
- issues.push({
130
- type: 'BROKEN_REFERENCE',
131
- severity: 'ERROR',
132
- message: `Variable "${variable.name}" references non-existent node ${assignment.dst}`,
133
- variable: variable.name as string,
134
- file: variable.file,
135
- line: variable.line as number | undefined
136
- });
123
+ errors.push(new ValidationError(
124
+ `Variable "${variable.name}" references non-existent node ${assignment.dst}`,
125
+ 'ERR_BROKEN_REFERENCE',
126
+ {
127
+ filePath: variable.file,
128
+ lineNumber: variable.line as number | undefined,
129
+ phase: 'VALIDATION',
130
+ plugin: 'DataFlowValidator',
131
+ variable: variable.name as string,
132
+ targetNodeId: assignment.dst,
133
+ },
134
+ undefined,
135
+ 'error'
136
+ ));
137
137
  continue;
138
138
  }
139
139
 
140
140
  // Проверяем путь до листового узла
141
141
  const path = this.findPathToLeaf(variable, allNodes, allEdges, leafTypes);
142
142
  if (!path.found) {
143
- issues.push({
144
- type: 'NO_LEAF_NODE',
145
- severity: 'WARNING',
146
- message: `Variable "${variable.name}" (${variable.file}:${variable.line}) does not trace to a leaf node. Chain: ${path.chain.join(' -> ')}`,
147
- variable: variable.name as string,
148
- file: variable.file,
149
- line: variable.line as number | undefined,
150
- chain: path.chain
151
- });
143
+ errors.push(new ValidationError(
144
+ `Variable "${variable.name}" (${variable.file}:${variable.line}) does not trace to a leaf node. Chain: ${path.chain.join(' -> ')}`,
145
+ 'ERR_NO_LEAF_NODE',
146
+ {
147
+ filePath: variable.file,
148
+ lineNumber: variable.line as number | undefined,
149
+ phase: 'VALIDATION',
150
+ plugin: 'DataFlowValidator',
151
+ variable: variable.name as string,
152
+ chain: path.chain,
153
+ },
154
+ undefined,
155
+ 'warning'
156
+ ));
152
157
  }
153
158
  }
154
159
 
155
- // Группируем issues по типу
156
- const summary: ValidationSummary = {
157
- total: variables.length,
158
- validated: variables.length - issues.length,
159
- issues: issues.length,
160
- byType: {}
161
- };
162
-
163
- for (const issue of issues) {
164
- if (!summary.byType[issue.type]) {
165
- summary.byType[issue.type] = 0;
160
+ // Группируем errors по коду
161
+ const byCode: Record<string, number> = {};
162
+ for (const error of errors) {
163
+ if (!byCode[error.code]) {
164
+ byCode[error.code] = 0;
166
165
  }
167
- summary.byType[issue.type]++;
166
+ byCode[error.code]++;
168
167
  }
169
168
 
170
- console.log('[DataFlowValidator] Summary:', summary);
169
+ const summary: ValidationSummary = {
170
+ total: variables.length,
171
+ validated: variables.length - errors.length,
172
+ issues: errors.length,
173
+ byType: byCode
174
+ };
171
175
 
172
- // Выводим issues
173
- if (issues.length > 0) {
174
- console.log(`[DataFlowValidator] Found ${issues.length} issues:`);
175
- for (const issue of issues) {
176
- const level = issue.severity === 'ERROR' ? '❌' : '⚠️';
177
- console.log(` ${level} [${issue.type}] ${issue.message}`);
176
+ logger.info('Validation complete', { ...summary });
177
+
178
+ // Выводим errors
179
+ if (errors.length > 0) {
180
+ logger.warn('Data flow issues found', { count: errors.length });
181
+ for (const error of errors) {
182
+ if (error.severity === 'error') {
183
+ logger.error(`[${error.code}] ${error.message}`);
184
+ } else {
185
+ logger.warn(`[${error.code}] ${error.message}`);
186
+ }
178
187
  }
179
188
  }
180
189
 
181
190
  return createSuccessResult(
182
191
  { nodes: 0, edges: 0 },
183
- { summary, issues }
192
+ { summary },
193
+ errors
184
194
  );
185
195
  }
186
196
 
@@ -208,6 +218,17 @@ export class DataFlowValidator extends Plugin {
208
218
  return { found: true, chain };
209
219
  }
210
220
 
221
+ // REG-262: Check if variable is used by a method call (incoming USES edge)
222
+ // If something USES this variable, the variable is not dead
223
+ const usedByCall = allEdges.find(e =>
224
+ e.type === 'USES' && e.dst === startNode.id
225
+ );
226
+ if (usedByCall) {
227
+ const callNode = allNodes.find(n => n.id === usedByCall.src);
228
+ const callName = callNode?.name ?? usedByCall.src;
229
+ return { found: true, chain: [...chain, `(used by ${callName})`] };
230
+ }
231
+
211
232
  // Ищем ASSIGNED_FROM ребро
212
233
  const assignment = allEdges.find(e =>
213
234
  e.type === 'ASSIGNED_FROM' && e.src === startNode.id
@@ -69,17 +69,18 @@ export class EvalBanValidator extends Plugin {
69
69
 
70
70
  async execute(context: PluginContext): Promise<PluginResult> {
71
71
  const { graph } = context;
72
+ const logger = this.log(context);
72
73
 
73
- console.log('[EvalBanValidator] Checking for eval/Function usage...');
74
+ logger.info('Starting eval/Function usage validation');
74
75
  const startTime = Date.now();
75
76
 
76
77
  const issues: EvalBanIssue[] = [];
77
78
 
78
- // ОПТИМИЗАЦИЯ: вместо Datalog (медленный full scan), используем прямые graph queries
79
- // Datalog зависает на больших графах из-за отсутствия индексов
79
+ // OPTIMIZATION: use direct graph queries instead of Datalog (slow full scan)
80
+ // Datalog hangs on large graphs due to lack of indexes
80
81
 
81
- // 1. Прямой вызов eval("code") - ищем все CALL ноды с name="eval"
82
- console.log('[EvalBanValidator] Searching for eval() calls...');
82
+ // 1. Direct eval("code") call - find all CALL nodes with name="eval"
83
+ logger.debug('Searching for eval() calls');
83
84
  const evalStart = Date.now();
84
85
  let evalCount = 0;
85
86
 
@@ -96,10 +97,10 @@ export class EvalBanValidator extends Plugin {
96
97
  });
97
98
  }
98
99
  }
99
- console.log(`[EvalBanValidator] eval() search took ${Date.now() - evalStart}ms, found ${evalCount} violations`);
100
+ logger.debug('eval() search complete', { timeMs: Date.now() - evalStart, count: evalCount });
100
101
 
101
- // 2. Вызов Function("code") или new Function("code")
102
- console.log('[EvalBanValidator] Searching for Function() calls...');
102
+ // 2. Function("code") or new Function("code") call
103
+ logger.debug('Searching for Function() calls');
103
104
  const funcStart = Date.now();
104
105
  let funcCount = 0;
105
106
 
@@ -116,11 +117,11 @@ export class EvalBanValidator extends Plugin {
116
117
  });
117
118
  }
118
119
  }
119
- console.log(`[EvalBanValidator] Function() search took ${Date.now() - funcStart}ms, found ${funcCount} violations`);
120
+ logger.debug('Function() search complete', { timeMs: Date.now() - funcStart, count: funcCount });
120
121
 
121
122
  // 3. Method call: window.eval, globalThis.eval, this.eval
122
123
  // Note: METHOD_CALL was merged into CALL - method calls have 'method' attribute
123
- console.log('[EvalBanValidator] Searching for method eval() calls...');
124
+ logger.debug('Searching for method eval() calls');
124
125
  const methodStart = Date.now();
125
126
  let methodCount = 0;
126
127
 
@@ -141,10 +142,10 @@ export class EvalBanValidator extends Plugin {
141
142
  });
142
143
  }
143
144
  }
144
- console.log(`[EvalBanValidator] method eval() search took ${Date.now() - methodStart}ms, found ${methodCount} violations`);
145
+ logger.debug('Method eval() search complete', { timeMs: Date.now() - methodStart, count: methodCount });
145
146
 
146
147
  // 4. Aliased eval - SKIP for now (complex Datalog query causes OOM)
147
- console.log('[EvalBanValidator] Skipping aliased eval detection (requires optimized implementation)');
148
+ logger.debug('Skipping aliased eval detection', { reason: 'requires optimized implementation' });
148
149
 
149
150
  const totalTime = ((Date.now() - startTime) / 1000).toFixed(1);
150
151
  const summary: ValidationSummary = {
@@ -156,15 +157,15 @@ export class EvalBanValidator extends Plugin {
156
157
  timeSeconds: totalTime
157
158
  };
158
159
 
159
- console.log('[EvalBanValidator] Summary:', summary);
160
+ logger.info('Validation summary', { ...summary });
160
161
 
161
162
  if (issues.length > 0) {
162
- console.log('[EvalBanValidator] ❌ Security violations found:');
163
+ logger.info('Security violations found', { count: issues.length });
163
164
  for (const issue of issues) {
164
- console.log(` 🚫 ${issue.message}`);
165
+ logger.warn('Violation', { message: issue.message, type: issue.type, file: issue.file, line: issue.line });
165
166
  }
166
167
  } else {
167
- console.log('[EvalBanValidator] No eval/Function usage detected');
168
+ logger.info('Validation passed: no eval/Function usage detected');
168
169
  }
169
170
 
170
171
  return createSuccessResult(