@grafema/core 0.2.3-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 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -6
- 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 +20 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +47 -19
- 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.d.ts +39 -0
- package/dist/utils/findRfdbBinary.d.ts.map +1 -0
- package/dist/utils/findRfdbBinary.js +141 -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 -7
- 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 +56 -22
- package/src/storage/backends/typeValidation.ts +2 -0
- package/src/utils/findRfdbBinary.ts +160 -0
- package/src/utils/moduleResolution.ts +244 -0
- package/src/validation/PathValidator.ts +0 -8
- package/src/plugins/validation/NodeCreationValidator.ts +0 -554
|
@@ -13,16 +13,17 @@
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
import { readFileSync } from 'fs';
|
|
16
|
-
import {
|
|
16
|
+
import type { ParserPlugin } from '@babel/parser';
|
|
17
|
+
import { parse } from '@babel/parser';
|
|
17
18
|
import traverseModule from '@babel/traverse';
|
|
18
19
|
import type { CallExpression, Identifier, MemberExpression, Node, ArrowFunctionExpression, FunctionExpression } from '@babel/types';
|
|
19
20
|
import type { NodePath } from '@babel/traverse';
|
|
20
21
|
import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
21
22
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
22
23
|
import type { NodeRecord } from '@grafema/types';
|
|
24
|
+
import { NodeFactory } from '../../core/NodeFactory.js';
|
|
23
25
|
import { getLine } from './ast/utils/location.js';
|
|
24
26
|
|
|
25
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
27
|
const traverse = (traverseModule as any).default || traverseModule;
|
|
27
28
|
|
|
28
29
|
const RESPONSE_METHODS = ['json', 'send'];
|
|
@@ -46,7 +47,6 @@ export class ExpressResponseAnalyzer extends Plugin {
|
|
|
46
47
|
return {
|
|
47
48
|
name: 'ExpressResponseAnalyzer',
|
|
48
49
|
phase: 'ANALYSIS',
|
|
49
|
-
priority: 74, // After ExpressRouteAnalyzer (75)
|
|
50
50
|
creates: {
|
|
51
51
|
nodes: [],
|
|
52
52
|
edges: ['RESPONDS_WITH']
|
|
@@ -70,21 +70,30 @@ export class ExpressResponseAnalyzer extends Plugin {
|
|
|
70
70
|
logger.info('Processing routes', { count: routes.length });
|
|
71
71
|
|
|
72
72
|
let edgesCreated = 0;
|
|
73
|
+
let nodesCreated = 0;
|
|
74
|
+
const allNodes: NodeRecord[] = [];
|
|
75
|
+
const allEdges: Array<{ type: string; src: string; dst: string; metadata?: unknown }> = [];
|
|
73
76
|
|
|
74
77
|
for (const route of routes) {
|
|
75
|
-
const result = await this.analyzeRouteResponses(route, graph);
|
|
76
|
-
edgesCreated += result;
|
|
78
|
+
const result = await this.analyzeRouteResponses(route, graph, allNodes, allEdges);
|
|
79
|
+
edgesCreated += result.edges;
|
|
80
|
+
nodesCreated += result.nodes;
|
|
77
81
|
}
|
|
78
82
|
|
|
79
|
-
|
|
83
|
+
// Flush all nodes and edges
|
|
84
|
+
await graph.addNodes(allNodes);
|
|
85
|
+
await graph.addEdges(allEdges);
|
|
86
|
+
|
|
87
|
+
logger.info('Analysis complete', { nodesCreated, edgesCreated });
|
|
80
88
|
|
|
81
89
|
return createSuccessResult(
|
|
82
|
-
{ nodes:
|
|
90
|
+
{ nodes: nodesCreated, edges: edgesCreated },
|
|
83
91
|
{ routesAnalyzed: routes.length }
|
|
84
92
|
);
|
|
85
93
|
} catch (error) {
|
|
86
94
|
logger.error('Analysis failed', { error });
|
|
87
|
-
|
|
95
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
96
|
+
return createErrorResult(err);
|
|
88
97
|
}
|
|
89
98
|
}
|
|
90
99
|
|
|
@@ -93,16 +102,19 @@ export class ExpressResponseAnalyzer extends Plugin {
|
|
|
93
102
|
*/
|
|
94
103
|
private async analyzeRouteResponses(
|
|
95
104
|
route: NodeRecord,
|
|
96
|
-
graph: PluginContext['graph']
|
|
97
|
-
|
|
105
|
+
graph: PluginContext['graph'],
|
|
106
|
+
nodes: NodeRecord[],
|
|
107
|
+
edges: Array<{ type: string; src: string; dst: string; metadata?: unknown }>
|
|
108
|
+
): Promise<{ nodes: number; edges: number }> {
|
|
98
109
|
let edgesCreated = 0;
|
|
110
|
+
let nodesCreated = 0;
|
|
99
111
|
|
|
100
112
|
try {
|
|
101
113
|
// Get HANDLED_BY edges to find handler function
|
|
102
114
|
const handledByEdges = await graph.getOutgoingEdges(route.id, ['HANDLED_BY']);
|
|
103
115
|
|
|
104
116
|
if (handledByEdges.length === 0) {
|
|
105
|
-
return 0;
|
|
117
|
+
return { nodes: 0, edges: 0 };
|
|
106
118
|
}
|
|
107
119
|
|
|
108
120
|
// Get handler function node
|
|
@@ -110,7 +122,7 @@ export class ExpressResponseAnalyzer extends Plugin {
|
|
|
110
122
|
const handlerNode = await graph.getNode(handlerEdge.dst);
|
|
111
123
|
|
|
112
124
|
if (!handlerNode || !handlerNode.file) {
|
|
113
|
-
return 0;
|
|
125
|
+
return { nodes: 0, edges: 0 };
|
|
114
126
|
}
|
|
115
127
|
|
|
116
128
|
// Parse the file and find response calls in handler
|
|
@@ -130,18 +142,21 @@ export class ExpressResponseAnalyzer extends Plugin {
|
|
|
130
142
|
// Create RESPONDS_WITH edges
|
|
131
143
|
for (const call of responseCalls) {
|
|
132
144
|
// Try to resolve to existing variable, or create a unique response node
|
|
133
|
-
const
|
|
145
|
+
const result = await this.resolveOrCreateResponseNode(
|
|
134
146
|
graph,
|
|
135
147
|
handlerNode.file,
|
|
136
148
|
call,
|
|
137
149
|
route.id,
|
|
138
|
-
handlerNode.id // Handler's semantic ID for scope resolution
|
|
150
|
+
handlerNode.id, // Handler's semantic ID for scope resolution
|
|
151
|
+
nodes
|
|
139
152
|
);
|
|
140
153
|
|
|
141
|
-
|
|
154
|
+
nodesCreated += result.nodesCreated;
|
|
155
|
+
|
|
156
|
+
edges.push({
|
|
142
157
|
type: 'RESPONDS_WITH',
|
|
143
158
|
src: route.id,
|
|
144
|
-
dst:
|
|
159
|
+
dst: result.nodeId,
|
|
145
160
|
metadata: {
|
|
146
161
|
responseMethod: call.method
|
|
147
162
|
}
|
|
@@ -152,7 +167,7 @@ export class ExpressResponseAnalyzer extends Plugin {
|
|
|
152
167
|
// Silent - per-route errors shouldn't spam logs
|
|
153
168
|
}
|
|
154
169
|
|
|
155
|
-
return edgesCreated;
|
|
170
|
+
return { nodes: nodesCreated, edges: edgesCreated };
|
|
156
171
|
}
|
|
157
172
|
|
|
158
173
|
/**
|
|
@@ -327,15 +342,17 @@ export class ExpressResponseAnalyzer extends Plugin {
|
|
|
327
342
|
* @param call - Response call info (includes identifierName)
|
|
328
343
|
* @param routeId - Route ID (for metadata)
|
|
329
344
|
* @param handlerSemanticId - Handler function's semantic ID (for scope matching)
|
|
330
|
-
* @
|
|
345
|
+
* @param nodes - Array to collect nodes for batch insertion
|
|
346
|
+
* @returns Object with nodeId and nodesCreated count
|
|
331
347
|
*/
|
|
332
348
|
private async resolveOrCreateResponseNode(
|
|
333
349
|
graph: PluginContext['graph'],
|
|
334
350
|
file: string,
|
|
335
351
|
call: ResponseCallInfo,
|
|
336
352
|
routeId: string,
|
|
337
|
-
handlerSemanticId: string
|
|
338
|
-
|
|
353
|
+
handlerSemanticId: string,
|
|
354
|
+
nodes: NodeRecord[]
|
|
355
|
+
): Promise<{ nodeId: string; nodesCreated: number }> {
|
|
339
356
|
const { argLine, argColumn, argType, identifierName } = call;
|
|
340
357
|
|
|
341
358
|
// For Identifier arguments, try to find existing variable/parameter
|
|
@@ -349,20 +366,21 @@ export class ExpressResponseAnalyzer extends Plugin {
|
|
|
349
366
|
);
|
|
350
367
|
|
|
351
368
|
if (existingNodeId) {
|
|
352
|
-
return existingNodeId; // Use existing node, no stub needed
|
|
369
|
+
return { nodeId: existingNodeId, nodesCreated: 0 }; // Use existing node, no stub needed
|
|
353
370
|
}
|
|
354
371
|
// Fall through to create stub if not found (external/global variables)
|
|
355
372
|
}
|
|
356
373
|
|
|
357
374
|
// For non-Identifier or not-found, create stub node (existing logic)
|
|
358
|
-
|
|
359
|
-
graph,
|
|
375
|
+
const nodeId = this.createResponseArgumentNode(
|
|
360
376
|
file,
|
|
361
377
|
argLine,
|
|
362
378
|
argColumn,
|
|
363
379
|
argType,
|
|
364
|
-
routeId
|
|
380
|
+
routeId,
|
|
381
|
+
nodes
|
|
365
382
|
);
|
|
383
|
+
return { nodeId, nodesCreated: 1 };
|
|
366
384
|
}
|
|
367
385
|
|
|
368
386
|
/**
|
|
@@ -552,84 +570,50 @@ export class ExpressResponseAnalyzer extends Plugin {
|
|
|
552
570
|
/**
|
|
553
571
|
* Create a node for the response argument
|
|
554
572
|
*/
|
|
555
|
-
private
|
|
556
|
-
graph: PluginContext['graph'],
|
|
573
|
+
private createResponseArgumentNode(
|
|
557
574
|
file: string,
|
|
558
575
|
line: number,
|
|
559
576
|
column: number,
|
|
560
577
|
astType: string,
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
578
|
+
_routeId: string,
|
|
579
|
+
nodes: NodeRecord[]
|
|
580
|
+
): string {
|
|
581
|
+
const counter = this.responseNodeCounter++;
|
|
582
|
+
|
|
583
|
+
// Map AST type to node type and create appropriate node via NodeFactory
|
|
564
584
|
switch (astType) {
|
|
565
585
|
case 'ObjectExpression': {
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
type: 'OBJECT_LITERAL',
|
|
572
|
-
name: '<response>',
|
|
573
|
-
file,
|
|
574
|
-
line,
|
|
575
|
-
column,
|
|
576
|
-
parentRouteId: routeId
|
|
577
|
-
} as NodeRecord);
|
|
578
|
-
return id;
|
|
586
|
+
const node = NodeFactory.createObjectLiteral(file, line, column, {
|
|
587
|
+
argIndex: counter
|
|
588
|
+
});
|
|
589
|
+
nodes.push(node as NodeRecord);
|
|
590
|
+
return node.id;
|
|
579
591
|
}
|
|
580
592
|
case 'Identifier': {
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
type: 'VARIABLE',
|
|
587
|
-
name: '<response>',
|
|
588
|
-
file,
|
|
589
|
-
line,
|
|
590
|
-
column
|
|
591
|
-
} as NodeRecord);
|
|
592
|
-
return id;
|
|
593
|
+
const node = NodeFactory.createVariableDeclaration('<response>', file, line, column, {
|
|
594
|
+
counter
|
|
595
|
+
});
|
|
596
|
+
nodes.push(node as NodeRecord);
|
|
597
|
+
return node.id;
|
|
593
598
|
}
|
|
594
599
|
case 'CallExpression': {
|
|
595
|
-
const
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
name: '<response>',
|
|
601
|
-
file,
|
|
602
|
-
line,
|
|
603
|
-
column
|
|
604
|
-
} as NodeRecord);
|
|
605
|
-
return id;
|
|
600
|
+
const node = NodeFactory.createCallSite('<response>', file, line, column, {
|
|
601
|
+
counter
|
|
602
|
+
});
|
|
603
|
+
nodes.push(node as NodeRecord);
|
|
604
|
+
return node.id;
|
|
606
605
|
}
|
|
607
606
|
case 'ArrayExpression': {
|
|
608
|
-
const
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
name: '<response>',
|
|
614
|
-
file,
|
|
615
|
-
line,
|
|
616
|
-
column
|
|
617
|
-
} as NodeRecord);
|
|
618
|
-
return id;
|
|
607
|
+
const node = NodeFactory.createArrayLiteral(file, line, column, {
|
|
608
|
+
argIndex: counter
|
|
609
|
+
});
|
|
610
|
+
nodes.push(node as NodeRecord);
|
|
611
|
+
return node.id;
|
|
619
612
|
}
|
|
620
613
|
default: {
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
await graph.addNode({
|
|
625
|
-
id,
|
|
626
|
-
type: 'EXPRESSION',
|
|
627
|
-
name: '<response>',
|
|
628
|
-
file,
|
|
629
|
-
line,
|
|
630
|
-
column
|
|
631
|
-
} as NodeRecord);
|
|
632
|
-
return id;
|
|
614
|
+
const node = NodeFactory.createExpression(astType, file, line, column);
|
|
615
|
+
nodes.push(node as NodeRecord);
|
|
616
|
+
return node.id;
|
|
633
617
|
}
|
|
634
618
|
}
|
|
635
619
|
}
|
|
@@ -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
|
/**
|
|
@@ -35,6 +35,8 @@ interface EndpointNode {
|
|
|
35
35
|
routerName: string;
|
|
36
36
|
handlerLine: number;
|
|
37
37
|
handlerColumn: number;
|
|
38
|
+
handlerStart?: number; // Byte offset for inline handlers
|
|
39
|
+
handlerName?: string; // Function name for named handler references
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
/**
|
|
@@ -69,7 +71,6 @@ export class ExpressRouteAnalyzer extends Plugin {
|
|
|
69
71
|
return {
|
|
70
72
|
name: 'ExpressRouteAnalyzer',
|
|
71
73
|
phase: 'ANALYSIS',
|
|
72
|
-
priority: 75, // После JSASTAnalyzer (80) - меньший приоритет = позже
|
|
73
74
|
creates: {
|
|
74
75
|
nodes: ['http:route', 'express:middleware'],
|
|
75
76
|
edges: ['CONTAINS', 'USES_MIDDLEWARE', 'HANDLED_BY']
|
|
@@ -252,6 +253,18 @@ export class ExpressRouteAnalyzer extends Plugin {
|
|
|
252
253
|
// Создаём http:route
|
|
253
254
|
const endpointId = `http:route#${method.toUpperCase()}:${routePath}#${module.file}#${getLine(node)}`;
|
|
254
255
|
|
|
256
|
+
// Determine handler identification for HANDLED_BY linking:
|
|
257
|
+
// - Inline functions (arrow/function expressions): use byte offset (start)
|
|
258
|
+
// - Named references (Identifier): use function name
|
|
259
|
+
let handlerStart: number | undefined;
|
|
260
|
+
let handlerName: string | undefined;
|
|
261
|
+
if (actualHandler.type === 'ArrowFunctionExpression' ||
|
|
262
|
+
actualHandler.type === 'FunctionExpression') {
|
|
263
|
+
handlerStart = (actualHandler as { start?: number }).start;
|
|
264
|
+
} else if (actualHandler.type === 'Identifier') {
|
|
265
|
+
handlerName = (actualHandler as Identifier).name;
|
|
266
|
+
}
|
|
267
|
+
|
|
255
268
|
endpoints.push({
|
|
256
269
|
id: endpointId,
|
|
257
270
|
type: 'http:route',
|
|
@@ -266,7 +279,9 @@ export class ExpressRouteAnalyzer extends Plugin {
|
|
|
266
279
|
: getLine(node),
|
|
267
280
|
handlerColumn: actualHandler.loc
|
|
268
281
|
? getColumn(actualHandler)
|
|
269
|
-
: getColumn(node)
|
|
282
|
+
: getColumn(node),
|
|
283
|
+
handlerStart,
|
|
284
|
+
handlerName
|
|
270
285
|
});
|
|
271
286
|
|
|
272
287
|
// Обрабатываем middleware
|
|
@@ -356,56 +371,47 @@ export class ExpressRouteAnalyzer extends Plugin {
|
|
|
356
371
|
}
|
|
357
372
|
});
|
|
358
373
|
|
|
359
|
-
//
|
|
374
|
+
// Collect all nodes and edges for batch operations
|
|
375
|
+
const nodes: NodeRecord[] = [];
|
|
376
|
+
const edges: Array<{ type: string; src: string; dst: string }> = [];
|
|
377
|
+
|
|
378
|
+
// Prepare ENDPOINT nodes
|
|
360
379
|
for (const endpoint of endpoints) {
|
|
361
|
-
// Сохраняем handler location ПЕРЕД destructuring
|
|
362
|
-
const handlerLine = endpoint.handlerLine;
|
|
363
|
-
const handlerColumn = endpoint.handlerColumn;
|
|
364
380
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
365
|
-
const { handlerLine: _hl, handlerColumn: _hc, routerName, ...endpointData } = endpoint;
|
|
366
|
-
|
|
367
|
-
|
|
381
|
+
const { handlerLine: _hl, handlerColumn: _hc, handlerStart, handlerName, routerName, ...endpointData } = endpoint;
|
|
382
|
+
|
|
383
|
+
// Store handler identification in metadata for ExpressHandlerLinker enricher
|
|
384
|
+
const nodeData = {
|
|
385
|
+
...endpointData,
|
|
386
|
+
metadata: {
|
|
387
|
+
...(handlerStart !== undefined && { handlerStart }),
|
|
388
|
+
...(handlerName !== undefined && { handlerName })
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
nodes.push(nodeData as unknown as NodeRecord);
|
|
368
392
|
endpointsCreated++;
|
|
369
393
|
|
|
370
394
|
// MODULE -> CONTAINS -> ENDPOINT
|
|
371
|
-
|
|
395
|
+
edges.push({
|
|
372
396
|
type: 'CONTAINS',
|
|
373
397
|
src: module.id,
|
|
374
398
|
dst: endpoint.id
|
|
375
399
|
});
|
|
376
400
|
edgesCreated++;
|
|
377
401
|
|
|
378
|
-
//
|
|
379
|
-
//
|
|
380
|
-
if (handlerLine) {
|
|
381
|
-
for await (const fn of graph.queryNodes({
|
|
382
|
-
type: 'FUNCTION',
|
|
383
|
-
file: module.file
|
|
384
|
-
})) {
|
|
385
|
-
// Проверяем точное совпадение line и column
|
|
386
|
-
if (fn.line === handlerLine && fn.column === handlerColumn) {
|
|
387
|
-
// ENDPOINT -> HANDLED_BY -> FUNCTION
|
|
388
|
-
await graph.addEdge({
|
|
389
|
-
type: 'HANDLED_BY',
|
|
390
|
-
src: endpoint.id,
|
|
391
|
-
dst: fn.id
|
|
392
|
-
});
|
|
393
|
-
edgesCreated++;
|
|
394
|
-
break;
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
}
|
|
402
|
+
// NOTE: HANDLED_BY edges are created by ExpressHandlerLinker enricher
|
|
403
|
+
// using handlerStart (byte offset) or handlerName stored in node metadata
|
|
398
404
|
}
|
|
399
405
|
|
|
400
|
-
//
|
|
406
|
+
// Prepare MIDDLEWARE nodes
|
|
401
407
|
for (const middleware of middlewares) {
|
|
402
|
-
const { endpointId, order, ...middlewareData } = middleware;
|
|
408
|
+
const { endpointId, order: _order, ...middlewareData } = middleware;
|
|
403
409
|
|
|
404
|
-
|
|
410
|
+
nodes.push(middlewareData as unknown as NodeRecord);
|
|
405
411
|
middlewareCreated++;
|
|
406
412
|
|
|
407
413
|
// MODULE -> CONTAINS -> MIDDLEWARE
|
|
408
|
-
|
|
414
|
+
edges.push({
|
|
409
415
|
type: 'CONTAINS',
|
|
410
416
|
src: module.id,
|
|
411
417
|
dst: middleware.id
|
|
@@ -415,14 +421,20 @@ export class ExpressRouteAnalyzer extends Plugin {
|
|
|
415
421
|
// Если есть связанный endpoint
|
|
416
422
|
if (endpointId) {
|
|
417
423
|
// ENDPOINT -> USES_MIDDLEWARE -> MIDDLEWARE
|
|
418
|
-
|
|
424
|
+
edges.push({
|
|
419
425
|
type: 'USES_MIDDLEWARE',
|
|
420
426
|
src: endpointId,
|
|
421
427
|
dst: middleware.id
|
|
422
428
|
});
|
|
423
429
|
edgesCreated++;
|
|
424
430
|
}
|
|
431
|
+
}
|
|
425
432
|
|
|
433
|
+
// Flush nodes first so they exist for edge queries
|
|
434
|
+
await graph.addNodes(nodes);
|
|
435
|
+
|
|
436
|
+
// Query for HANDLED_BY edges (needs nodes to exist first)
|
|
437
|
+
for (const middleware of middlewares) {
|
|
426
438
|
// Ищем FUNCTION ноду для middleware (если это именованная функция)
|
|
427
439
|
if (!middleware.name.startsWith('inline:')) {
|
|
428
440
|
for await (const fn of graph.queryNodes({
|
|
@@ -431,7 +443,7 @@ export class ExpressRouteAnalyzer extends Plugin {
|
|
|
431
443
|
name: middleware.name
|
|
432
444
|
})) {
|
|
433
445
|
// MIDDLEWARE -> HANDLED_BY -> FUNCTION
|
|
434
|
-
|
|
446
|
+
edges.push({
|
|
435
447
|
type: 'HANDLED_BY',
|
|
436
448
|
src: middleware.id,
|
|
437
449
|
dst: fn.id
|
|
@@ -441,7 +453,10 @@ export class ExpressRouteAnalyzer extends Plugin {
|
|
|
441
453
|
}
|
|
442
454
|
}
|
|
443
455
|
}
|
|
444
|
-
|
|
456
|
+
|
|
457
|
+
// Flush all edges
|
|
458
|
+
await graph.addEdges(edges);
|
|
459
|
+
} catch {
|
|
445
460
|
// Silent - per-module errors shouldn't spam logs
|
|
446
461
|
}
|
|
447
462
|
|