@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 @@
12
12
  * - EVENT_LISTENER: события
13
13
  */
14
14
  import { Plugin, createSuccessResult } from '../Plugin.js';
15
+ import { ValidationError } from '../../errors/GrafemaError.js';
15
16
  export class DataFlowValidator extends Plugin {
16
17
  get metadata() {
17
18
  return {
@@ -26,25 +27,26 @@ export class DataFlowValidator extends Plugin {
26
27
  }
27
28
  async execute(context) {
28
29
  const { graph } = context;
29
- console.log('[DataFlowValidator] Starting data flow validation...');
30
+ const logger = this.log(context);
31
+ logger.info('Starting data flow validation');
30
32
  // Check if graph supports getAllEdges
31
33
  if (!graph.getAllEdges) {
32
- console.log('[DataFlowValidator] Graph does not support getAllEdges, skipping validation');
34
+ logger.debug('Graph does not support getAllEdges, skipping validation');
33
35
  return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true });
34
36
  }
35
37
  // Получаем все переменные
36
38
  const allNodes = await graph.getAllNodes();
37
39
  const allEdges = await graph.getAllEdges();
38
40
  const variables = allNodes.filter(n => n.type === 'VARIABLE_DECLARATION' || n.type === 'CONSTANT');
39
- console.log(`[DataFlowValidator] Found ${variables.length} variables to validate`);
40
- const issues = [];
41
+ logger.debug('Variables collected', { count: variables.length });
42
+ const errors = [];
41
43
  const leafTypes = new Set([
42
44
  'LITERAL',
43
- 'EXTERNAL_STDIO',
44
- 'EXTERNAL_DATABASE',
45
- 'EXTERNAL_NETWORK',
46
- 'EXTERNAL_FILESYSTEM',
47
- 'EVENT_LISTENER',
45
+ 'net:stdio',
46
+ 'db:query',
47
+ 'net:request',
48
+ 'fs:operation',
49
+ 'event:listener',
48
50
  'CLASS', // NewExpression - конструкторы классов
49
51
  'FUNCTION', // Arrow functions и function expressions
50
52
  'METHOD_CALL', // Вызовы методов (промежуточные узлы)
@@ -54,66 +56,69 @@ export class DataFlowValidator extends Plugin {
54
56
  // Проверяем наличие ASSIGNED_FROM ребра
55
57
  const assignment = allEdges.find(e => e.type === 'ASSIGNED_FROM' && e.src === variable.id);
56
58
  if (!assignment) {
57
- issues.push({
58
- type: 'MISSING_ASSIGNMENT',
59
- severity: 'WARNING',
60
- message: `Variable "${variable.name}" (${variable.file}:${variable.line}) has no ASSIGNED_FROM edge`,
59
+ errors.push(new ValidationError(`Variable "${variable.name}" (${variable.file}:${variable.line}) has no ASSIGNED_FROM edge`, 'ERR_MISSING_ASSIGNMENT', {
60
+ filePath: variable.file,
61
+ lineNumber: variable.line,
62
+ phase: 'VALIDATION',
63
+ plugin: 'DataFlowValidator',
61
64
  variable: variable.name,
62
- file: variable.file,
63
- line: variable.line
64
- });
65
+ }, undefined, 'warning'));
65
66
  continue;
66
67
  }
67
68
  // Проверяем что источник существует
68
69
  const source = allNodes.find(n => n.id === assignment.dst);
69
70
  if (!source) {
70
- issues.push({
71
- type: 'BROKEN_REFERENCE',
72
- severity: 'ERROR',
73
- message: `Variable "${variable.name}" references non-existent node ${assignment.dst}`,
71
+ errors.push(new ValidationError(`Variable "${variable.name}" references non-existent node ${assignment.dst}`, 'ERR_BROKEN_REFERENCE', {
72
+ filePath: variable.file,
73
+ lineNumber: variable.line,
74
+ phase: 'VALIDATION',
75
+ plugin: 'DataFlowValidator',
74
76
  variable: variable.name,
75
- file: variable.file,
76
- line: variable.line
77
- });
77
+ targetNodeId: assignment.dst,
78
+ }, undefined, 'error'));
78
79
  continue;
79
80
  }
80
81
  // Проверяем путь до листового узла
81
82
  const path = this.findPathToLeaf(variable, allNodes, allEdges, leafTypes);
82
83
  if (!path.found) {
83
- issues.push({
84
- type: 'NO_LEAF_NODE',
85
- severity: 'WARNING',
86
- message: `Variable "${variable.name}" (${variable.file}:${variable.line}) does not trace to a leaf node. Chain: ${path.chain.join(' -> ')}`,
84
+ errors.push(new ValidationError(`Variable "${variable.name}" (${variable.file}:${variable.line}) does not trace to a leaf node. Chain: ${path.chain.join(' -> ')}`, 'ERR_NO_LEAF_NODE', {
85
+ filePath: variable.file,
86
+ lineNumber: variable.line,
87
+ phase: 'VALIDATION',
88
+ plugin: 'DataFlowValidator',
87
89
  variable: variable.name,
88
- file: variable.file,
89
- line: variable.line,
90
- chain: path.chain
91
- });
90
+ chain: path.chain,
91
+ }, undefined, 'warning'));
92
92
  }
93
93
  }
94
- // Группируем issues по типу
94
+ // Группируем errors по коду
95
+ const byCode = {};
96
+ for (const error of errors) {
97
+ if (!byCode[error.code]) {
98
+ byCode[error.code] = 0;
99
+ }
100
+ byCode[error.code]++;
101
+ }
95
102
  const summary = {
96
103
  total: variables.length,
97
- validated: variables.length - issues.length,
98
- issues: issues.length,
99
- byType: {}
104
+ validated: variables.length - errors.length,
105
+ issues: errors.length,
106
+ byType: byCode
100
107
  };
101
- for (const issue of issues) {
102
- if (!summary.byType[issue.type]) {
103
- summary.byType[issue.type] = 0;
108
+ logger.info('Validation complete', { ...summary });
109
+ // Выводим errors
110
+ if (errors.length > 0) {
111
+ logger.warn('Data flow issues found', { count: errors.length });
112
+ for (const error of errors) {
113
+ if (error.severity === 'error') {
114
+ logger.error(`[${error.code}] ${error.message}`);
115
+ }
116
+ else {
117
+ logger.warn(`[${error.code}] ${error.message}`);
118
+ }
104
119
  }
105
- summary.byType[issue.type]++;
106
120
  }
107
- console.log('[DataFlowValidator] Summary:', summary);
108
- // Выводим issues
109
- if (issues.length > 0) {
110
- console.log(`[DataFlowValidator] Found ${issues.length} issues:`);
111
- for (const issue of issues) {
112
- const level = issue.severity === 'ERROR' ? '❌' : '⚠️';
113
- console.log(` ${level} [${issue.type}] ${issue.message}`);
114
- }
115
- }
116
- return createSuccessResult({ nodes: 0, edges: 0 }, { summary, issues });
121
+ return createSuccessResult({ nodes: 0, edges: 0 }, { summary }, errors);
117
122
  }
118
123
  /**
119
124
  * Находит путь от переменной до листового узла
@@ -129,6 +134,14 @@ export class DataFlowValidator extends Plugin {
129
134
  if (leafTypes.has(startNode.type)) {
130
135
  return { found: true, chain };
131
136
  }
137
+ // REG-262: Check if variable is used by a method call (incoming USES edge)
138
+ // If something USES this variable, the variable is not dead
139
+ const usedByCall = allEdges.find(e => e.type === 'USES' && e.dst === startNode.id);
140
+ if (usedByCall) {
141
+ const callNode = allNodes.find(n => n.id === usedByCall.src);
142
+ const callName = callNode?.name ?? usedByCall.src;
143
+ return { found: true, chain: [...chain, `(used by ${callName})`] };
144
+ }
132
145
  // Ищем ASSIGNED_FROM ребро
133
146
  const assignment = allEdges.find(e => e.type === 'ASSIGNED_FROM' && e.src === startNode.id);
134
147
  if (!assignment) {
@@ -1 +1 @@
1
- {"version":3,"file":"EvalBanValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/EvalBanValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAoChF,qBAAa,gBAAiB,SAAQ,MAAM;IAC1C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAyG7D"}
1
+ {"version":3,"file":"EvalBanValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/EvalBanValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAoChF,qBAAa,gBAAiB,SAAQ,MAAM;IAC1C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA0G7D"}
@@ -31,13 +31,14 @@ export class EvalBanValidator extends Plugin {
31
31
  }
32
32
  async execute(context) {
33
33
  const { graph } = context;
34
- console.log('[EvalBanValidator] Checking for eval/Function usage...');
34
+ const logger = this.log(context);
35
+ logger.info('Starting eval/Function usage validation');
35
36
  const startTime = Date.now();
36
37
  const issues = [];
37
- // ОПТИМИЗАЦИЯ: вместо Datalog (медленный full scan), используем прямые graph queries
38
- // Datalog зависает на больших графах из-за отсутствия индексов
39
- // 1. Прямой вызов eval("code") - ищем все CALL ноды с name="eval"
40
- console.log('[EvalBanValidator] Searching for eval() calls...');
38
+ // OPTIMIZATION: use direct graph queries instead of Datalog (slow full scan)
39
+ // Datalog hangs on large graphs due to lack of indexes
40
+ // 1. Direct eval("code") call - find all CALL nodes with name="eval"
41
+ logger.debug('Searching for eval() calls');
41
42
  const evalStart = Date.now();
42
43
  let evalCount = 0;
43
44
  for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
@@ -53,9 +54,9 @@ export class EvalBanValidator extends Plugin {
53
54
  });
54
55
  }
55
56
  }
56
- console.log(`[EvalBanValidator] eval() search took ${Date.now() - evalStart}ms, found ${evalCount} violations`);
57
- // 2. Вызов Function("code") или new Function("code")
58
- console.log('[EvalBanValidator] Searching for Function() calls...');
57
+ logger.debug('eval() search complete', { timeMs: Date.now() - evalStart, count: evalCount });
58
+ // 2. Function("code") or new Function("code") call
59
+ logger.debug('Searching for Function() calls');
59
60
  const funcStart = Date.now();
60
61
  let funcCount = 0;
61
62
  for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
@@ -71,10 +72,10 @@ export class EvalBanValidator extends Plugin {
71
72
  });
72
73
  }
73
74
  }
74
- console.log(`[EvalBanValidator] Function() search took ${Date.now() - funcStart}ms, found ${funcCount} violations`);
75
+ logger.debug('Function() search complete', { timeMs: Date.now() - funcStart, count: funcCount });
75
76
  // 3. Method call: window.eval, globalThis.eval, this.eval
76
77
  // Note: METHOD_CALL was merged into CALL - method calls have 'method' attribute
77
- console.log('[EvalBanValidator] Searching for method eval() calls...');
78
+ logger.debug('Searching for method eval() calls');
78
79
  const methodStart = Date.now();
79
80
  let methodCount = 0;
80
81
  for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
@@ -94,9 +95,9 @@ export class EvalBanValidator extends Plugin {
94
95
  });
95
96
  }
96
97
  }
97
- console.log(`[EvalBanValidator] method eval() search took ${Date.now() - methodStart}ms, found ${methodCount} violations`);
98
+ logger.debug('Method eval() search complete', { timeMs: Date.now() - methodStart, count: methodCount });
98
99
  // 4. Aliased eval - SKIP for now (complex Datalog query causes OOM)
99
- console.log('[EvalBanValidator] Skipping aliased eval detection (requires optimized implementation)');
100
+ logger.debug('Skipping aliased eval detection', { reason: 'requires optimized implementation' });
100
101
  const totalTime = ((Date.now() - startTime) / 1000).toFixed(1);
101
102
  const summary = {
102
103
  evalCalls: evalCount,
@@ -106,15 +107,15 @@ export class EvalBanValidator extends Plugin {
106
107
  totalViolations: issues.length,
107
108
  timeSeconds: totalTime
108
109
  };
109
- console.log('[EvalBanValidator] Summary:', summary);
110
+ logger.info('Validation summary', { ...summary });
110
111
  if (issues.length > 0) {
111
- console.log('[EvalBanValidator] ❌ Security violations found:');
112
+ logger.info('Security violations found', { count: issues.length });
112
113
  for (const issue of issues) {
113
- console.log(` 🚫 ${issue.message}`);
114
+ logger.warn('Violation', { message: issue.message, type: issue.type, file: issue.file, line: issue.line });
114
115
  }
115
116
  }
116
117
  else {
117
- console.log('[EvalBanValidator] No eval/Function usage detected');
118
+ logger.info('Validation passed: no eval/Function usage detected');
118
119
  }
119
120
  return createSuccessResult({ nodes: 0, edges: 0 }, // created - validator doesn't create nodes/edges
120
121
  { summary, issues } // metadata
@@ -1 +1 @@
1
- {"version":3,"file":"GraphConnectivityValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/GraphConnectivityValidator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAyChF,qBAAa,0BAA2B,SAAQ,MAAM;IACpD,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA4I7D"}
1
+ {"version":3,"file":"GraphConnectivityValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/GraphConnectivityValidator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA0ChF,qBAAa,0BAA2B,SAAQ,MAAM;IACpD,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA6K7D"}
@@ -3,6 +3,7 @@
3
3
  * Находит "островки" - узлы которые не имеют путей до SERVICE/MODULE
4
4
  */
5
5
  import { Plugin, createSuccessResult } from '../Plugin.js';
6
+ import { ValidationError } from '../../errors/GrafemaError.js';
6
7
  export class GraphConnectivityValidator extends Plugin {
7
8
  get metadata() {
8
9
  return {
@@ -17,27 +18,28 @@ export class GraphConnectivityValidator extends Plugin {
17
18
  }
18
19
  async execute(context) {
19
20
  const { graph, manifest } = context;
21
+ const logger = this.log(context);
20
22
  const manifestWithValidation = manifest;
21
- console.log('[GraphConnectivityValidator] Starting connectivity validation...');
23
+ logger.info('Starting connectivity validation');
22
24
  // Получаем все узлы
23
25
  const allNodes = await graph.getAllNodes();
24
- console.log(`[GraphConnectivityValidator] Total nodes: ${allNodes.length}`);
26
+ logger.debug('Nodes collected', { totalNodes: allNodes.length });
25
27
  // Находим корневые узлы (SERVICE, MODULE)
26
28
  const rootTypes = ['SERVICE', 'MODULE', 'PROJECT'];
27
29
  const rootNodes = allNodes.filter(n => rootTypes.includes(n.type));
28
- console.log(`[GraphConnectivityValidator] Root nodes: ${rootNodes.length}`);
30
+ logger.debug('Root nodes found', { rootCount: rootNodes.length });
29
31
  if (rootNodes.length === 0) {
30
- console.warn('[GraphConnectivityValidator] No root nodes found!');
32
+ logger.warn('No root nodes found');
31
33
  return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true, reason: 'No root nodes' });
32
34
  }
33
35
  // Check if graph supports getAllEdges
34
36
  if (!graph.getAllEdges) {
35
- console.log('[GraphConnectivityValidator] Graph does not support getAllEdges, skipping validation');
37
+ logger.debug('Graph does not support getAllEdges, skipping validation');
36
38
  return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true, reason: 'No getAllEdges support' });
37
39
  }
38
40
  // Собираем все ребра
39
41
  const allEdges = await graph.getAllEdges();
40
- console.log(`[GraphConnectivityValidator] Total edges: ${allEdges.length}`);
42
+ logger.debug('Edges collected', { totalEdges: allEdges.length });
41
43
  // Строим карты смежности (обе направления)
42
44
  const adjacencyOut = new Map(); // nodeId -> [targetIds]
43
45
  const adjacencyIn = new Map(); // nodeId -> [sourceIds]
@@ -72,14 +74,12 @@ export class GraphConnectivityValidator extends Plugin {
72
74
  }
73
75
  // Находим недостижимые узлы
74
76
  const unreachable = allNodes.filter(n => !reachable.has(n.id));
77
+ const errors = [];
75
78
  if (unreachable.length > 0) {
76
- // ЯРКОЕ ПРЕДУПРЕЖДЕНИЕ В КОНСОЛИ
77
- console.error('\n' + '='.repeat(80));
78
- console.error('⚠️ GRAPH VALIDATION ERROR: DISCONNECTED NODES FOUND');
79
- console.error('='.repeat(80));
80
- console.error(`Found ${unreachable.length} unreachable nodes (${((unreachable.length / allNodes.length) * 100).toFixed(1)}% of total)`);
81
- console.error(`These nodes are not connected to the main graph (SERVICE/MODULE/PROJECT level)`);
82
- console.error('');
79
+ const percentage = ((unreachable.length / allNodes.length) * 100).toFixed(1);
80
+ logger.error('GRAPH VALIDATION ERROR: DISCONNECTED NODES FOUND');
81
+ logger.error(`Found ${unreachable.length} unreachable nodes (${percentage}% of total)`);
82
+ logger.error('These nodes are not connected to the main graph (SERVICE/MODULE/PROJECT level)');
83
83
  // Группируем по типам для читаемости
84
84
  const byType = {};
85
85
  for (const node of unreachable) {
@@ -88,25 +88,23 @@ export class GraphConnectivityValidator extends Plugin {
88
88
  byType[node.type].push(node);
89
89
  }
90
90
  for (const [type, nodes] of Object.entries(byType)) {
91
- console.error(` ${type}: ${nodes.length} nodes`);
91
+ logger.error(`${type}: ${nodes.length} nodes`);
92
92
  // Показываем первые 5 для каждого типа
93
93
  for (const node of nodes.slice(0, 5)) {
94
- console.error(` - ${node.name || node.id}`);
94
+ logger.debug(` - ${node.name || node.id}`);
95
95
  // Показываем связи этого узла
96
96
  const out = adjacencyOut.get(node.id) || [];
97
97
  const incoming = adjacencyIn.get(node.id) || [];
98
98
  if (out.length > 0 || incoming.length > 0) {
99
- console.error(` Edges: ${incoming.length} incoming, ${out.length} outgoing`);
99
+ logger.debug(` Edges: ${incoming.length} incoming, ${out.length} outgoing`);
100
100
  }
101
101
  }
102
102
  if (nodes.length > 5) {
103
- console.error(` ... and ${nodes.length - 5} more`);
103
+ logger.debug(` ... and ${nodes.length - 5} more`);
104
104
  }
105
105
  }
106
- console.error('');
107
- console.error('💡 ACTION REQUIRED: Fix analysis plugins to ensure all nodes are connected');
108
- console.error(' Anonymous functions, callbacks, and method calls should be linked to parent nodes');
109
- console.error('='.repeat(80) + '\n');
106
+ logger.error('ACTION REQUIRED: Fix analysis plugins to ensure all nodes are connected');
107
+ logger.error('Anonymous functions, callbacks, and method calls should be linked to parent nodes');
110
108
  // Сохраняем информацию в manifest для дальнейшего использования
111
109
  if (!manifestWithValidation.validation)
112
110
  manifestWithValidation.validation = {};
@@ -120,16 +118,38 @@ export class GraphConnectivityValidator extends Plugin {
120
118
  manifestWithValidation.validation.reachableNodes = reachable.size;
121
119
  manifestWithValidation.validation.unreachableCount = unreachable.length;
122
120
  manifestWithValidation.validation.unreachableByType = Object.fromEntries(Object.entries(byType).map(([type, nodes]) => [type, nodes.length]));
121
+ // Create summary error for disconnected nodes
122
+ errors.push(new ValidationError(`Found ${unreachable.length} unreachable nodes (${percentage}% of total)`, 'ERR_DISCONNECTED_NODES', {
123
+ phase: 'VALIDATION',
124
+ plugin: 'GraphConnectivityValidator',
125
+ totalNodes: allNodes.length,
126
+ reachableNodes: reachable.size,
127
+ unreachableCount: unreachable.length,
128
+ unreachableByType: Object.fromEntries(Object.entries(byType).map(([type, nodes]) => [type, nodes.length])),
129
+ }, 'Fix analysis plugins to ensure all nodes are connected'));
130
+ // Create individual errors for each disconnected node (limit to 50)
131
+ const maxIndividualErrors = 50;
132
+ for (const node of unreachable.slice(0, maxIndividualErrors)) {
133
+ errors.push(new ValidationError(`Node "${node.name || node.id}" (type: ${node.type}) is not connected to the main graph`, 'ERR_DISCONNECTED_NODE', {
134
+ filePath: node.file,
135
+ lineNumber: node.line,
136
+ phase: 'VALIDATION',
137
+ plugin: 'GraphConnectivityValidator',
138
+ nodeId: node.id,
139
+ nodeType: node.type,
140
+ nodeName: node.name,
141
+ }));
142
+ }
123
143
  }
124
144
  else {
125
- console.log('[GraphConnectivityValidator] ✅ All nodes are reachable from root nodes');
145
+ logger.info('All nodes are reachable from root nodes');
126
146
  if (!manifestWithValidation.validation)
127
147
  manifestWithValidation.validation = {};
128
148
  manifestWithValidation.validation.hasErrors = false;
129
149
  manifestWithValidation.validation.totalNodes = allNodes.length;
130
150
  manifestWithValidation.validation.reachableNodes = reachable.size;
131
151
  }
132
- console.log(`[GraphConnectivityValidator] Validation complete: ${reachable.size}/${allNodes.length} nodes reachable`);
133
- return createSuccessResult({ nodes: 0, edges: 0 }, { totalNodes: allNodes.length, reachableNodes: reachable.size });
152
+ logger.info('Validation complete', { reachable: reachable.size, total: allNodes.length });
153
+ return createSuccessResult({ nodes: 0, edges: 0 }, { totalNodes: allNodes.length, reachableNodes: reachable.size }, errors);
134
154
  }
135
155
  }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * NodeCreationValidator - validates that nodes are created through NodeFactory
3
+ *
4
+ * GUARANTEE: All nodes passed to graph.addNode() or graph.addNodes() must be
5
+ * created through NodeFactory methods, not constructed inline.
6
+ *
7
+ * This validator uses the data flow tracking (HAS_PROPERTY, HAS_ELEMENT, FLOWS_INTO edges)
8
+ * to trace object literals back to their source and verify they come from
9
+ * NodeFactory calls.
10
+ *
11
+ * FLOWS_INTO traversal: When an array variable is passed to addNodes(), we check:
12
+ * 1. Static array contents via HAS_ELEMENT edges
13
+ * 2. Dynamic array contents via FLOWS_INTO edges (from push, unshift, splice, indexed assignment)
14
+ *
15
+ * DATALOG RULES (conceptual):
16
+ *
17
+ * % Find all calls to addNodes (batch)
18
+ * add_nodes_call(Call) :-
19
+ * node(Call, "CALL"),
20
+ * attr(Call, "name", "addNodes").
21
+ *
22
+ * % Find array argument passed to addNodes (arg 0)
23
+ * add_nodes_array(Call, Arr) :-
24
+ * add_nodes_call(Call),
25
+ * edge(Call, Arr, "PASSES_ARGUMENT"),
26
+ * node(Arr, "ARRAY_LITERAL").
27
+ *
28
+ * % Find objects inside the array (static elements)
29
+ * add_nodes_object(Call, Obj) :-
30
+ * add_nodes_array(Call, Arr),
31
+ * edge(Arr, Obj, "HAS_ELEMENT"),
32
+ * node(Obj, "OBJECT_LITERAL").
33
+ *
34
+ * % Find objects pushed/unshifted/spliced into array (dynamic elements)
35
+ * add_nodes_object(Call, Obj) :-
36
+ * add_nodes_call(Call),
37
+ * edge(Call, ArrVar, "PASSES_ARGUMENT"),
38
+ * node(ArrVar, "VARIABLE"),
39
+ * incoming(ArrVar, Obj, "FLOWS_INTO"), % value --FLOWS_INTO--> array
40
+ * node(Obj, "OBJECT_LITERAL").
41
+ *
42
+ * % Object created via NodeFactory
43
+ * from_node_factory(Obj) :-
44
+ * incoming(Obj, Creator, "ASSIGNED_FROM"),
45
+ * node(Creator, "CALL"),
46
+ * attr(Creator, "object", "NodeFactory").
47
+ *
48
+ * % Violation: object in addNodes not from NodeFactory
49
+ * violation_batch(Call, Obj) :-
50
+ * add_nodes_object(Call, Obj),
51
+ * \+ from_node_factory(Obj).
52
+ */
53
+ import { Plugin } from '../Plugin.js';
54
+ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
55
+ export declare class NodeCreationValidator extends Plugin {
56
+ get metadata(): PluginMetadata;
57
+ execute(context: PluginContext): Promise<PluginResult>;
58
+ /**
59
+ * Validate a single addNode(node) call
60
+ */
61
+ private validateAddNodeCall;
62
+ /**
63
+ * Validate addNodes([...]) call
64
+ * Also checks for objects that flow into arrays via FLOWS_INTO edges
65
+ */
66
+ private validateAddNodesCall;
67
+ /**
68
+ * Get all nodes that flow INTO an array variable via FLOWS_INTO edges
69
+ * These are objects/values that were pushed, unshifted, spliced, or assigned to the array
70
+ *
71
+ * Edge direction: value --FLOWS_INTO--> array
72
+ * So we look for INCOMING edges where dst === arrayNodeId
73
+ */
74
+ private getArrayContents;
75
+ /**
76
+ * Check if a node is created from NodeFactory
77
+ * Traces ASSIGNED_FROM edges to find the source call
78
+ */
79
+ private isFromNodeFactory;
80
+ /**
81
+ * Trace a variable back to its source node (through ASSIGNED_FROM edges)
82
+ */
83
+ private traceVariableSource;
84
+ }
85
+ //# sourceMappingURL=NodeCreationValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeCreationValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/NodeCreationValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAiDhF,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgH5D;;OAEG;YACW,mBAAmB;IA0DjC;;;OAGG;YACW,oBAAoB;IAqJlC;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAmC5B"}