@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
|
@@ -14,8 +14,7 @@ import type {
|
|
|
14
14
|
TSPropertySignature,
|
|
15
15
|
TSMethodSignature,
|
|
16
16
|
Identifier,
|
|
17
|
-
Expression
|
|
18
|
-
TSExpressionWithTypeArguments
|
|
17
|
+
Expression
|
|
19
18
|
} from '@babel/types';
|
|
20
19
|
import type { NodePath } from '@babel/traverse';
|
|
21
20
|
import { ASTVisitor, type VisitorModule, type VisitorCollections, type VisitorHandlers } from './ASTVisitor.js';
|
|
@@ -26,7 +25,7 @@ import type {
|
|
|
26
25
|
EnumDeclarationInfo,
|
|
27
26
|
EnumMemberInfo
|
|
28
27
|
} from '../types.js';
|
|
29
|
-
import { ScopeTracker } from '../../../../core/ScopeTracker.js';
|
|
28
|
+
import type { ScopeTracker } from '../../../../core/ScopeTracker.js';
|
|
30
29
|
import { computeSemanticId } from '../../../../core/SemanticId.js';
|
|
31
30
|
import { getLine, getColumn } from '../utils/location.js';
|
|
32
31
|
|
|
@@ -17,9 +17,8 @@ import type {
|
|
|
17
17
|
import type { NodePath } from '@babel/traverse';
|
|
18
18
|
import { ASTVisitor, type VisitorModule, type VisitorCollections, type VisitorHandlers, type CounterRef } from './ASTVisitor.js';
|
|
19
19
|
import { ExpressionEvaluator } from '../ExpressionEvaluator.js';
|
|
20
|
-
import { ScopeTracker } from '../../../../core/ScopeTracker.js';
|
|
20
|
+
import type { ScopeTracker } from '../../../../core/ScopeTracker.js';
|
|
21
21
|
import { IdGenerator } from '../IdGenerator.js';
|
|
22
|
-
import { NodeFactory } from '../../../../core/NodeFactory.js';
|
|
23
22
|
|
|
24
23
|
/**
|
|
25
24
|
* Variable info extracted from pattern
|
|
@@ -78,31 +77,6 @@ interface ClassInstantiationInfo {
|
|
|
78
77
|
parentScopeId: string;
|
|
79
78
|
}
|
|
80
79
|
|
|
81
|
-
/**
|
|
82
|
-
* Literal/expression info for data flow
|
|
83
|
-
*/
|
|
84
|
-
interface LiteralExpressionInfo {
|
|
85
|
-
id: string;
|
|
86
|
-
type: 'EXPRESSION';
|
|
87
|
-
expressionType: string;
|
|
88
|
-
path: string;
|
|
89
|
-
baseName: string;
|
|
90
|
-
propertyPath: string[] | null;
|
|
91
|
-
arrayIndex?: number;
|
|
92
|
-
file: string;
|
|
93
|
-
line: number;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Variable assignment info for data flow
|
|
98
|
-
*/
|
|
99
|
-
interface VariableAssignmentInfo {
|
|
100
|
-
variableId: string;
|
|
101
|
-
sourceId: string | null;
|
|
102
|
-
sourceName?: string;
|
|
103
|
-
sourceType: string;
|
|
104
|
-
file?: string;
|
|
105
|
-
}
|
|
106
80
|
|
|
107
81
|
/**
|
|
108
82
|
* Call info extracted from CallExpression (REG-223)
|
|
@@ -5,6 +5,22 @@
|
|
|
5
5
|
* 1. Поиск сервисов/компонентов в проекте
|
|
6
6
|
* 2. Создание SERVICE нод
|
|
7
7
|
* 3. Возврат манифеста для последующих фаз
|
|
8
|
+
*
|
|
9
|
+
* IMPORTANT CONTRACT:
|
|
10
|
+
* Discovery plugins MUST return found services via `result.metadata.services`
|
|
11
|
+
* (not `result.data.services` which doesn't exist in PluginResult interface).
|
|
12
|
+
*
|
|
13
|
+
* Example:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* return createSuccessResult(
|
|
16
|
+
* { nodes: services.length, edges: 0 },
|
|
17
|
+
* { services: foundServices } // <-- This becomes result.metadata.services
|
|
18
|
+
* );
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* The Orchestrator reads services from result.metadata.services to build
|
|
22
|
+
* the indexing queue. If services are not returned here, they won't be indexed
|
|
23
|
+
* even if SERVICE nodes were created in the graph.
|
|
8
24
|
*/
|
|
9
25
|
|
|
10
26
|
import { Plugin } from '../Plugin.js';
|
|
@@ -19,7 +35,6 @@ export abstract class DiscoveryPlugin extends Plugin {
|
|
|
19
35
|
return {
|
|
20
36
|
name: this.constructor.name,
|
|
21
37
|
phase: 'DISCOVERY',
|
|
22
|
-
priority: 100,
|
|
23
38
|
creates: {
|
|
24
39
|
nodes: ['SERVICE'],
|
|
25
40
|
edges: []
|
|
@@ -35,16 +50,32 @@ export abstract class DiscoveryPlugin extends Plugin {
|
|
|
35
50
|
* context.projectPath - корневая директория проекта
|
|
36
51
|
*
|
|
37
52
|
* @returns Promise<PluginResult>
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
53
|
+
*
|
|
54
|
+
* CRITICAL: Services MUST be returned via result.metadata.services:
|
|
55
|
+
*
|
|
56
|
+
* ```typescript
|
|
57
|
+
* return createSuccessResult(
|
|
58
|
+
* { nodes: services.length, edges: 0 },
|
|
59
|
+
* { services: foundServices } // <-- metadata.services
|
|
60
|
+
* );
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* ServiceInfo interface:
|
|
64
|
+
* ```typescript
|
|
65
|
+
* interface ServiceInfo {
|
|
66
|
+
* id: string; // Unique service identifier
|
|
67
|
+
* name: string; // Human-readable name
|
|
68
|
+
* path: string; // Directory path
|
|
69
|
+
* type: string; // Service type (e.g., 'express', 'fastify')
|
|
70
|
+
* metadata: {
|
|
71
|
+
* entrypoint?: string; // Main file path (e.g., 'src/index.ts')
|
|
72
|
+
* // ... other service-specific metadata
|
|
73
|
+
* };
|
|
74
|
+
* }
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* If services are created in graph but NOT returned via metadata.services,
|
|
78
|
+
* Orchestrator will show "0 services" and won't index anything.
|
|
48
79
|
*/
|
|
49
80
|
abstract execute(context: PluginContext): Promise<PluginResult>;
|
|
50
81
|
}
|
|
@@ -47,7 +47,6 @@ export class MonorepoServiceDiscovery extends DiscoveryPlugin {
|
|
|
47
47
|
return {
|
|
48
48
|
name: 'MonorepoServiceDiscovery',
|
|
49
49
|
phase: 'DISCOVERY',
|
|
50
|
-
priority: 100,
|
|
51
50
|
creates: {
|
|
52
51
|
nodes: ['SERVICE'],
|
|
53
52
|
edges: []
|
|
@@ -112,7 +111,8 @@ export class MonorepoServiceDiscovery extends DiscoveryPlugin {
|
|
|
112
111
|
{ services }
|
|
113
112
|
);
|
|
114
113
|
} catch (error) {
|
|
115
|
-
|
|
114
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
115
|
+
return createErrorResult(err);
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -45,7 +45,6 @@ export class SimpleProjectDiscovery extends Plugin {
|
|
|
45
45
|
return {
|
|
46
46
|
name: 'SimpleProjectDiscovery',
|
|
47
47
|
phase: 'DISCOVERY',
|
|
48
|
-
priority: 50, // Lower priority than specialized discovery plugins
|
|
49
48
|
creates: {
|
|
50
49
|
nodes: ['SERVICE'],
|
|
51
50
|
edges: []
|
|
@@ -101,7 +100,8 @@ export class SimpleProjectDiscovery extends Plugin {
|
|
|
101
100
|
|
|
102
101
|
return createSuccessResult({ nodes: 1, edges: 0 }, { services: [service] });
|
|
103
102
|
} catch (error) {
|
|
104
|
-
|
|
103
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
104
|
+
return createErrorResult(err);
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -42,7 +42,6 @@ export class WorkspaceDiscovery extends DiscoveryPlugin {
|
|
|
42
42
|
return {
|
|
43
43
|
name: 'WorkspaceDiscovery',
|
|
44
44
|
phase: 'DISCOVERY',
|
|
45
|
-
priority: 110, // Higher than MonorepoServiceDiscovery (100)
|
|
46
45
|
creates: {
|
|
47
46
|
nodes: ['SERVICE'],
|
|
48
47
|
edges: []
|
|
@@ -97,7 +96,8 @@ export class WorkspaceDiscovery extends DiscoveryPlugin {
|
|
|
97
96
|
throw new Error(`Unknown workspace type: ${detection.type}`);
|
|
98
97
|
}
|
|
99
98
|
} catch (error) {
|
|
100
|
-
|
|
99
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
100
|
+
return createErrorResult(err);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
logger.debug('Workspace config parsed', {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Uses minimatch for pattern matching.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { readdirSync,
|
|
8
|
+
import { readdirSync, existsSync, readFileSync, lstatSync } from 'fs';
|
|
9
9
|
import { join, relative } from 'path';
|
|
10
10
|
import { minimatch } from 'minimatch';
|
|
11
11
|
import type { WorkspaceConfig } from './parsers.js';
|
|
@@ -71,11 +71,11 @@ export class AliasTracker extends Plugin {
|
|
|
71
71
|
return {
|
|
72
72
|
name: 'AliasTracker',
|
|
73
73
|
phase: 'ENRICHMENT',
|
|
74
|
-
priority: 60, // После MethodCallResolver (50)
|
|
75
74
|
creates: {
|
|
76
75
|
nodes: [],
|
|
77
76
|
edges: ['CALLS', 'ALIAS_OF']
|
|
78
|
-
}
|
|
77
|
+
},
|
|
78
|
+
dependencies: ['MethodCallResolver']
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
81
|
|
|
@@ -63,7 +63,6 @@ export class ArgumentParameterLinker extends Plugin {
|
|
|
63
63
|
return {
|
|
64
64
|
name: 'ArgumentParameterLinker',
|
|
65
65
|
phase: 'ENRICHMENT',
|
|
66
|
-
priority: 45, // Runs AFTER MethodCallResolver (50) which creates required CALLS edges
|
|
67
66
|
creates: {
|
|
68
67
|
nodes: [],
|
|
69
68
|
edges: ['RECEIVES_ARGUMENT']
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExpressHandlerLinker - creates HANDLED_BY edges connecting
|
|
3
|
+
* http:route nodes to their handler FUNCTION nodes.
|
|
4
|
+
*
|
|
5
|
+
* This enricher runs AFTER ExpressRouteAnalyzer (analysis phase) and
|
|
6
|
+
* creates cross-references between routes and functions.
|
|
7
|
+
*
|
|
8
|
+
* Strategy:
|
|
9
|
+
* 1. For inline handlers (arrow/function expressions): match by byte offset (start)
|
|
10
|
+
* 2. For named handlers (Identifier references): match by function name
|
|
11
|
+
*
|
|
12
|
+
* This approach avoids duplicating semantic ID computation logic
|
|
13
|
+
* (which is solely owned by JSASTAnalyzer/ScopeTracker).
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { Plugin, createSuccessResult } from '../Plugin.js';
|
|
17
|
+
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
18
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Extended http:route node with handler identification fields.
|
|
22
|
+
* Note: These fields are stored at the top level after metadata parsing,
|
|
23
|
+
* not nested under a metadata object.
|
|
24
|
+
*/
|
|
25
|
+
interface HttpRouteNode extends BaseNodeRecord {
|
|
26
|
+
type: 'http:route';
|
|
27
|
+
handlerStart?: number; // Byte offset for inline handlers
|
|
28
|
+
handlerName?: string; // Function name for named handlers
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Extended FUNCTION node with start field
|
|
33
|
+
*/
|
|
34
|
+
interface FunctionNode extends BaseNodeRecord {
|
|
35
|
+
type: 'FUNCTION';
|
|
36
|
+
start?: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export class ExpressHandlerLinker extends Plugin {
|
|
40
|
+
get metadata(): PluginMetadata {
|
|
41
|
+
return {
|
|
42
|
+
name: 'ExpressHandlerLinker',
|
|
43
|
+
phase: 'ENRICHMENT',
|
|
44
|
+
creates: {
|
|
45
|
+
nodes: [],
|
|
46
|
+
edges: ['HANDLED_BY']
|
|
47
|
+
},
|
|
48
|
+
dependencies: ['JSASTAnalyzer', 'ExpressRouteAnalyzer']
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async execute(context: PluginContext): Promise<PluginResult> {
|
|
53
|
+
const { graph, onProgress } = context;
|
|
54
|
+
const logger = this.log(context);
|
|
55
|
+
|
|
56
|
+
logger.info('Starting Express handler linking');
|
|
57
|
+
|
|
58
|
+
const startTime = Date.now();
|
|
59
|
+
|
|
60
|
+
let routesProcessed = 0;
|
|
61
|
+
let edgesCreated = 0;
|
|
62
|
+
let noHandlerInfo = 0;
|
|
63
|
+
let handlerNotFound = 0;
|
|
64
|
+
|
|
65
|
+
// Collect all http:route nodes
|
|
66
|
+
const routeNodes: HttpRouteNode[] = [];
|
|
67
|
+
for await (const node of graph.queryNodes({ type: 'http:route' })) {
|
|
68
|
+
routeNodes.push(node as HttpRouteNode);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
logger.info('Found routes to process', { count: routeNodes.length });
|
|
72
|
+
|
|
73
|
+
if (routeNodes.length === 0) {
|
|
74
|
+
return createSuccessResult({ nodes: 0, edges: 0 });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Group routes by file for efficient batch lookup
|
|
78
|
+
const routesByFile = new Map<string, HttpRouteNode[]>();
|
|
79
|
+
for (const route of routeNodes) {
|
|
80
|
+
const file = route.file;
|
|
81
|
+
if (!file) continue;
|
|
82
|
+
const routes = routesByFile.get(file) || [];
|
|
83
|
+
routes.push(route);
|
|
84
|
+
routesByFile.set(file, routes);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Process routes file by file
|
|
88
|
+
for (const [file, fileRoutes] of routesByFile) {
|
|
89
|
+
// Build function lookup maps for this file
|
|
90
|
+
const functionsByStart = new Map<number, string>(); // start -> nodeId
|
|
91
|
+
const functionsByName = new Map<string, string>(); // name -> nodeId (first match)
|
|
92
|
+
|
|
93
|
+
for await (const fn of graph.queryNodes({ type: 'FUNCTION', file })) {
|
|
94
|
+
const funcNode = fn as FunctionNode;
|
|
95
|
+
if (funcNode.start !== undefined) {
|
|
96
|
+
functionsByStart.set(funcNode.start, funcNode.id);
|
|
97
|
+
}
|
|
98
|
+
if (funcNode.name && !functionsByName.has(funcNode.name)) {
|
|
99
|
+
functionsByName.set(funcNode.name, funcNode.id);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Link routes to handlers
|
|
104
|
+
for (const route of fileRoutes) {
|
|
105
|
+
routesProcessed++;
|
|
106
|
+
|
|
107
|
+
// Report progress
|
|
108
|
+
if (onProgress && routesProcessed % 20 === 0) {
|
|
109
|
+
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
110
|
+
onProgress({
|
|
111
|
+
phase: 'enrichment',
|
|
112
|
+
currentPlugin: 'ExpressHandlerLinker',
|
|
113
|
+
message: `Linking handlers ${routesProcessed}/${routeNodes.length} (${elapsed}s)`,
|
|
114
|
+
totalFiles: routeNodes.length,
|
|
115
|
+
processedFiles: routesProcessed
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Handler identification is stored at top level after metadata parsing
|
|
120
|
+
const handlerStart = route.handlerStart;
|
|
121
|
+
const handlerName = route.handlerName;
|
|
122
|
+
|
|
123
|
+
// Try to find handler function
|
|
124
|
+
let handlerId: string | undefined;
|
|
125
|
+
|
|
126
|
+
if (handlerStart !== undefined) {
|
|
127
|
+
// Inline handler: lookup by byte offset
|
|
128
|
+
handlerId = functionsByStart.get(handlerStart);
|
|
129
|
+
} else if (handlerName !== undefined) {
|
|
130
|
+
// Named handler: lookup by name
|
|
131
|
+
handlerId = functionsByName.get(handlerName);
|
|
132
|
+
} else {
|
|
133
|
+
noHandlerInfo++;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (!handlerId) {
|
|
138
|
+
handlerNotFound++;
|
|
139
|
+
logger.debug('Handler not found', {
|
|
140
|
+
route: route.id,
|
|
141
|
+
handlerStart,
|
|
142
|
+
handlerName,
|
|
143
|
+
file
|
|
144
|
+
});
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Create HANDLED_BY edge: route -> handler function
|
|
149
|
+
await graph.addEdge({
|
|
150
|
+
type: 'HANDLED_BY',
|
|
151
|
+
src: route.id,
|
|
152
|
+
dst: handlerId
|
|
153
|
+
});
|
|
154
|
+
edgesCreated++;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const totalTime = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
159
|
+
logger.info('Complete', {
|
|
160
|
+
routesProcessed,
|
|
161
|
+
edgesCreated,
|
|
162
|
+
noHandlerInfo,
|
|
163
|
+
handlerNotFound,
|
|
164
|
+
time: `${totalTime}s`
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
return createSuccessResult(
|
|
168
|
+
{ nodes: 0, edges: edgesCreated },
|
|
169
|
+
{
|
|
170
|
+
routesProcessed,
|
|
171
|
+
edgesCreated,
|
|
172
|
+
noHandlerInfo,
|
|
173
|
+
handlerNotFound,
|
|
174
|
+
timeMs: Date.now() - startTime
|
|
175
|
+
}
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -16,6 +16,7 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
|
16
16
|
import type { BaseNodeRecord } from '@grafema/types';
|
|
17
17
|
import { dirname, resolve } from 'path';
|
|
18
18
|
import { StrictModeError } from '../../errors/GrafemaError.js';
|
|
19
|
+
import { resolveModulePath as resolveModulePathUtil } from '../../utils/moduleResolution.js';
|
|
19
20
|
|
|
20
21
|
// === INTERFACES ===
|
|
21
22
|
|
|
@@ -36,10 +37,6 @@ interface ExportNode extends BaseNodeRecord {
|
|
|
36
37
|
source?: string; // Re-export source (if re-exporting)
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
interface ExportIndexEntry {
|
|
40
|
-
node: ExportNode;
|
|
41
|
-
exportKey: string; // "default" | "named:functionName"
|
|
42
|
-
}
|
|
43
40
|
|
|
44
41
|
interface ExternalModuleResult {
|
|
45
42
|
type: 'external';
|
|
@@ -58,7 +55,6 @@ export class FunctionCallResolver extends Plugin {
|
|
|
58
55
|
return {
|
|
59
56
|
name: 'FunctionCallResolver',
|
|
60
57
|
phase: 'ENRICHMENT',
|
|
61
|
-
priority: 80, // After ImportExportLinker (90)
|
|
62
58
|
creates: {
|
|
63
59
|
nodes: ['EXTERNAL_MODULE'],
|
|
64
60
|
edges: ['CALLS']
|
|
@@ -353,22 +349,21 @@ export class FunctionCallResolver extends Plugin {
|
|
|
353
349
|
* @param fileIndex - Set or Map of known file paths for existence checking
|
|
354
350
|
* @returns Resolved file path or null if not found
|
|
355
351
|
*/
|
|
352
|
+
/**
|
|
353
|
+
* Resolve module path using in-memory file index.
|
|
354
|
+
* Uses shared utility from moduleResolution.ts (REG-320).
|
|
355
|
+
* Now supports all extensions (.mjs, .cjs, etc.) - fixes previous bug.
|
|
356
|
+
*/
|
|
356
357
|
private resolveModulePath(
|
|
357
358
|
currentDir: string,
|
|
358
359
|
specifier: string,
|
|
359
360
|
fileIndex: Set<string>
|
|
360
361
|
): string | null {
|
|
361
362
|
const basePath = resolve(currentDir, specifier);
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
if (fileIndex.has(testPath)) {
|
|
367
|
-
return testPath;
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
return null;
|
|
363
|
+
return resolveModulePathUtil(basePath, {
|
|
364
|
+
useFilesystem: false,
|
|
365
|
+
fileIndex
|
|
366
|
+
});
|
|
372
367
|
}
|
|
373
368
|
|
|
374
369
|
/**
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
13
13
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
14
14
|
import type { BaseNodeRecord } from '@grafema/types';
|
|
15
|
+
import { StrictModeError, ValidationError } from '../../errors/GrafemaError.js';
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
18
|
* HTTP route node
|
|
@@ -28,10 +29,13 @@ interface HTTPRouteNode extends BaseNodeRecord {
|
|
|
28
29
|
*/
|
|
29
30
|
interface HTTPRequestNode extends BaseNodeRecord {
|
|
30
31
|
method?: string;
|
|
32
|
+
methodSource?: MethodSource;
|
|
31
33
|
url?: string;
|
|
32
34
|
responseDataNode?: string; // ID of response.json() CALL node (set by FetchAnalyzer)
|
|
33
35
|
}
|
|
34
36
|
|
|
37
|
+
type MethodSource = 'explicit' | 'default' | 'unknown';
|
|
38
|
+
|
|
35
39
|
/**
|
|
36
40
|
* Connection info for logging
|
|
37
41
|
*/
|
|
@@ -47,7 +51,6 @@ export class HTTPConnectionEnricher extends Plugin {
|
|
|
47
51
|
return {
|
|
48
52
|
name: 'HTTPConnectionEnricher',
|
|
49
53
|
phase: 'ENRICHMENT',
|
|
50
|
-
priority: 50, // После основных enrichers
|
|
51
54
|
creates: {
|
|
52
55
|
nodes: [],
|
|
53
56
|
edges: ['INTERACTS_WITH', 'HTTP_RECEIVES']
|
|
@@ -88,25 +91,65 @@ export class HTTPConnectionEnricher extends Plugin {
|
|
|
88
91
|
});
|
|
89
92
|
|
|
90
93
|
let edgesCreated = 0;
|
|
94
|
+
const errors: Error[] = [];
|
|
91
95
|
const connections: ConnectionInfo[] = [];
|
|
92
96
|
|
|
93
97
|
// Для каждого request ищем matching route
|
|
94
98
|
for (const request of uniqueRequests) {
|
|
95
|
-
|
|
96
|
-
|
|
99
|
+
const methodSource = request.methodSource ?? 'explicit';
|
|
100
|
+
const method = request.method ? request.method.toUpperCase() : null;
|
|
101
|
+
const url = request.url;
|
|
102
|
+
|
|
103
|
+
if (methodSource === 'unknown') {
|
|
104
|
+
const urlLabel = url ?? 'unknown';
|
|
105
|
+
const message = `Unknown HTTP method for request ${urlLabel}`;
|
|
106
|
+
if (context.strictMode) {
|
|
107
|
+
errors.push(new StrictModeError(
|
|
108
|
+
message,
|
|
109
|
+
'STRICT_UNKNOWN_HTTP_METHOD',
|
|
110
|
+
{
|
|
111
|
+
filePath: request.file,
|
|
112
|
+
lineNumber: request.line as number | undefined,
|
|
113
|
+
phase: 'ENRICHMENT',
|
|
114
|
+
plugin: 'HTTPConnectionEnricher',
|
|
115
|
+
requestId: request.id,
|
|
116
|
+
},
|
|
117
|
+
'Provide method as a string literal or resolvable const (e.g., method: \"POST\")'
|
|
118
|
+
));
|
|
119
|
+
} else {
|
|
120
|
+
errors.push(new ValidationError(
|
|
121
|
+
message,
|
|
122
|
+
'WARN_HTTP_METHOD_UNKNOWN',
|
|
123
|
+
{
|
|
124
|
+
filePath: request.file,
|
|
125
|
+
lineNumber: request.line as number | undefined,
|
|
126
|
+
phase: 'ENRICHMENT',
|
|
127
|
+
plugin: 'HTTPConnectionEnricher',
|
|
128
|
+
requestId: request.id,
|
|
129
|
+
},
|
|
130
|
+
'Provide method as a string literal or resolvable const (e.g., method: \"POST\")',
|
|
131
|
+
'warning'
|
|
132
|
+
));
|
|
133
|
+
}
|
|
97
134
|
continue;
|
|
98
135
|
}
|
|
99
136
|
|
|
100
|
-
|
|
101
|
-
|
|
137
|
+
// Пропускаем dynamic URLs
|
|
138
|
+
if (url === 'dynamic' || !url) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
102
141
|
|
|
103
142
|
// Ищем matching route
|
|
104
143
|
for (const route of uniqueRoutes) {
|
|
105
|
-
const routeMethod =
|
|
144
|
+
const routeMethod = route.method ? route.method.toUpperCase() : null;
|
|
106
145
|
// Use fullPath (from MountPointResolver) if available, fallback to local path
|
|
107
146
|
const routePath = route.fullPath || route.path;
|
|
108
147
|
|
|
109
|
-
if (
|
|
148
|
+
if (!routeMethod) continue;
|
|
149
|
+
if (methodSource === 'default' && routeMethod !== 'GET') continue;
|
|
150
|
+
if (methodSource === 'explicit' && (!method || method !== routeMethod)) continue;
|
|
151
|
+
|
|
152
|
+
if (routePath && this.pathsMatch(url, routePath)) {
|
|
110
153
|
// 1. Create INTERACTS_WITH edge (existing)
|
|
111
154
|
await graph.addEdge({
|
|
112
155
|
type: 'INTERACTS_WITH',
|
|
@@ -137,8 +180,9 @@ export class HTTPConnectionEnricher extends Plugin {
|
|
|
137
180
|
}
|
|
138
181
|
}
|
|
139
182
|
|
|
183
|
+
const requestLabel = `${method ?? 'UNKNOWN'} ${url}`;
|
|
140
184
|
connections.push({
|
|
141
|
-
request:
|
|
185
|
+
request: requestLabel,
|
|
142
186
|
route: `${routeMethod} ${routePath}`,
|
|
143
187
|
requestFile: request.file,
|
|
144
188
|
routeFile: route.file
|
|
@@ -163,7 +207,8 @@ export class HTTPConnectionEnricher extends Plugin {
|
|
|
163
207
|
connections: connections.length,
|
|
164
208
|
routesAnalyzed: uniqueRoutes.length,
|
|
165
209
|
requestsAnalyzed: uniqueRequests.length
|
|
166
|
-
}
|
|
210
|
+
},
|
|
211
|
+
errors
|
|
167
212
|
);
|
|
168
213
|
|
|
169
214
|
} catch (error) {
|
|
@@ -178,7 +223,7 @@ export class HTTPConnectionEnricher extends Plugin {
|
|
|
178
223
|
*/
|
|
179
224
|
private normalizeUrl(url: string): string {
|
|
180
225
|
return url
|
|
181
|
-
.replace(/:[
|
|
226
|
+
.replace(/:[A-Za-z0-9_]+/g, '{param}') // :id -> {param}
|
|
182
227
|
.replace(/\$\{[^}]*\}/g, '{param}'); // ${...} -> {param}, ${userId} -> {param}
|
|
183
228
|
}
|
|
184
229
|
|
|
@@ -214,11 +259,17 @@ export class HTTPConnectionEnricher extends Plugin {
|
|
|
214
259
|
|
|
215
260
|
// Handle case where request has concrete value (e.g., '/users/123')
|
|
216
261
|
// and route has param (e.g., '/users/{param}')
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
262
|
+
return this.buildParamRegex(normRoute).test(normRequest);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
private escapeRegExp(value: string): string {
|
|
266
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
267
|
+
}
|
|
220
268
|
|
|
221
|
-
|
|
269
|
+
private buildParamRegex(normalizedRoute: string): RegExp {
|
|
270
|
+
const parts = normalizedRoute.split('{param}');
|
|
271
|
+
const pattern = parts.map(part => this.escapeRegExp(part)).join('[^/]+');
|
|
272
|
+
return new RegExp(`^${pattern}$`);
|
|
222
273
|
}
|
|
223
274
|
|
|
224
275
|
/**
|
|
@@ -48,11 +48,11 @@ export class InstanceOfResolver extends Plugin {
|
|
|
48
48
|
return {
|
|
49
49
|
name: 'InstanceOfResolver',
|
|
50
50
|
phase: 'ENRICHMENT',
|
|
51
|
-
priority: 100, // Высокий приоритет - должен выполняться перед другими enrichment плагинами
|
|
52
51
|
creates: {
|
|
53
52
|
nodes: [],
|
|
54
53
|
edges: ['INSTANCE_OF'] // Пере-создаёт INSTANCE_OF edges
|
|
55
|
-
}
|
|
54
|
+
},
|
|
55
|
+
dependencies: ['JSASTAnalyzer']
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
|