@grafema/core 0.2.4-beta → 0.2.5-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.
- package/dist/Orchestrator.d.ts +37 -0
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +322 -35
- package/dist/Orchestrator.js.map +1 -0
- package/dist/api/GraphAPI.d.ts +1 -1
- package/dist/api/GraphAPI.d.ts.map +1 -1
- package/dist/api/GraphAPI.js +3 -1
- package/dist/api/GraphAPI.js.map +1 -0
- package/dist/api/GuaranteeAPI.d.ts.map +1 -1
- package/dist/api/GuaranteeAPI.js +4 -2
- package/dist/api/GuaranteeAPI.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +66 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -1
- package/dist/config/ConfigLoader.js +77 -3
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -1
- package/dist/config/index.js.map +1 -0
- package/dist/core/ASTWorker.d.ts.map +1 -1
- package/dist/core/ASTWorker.js +6 -4
- package/dist/core/ASTWorker.js.map +1 -0
- package/dist/core/ASTWorkerPool.js +2 -1
- package/dist/core/ASTWorkerPool.js.map +1 -0
- package/dist/core/AnalysisQueue.js +1 -0
- package/dist/core/AnalysisQueue.js.map +1 -0
- package/dist/core/CoverageAnalyzer.d.ts.map +1 -1
- package/dist/core/CoverageAnalyzer.js +1 -0
- package/dist/core/CoverageAnalyzer.js.map +1 -0
- package/dist/core/FileExplainer.js +1 -0
- package/dist/core/FileExplainer.js.map +1 -0
- package/dist/core/FileNodeManager.d.ts.map +1 -1
- package/dist/core/FileNodeManager.js +4 -2
- package/dist/core/FileNodeManager.js.map +1 -0
- package/dist/core/GraphBackend.js +1 -0
- package/dist/core/GraphBackend.js.map +1 -0
- package/dist/core/GraphFreshnessChecker.js +1 -0
- package/dist/core/GraphFreshnessChecker.js.map +1 -0
- package/dist/core/GuaranteeManager.js +2 -1
- package/dist/core/GuaranteeManager.js.map +1 -0
- package/dist/core/HashUtils.js +1 -0
- package/dist/core/HashUtils.js.map +1 -0
- package/dist/core/IncrementalReanalyzer.d.ts.map +1 -1
- package/dist/core/IncrementalReanalyzer.js +7 -3
- package/dist/core/IncrementalReanalyzer.js.map +1 -0
- package/dist/core/ManifestStore.js +1 -0
- package/dist/core/ManifestStore.js.map +1 -0
- package/dist/core/NodeFactory.d.ts +54 -34
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +20 -1
- package/dist/core/NodeFactory.js.map +1 -0
- package/dist/core/NodeId.js +1 -0
- package/dist/core/NodeId.js.map +1 -0
- package/dist/core/PriorityQueue.js +1 -0
- package/dist/core/PriorityQueue.js.map +1 -0
- package/dist/core/Profiler.js +1 -0
- package/dist/core/Profiler.js.map +1 -0
- package/dist/core/ScopeTracker.js +1 -0
- package/dist/core/ScopeTracker.js.map +1 -0
- package/dist/core/SemanticId.js +1 -0
- package/dist/core/SemanticId.js.map +1 -0
- package/dist/core/Task.js +1 -0
- package/dist/core/Task.js.map +1 -0
- package/dist/core/TaskTypes.js +1 -0
- package/dist/core/TaskTypes.js.map +1 -0
- package/dist/core/VersionManager.js +1 -0
- package/dist/core/VersionManager.js.map +1 -0
- package/dist/core/WorkerPool.d.ts.map +1 -1
- package/dist/core/WorkerPool.js +3 -1
- package/dist/core/WorkerPool.js.map +1 -0
- package/dist/core/nodes/ArgumentExpressionNode.js +1 -0
- package/dist/core/nodes/ArgumentExpressionNode.js.map +1 -0
- package/dist/core/nodes/ArrayLiteralNode.js +1 -0
- package/dist/core/nodes/ArrayLiteralNode.js.map +1 -0
- package/dist/core/nodes/BranchNode.js +1 -0
- package/dist/core/nodes/BranchNode.js.map +1 -0
- package/dist/core/nodes/CallSiteNode.js +1 -0
- package/dist/core/nodes/CallSiteNode.js.map +1 -0
- package/dist/core/nodes/CaseNode.js +1 -0
- package/dist/core/nodes/CaseNode.js.map +1 -0
- package/dist/core/nodes/ClassNode.js +1 -0
- package/dist/core/nodes/ClassNode.js.map +1 -0
- package/dist/core/nodes/ConstantNode.js +1 -0
- package/dist/core/nodes/ConstantNode.js.map +1 -0
- package/dist/core/nodes/ConstructorCallNode.js +1 -0
- package/dist/core/nodes/ConstructorCallNode.js.map +1 -0
- package/dist/core/nodes/DatabaseQueryNode.js +1 -0
- package/dist/core/nodes/DatabaseQueryNode.js.map +1 -0
- package/dist/core/nodes/DecoratorNode.js +1 -0
- package/dist/core/nodes/DecoratorNode.js.map +1 -0
- package/dist/core/nodes/EntrypointNode.js +1 -0
- package/dist/core/nodes/EntrypointNode.js.map +1 -0
- package/dist/core/nodes/EnumNode.js +1 -0
- package/dist/core/nodes/EnumNode.js.map +1 -0
- package/dist/core/nodes/EventListenerNode.js +1 -0
- package/dist/core/nodes/EventListenerNode.js.map +1 -0
- package/dist/core/nodes/ExportNode.js +1 -0
- package/dist/core/nodes/ExportNode.js.map +1 -0
- package/dist/core/nodes/ExpressionNode.js +1 -0
- package/dist/core/nodes/ExpressionNode.js.map +1 -0
- package/dist/core/nodes/ExternalModuleNode.js +1 -0
- package/dist/core/nodes/ExternalModuleNode.js.map +1 -0
- package/dist/core/nodes/ExternalStdioNode.js +1 -0
- package/dist/core/nodes/ExternalStdioNode.js.map +1 -0
- package/dist/core/nodes/FunctionNode.js +1 -0
- package/dist/core/nodes/FunctionNode.js.map +1 -0
- package/dist/core/nodes/GuaranteeNode.js +1 -0
- package/dist/core/nodes/GuaranteeNode.js.map +1 -0
- package/dist/core/nodes/HttpRequestNode.js +1 -0
- package/dist/core/nodes/HttpRequestNode.js.map +1 -0
- package/dist/core/nodes/ImportNode.js +1 -0
- package/dist/core/nodes/ImportNode.js.map +1 -0
- package/dist/core/nodes/InterfaceNode.js +1 -0
- package/dist/core/nodes/InterfaceNode.js.map +1 -0
- package/dist/core/nodes/IssueNode.js +1 -0
- package/dist/core/nodes/IssueNode.js.map +1 -0
- package/dist/core/nodes/LiteralNode.js +1 -0
- package/dist/core/nodes/LiteralNode.js.map +1 -0
- package/dist/core/nodes/MethodCallNode.js +1 -0
- package/dist/core/nodes/MethodCallNode.js.map +1 -0
- package/dist/core/nodes/MethodNode.js +1 -0
- package/dist/core/nodes/MethodNode.js.map +1 -0
- package/dist/core/nodes/ModuleNode.js +1 -0
- package/dist/core/nodes/ModuleNode.js.map +1 -0
- package/dist/core/nodes/NetworkRequestNode.js +1 -0
- package/dist/core/nodes/NetworkRequestNode.js.map +1 -0
- package/dist/core/nodes/NodeKind.d.ts +5 -0
- package/dist/core/nodes/NodeKind.d.ts.map +1 -1
- package/dist/core/nodes/NodeKind.js +11 -0
- package/dist/core/nodes/NodeKind.js.map +1 -0
- package/dist/core/nodes/ObjectLiteralNode.js +1 -0
- package/dist/core/nodes/ObjectLiteralNode.js.map +1 -0
- package/dist/core/nodes/ParameterNode.js +1 -0
- package/dist/core/nodes/ParameterNode.js.map +1 -0
- package/dist/core/nodes/PluginNode.d.ts +69 -0
- package/dist/core/nodes/PluginNode.d.ts.map +1 -0
- package/dist/core/nodes/PluginNode.js +106 -0
- package/dist/core/nodes/PluginNode.js.map +1 -0
- package/dist/core/nodes/ScopeNode.js +1 -0
- package/dist/core/nodes/ScopeNode.js.map +1 -0
- package/dist/core/nodes/ServiceNode.js +1 -0
- package/dist/core/nodes/ServiceNode.js.map +1 -0
- package/dist/core/nodes/TypeNode.js +2 -1
- package/dist/core/nodes/TypeNode.js.map +1 -0
- package/dist/core/nodes/VariableDeclarationNode.js +1 -0
- package/dist/core/nodes/VariableDeclarationNode.js.map +1 -0
- package/dist/core/nodes/index.d.ts +2 -1
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +4 -1
- package/dist/core/nodes/index.js.map +1 -0
- package/dist/core/toposort.d.ts +38 -0
- package/dist/core/toposort.d.ts.map +1 -0
- package/dist/core/toposort.js +129 -0
- package/dist/core/toposort.js.map +1 -0
- package/dist/data/builtins/BuiltinRegistry.js +1 -0
- package/dist/data/builtins/BuiltinRegistry.js.map +1 -0
- package/dist/data/builtins/definitions.js +1 -0
- package/dist/data/builtins/definitions.js.map +1 -0
- package/dist/data/builtins/index.js +1 -0
- package/dist/data/builtins/index.js.map +1 -0
- package/dist/data/builtins/jsGlobals.js +1 -0
- package/dist/data/builtins/jsGlobals.js.map +1 -0
- package/dist/data/builtins/types.js +1 -0
- package/dist/data/builtins/types.js.map +1 -0
- package/dist/data/globals/definitions.js +1 -0
- package/dist/data/globals/definitions.js.map +1 -0
- package/dist/data/globals/index.js +1 -0
- package/dist/data/globals/index.js.map +1 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts +5 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -1
- package/dist/diagnostics/DiagnosticCollector.js +4 -0
- package/dist/diagnostics/DiagnosticCollector.js.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts +23 -1
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -1
- package/dist/diagnostics/DiagnosticReporter.js +68 -15
- package/dist/diagnostics/DiagnosticReporter.js.map +1 -0
- package/dist/diagnostics/DiagnosticWriter.js +1 -0
- package/dist/diagnostics/DiagnosticWriter.js.map +1 -0
- package/dist/diagnostics/categories.d.ts +57 -0
- package/dist/diagnostics/categories.d.ts.map +1 -0
- package/dist/diagnostics/categories.js +71 -0
- package/dist/diagnostics/categories.js.map +1 -0
- package/dist/diagnostics/index.d.ts +3 -0
- package/dist/diagnostics/index.d.ts.map +1 -1
- package/dist/diagnostics/index.js +4 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/errors/GrafemaError.d.ts +39 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -1
- package/dist/errors/GrafemaError.js +28 -0
- package/dist/errors/GrafemaError.js.map +1 -0
- package/dist/index.d.ts +21 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -7
- package/dist/index.js.map +1 -0
- package/dist/instructions/index.d.ts +8 -0
- package/dist/instructions/index.d.ts.map +1 -0
- package/dist/instructions/index.js +20 -0
- package/dist/instructions/index.js.map +1 -0
- package/dist/instructions/onboarding.md +121 -0
- package/dist/logging/Logger.d.ts +53 -3
- package/dist/logging/Logger.d.ts.map +1 -1
- package/dist/logging/Logger.js +144 -4
- package/dist/logging/Logger.js.map +1 -0
- package/dist/plugins/Plugin.js +1 -0
- package/dist/plugins/Plugin.js.map +1 -0
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.js +20 -14
- package/dist/plugins/analysis/DatabaseAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +23 -16
- package/dist/plugins/analysis/ExpressAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +2 -1
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js +53 -76
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +47 -37
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +8 -14
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +144 -97
- package/dist/plugins/analysis/FetchAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +3 -5
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js.map +1 -0
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts +59 -2
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +926 -422
- package/dist/plugins/analysis/JSASTAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ReactAnalyzer.js +24 -19
- package/dist/plugins/analysis/ReactAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/RustAnalyzer.js +39 -26
- package/dist/plugins/analysis/RustAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +14 -7
- package/dist/plugins/analysis/SQLiteAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js +33 -28
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +24 -14
- package/dist/plugins/analysis/SocketIOAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SystemDbAnalyzer.js +19 -11
- package/dist/plugins/analysis/SystemDbAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ast/ConditionParser.js +1 -0
- package/dist/plugins/analysis/ast/ConditionParser.js.map +1 -0
- package/dist/plugins/analysis/ast/ExpressionEvaluator.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/ExpressionEvaluator.js +1 -0
- package/dist/plugins/analysis/ast/ExpressionEvaluator.js.map +1 -0
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts +58 -6
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +440 -56
- package/dist/plugins/analysis/ast/GraphBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/IdGenerator.js +1 -0
- package/dist/plugins/analysis/ast/IdGenerator.js.map +1 -0
- package/dist/plugins/analysis/ast/OxcAdapter.js +1 -0
- package/dist/plugins/analysis/ast/OxcAdapter.js.map +1 -0
- package/dist/plugins/analysis/ast/types.d.ts +152 -1
- package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/types.js +1 -0
- package/dist/plugins/analysis/ast/types.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.d.ts +27 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.js +45 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js +1 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/index.js +1 -0
- package/dist/plugins/analysis/ast/utils/index.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/location.js +1 -0
- package/dist/plugins/analysis/ast/utils/location.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +3 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +9 -2
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +145 -14
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +198 -0
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +4 -3
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +5 -2
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts +83 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js +258 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/index.d.ts +1 -0
- package/dist/plugins/analysis/ast/visitors/index.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/index.js +2 -0
- package/dist/plugins/analysis/ast/visitors/index.js.map +1 -0
- package/dist/plugins/discovery/DiscoveryPlugin.d.ts +42 -10
- package/dist/plugins/discovery/DiscoveryPlugin.d.ts.map +1 -1
- package/dist/plugins/discovery/DiscoveryPlugin.js +17 -1
- package/dist/plugins/discovery/DiscoveryPlugin.js.map +1 -0
- package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js.map +1 -0
- package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/SimpleProjectDiscovery.js +3 -2
- package/dist/plugins/discovery/SimpleProjectDiscovery.js.map +1 -0
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/WorkspaceDiscovery.js +3 -2
- package/dist/plugins/discovery/WorkspaceDiscovery.js.map +1 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.js +1 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.js.map +1 -0
- package/dist/plugins/discovery/workspaces/detector.js +1 -0
- package/dist/plugins/discovery/workspaces/detector.js.map +1 -0
- package/dist/plugins/discovery/workspaces/globResolver.js +1 -0
- package/dist/plugins/discovery/workspaces/globResolver.js.map +1 -0
- package/dist/plugins/discovery/workspaces/index.js +1 -0
- package/dist/plugins/discovery/workspaces/index.js.map +1 -0
- package/dist/plugins/discovery/workspaces/parsers.js +1 -0
- package/dist/plugins/discovery/workspaces/parsers.js.map +1 -0
- package/dist/plugins/enrichment/AliasTracker.js +3 -2
- package/dist/plugins/enrichment/AliasTracker.js.map +1 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.js +1 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.js.map +1 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js +1 -1
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js.map +1 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.d.ts +21 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.d.ts.map +1 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.js +137 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.js.map +1 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/ExternalCallResolver.js +1 -1
- package/dist/plugins/enrichment/ExternalCallResolver.js.map +1 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts +5 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/FunctionCallResolver.js +11 -9
- package/dist/plugins/enrichment/FunctionCallResolver.js.map +1 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +2 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +51 -13
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js.map +1 -0
- package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.js +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.js.map +1 -0
- package/dist/plugins/enrichment/InstanceOfResolver.js +3 -2
- package/dist/plugins/enrichment/InstanceOfResolver.js.map +1 -0
- package/dist/plugins/enrichment/MethodCallResolver.d.ts +39 -1
- package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MethodCallResolver.js +422 -11
- package/dist/plugins/enrichment/MethodCallResolver.js.map +1 -0
- package/dist/plugins/enrichment/MountPointResolver.d.ts +1 -1
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +7 -23
- package/dist/plugins/enrichment/MountPointResolver.js.map +1 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +2 -2
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js.map +1 -0
- package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
- package/dist/plugins/enrichment/PrefixEvaluator.js +5 -4
- package/dist/plugins/enrichment/PrefixEvaluator.js.map +1 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.d.ts +30 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.js +190 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.js.map +1 -0
- package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js.map +1 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +4 -3
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js.map +1 -0
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts +3 -1
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/IncrementalModuleIndexer.js +22 -29
- package/dist/plugins/indexing/IncrementalModuleIndexer.js.map +1 -0
- package/dist/plugins/indexing/JSModuleIndexer.d.ts +3 -1
- package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +22 -31
- package/dist/plugins/indexing/JSModuleIndexer.js.map +1 -0
- package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +11 -5
- package/dist/plugins/indexing/RustModuleIndexer.js.map +1 -0
- package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -1
- package/dist/plugins/validation/BrokenImportValidator.js +3 -3
- package/dist/plugins/validation/BrokenImportValidator.js.map +1 -0
- package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
- package/dist/plugins/validation/CallResolverValidator.js +3 -3
- package/dist/plugins/validation/CallResolverValidator.js.map +1 -0
- package/dist/plugins/validation/DataFlowValidator.js +2 -1
- package/dist/plugins/validation/DataFlowValidator.js.map +1 -0
- package/dist/plugins/validation/EvalBanValidator.js +2 -1
- package/dist/plugins/validation/EvalBanValidator.js.map +1 -0
- package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js +2 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js.map +1 -0
- package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
- package/dist/plugins/validation/SQLInjectionValidator.js +4 -2
- package/dist/plugins/validation/SQLInjectionValidator.js.map +1 -0
- package/dist/plugins/validation/ShadowingDetector.js +2 -1
- package/dist/plugins/validation/ShadowingDetector.js.map +1 -0
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +3 -3
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.js.map +1 -0
- package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
- package/dist/plugins/vcs/GitPlugin.js +13 -6
- package/dist/plugins/vcs/GitPlugin.js.map +1 -0
- package/dist/plugins/vcs/VCSPlugin.js +1 -0
- package/dist/plugins/vcs/VCSPlugin.js.map +1 -0
- package/dist/plugins/vcs/index.js +1 -0
- package/dist/plugins/vcs/index.js.map +1 -0
- package/dist/queries/findCallsInFunction.d.ts +1 -1
- package/dist/queries/findCallsInFunction.d.ts.map +1 -1
- package/dist/queries/findCallsInFunction.js +3 -2
- package/dist/queries/findCallsInFunction.js.map +1 -0
- package/dist/queries/findContainingFunction.d.ts +1 -1
- package/dist/queries/findContainingFunction.d.ts.map +1 -1
- package/dist/queries/findContainingFunction.js +1 -0
- package/dist/queries/findContainingFunction.js.map +1 -0
- package/dist/queries/index.js +1 -0
- package/dist/queries/index.js.map +1 -0
- package/dist/queries/traceValues.d.ts.map +1 -1
- package/dist/queries/traceValues.js +1 -0
- package/dist/queries/traceValues.js.map +1 -0
- package/dist/queries/types.js +1 -0
- package/dist/queries/types.js.map +1 -0
- package/dist/schema/GraphSchemaExtractor.js +1 -0
- package/dist/schema/GraphSchemaExtractor.js.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js.map +1 -0
- package/dist/schema/index.js +1 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +25 -1
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +100 -22
- package/dist/storage/backends/RFDBServerBackend.js.map +1 -0
- package/dist/storage/backends/typeValidation.d.ts.map +1 -1
- package/dist/storage/backends/typeValidation.js +3 -0
- package/dist/storage/backends/typeValidation.js.map +1 -0
- package/dist/utils/findRfdbBinary.js +1 -0
- package/dist/utils/findRfdbBinary.js.map +1 -0
- package/dist/utils/moduleResolution.d.ts +134 -0
- package/dist/utils/moduleResolution.d.ts.map +1 -0
- package/dist/utils/moduleResolution.js +164 -0
- package/dist/utils/moduleResolution.js.map +1 -0
- package/dist/validation/PathValidator.d.ts.map +1 -1
- package/dist/validation/PathValidator.js +1 -0
- package/dist/validation/PathValidator.js.map +1 -0
- package/package.json +4 -3
- package/src/Orchestrator.ts +371 -41
- package/src/api/GraphAPI.ts +4 -2
- package/src/api/GuaranteeAPI.ts +3 -2
- package/src/config/ConfigLoader.ts +121 -3
- package/src/config/index.ts +7 -1
- package/src/core/ASTWorker.ts +8 -20
- package/src/core/ASTWorkerPool.ts +1 -1
- package/src/core/CoverageAnalyzer.ts +2 -2
- package/src/core/FileNodeManager.ts +3 -2
- package/src/core/GuaranteeManager.ts +1 -1
- package/src/core/IncrementalReanalyzer.ts +6 -3
- package/src/core/NodeFactory.ts +34 -1
- package/src/core/WorkerPool.ts +2 -1
- package/src/core/nodes/NodeKind.ts +11 -0
- package/src/core/nodes/PluginNode.ts +144 -0
- package/src/core/nodes/TypeNode.ts +1 -1
- package/src/core/nodes/index.ts +4 -0
- package/src/core/toposort.ts +160 -0
- package/src/diagnostics/DiagnosticCollector.ts +8 -1
- package/src/diagnostics/DiagnosticReporter.ts +87 -16
- package/src/diagnostics/categories.ts +104 -0
- package/src/diagnostics/index.ts +14 -0
- package/src/errors/GrafemaError.ts +58 -0
- package/src/index.ts +53 -9
- package/src/instructions/index.ts +21 -0
- package/src/instructions/onboarding.md +121 -0
- package/src/logging/Logger.ts +155 -4
- package/src/plugins/analysis/DatabaseAnalyzer.ts +22 -15
- package/src/plugins/analysis/ExpressAnalyzer.ts +30 -18
- package/src/plugins/analysis/ExpressResponseAnalyzer.ts +72 -88
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +54 -39
- package/src/plugins/analysis/FetchAnalyzer.ts +165 -113
- package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +6 -7
- package/src/plugins/analysis/JSASTAnalyzer.ts +1122 -487
- package/src/plugins/analysis/ReactAnalyzer.ts +27 -20
- package/src/plugins/analysis/RustAnalyzer.ts +41 -27
- package/src/plugins/analysis/SQLiteAnalyzer.ts +18 -8
- package/src/plugins/analysis/ServiceLayerAnalyzer.ts +38 -34
- package/src/plugins/analysis/SocketIOAnalyzer.ts +30 -15
- package/src/plugins/analysis/SystemDbAnalyzer.ts +24 -13
- package/src/plugins/analysis/ast/ExpressionEvaluator.ts +1 -3
- package/src/plugins/analysis/ast/GraphBuilder.ts +532 -66
- package/src/plugins/analysis/ast/types.ts +200 -2
- package/src/plugins/analysis/ast/utils/babelTraverse.ts +74 -0
- package/src/plugins/analysis/ast/utils/createParameterNodes.ts +1 -1
- package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +7 -2
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +163 -15
- package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +249 -3
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +9 -4
- package/src/plugins/analysis/ast/visitors/PropertyAccessVisitor.ts +342 -0
- package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +2 -3
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +1 -27
- package/src/plugins/analysis/ast/visitors/index.ts +2 -0
- package/src/plugins/discovery/DiscoveryPlugin.ts +42 -11
- package/src/plugins/discovery/MonorepoServiceDiscovery.ts +2 -2
- package/src/plugins/discovery/SimpleProjectDiscovery.ts +2 -2
- package/src/plugins/discovery/WorkspaceDiscovery.ts +2 -2
- package/src/plugins/discovery/workspaces/globResolver.ts +1 -1
- package/src/plugins/enrichment/AliasTracker.ts +2 -2
- package/src/plugins/enrichment/ArgumentParameterLinker.ts +0 -1
- package/src/plugins/enrichment/ClosureCaptureEnricher.ts +0 -1
- package/src/plugins/enrichment/ExpressHandlerLinker.ts +178 -0
- package/src/plugins/enrichment/ExternalCallResolver.ts +0 -1
- package/src/plugins/enrichment/FunctionCallResolver.ts +10 -15
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +65 -14
- package/src/plugins/enrichment/ImportExportLinker.ts +0 -1
- package/src/plugins/enrichment/InstanceOfResolver.ts +2 -2
- package/src/plugins/enrichment/MethodCallResolver.ts +526 -12
- package/src/plugins/enrichment/MountPointResolver.ts +6 -24
- package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +1 -2
- package/src/plugins/enrichment/PrefixEvaluator.ts +4 -4
- package/src/plugins/enrichment/RejectionPropagationEnricher.ts +253 -0
- package/src/plugins/enrichment/RustFFIEnricher.ts +0 -1
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +3 -3
- package/src/plugins/indexing/IncrementalModuleIndexer.ts +24 -30
- package/src/plugins/indexing/JSModuleIndexer.ts +21 -22
- package/src/plugins/indexing/RustModuleIndexer.ts +10 -5
- package/src/plugins/validation/BrokenImportValidator.ts +2 -3
- package/src/plugins/validation/CallResolverValidator.ts +2 -3
- package/src/plugins/validation/DataFlowValidator.ts +1 -1
- package/src/plugins/validation/EvalBanValidator.ts +1 -1
- package/src/plugins/validation/GraphConnectivityValidator.ts +1 -9
- package/src/plugins/validation/SQLInjectionValidator.ts +3 -2
- package/src/plugins/validation/ShadowingDetector.ts +1 -1
- package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +2 -3
- package/src/plugins/vcs/GitPlugin.ts +12 -6
- package/src/queries/findCallsInFunction.ts +4 -4
- package/src/queries/findContainingFunction.ts +1 -1
- package/src/queries/traceValues.ts +0 -1
- package/src/storage/backends/RFDBServerBackend.ts +115 -25
- package/src/storage/backends/typeValidation.ts +2 -0
- package/src/utils/moduleResolution.ts +244 -0
- package/src/validation/PathValidator.ts +0 -8
- package/src/plugins/validation/NodeCreationValidator.ts +0 -554
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { readFileSync } from 'fs';
|
|
14
|
-
import {
|
|
14
|
+
import type { ParserPlugin } from '@babel/parser';
|
|
15
|
+
import { parse } from '@babel/parser';
|
|
15
16
|
import traverseModule from '@babel/traverse';
|
|
16
17
|
import type { NodePath } from '@babel/traverse';
|
|
17
18
|
import type { Node, CallExpression, JSXElement, JSXAttribute, VariableDeclarator, FunctionDeclaration } from '@babel/types';
|
|
@@ -20,7 +21,6 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
|
20
21
|
import type { NodeRecord } from '@grafema/types';
|
|
21
22
|
import { getLine, getColumn } from './ast/utils/location.js';
|
|
22
23
|
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
24
|
const traverse = (traverseModule as any).default || traverseModule;
|
|
25
25
|
|
|
26
26
|
// React event handlers mapping
|
|
@@ -203,7 +203,6 @@ export class ReactAnalyzer extends Plugin {
|
|
|
203
203
|
return {
|
|
204
204
|
name: 'ReactAnalyzer',
|
|
205
205
|
phase: 'ANALYSIS',
|
|
206
|
-
priority: 70, // After JSASTAnalyzer and ExpressAnalyzer
|
|
207
206
|
creates: {
|
|
208
207
|
nodes: [
|
|
209
208
|
'react:component', 'react:state', 'react:effect', 'react:callback',
|
|
@@ -254,7 +253,7 @@ export class ReactAnalyzer extends Plugin {
|
|
|
254
253
|
stats.browserAPIs += result.browserAPIs;
|
|
255
254
|
stats.issues += result.issues;
|
|
256
255
|
stats.edges += result.edges;
|
|
257
|
-
} catch
|
|
256
|
+
} catch {
|
|
258
257
|
// Silent - per-module errors shouldn't spam logs
|
|
259
258
|
}
|
|
260
259
|
}
|
|
@@ -275,7 +274,8 @@ export class ReactAnalyzer extends Plugin {
|
|
|
275
274
|
);
|
|
276
275
|
} catch (error) {
|
|
277
276
|
logger.error('Analysis failed', { error });
|
|
278
|
-
|
|
277
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
278
|
+
return createErrorResult(err);
|
|
279
279
|
}
|
|
280
280
|
}
|
|
281
281
|
|
|
@@ -731,7 +731,7 @@ export class ReactAnalyzer extends Plugin {
|
|
|
731
731
|
const callbackParams = new Set<string>(); // Track parameters of nested callback functions
|
|
732
732
|
|
|
733
733
|
// Simple recursive AST walker to collect identifiers
|
|
734
|
-
const collectIdentifiers = (node: Node | null,
|
|
734
|
+
const collectIdentifiers = (node: Node | null, _parentType: string | null = null, isPropertyKey = false): void => {
|
|
735
735
|
if (!node) return;
|
|
736
736
|
|
|
737
737
|
if (node.type === 'Identifier') {
|
|
@@ -879,7 +879,7 @@ export class ReactAnalyzer extends Plugin {
|
|
|
879
879
|
const hasCleanup = hookData.hasCleanup as boolean;
|
|
880
880
|
|
|
881
881
|
// Simple recursive AST walker
|
|
882
|
-
const checkNode = (node: Node | null,
|
|
882
|
+
const checkNode = (node: Node | null, _parent: Node | null = null): void => {
|
|
883
883
|
if (!node || typeof node !== 'object') return;
|
|
884
884
|
|
|
885
885
|
if (node.type === 'CallExpression') {
|
|
@@ -1324,11 +1324,14 @@ export class ReactAnalyzer extends Plugin {
|
|
|
1324
1324
|
graph: PluginContext['graph'],
|
|
1325
1325
|
moduleId: string | null
|
|
1326
1326
|
): Promise<void> {
|
|
1327
|
-
|
|
1327
|
+
const nodes: NodeRecord[] = [];
|
|
1328
|
+
const edges: Array<{ type: string; src: string; dst: string; [key: string]: unknown }> = [];
|
|
1329
|
+
|
|
1330
|
+
// Collect component nodes and DEFINES edges
|
|
1328
1331
|
for (const component of analysis.components) {
|
|
1329
|
-
|
|
1332
|
+
nodes.push(component as unknown as NodeRecord);
|
|
1330
1333
|
if (moduleId) {
|
|
1331
|
-
|
|
1334
|
+
edges.push({
|
|
1332
1335
|
type: 'DEFINES',
|
|
1333
1336
|
src: moduleId,
|
|
1334
1337
|
dst: component.id
|
|
@@ -1336,33 +1339,37 @@ export class ReactAnalyzer extends Plugin {
|
|
|
1336
1339
|
}
|
|
1337
1340
|
}
|
|
1338
1341
|
|
|
1339
|
-
//
|
|
1342
|
+
// Collect hook nodes
|
|
1340
1343
|
for (const hook of analysis.hooks) {
|
|
1341
|
-
|
|
1344
|
+
nodes.push(hook as unknown as NodeRecord);
|
|
1342
1345
|
}
|
|
1343
1346
|
|
|
1344
|
-
//
|
|
1347
|
+
// Collect event nodes
|
|
1345
1348
|
for (const event of analysis.events) {
|
|
1346
|
-
|
|
1349
|
+
nodes.push(event as unknown as NodeRecord);
|
|
1347
1350
|
}
|
|
1348
1351
|
|
|
1349
|
-
//
|
|
1352
|
+
// Collect browser API nodes
|
|
1350
1353
|
for (const api of analysis.browserAPIs) {
|
|
1351
|
-
|
|
1354
|
+
nodes.push(api as unknown as NodeRecord);
|
|
1352
1355
|
}
|
|
1353
1356
|
|
|
1354
|
-
//
|
|
1357
|
+
// Collect issue nodes
|
|
1355
1358
|
for (const issue of analysis.issues) {
|
|
1356
|
-
|
|
1359
|
+
nodes.push(issue as unknown as NodeRecord);
|
|
1357
1360
|
}
|
|
1358
1361
|
|
|
1359
|
-
//
|
|
1362
|
+
// Collect edges from analysis
|
|
1360
1363
|
for (const edge of analysis.edges) {
|
|
1361
1364
|
const { edgeType, ...rest } = edge;
|
|
1362
|
-
|
|
1365
|
+
edges.push({
|
|
1363
1366
|
type: edgeType,
|
|
1364
1367
|
...rest
|
|
1365
1368
|
});
|
|
1366
1369
|
}
|
|
1370
|
+
|
|
1371
|
+
// Batch write to graph
|
|
1372
|
+
await graph.addNodes(nodes);
|
|
1373
|
+
await graph.addEdges(edges);
|
|
1367
1374
|
}
|
|
1368
1375
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { readFileSync } from 'fs';
|
|
8
|
-
import { Plugin, createSuccessResult
|
|
8
|
+
import { Plugin, createSuccessResult } from '../Plugin.js';
|
|
9
9
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
10
10
|
import type { NodeRecord } from '@grafema/types';
|
|
11
11
|
|
|
@@ -137,16 +137,27 @@ interface EdgeToAdd {
|
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
// NAPI binding - will be exported from packages/rfdb-server after build
|
|
140
|
+
// Loaded lazily on first execute() call to avoid top-level await (CJS compatibility)
|
|
140
141
|
let parseRustFile: ((code: string) => RustParseResult) | undefined;
|
|
142
|
+
let bindingLoaded = false;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Load the native binding lazily on first use.
|
|
146
|
+
* This avoids top-level await which breaks esbuild CJS bundling.
|
|
147
|
+
*/
|
|
148
|
+
async function loadNativeBinding(): Promise<void> {
|
|
149
|
+
if (bindingLoaded) return;
|
|
150
|
+
bindingLoaded = true;
|
|
151
|
+
|
|
152
|
+
// Path: from dist/plugins/analysis/ go up 5 levels to reach project root, then packages/rfdb-server/
|
|
153
|
+
try {
|
|
154
|
+
const nativeBinding = await import('../../../../../packages/rfdb-server/grafema-graph-engine.node' as any);
|
|
155
|
+
parseRustFile = nativeBinding.parseRustFile;
|
|
156
|
+
return;
|
|
157
|
+
} catch {
|
|
158
|
+
// Dynamic import failed, try require fallback
|
|
159
|
+
}
|
|
141
160
|
|
|
142
|
-
// Try to load the native binding
|
|
143
|
-
// Path: from dist/plugins/analysis/ go up 5 levels to reach project root, then packages/rfdb-server/
|
|
144
|
-
try {
|
|
145
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
146
|
-
const nativeBinding = await import('../../../../../packages/rfdb-server/grafema-graph-engine.node' as any);
|
|
147
|
-
parseRustFile = nativeBinding.parseRustFile;
|
|
148
|
-
} catch {
|
|
149
|
-
// Fallback: try require
|
|
150
161
|
try {
|
|
151
162
|
const { createRequire } = await import('module');
|
|
152
163
|
const require = createRequire(import.meta.url);
|
|
@@ -162,7 +173,6 @@ export class RustAnalyzer extends Plugin {
|
|
|
162
173
|
return {
|
|
163
174
|
name: 'RustAnalyzer',
|
|
164
175
|
phase: 'ANALYSIS',
|
|
165
|
-
priority: 75, // Lower than JSASTAnalyzer (80)
|
|
166
176
|
creates: {
|
|
167
177
|
nodes: [
|
|
168
178
|
'RUST_FUNCTION',
|
|
@@ -182,6 +192,9 @@ export class RustAnalyzer extends Plugin {
|
|
|
182
192
|
const { graph, onProgress } = context;
|
|
183
193
|
const logger = this.log(context);
|
|
184
194
|
|
|
195
|
+
// Load native binding lazily on first use
|
|
196
|
+
await loadNativeBinding();
|
|
197
|
+
|
|
185
198
|
if (!parseRustFile) {
|
|
186
199
|
logger.info('Skipping - native binding not available');
|
|
187
200
|
return createSuccessResult(
|
|
@@ -239,10 +252,11 @@ export class RustAnalyzer extends Plugin {
|
|
|
239
252
|
});
|
|
240
253
|
}
|
|
241
254
|
} catch (err) {
|
|
242
|
-
|
|
255
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
256
|
+
errors.push({ file: module.file!, error: message });
|
|
243
257
|
logger.warn('Error parsing module', {
|
|
244
258
|
file: module.file,
|
|
245
|
-
error:
|
|
259
|
+
error: message
|
|
246
260
|
});
|
|
247
261
|
}
|
|
248
262
|
}
|
|
@@ -263,20 +277,21 @@ export class RustAnalyzer extends Plugin {
|
|
|
263
277
|
module: NodeRecord,
|
|
264
278
|
graph: PluginContext['graph']
|
|
265
279
|
): Promise<AnalysisStats> {
|
|
280
|
+
const nodes: NodeRecord[] = [];
|
|
266
281
|
const edges: EdgeToAdd[] = [];
|
|
267
282
|
let methodCount = 0;
|
|
268
283
|
let callCount = 0;
|
|
269
284
|
|
|
270
|
-
// Helper to
|
|
271
|
-
const processCalls =
|
|
285
|
+
// Helper to collect calls within a function/method
|
|
286
|
+
const processCalls = (
|
|
272
287
|
calls: RustCall[] | undefined,
|
|
273
288
|
parentId: string,
|
|
274
289
|
parentName: string
|
|
275
|
-
):
|
|
290
|
+
): void => {
|
|
276
291
|
for (const call of calls || []) {
|
|
277
292
|
const callId = `RUST_CALL#${parentName}#${call.line}#${call.column}#${module.file}`;
|
|
278
293
|
|
|
279
|
-
|
|
294
|
+
nodes.push({
|
|
280
295
|
id: callId,
|
|
281
296
|
type: 'RUST_CALL',
|
|
282
297
|
file: module.file,
|
|
@@ -299,7 +314,7 @@ export class RustAnalyzer extends Plugin {
|
|
|
299
314
|
for (const fn of parseResult.functions) {
|
|
300
315
|
const nodeId = `RUST_FUNCTION#${fn.name}#${module.file}#${fn.line}`;
|
|
301
316
|
|
|
302
|
-
|
|
317
|
+
nodes.push({
|
|
303
318
|
id: nodeId,
|
|
304
319
|
type: 'RUST_FUNCTION',
|
|
305
320
|
name: fn.name,
|
|
@@ -323,14 +338,14 @@ export class RustAnalyzer extends Plugin {
|
|
|
323
338
|
edges.push({ src: module.id, dst: nodeId, type: 'CONTAINS' });
|
|
324
339
|
|
|
325
340
|
// Process calls within this function
|
|
326
|
-
|
|
341
|
+
processCalls(fn.calls, nodeId, fn.name);
|
|
327
342
|
}
|
|
328
343
|
|
|
329
344
|
// 2. Process structs
|
|
330
345
|
for (const s of parseResult.structs) {
|
|
331
346
|
const nodeId = `RUST_STRUCT#${s.name}#${module.file}#${s.line}`;
|
|
332
347
|
|
|
333
|
-
|
|
348
|
+
nodes.push({
|
|
334
349
|
id: nodeId,
|
|
335
350
|
type: 'RUST_STRUCT',
|
|
336
351
|
name: s.name,
|
|
@@ -348,7 +363,7 @@ export class RustAnalyzer extends Plugin {
|
|
|
348
363
|
for (const impl of parseResult.impls) {
|
|
349
364
|
const implId = `RUST_IMPL#${impl.targetType}${impl.traitName ? ':' + impl.traitName : ''}#${module.file}#${impl.line}`;
|
|
350
365
|
|
|
351
|
-
|
|
366
|
+
nodes.push({
|
|
352
367
|
id: implId,
|
|
353
368
|
type: 'RUST_IMPL',
|
|
354
369
|
name: impl.targetType,
|
|
@@ -372,7 +387,7 @@ export class RustAnalyzer extends Plugin {
|
|
|
372
387
|
for (const method of impl.methods) {
|
|
373
388
|
const methodId = `RUST_METHOD#${method.name}#${module.file}#${method.line}`;
|
|
374
389
|
|
|
375
|
-
|
|
390
|
+
nodes.push({
|
|
376
391
|
id: methodId,
|
|
377
392
|
type: 'RUST_METHOD',
|
|
378
393
|
name: method.name,
|
|
@@ -400,7 +415,7 @@ export class RustAnalyzer extends Plugin {
|
|
|
400
415
|
methodCount++;
|
|
401
416
|
|
|
402
417
|
// Process calls within this method
|
|
403
|
-
|
|
418
|
+
processCalls(method.calls, methodId, `${impl.targetType}::${method.name}`);
|
|
404
419
|
}
|
|
405
420
|
}
|
|
406
421
|
|
|
@@ -408,7 +423,7 @@ export class RustAnalyzer extends Plugin {
|
|
|
408
423
|
for (const t of parseResult.traits) {
|
|
409
424
|
const nodeId = `RUST_TRAIT#${t.name}#${module.file}#${t.line}`;
|
|
410
425
|
|
|
411
|
-
|
|
426
|
+
nodes.push({
|
|
412
427
|
id: nodeId,
|
|
413
428
|
type: 'RUST_TRAIT',
|
|
414
429
|
name: t.name,
|
|
@@ -425,10 +440,9 @@ export class RustAnalyzer extends Plugin {
|
|
|
425
440
|
edges.push({ src: module.id, dst: nodeId, type: 'CONTAINS' });
|
|
426
441
|
}
|
|
427
442
|
|
|
428
|
-
// 5. Write all edges
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
}
|
|
443
|
+
// 5. Write all nodes and edges in batch
|
|
444
|
+
await graph.addNodes(nodes);
|
|
445
|
+
await graph.addEdges(edges);
|
|
432
446
|
|
|
433
447
|
return {
|
|
434
448
|
functions: parseResult.functions.length,
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { readFileSync } from 'fs';
|
|
12
|
-
import {
|
|
12
|
+
import type { ParserPlugin } from '@babel/parser';
|
|
13
|
+
import { parse } from '@babel/parser';
|
|
13
14
|
import traverseModule from '@babel/traverse';
|
|
14
15
|
import type { CallExpression, Identifier, MemberExpression, Node } from '@babel/types';
|
|
15
16
|
import type { NodePath } from '@babel/traverse';
|
|
@@ -18,7 +19,6 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
|
18
19
|
import type { NodeRecord } from '@grafema/types';
|
|
19
20
|
import { getLine, getColumn } from './ast/utils/location.js';
|
|
20
21
|
|
|
21
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
22
|
const traverse = (traverseModule as any).default || traverseModule;
|
|
23
23
|
|
|
24
24
|
/**
|
|
@@ -54,7 +54,6 @@ export class SQLiteAnalyzer extends Plugin {
|
|
|
54
54
|
return {
|
|
55
55
|
name: 'SQLiteAnalyzer',
|
|
56
56
|
phase: 'ANALYSIS',
|
|
57
|
-
priority: 75, // После JSASTAnalyzer (80)
|
|
58
57
|
creates: {
|
|
59
58
|
nodes: ['db:query'],
|
|
60
59
|
edges: ['CONTAINS', 'EXECUTES_QUERY']
|
|
@@ -270,22 +269,30 @@ export class SQLiteAnalyzer extends Plugin {
|
|
|
270
269
|
});
|
|
271
270
|
|
|
272
271
|
// Создаём DATABASE_QUERY ноды
|
|
272
|
+
const nodes: NodeRecord[] = [];
|
|
273
|
+
const edges: Array<{ type: string; src: string; dst: string }> = [];
|
|
274
|
+
|
|
273
275
|
for (const query of queries) {
|
|
274
276
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
275
277
|
const { promiseWrapped, ...queryData } = query;
|
|
276
278
|
|
|
277
|
-
|
|
279
|
+
nodes.push(queryData as unknown as NodeRecord);
|
|
278
280
|
queriesCreated++;
|
|
279
281
|
|
|
280
282
|
// MODULE -> CONTAINS -> DATABASE_QUERY
|
|
281
|
-
|
|
283
|
+
edges.push({
|
|
282
284
|
type: 'CONTAINS',
|
|
283
285
|
src: module.id,
|
|
284
286
|
dst: query.id
|
|
285
287
|
});
|
|
286
288
|
edgesCreated++;
|
|
289
|
+
}
|
|
287
290
|
|
|
288
|
-
|
|
291
|
+
// Flush nodes first so queryNodes can find them
|
|
292
|
+
await graph.addNodes(nodes);
|
|
293
|
+
|
|
294
|
+
// Find containing functions (reads FUNCTION nodes from JSASTAnalyzer)
|
|
295
|
+
for (const query of queries) {
|
|
289
296
|
const containingFunctions: NodeRecord[] = [];
|
|
290
297
|
for await (const n of graph.queryNodes({ type: 'FUNCTION' })) {
|
|
291
298
|
if (
|
|
@@ -304,7 +311,7 @@ export class SQLiteAnalyzer extends Plugin {
|
|
|
304
311
|
);
|
|
305
312
|
|
|
306
313
|
// FUNCTION -> EXECUTES_QUERY -> DATABASE_QUERY
|
|
307
|
-
|
|
314
|
+
edges.push({
|
|
308
315
|
type: 'EXECUTES_QUERY',
|
|
309
316
|
src: closestFunction.id,
|
|
310
317
|
dst: query.id
|
|
@@ -312,7 +319,10 @@ export class SQLiteAnalyzer extends Plugin {
|
|
|
312
319
|
edgesCreated++;
|
|
313
320
|
}
|
|
314
321
|
}
|
|
315
|
-
|
|
322
|
+
|
|
323
|
+
// Flush all edges
|
|
324
|
+
await graph.addEdges(edges);
|
|
325
|
+
} catch {
|
|
316
326
|
// Silent - per-module errors shouldn't spam logs
|
|
317
327
|
}
|
|
318
328
|
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { readFileSync } from 'fs';
|
|
13
|
-
import {
|
|
13
|
+
import type { ParserPlugin } from '@babel/parser';
|
|
14
|
+
import { parse } from '@babel/parser';
|
|
14
15
|
import traverseModule from '@babel/traverse';
|
|
15
16
|
import type {
|
|
16
17
|
CallExpression,
|
|
@@ -26,7 +27,6 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
|
26
27
|
import type { NodeRecord } from '@grafema/types';
|
|
27
28
|
import { getLine } from './ast/utils/location.js';
|
|
28
29
|
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
30
|
const traverse = (traverseModule as any).default || traverseModule;
|
|
31
31
|
|
|
32
32
|
/**
|
|
@@ -90,7 +90,6 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
90
90
|
return {
|
|
91
91
|
name: 'ServiceLayerAnalyzer',
|
|
92
92
|
phase: 'ANALYSIS',
|
|
93
|
-
priority: 75, // После JSASTAnalyzer (80)
|
|
94
93
|
creates: {
|
|
95
94
|
nodes: ['SERVICE_CLASS', 'SERVICE_INSTANCE', 'SERVICE_REGISTRATION', 'SERVICE_USAGE'],
|
|
96
95
|
edges: ['CONTAINS', 'INSTANTIATES', 'REGISTERS', 'USES_SERVICE']
|
|
@@ -157,7 +156,8 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
157
156
|
);
|
|
158
157
|
} catch (error) {
|
|
159
158
|
logger.error('Analysis failed', { error });
|
|
160
|
-
|
|
159
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
160
|
+
return createErrorResult(err);
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
|
|
@@ -303,12 +303,14 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
303
303
|
}
|
|
304
304
|
});
|
|
305
305
|
|
|
306
|
-
//
|
|
307
|
-
|
|
308
|
-
|
|
306
|
+
// Batch nodes and edges for IPC optimization
|
|
307
|
+
const nodes: Array<unknown> = [];
|
|
308
|
+
const edges: Array<{ type: string; src: string; dst: string }> = [];
|
|
309
309
|
|
|
310
|
-
|
|
311
|
-
|
|
310
|
+
// Collect all nodes
|
|
311
|
+
for (const serviceClass of serviceClasses) {
|
|
312
|
+
nodes.push(serviceClass as unknown as NodeRecord);
|
|
313
|
+
edges.push({
|
|
312
314
|
type: 'CONTAINS',
|
|
313
315
|
src: module.id,
|
|
314
316
|
dst: serviceClass.id
|
|
@@ -316,33 +318,17 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
316
318
|
}
|
|
317
319
|
|
|
318
320
|
for (const instance of serviceInstances) {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
// Создаём ребро от модуля к instance
|
|
322
|
-
await graph.addEdge({
|
|
321
|
+
nodes.push(instance as unknown as NodeRecord);
|
|
322
|
+
edges.push({
|
|
323
323
|
type: 'CONTAINS',
|
|
324
324
|
src: module.id,
|
|
325
325
|
dst: instance.id
|
|
326
326
|
});
|
|
327
|
-
|
|
328
|
-
// Ищем SERVICE_CLASS ноду и создаём ребро INSTANTIATES
|
|
329
|
-
for await (const n of graph.queryNodes({ type: 'SERVICE_CLASS' })) {
|
|
330
|
-
if (n.name === instance.serviceClass) {
|
|
331
|
-
await graph.addEdge({
|
|
332
|
-
type: 'INSTANTIATES',
|
|
333
|
-
src: instance.id,
|
|
334
|
-
dst: n.id
|
|
335
|
-
});
|
|
336
|
-
break;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
327
|
}
|
|
340
328
|
|
|
341
329
|
for (const registration of serviceRegistrations) {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
// Создаём ребро от модуля к registration
|
|
345
|
-
await graph.addEdge({
|
|
330
|
+
nodes.push(registration as unknown as NodeRecord);
|
|
331
|
+
edges.push({
|
|
346
332
|
type: 'CONTAINS',
|
|
347
333
|
src: module.id,
|
|
348
334
|
dst: registration.id
|
|
@@ -350,23 +336,41 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
350
336
|
}
|
|
351
337
|
|
|
352
338
|
for (const usage of serviceUsages) {
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
// Создаём ребро от модуля к usage
|
|
356
|
-
await graph.addEdge({
|
|
339
|
+
nodes.push(usage as unknown as NodeRecord);
|
|
340
|
+
edges.push({
|
|
357
341
|
type: 'CONTAINS',
|
|
358
342
|
src: module.id,
|
|
359
343
|
dst: usage.id
|
|
360
344
|
});
|
|
361
345
|
}
|
|
362
346
|
|
|
347
|
+
// First flush: add all nodes to graph
|
|
348
|
+
await graph.addNodes(nodes as NodeRecord[]);
|
|
349
|
+
|
|
350
|
+
// Create INSTANTIATES edges (requires querying graph)
|
|
351
|
+
for (const instance of serviceInstances) {
|
|
352
|
+
for await (const n of graph.queryNodes({ type: 'SERVICE_CLASS' })) {
|
|
353
|
+
if (n.name === instance.serviceClass) {
|
|
354
|
+
edges.push({
|
|
355
|
+
type: 'INSTANTIATES',
|
|
356
|
+
src: instance.id,
|
|
357
|
+
dst: n.id
|
|
358
|
+
});
|
|
359
|
+
break;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// Second flush: add all edges to graph
|
|
365
|
+
await graph.addEdges(edges);
|
|
366
|
+
|
|
363
367
|
return {
|
|
364
368
|
classes: serviceClasses.length,
|
|
365
369
|
instances: serviceInstances.length,
|
|
366
370
|
registrations: serviceRegistrations.length,
|
|
367
371
|
usages: serviceUsages.length
|
|
368
372
|
};
|
|
369
|
-
} catch
|
|
373
|
+
} catch {
|
|
370
374
|
// Silent - per-module errors shouldn't spam logs
|
|
371
375
|
return { classes: 0, instances: 0, registrations: 0, usages: 0 };
|
|
372
376
|
}
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { readFileSync } from 'fs';
|
|
19
|
-
import {
|
|
19
|
+
import type { ParserPlugin } from '@babel/parser';
|
|
20
|
+
import { parse } from '@babel/parser';
|
|
20
21
|
import traverseModule from '@babel/traverse';
|
|
21
22
|
import type { CallExpression, Identifier, MemberExpression, Node } from '@babel/types';
|
|
22
23
|
import type { NodePath } from '@babel/traverse';
|
|
@@ -25,7 +26,7 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
|
25
26
|
import type { NodeRecord } from '@grafema/types';
|
|
26
27
|
import { getLine, getColumn } from './ast/utils/location.js';
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
|
|
29
30
|
const traverse = (traverseModule as any).default || traverseModule;
|
|
30
31
|
|
|
31
32
|
/**
|
|
@@ -98,7 +99,6 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
98
99
|
return {
|
|
99
100
|
name: 'SocketIOAnalyzer',
|
|
100
101
|
phase: 'ANALYSIS',
|
|
101
|
-
priority: 75, // После JSASTAnalyzer (80)
|
|
102
102
|
creates: {
|
|
103
103
|
nodes: ['socketio:emit', 'socketio:on', 'socketio:room', 'socketio:event'],
|
|
104
104
|
edges: ['CONTAINS', 'EMITS_EVENT', 'LISTENS_TO', 'JOINS_ROOM', 'LISTENED_BY']
|
|
@@ -162,7 +162,8 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
162
162
|
);
|
|
163
163
|
} catch (error) {
|
|
164
164
|
logger.error('Analysis failed', { error });
|
|
165
|
-
|
|
165
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
166
|
+
return createErrorResult(err);
|
|
166
167
|
}
|
|
167
168
|
}
|
|
168
169
|
|
|
@@ -206,7 +207,10 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
206
207
|
logger.debug('Unique events found', { count: eventNames.size });
|
|
207
208
|
|
|
208
209
|
// Step 3: Create event channel node for each unique event
|
|
210
|
+
const nodes: NodeRecord[] = [];
|
|
211
|
+
const edges: Array<{ type: string; src: string; dst: string }> = [];
|
|
209
212
|
let createdCount = 0;
|
|
213
|
+
|
|
210
214
|
for (const eventName of eventNames) {
|
|
211
215
|
const eventNodeId = `socketio:event#${eventName}`;
|
|
212
216
|
|
|
@@ -218,13 +222,13 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
218
222
|
event: eventName
|
|
219
223
|
};
|
|
220
224
|
|
|
221
|
-
|
|
225
|
+
nodes.push(eventNode as unknown as NodeRecord);
|
|
222
226
|
createdCount++;
|
|
223
227
|
|
|
224
228
|
// Step 4: Connect all emits of this event to the channel
|
|
225
229
|
const matchingEmits = allEmits.filter(e => e.event === eventName);
|
|
226
230
|
for (const emit of matchingEmits) {
|
|
227
|
-
|
|
231
|
+
edges.push({
|
|
228
232
|
type: 'EMITS_EVENT',
|
|
229
233
|
src: emit.id,
|
|
230
234
|
dst: eventNodeId
|
|
@@ -234,7 +238,7 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
234
238
|
// Step 5: Connect event channel to all listeners of this event
|
|
235
239
|
const matchingListeners = allListeners.filter(l => l.event === eventName);
|
|
236
240
|
for (const listener of matchingListeners) {
|
|
237
|
-
|
|
241
|
+
edges.push({
|
|
238
242
|
type: 'LISTENED_BY',
|
|
239
243
|
src: eventNodeId,
|
|
240
244
|
dst: listener.id
|
|
@@ -248,6 +252,10 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
248
252
|
});
|
|
249
253
|
}
|
|
250
254
|
|
|
255
|
+
// Flush all nodes and edges
|
|
256
|
+
await graph.addNodes(nodes);
|
|
257
|
+
await graph.addEdges(edges);
|
|
258
|
+
|
|
251
259
|
return createdCount;
|
|
252
260
|
} catch (error) {
|
|
253
261
|
logger.error('Failed to create event channels', { error });
|
|
@@ -405,11 +413,14 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
405
413
|
});
|
|
406
414
|
|
|
407
415
|
// Создаём ноды в графе
|
|
416
|
+
const nodes: NodeRecord[] = [];
|
|
417
|
+
const edges: Array<{ type: string; src: string; dst: string }> = [];
|
|
418
|
+
|
|
408
419
|
for (const emit of emits) {
|
|
409
|
-
|
|
420
|
+
nodes.push(emit as unknown as NodeRecord);
|
|
410
421
|
|
|
411
422
|
// Создаём ребро от модуля к event
|
|
412
|
-
|
|
423
|
+
edges.push({
|
|
413
424
|
type: 'CONTAINS',
|
|
414
425
|
src: module.id,
|
|
415
426
|
dst: emit.id
|
|
@@ -417,10 +428,10 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
417
428
|
}
|
|
418
429
|
|
|
419
430
|
for (const listener of listeners) {
|
|
420
|
-
|
|
431
|
+
nodes.push(listener as unknown as NodeRecord);
|
|
421
432
|
|
|
422
433
|
// Создаём ребро от модуля к listener
|
|
423
|
-
|
|
434
|
+
edges.push({
|
|
424
435
|
type: 'CONTAINS',
|
|
425
436
|
src: module.id,
|
|
426
437
|
dst: listener.id
|
|
@@ -439,7 +450,7 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
439
450
|
);
|
|
440
451
|
|
|
441
452
|
if (handlerFunction) {
|
|
442
|
-
|
|
453
|
+
edges.push({
|
|
443
454
|
type: 'LISTENS_TO',
|
|
444
455
|
src: listener.id,
|
|
445
456
|
dst: handlerFunction.id
|
|
@@ -448,22 +459,26 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
448
459
|
}
|
|
449
460
|
|
|
450
461
|
for (const room of rooms) {
|
|
451
|
-
|
|
462
|
+
nodes.push(room as unknown as NodeRecord);
|
|
452
463
|
|
|
453
464
|
// Создаём ребро от модуля к room
|
|
454
|
-
|
|
465
|
+
edges.push({
|
|
455
466
|
type: 'CONTAINS',
|
|
456
467
|
src: module.id,
|
|
457
468
|
dst: room.id
|
|
458
469
|
});
|
|
459
470
|
}
|
|
460
471
|
|
|
472
|
+
// Flush all nodes and edges
|
|
473
|
+
await graph.addNodes(nodes);
|
|
474
|
+
await graph.addEdges(edges);
|
|
475
|
+
|
|
461
476
|
return {
|
|
462
477
|
emits: emits.length,
|
|
463
478
|
listeners: listeners.length,
|
|
464
479
|
rooms: rooms.length
|
|
465
480
|
};
|
|
466
|
-
} catch
|
|
481
|
+
} catch {
|
|
467
482
|
// Silent - per-module errors shouldn't spam logs
|
|
468
483
|
return { emits: 0, listeners: 0, rooms: 0 };
|
|
469
484
|
}
|