@grafema/core 0.1.0-alpha.5 → 0.2.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/dist/Orchestrator.d.ts +31 -2
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +222 -27
- package/dist/config/ConfigLoader.d.ts +90 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +249 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +4 -0
- package/dist/core/ASTWorker.d.ts +11 -36
- package/dist/core/ASTWorker.d.ts.map +1 -1
- package/dist/core/ASTWorker.js +93 -99
- package/dist/core/CoverageAnalyzer.d.ts +65 -0
- package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
- package/dist/core/CoverageAnalyzer.js +198 -0
- package/dist/core/FileExplainer.d.ts +101 -0
- package/dist/core/FileExplainer.d.ts.map +1 -0
- package/dist/core/FileExplainer.js +139 -0
- package/dist/core/FileNodeManager.d.ts +40 -0
- package/dist/core/FileNodeManager.d.ts.map +1 -0
- package/dist/core/FileNodeManager.js +84 -0
- package/dist/core/GraphFreshnessChecker.d.ts +33 -0
- package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
- package/dist/core/GraphFreshnessChecker.js +101 -0
- package/dist/core/HashUtils.d.ts +24 -0
- package/dist/core/HashUtils.d.ts.map +1 -0
- package/dist/core/HashUtils.js +45 -0
- package/dist/core/IncrementalReanalyzer.d.ts +36 -0
- package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
- package/dist/core/IncrementalReanalyzer.js +132 -0
- package/dist/core/NodeFactory.d.ts +266 -19
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +256 -21
- package/dist/core/ScopeTracker.d.ts +84 -0
- package/dist/core/ScopeTracker.d.ts.map +1 -0
- package/dist/core/ScopeTracker.js +116 -0
- package/dist/core/SemanticId.d.ts +90 -0
- package/dist/core/SemanticId.d.ts.map +1 -0
- package/dist/core/SemanticId.js +115 -0
- package/dist/core/VersionManager.d.ts.map +1 -1
- package/dist/core/VersionManager.js +3 -2
- package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
- package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
- package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
- package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
- package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
- package/dist/core/nodes/ArrayLiteralNode.js +43 -0
- package/dist/core/nodes/BranchNode.d.ts +41 -0
- package/dist/core/nodes/BranchNode.d.ts.map +1 -0
- package/dist/core/nodes/BranchNode.js +82 -0
- package/dist/core/nodes/CallSiteNode.d.ts +30 -2
- package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
- package/dist/core/nodes/CallSiteNode.js +54 -4
- package/dist/core/nodes/CaseNode.d.ts +43 -0
- package/dist/core/nodes/CaseNode.d.ts.map +1 -0
- package/dist/core/nodes/CaseNode.js +81 -0
- package/dist/core/nodes/ClassNode.d.ts +34 -2
- package/dist/core/nodes/ClassNode.d.ts.map +1 -1
- package/dist/core/nodes/ClassNode.js +52 -4
- package/dist/core/nodes/ConstantNode.d.ts +2 -2
- package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
- package/dist/core/nodes/ConstantNode.js +6 -4
- package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
- package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
- package/dist/core/nodes/ConstructorCallNode.js +171 -0
- package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
- package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
- package/dist/core/nodes/DatabaseQueryNode.js +5 -2
- package/dist/core/nodes/DecoratorNode.d.ts +42 -0
- package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
- package/dist/core/nodes/DecoratorNode.js +64 -0
- package/dist/core/nodes/EnumNode.d.ts +42 -0
- package/dist/core/nodes/EnumNode.d.ts.map +1 -0
- package/dist/core/nodes/EnumNode.js +56 -0
- package/dist/core/nodes/EventListenerNode.d.ts +4 -4
- package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
- package/dist/core/nodes/EventListenerNode.js +7 -4
- package/dist/core/nodes/ExportNode.d.ts +38 -2
- package/dist/core/nodes/ExportNode.d.ts.map +1 -1
- package/dist/core/nodes/ExportNode.js +54 -4
- package/dist/core/nodes/ExpressionNode.d.ts +97 -0
- package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
- package/dist/core/nodes/ExpressionNode.js +180 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts +32 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
- package/dist/core/nodes/ExternalModuleNode.js +49 -0
- package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
- package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
- package/dist/core/nodes/ExternalStdioNode.js +15 -8
- package/dist/core/nodes/FunctionNode.d.ts +36 -0
- package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
- package/dist/core/nodes/FunctionNode.js +80 -1
- package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
- package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
- package/dist/core/nodes/HttpRequestNode.js +7 -4
- package/dist/core/nodes/ImportNode.d.ts +28 -6
- package/dist/core/nodes/ImportNode.d.ts.map +1 -1
- package/dist/core/nodes/ImportNode.js +43 -8
- package/dist/core/nodes/InterfaceNode.d.ts +46 -0
- package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
- package/dist/core/nodes/InterfaceNode.js +57 -0
- package/dist/core/nodes/IssueNode.d.ts +73 -0
- package/dist/core/nodes/IssueNode.d.ts.map +1 -0
- package/dist/core/nodes/IssueNode.js +129 -0
- package/dist/core/nodes/LiteralNode.d.ts +2 -2
- package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
- package/dist/core/nodes/LiteralNode.js +6 -4
- package/dist/core/nodes/MethodCallNode.d.ts +32 -2
- package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodCallNode.js +57 -4
- package/dist/core/nodes/MethodNode.d.ts +34 -2
- package/dist/core/nodes/MethodNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodNode.js +55 -3
- package/dist/core/nodes/ModuleNode.d.ts +31 -0
- package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
- package/dist/core/nodes/ModuleNode.js +37 -0
- package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
- package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
- package/dist/core/nodes/NetworkRequestNode.js +65 -0
- package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
- package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
- package/dist/core/nodes/ObjectLiteralNode.js +43 -0
- package/dist/core/nodes/ParameterNode.d.ts +2 -2
- package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
- package/dist/core/nodes/ParameterNode.js +5 -3
- package/dist/core/nodes/ScopeNode.d.ts +31 -0
- package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
- package/dist/core/nodes/ScopeNode.js +49 -0
- package/dist/core/nodes/TypeNode.d.ts +36 -0
- package/dist/core/nodes/TypeNode.d.ts.map +1 -0
- package/dist/core/nodes/TypeNode.js +55 -0
- package/dist/core/nodes/VariableDeclarationNode.d.ts +29 -2
- package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
- package/dist/core/nodes/VariableDeclarationNode.js +48 -4
- package/dist/core/nodes/index.d.ts +15 -1
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +17 -0
- package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
- package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
- package/dist/data/builtins/BuiltinRegistry.js +110 -0
- package/dist/data/builtins/definitions.d.ts +28 -0
- package/dist/data/builtins/definitions.d.ts.map +1 -0
- package/dist/data/builtins/definitions.js +250 -0
- package/dist/data/builtins/index.d.ts +10 -0
- package/dist/data/builtins/index.d.ts.map +1 -0
- package/dist/data/builtins/index.js +8 -0
- package/dist/data/builtins/jsGlobals.d.ts +18 -0
- package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
- package/dist/data/builtins/jsGlobals.js +26 -0
- package/dist/data/builtins/types.d.ts +34 -0
- package/dist/data/builtins/types.d.ts.map +1 -0
- package/dist/data/builtins/types.js +7 -0
- package/dist/data/globals/definitions.d.ts +27 -0
- package/dist/data/globals/definitions.d.ts.map +1 -0
- package/dist/data/globals/definitions.js +117 -0
- package/dist/data/globals/index.d.ts +36 -0
- package/dist/data/globals/index.d.ts.map +1 -0
- package/dist/data/globals/index.js +52 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticCollector.js +129 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts +100 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.js +247 -0
- package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
- package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticWriter.js +43 -0
- package/dist/diagnostics/index.d.ts +14 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +11 -0
- package/dist/errors/GrafemaError.d.ts +161 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -0
- package/dist/errors/GrafemaError.js +181 -0
- package/dist/index.d.ts +73 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -1
- package/dist/logging/Logger.d.ts +48 -0
- package/dist/logging/Logger.d.ts.map +1 -0
- package/dist/logging/Logger.js +134 -0
- package/dist/plugins/Plugin.d.ts +5 -1
- package/dist/plugins/Plugin.d.ts.map +1 -1
- package/dist/plugins/Plugin.js +33 -0
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.js +14 -6
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +29 -19
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +71 -29
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +41 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +187 -19
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts +313 -19
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +3430 -503
- package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
- package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/RustAnalyzer.js +16 -11
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +11 -7
- package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +117 -21
- package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts +207 -4
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +1527 -316
- package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
- package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
- package/dist/plugins/analysis/ast/types.d.ts +470 -5
- package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
- package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
- package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/index.js +5 -0
- package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
- package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/location.js +78 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +14 -5
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +100 -9
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +674 -125
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +14 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +190 -63
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +112 -8
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +20 -2
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +243 -45
- package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
- package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
- package/dist/plugins/discovery/WorkspaceDiscovery.js +141 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
- package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
- package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/detector.js +49 -0
- package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
- package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
- package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
- package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/index.js +8 -0
- package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
- package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/parsers.js +80 -0
- package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
- package/dist/plugins/enrichment/AliasTracker.js +29 -8
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +78 -27
- package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
- package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MethodCallResolver.js +33 -13
- package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +173 -147
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
- package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
- package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
- package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +22 -27
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +185 -143
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
- package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
- package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +121 -31
- package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +8 -7
- package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
- package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
- package/dist/plugins/indexing/ServiceDetector.js +28 -15
- package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
- package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
- package/dist/plugins/validation/BrokenImportValidator.js +249 -0
- package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
- package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
- package/dist/plugins/validation/CallResolverValidator.js +103 -77
- package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
- package/dist/plugins/validation/DataFlowValidator.js +62 -49
- package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
- package/dist/plugins/validation/EvalBanValidator.js +17 -16
- package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js +44 -24
- package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
- package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
- package/dist/plugins/validation/NodeCreationValidator.js +415 -0
- package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
- package/dist/plugins/validation/SQLInjectionValidator.js +61 -19
- package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
- package/dist/plugins/validation/ShadowingDetector.js +6 -5
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
- package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
- package/dist/plugins/vcs/GitPlugin.js +10 -12
- package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
- package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
- package/dist/plugins/vcs/VCSPlugin.js +5 -5
- package/dist/queries/findCallsInFunction.d.ts +52 -0
- package/dist/queries/findCallsInFunction.d.ts.map +1 -0
- package/dist/queries/findCallsInFunction.js +135 -0
- package/dist/queries/findContainingFunction.d.ts +45 -0
- package/dist/queries/findContainingFunction.d.ts.map +1 -0
- package/dist/queries/findContainingFunction.js +54 -0
- package/dist/queries/index.d.ts +14 -0
- package/dist/queries/index.d.ts.map +1 -0
- package/dist/queries/index.js +11 -0
- package/dist/queries/traceValues.d.ts +70 -0
- package/dist/queries/traceValues.d.ts.map +1 -0
- package/dist/queries/traceValues.js +299 -0
- package/dist/queries/types.d.ts +163 -0
- package/dist/queries/types.d.ts.map +1 -0
- package/dist/queries/types.js +9 -0
- package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
- package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/GraphSchemaExtractor.js +124 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js +112 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +21 -34
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +72 -62
- package/dist/storage/backends/typeValidation.d.ts.map +1 -1
- package/dist/storage/backends/typeValidation.js +1 -0
- package/dist/validation/PathValidator.d.ts +1 -2
- package/dist/validation/PathValidator.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/Orchestrator.ts +272 -27
- package/src/config/ConfigLoader.ts +354 -0
- package/src/config/index.ts +5 -0
- package/src/core/ASTWorker.ts +143 -139
- package/src/core/CoverageAnalyzer.ts +243 -0
- package/src/core/FileExplainer.ts +179 -0
- package/src/core/FileNodeManager.ts +100 -0
- package/src/core/GraphFreshnessChecker.ts +143 -0
- package/src/core/HashUtils.ts +48 -0
- package/src/core/IncrementalReanalyzer.ts +192 -0
- package/src/core/NodeFactory.ts +470 -23
- package/src/core/ScopeTracker.ts +154 -0
- package/src/core/SemanticId.ts +192 -0
- package/src/core/VersionManager.ts +3 -2
- package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
- package/src/core/nodes/ArrayLiteralNode.ts +66 -0
- package/src/core/nodes/BranchNode.ts +113 -0
- package/src/core/nodes/CallSiteNode.ts +64 -4
- package/src/core/nodes/CaseNode.ts +123 -0
- package/src/core/nodes/ClassNode.ts +67 -4
- package/src/core/nodes/ConstantNode.ts +5 -4
- package/src/core/nodes/ConstructorCallNode.ts +217 -0
- package/src/core/nodes/DatabaseQueryNode.ts +5 -1
- package/src/core/nodes/DecoratorNode.ts +92 -0
- package/src/core/nodes/EnumNode.ts +87 -0
- package/src/core/nodes/EventListenerNode.ts +7 -4
- package/src/core/nodes/ExportNode.ts +74 -4
- package/src/core/nodes/ExpressionNode.ts +232 -0
- package/src/core/nodes/ExternalModuleNode.ts +65 -0
- package/src/core/nodes/ExternalStdioNode.ts +17 -9
- package/src/core/nodes/FunctionNode.ts +101 -1
- package/src/core/nodes/HttpRequestNode.ts +7 -4
- package/src/core/nodes/ImportNode.ts +62 -13
- package/src/core/nodes/InterfaceNode.ts +92 -0
- package/src/core/nodes/IssueNode.ts +177 -0
- package/src/core/nodes/LiteralNode.ts +5 -4
- package/src/core/nodes/MethodCallNode.ts +70 -4
- package/src/core/nodes/MethodNode.ts +68 -3
- package/src/core/nodes/ModuleNode.ts +50 -0
- package/src/core/nodes/NetworkRequestNode.ts +77 -0
- package/src/core/nodes/ObjectLiteralNode.ts +66 -0
- package/src/core/nodes/ParameterNode.ts +4 -3
- package/src/core/nodes/ScopeNode.ts +65 -0
- package/src/core/nodes/TypeNode.ts +79 -0
- package/src/core/nodes/VariableDeclarationNode.ts +58 -4
- package/src/core/nodes/index.ts +21 -1
- package/src/data/builtins/BuiltinRegistry.ts +124 -0
- package/src/data/builtins/definitions.ts +267 -0
- package/src/data/builtins/index.ts +10 -0
- package/src/data/builtins/jsGlobals.ts +28 -0
- package/src/data/builtins/types.ts +36 -0
- package/src/data/globals/definitions.ts +156 -0
- package/src/data/globals/index.ts +66 -0
- package/src/diagnostics/DiagnosticCollector.ts +163 -0
- package/src/diagnostics/DiagnosticReporter.ts +324 -0
- package/src/diagnostics/DiagnosticWriter.ts +50 -0
- package/src/diagnostics/index.ts +16 -0
- package/src/errors/GrafemaError.ts +239 -0
- package/src/index.ts +193 -1
- package/src/logging/Logger.ts +152 -0
- package/src/plugins/Plugin.ts +42 -0
- package/src/plugins/analysis/DatabaseAnalyzer.ts +16 -8
- package/src/plugins/analysis/ExpressAnalyzer.ts +33 -19
- package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +76 -36
- package/src/plugins/analysis/FetchAnalyzer.ts +232 -21
- package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
- package/src/plugins/analysis/JSASTAnalyzer.ts +4265 -587
- package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
- package/src/plugins/analysis/RustAnalyzer.ts +16 -11
- package/src/plugins/analysis/SQLiteAnalyzer.ts +13 -7
- package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
- package/src/plugins/analysis/SocketIOAnalyzer.ts +151 -28
- package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
- package/src/plugins/analysis/ast/GraphBuilder.ts +1947 -327
- package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
- package/src/plugins/analysis/ast/types.ts +596 -6
- package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
- package/src/plugins/analysis/ast/utils/index.ts +12 -0
- package/src/plugins/analysis/ast/utils/location.ts +103 -0
- package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +19 -8
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +924 -83
- package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +234 -93
- package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +124 -9
- package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +294 -49
- package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
- package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
- package/src/plugins/discovery/WorkspaceDiscovery.ts +184 -0
- package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
- package/src/plugins/discovery/workspaces/detector.ts +63 -0
- package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
- package/src/plugins/discovery/workspaces/index.ts +23 -0
- package/src/plugins/discovery/workspaces/parsers.ts +99 -0
- package/src/plugins/enrichment/AliasTracker.ts +35 -8
- package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
- package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
- package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
- package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +84 -27
- package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
- package/src/plugins/enrichment/MethodCallResolver.ts +39 -13
- package/src/plugins/enrichment/MountPointResolver.ts +208 -195
- package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
- package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
- package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +209 -189
- package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
- package/src/plugins/indexing/JSModuleIndexer.ts +140 -34
- package/src/plugins/indexing/RustModuleIndexer.ts +8 -7
- package/src/plugins/validation/BrokenImportValidator.ts +325 -0
- package/src/plugins/validation/CallResolverValidator.ts +131 -110
- package/src/plugins/validation/DataFlowValidator.ts +88 -67
- package/src/plugins/validation/EvalBanValidator.ts +17 -16
- package/src/plugins/validation/GraphConnectivityValidator.ts +58 -24
- package/src/plugins/validation/NodeCreationValidator.ts +554 -0
- package/src/plugins/validation/SQLInjectionValidator.ts +63 -20
- package/src/plugins/validation/ShadowingDetector.ts +6 -5
- package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
- package/src/plugins/vcs/GitPlugin.ts +40 -12
- package/src/plugins/vcs/VCSPlugin.ts +7 -5
- package/src/queries/README.md +46 -0
- package/src/queries/findCallsInFunction.ts +206 -0
- package/src/queries/findContainingFunction.ts +83 -0
- package/src/queries/index.ts +23 -0
- package/src/queries/traceValues.ts +398 -0
- package/src/queries/types.ts +187 -0
- package/src/schema/GraphSchemaExtractor.ts +177 -0
- package/src/schema/InterfaceSchemaExtractor.ts +173 -0
- package/src/schema/index.ts +5 -0
- package/src/storage/backends/RFDBServerBackend.ts +100 -98
- package/src/storage/backends/typeValidation.ts +1 -0
- package/src/validation/PathValidator.ts +1 -1
- package/dist/core/AnalysisWorker.d.ts +0 -14
- package/dist/core/AnalysisWorker.d.ts.map +0 -1
- package/dist/core/AnalysisWorker.js +0 -307
- package/dist/core/ParallelAnalyzer.d.ts +0 -120
- package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
- package/dist/core/ParallelAnalyzer.js +0 -331
- package/dist/core/QueueWorker.d.ts +0 -12
- package/dist/core/QueueWorker.d.ts.map +0 -1
- package/dist/core/QueueWorker.js +0 -567
- package/dist/core/RFDBClient.d.ts +0 -179
- package/dist/core/RFDBClient.d.ts.map +0 -1
- package/dist/core/RFDBClient.js +0 -429
- package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
- package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
- package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
- package/src/core/AnalysisWorker.ts +0 -410
- package/src/core/ParallelAnalyzer.ts +0 -476
- package/src/core/QueueWorker.ts +0 -780
- package/src/plugins/indexing/ServiceDetector.ts +0 -230
|
@@ -28,11 +28,12 @@ export class TypeScriptDeadCodeValidator extends Plugin {
|
|
|
28
28
|
}
|
|
29
29
|
async execute(context) {
|
|
30
30
|
const { graph } = context;
|
|
31
|
-
|
|
31
|
+
const logger = this.log(context);
|
|
32
|
+
logger.info('Starting TypeScript dead code analysis');
|
|
32
33
|
const startTime = Date.now();
|
|
33
34
|
const issues = [];
|
|
34
35
|
// Collect all interfaces
|
|
35
|
-
|
|
36
|
+
logger.debug('Collecting interfaces');
|
|
36
37
|
const interfaces = new Map();
|
|
37
38
|
for await (const node of graph.queryNodes({ nodeType: 'INTERFACE' })) {
|
|
38
39
|
// Skip external/reference interfaces
|
|
@@ -46,9 +47,9 @@ export class TypeScriptDeadCodeValidator extends Plugin {
|
|
|
46
47
|
properties: node.properties
|
|
47
48
|
});
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
+
logger.debug('Interfaces collected', { count: interfaces.size });
|
|
50
51
|
// Find interfaces with IMPLEMENTS or EXTENDS edges
|
|
51
|
-
|
|
52
|
+
logger.debug('Checking implementations');
|
|
52
53
|
const implementedInterfaces = new Map();
|
|
53
54
|
// Get all edges and filter by type (no queryEdges in GraphBackend yet)
|
|
54
55
|
const allEdges = await graph.getAllEdges?.() ?? [];
|
|
@@ -124,27 +125,27 @@ export class TypeScriptDeadCodeValidator extends Plugin {
|
|
|
124
125
|
totalTypes: typeCount,
|
|
125
126
|
timeSeconds: totalTime
|
|
126
127
|
};
|
|
127
|
-
|
|
128
|
+
logger.info('Analysis complete', { ...summary });
|
|
128
129
|
// Report issues
|
|
129
130
|
const warnings = issues.filter(i => i.severity === 'WARNING');
|
|
130
131
|
const infos = issues.filter(i => i.severity === 'INFO');
|
|
131
132
|
if (warnings.length > 0) {
|
|
132
|
-
|
|
133
|
+
logger.warn('Warnings found', { count: warnings.length });
|
|
133
134
|
for (const issue of warnings) {
|
|
134
|
-
|
|
135
|
+
logger.warn(issue.message);
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
138
|
if (infos.length > 0) {
|
|
138
|
-
|
|
139
|
+
logger.info('Info messages', { count: infos.length });
|
|
139
140
|
for (const issue of infos.slice(0, 5)) { // Limit to first 5
|
|
140
|
-
|
|
141
|
+
logger.info(issue.message);
|
|
141
142
|
}
|
|
142
143
|
if (infos.length > 5) {
|
|
143
|
-
|
|
144
|
+
logger.debug(`... and ${infos.length - 5} more`);
|
|
144
145
|
}
|
|
145
146
|
}
|
|
146
147
|
if (issues.length === 0) {
|
|
147
|
-
|
|
148
|
+
logger.info('No dead TypeScript code detected');
|
|
148
149
|
}
|
|
149
150
|
return createSuccessResult({ nodes: 0, edges: 0 }, { summary, issues });
|
|
150
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/vcs/GitPlugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,QAAQ,EAAY,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"GitPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/vcs/GitPlugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,QAAQ,EAAY,MAAM,gBAAgB,CAAC;AAWpG;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,SAAU,SAAQ,SAAS;IACtC,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,SAAc;IAKlC,IAAI,QAAQ,IAAI,iBAAiB,CAMhC;IAED;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAerC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IA0D/C;;OAEG;IACG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBnE;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoBtD;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAczC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAcjD;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASnD;;OAEG;IAEH;;OAEG;YACW,KAAK;IAOnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgCvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgDzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAc7C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAsBrD;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;CAIhD"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Обнаруживает изменённые файлы и предоставляет их содержимое
|
|
6
6
|
*/
|
|
7
7
|
import { VCSPlugin, FileStatus } from './VCSPlugin.js';
|
|
8
|
+
import { FileAccessError } from '../../errors/GrafemaError.js';
|
|
8
9
|
import { exec } from 'child_process';
|
|
9
10
|
import { promisify } from 'util';
|
|
10
11
|
import { join } from 'path';
|
|
@@ -88,8 +89,7 @@ export class GitPlugin extends VCSPlugin {
|
|
|
88
89
|
return files;
|
|
89
90
|
}
|
|
90
91
|
catch (error) {
|
|
91
|
-
|
|
92
|
-
return [];
|
|
92
|
+
throw new FileAccessError(`Failed to get changed files: ${error.message}`, 'ERR_GIT_ACCESS_DENIED', { plugin: 'GitPlugin' }, 'Check that git is installed and this is a valid git repository');
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
@@ -124,8 +124,7 @@ export class GitPlugin extends VCSPlugin {
|
|
|
124
124
|
return this._parseUnifiedDiff(filePath, stdout);
|
|
125
125
|
}
|
|
126
126
|
catch (error) {
|
|
127
|
-
|
|
128
|
-
return { path: filePath, hunks: [] };
|
|
127
|
+
throw new FileAccessError(`Failed to get diff for ${filePath}: ${error.message}`, 'ERR_GIT_ACCESS_DENIED', { plugin: 'GitPlugin', filePath }, 'Ensure the file is tracked by git and the working directory is accessible');
|
|
129
128
|
}
|
|
130
129
|
}
|
|
131
130
|
/**
|
|
@@ -136,8 +135,8 @@ export class GitPlugin extends VCSPlugin {
|
|
|
136
135
|
const { stdout } = await this._exec('git rev-parse --abbrev-ref HEAD');
|
|
137
136
|
return stdout.trim();
|
|
138
137
|
}
|
|
139
|
-
catch {
|
|
140
|
-
|
|
138
|
+
catch (error) {
|
|
139
|
+
throw new FileAccessError(`Failed to get current branch: ${error.message}`, 'ERR_GIT_ACCESS_DENIED', { plugin: 'GitPlugin' }, 'Ensure this is a valid git repository with at least one commit');
|
|
141
140
|
}
|
|
142
141
|
}
|
|
143
142
|
/**
|
|
@@ -148,8 +147,8 @@ export class GitPlugin extends VCSPlugin {
|
|
|
148
147
|
const { stdout } = await this._exec('git rev-parse HEAD');
|
|
149
148
|
return stdout.trim();
|
|
150
149
|
}
|
|
151
|
-
catch {
|
|
152
|
-
|
|
150
|
+
catch (error) {
|
|
151
|
+
throw new FileAccessError(`Failed to get last commit hash: ${error.message}`, 'ERR_GIT_NOT_FOUND', { plugin: 'GitPlugin' }, 'Ensure this is a valid git repository with at least one commit');
|
|
153
152
|
}
|
|
154
153
|
}
|
|
155
154
|
/**
|
|
@@ -262,8 +261,7 @@ export class GitPlugin extends VCSPlugin {
|
|
|
262
261
|
return stdout.trim().split('\n').filter(line => line.length > 0);
|
|
263
262
|
}
|
|
264
263
|
catch (error) {
|
|
265
|
-
|
|
266
|
-
return [];
|
|
264
|
+
throw new FileAccessError(`Failed to get tracked files: ${error.message}`, 'ERR_GIT_ACCESS_DENIED', { plugin: 'GitPlugin' }, 'Check that git is installed and this is a valid git repository');
|
|
267
265
|
}
|
|
268
266
|
}
|
|
269
267
|
/**
|
|
@@ -281,8 +279,8 @@ export class GitPlugin extends VCSPlugin {
|
|
|
281
279
|
message: lines[4]
|
|
282
280
|
};
|
|
283
281
|
}
|
|
284
|
-
catch {
|
|
285
|
-
|
|
282
|
+
catch (error) {
|
|
283
|
+
throw new FileAccessError(`Failed to get last commit info: ${error.message}`, 'ERR_GIT_NOT_FOUND', { plugin: 'GitPlugin' }, 'Ensure this is a valid git repository with at least one commit');
|
|
286
284
|
}
|
|
287
285
|
}
|
|
288
286
|
/**
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* - Mercurial
|
|
12
12
|
* - Perforce
|
|
13
13
|
*/
|
|
14
|
+
import type { Logger } from '../../logging/Logger.js';
|
|
14
15
|
/**
|
|
15
16
|
* VCS Plugin configuration
|
|
16
17
|
*/
|
|
@@ -124,10 +125,10 @@ export declare class VCSPluginFactory {
|
|
|
124
125
|
/**
|
|
125
126
|
* Автоматически определить и создать подходящий VCS плагин
|
|
126
127
|
*/
|
|
127
|
-
static detect(config?: VCSConfig): Promise<VCSPlugin | null>;
|
|
128
|
+
static detect(config?: VCSConfig, logger?: Logger): Promise<VCSPlugin | null>;
|
|
128
129
|
/**
|
|
129
130
|
* Создать плагин по имени
|
|
130
131
|
*/
|
|
131
|
-
static create(name: string, config?: VCSConfig): VCSPlugin | null;
|
|
132
|
+
static create(name: string, config?: VCSConfig, logger?: Logger): VCSPlugin | null;
|
|
132
133
|
}
|
|
133
134
|
//# sourceMappingURL=VCSPlugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VCSPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/vcs/VCSPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,8BAAsB,SAAS;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;gBAEL,MAAM,GAAE,SAAc;IAKlC;;OAEG;IACH,QAAQ,KAAK,QAAQ,IAAI,iBAAiB,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAEtE;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEzD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEtD;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;CAIhD;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,CAAM;IAErD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,GAAG,IAAI;IAIxD;;OAEG;WACU,MAAM,CAAC,MAAM,GAAE,SAAc,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"VCSPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/vcs/VCSPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,8BAAsB,SAAS;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;gBAEL,MAAM,GAAE,SAAc;IAKlC;;OAEG;IACH,QAAQ,KAAK,QAAQ,IAAI,iBAAiB,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAEtE;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEzD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEtD;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;CAIhD;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,CAAM;IAErD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,GAAG,IAAI;IAIxD;;OAEG;WACU,MAAM,CAAC,MAAM,GAAE,SAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAkBvF;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,SAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAYvF"}
|
|
@@ -52,12 +52,12 @@ export class VCSPluginFactory {
|
|
|
52
52
|
/**
|
|
53
53
|
* Автоматически определить и создать подходящий VCS плагин
|
|
54
54
|
*/
|
|
55
|
-
static async detect(config = {}) {
|
|
55
|
+
static async detect(config = {}, logger) {
|
|
56
56
|
for (const PluginClass of this.availablePlugins) {
|
|
57
57
|
const plugin = new PluginClass(config);
|
|
58
58
|
try {
|
|
59
59
|
if (await plugin.isAvailable()) {
|
|
60
|
-
|
|
60
|
+
logger?.info('VCS detected', { name: plugin.metadata.name });
|
|
61
61
|
return plugin;
|
|
62
62
|
}
|
|
63
63
|
}
|
|
@@ -65,16 +65,16 @@ export class VCSPluginFactory {
|
|
|
65
65
|
// Игнорируем ошибки и пробуем следующий плагин
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
logger?.warn('No VCS system detected');
|
|
69
69
|
return null;
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
72
|
* Создать плагин по имени
|
|
73
73
|
*/
|
|
74
|
-
static create(name, config = {}) {
|
|
74
|
+
static create(name, config = {}, logger) {
|
|
75
75
|
const PluginClass = this.availablePlugins.find(Plugin => new Plugin(config).metadata.name === name);
|
|
76
76
|
if (!PluginClass) {
|
|
77
|
-
|
|
77
|
+
logger?.error('VCS plugin not found', { name });
|
|
78
78
|
return null;
|
|
79
79
|
}
|
|
80
80
|
return new PluginClass(config);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find all CALL and METHOD_CALL nodes inside a function.
|
|
3
|
+
*
|
|
4
|
+
* Graph structure:
|
|
5
|
+
* ```
|
|
6
|
+
* FUNCTION -[HAS_SCOPE]-> SCOPE -[CONTAINS]-> CALL
|
|
7
|
+
* SCOPE -[CONTAINS]-> METHOD_CALL
|
|
8
|
+
* SCOPE -[CONTAINS]-> SCOPE (nested blocks)
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Algorithm:
|
|
12
|
+
* 1. Get function's scope via HAS_SCOPE edge
|
|
13
|
+
* 2. BFS through CONTAINS edges, collecting CALL and METHOD_CALL nodes
|
|
14
|
+
* 3. Stop at nested FUNCTION/CLASS boundaries (don't enter inner functions)
|
|
15
|
+
* 4. For each call, check CALLS edge to determine if resolved
|
|
16
|
+
* 5. If transitive=true, recursively follow resolved CALLS edges
|
|
17
|
+
*
|
|
18
|
+
* Performance: O(S + C) where S = scopes, C = calls
|
|
19
|
+
* For functions with 100 calls, expect ~200 DB operations.
|
|
20
|
+
*
|
|
21
|
+
* @module queries/findCallsInFunction
|
|
22
|
+
*/
|
|
23
|
+
import type { CallInfo, FindCallsOptions } from './types.js';
|
|
24
|
+
/**
|
|
25
|
+
* Graph backend interface (minimal surface)
|
|
26
|
+
*/
|
|
27
|
+
interface GraphBackend {
|
|
28
|
+
getNode(id: string): Promise<{
|
|
29
|
+
id: string;
|
|
30
|
+
type: string;
|
|
31
|
+
name: string;
|
|
32
|
+
file?: string;
|
|
33
|
+
line?: number;
|
|
34
|
+
object?: string;
|
|
35
|
+
} | null>;
|
|
36
|
+
getOutgoingEdges(nodeId: string, edgeTypes: string[] | null): Promise<Array<{
|
|
37
|
+
src: string;
|
|
38
|
+
dst: string;
|
|
39
|
+
type: string;
|
|
40
|
+
}>>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Find all CALL and METHOD_CALL nodes inside a function.
|
|
44
|
+
*
|
|
45
|
+
* @param backend - Graph backend for queries
|
|
46
|
+
* @param functionId - ID of the FUNCTION node
|
|
47
|
+
* @param options - Options for traversal
|
|
48
|
+
* @returns Array of CallInfo objects
|
|
49
|
+
*/
|
|
50
|
+
export declare function findCallsInFunction(backend: GraphBackend, functionId: string, options?: FindCallsOptions): Promise<CallInfo[]>;
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=findCallsInFunction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findCallsInFunction.d.ts","sourceRoot":"","sources":["../../src/queries/findCallsInFunction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7D;;GAEG;AACH,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAC3B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC,CAAC;IACV,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,GACzB,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC/D;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAkErB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find all CALL and METHOD_CALL nodes inside a function.
|
|
3
|
+
*
|
|
4
|
+
* Graph structure:
|
|
5
|
+
* ```
|
|
6
|
+
* FUNCTION -[HAS_SCOPE]-> SCOPE -[CONTAINS]-> CALL
|
|
7
|
+
* SCOPE -[CONTAINS]-> METHOD_CALL
|
|
8
|
+
* SCOPE -[CONTAINS]-> SCOPE (nested blocks)
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Algorithm:
|
|
12
|
+
* 1. Get function's scope via HAS_SCOPE edge
|
|
13
|
+
* 2. BFS through CONTAINS edges, collecting CALL and METHOD_CALL nodes
|
|
14
|
+
* 3. Stop at nested FUNCTION/CLASS boundaries (don't enter inner functions)
|
|
15
|
+
* 4. For each call, check CALLS edge to determine if resolved
|
|
16
|
+
* 5. If transitive=true, recursively follow resolved CALLS edges
|
|
17
|
+
*
|
|
18
|
+
* Performance: O(S + C) where S = scopes, C = calls
|
|
19
|
+
* For functions with 100 calls, expect ~200 DB operations.
|
|
20
|
+
*
|
|
21
|
+
* @module queries/findCallsInFunction
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Find all CALL and METHOD_CALL nodes inside a function.
|
|
25
|
+
*
|
|
26
|
+
* @param backend - Graph backend for queries
|
|
27
|
+
* @param functionId - ID of the FUNCTION node
|
|
28
|
+
* @param options - Options for traversal
|
|
29
|
+
* @returns Array of CallInfo objects
|
|
30
|
+
*/
|
|
31
|
+
export async function findCallsInFunction(backend, functionId, options = {}) {
|
|
32
|
+
const { maxDepth = 10, transitive = false, transitiveDepth = 5, } = options;
|
|
33
|
+
const calls = [];
|
|
34
|
+
const visited = new Set();
|
|
35
|
+
const seenTargets = new Set(); // For deduplication in transitive mode
|
|
36
|
+
// Add the starting function to seenTargets to prevent cycles back to it
|
|
37
|
+
if (transitive) {
|
|
38
|
+
seenTargets.add(functionId);
|
|
39
|
+
}
|
|
40
|
+
// Step 1: Get function's scope via HAS_SCOPE
|
|
41
|
+
const hasScopeEdges = await backend.getOutgoingEdges(functionId, ['HAS_SCOPE']);
|
|
42
|
+
// BFS queue: { nodeId, currentDepth }
|
|
43
|
+
const queue = [];
|
|
44
|
+
for (const edge of hasScopeEdges) {
|
|
45
|
+
queue.push({ id: edge.dst, depth: 0 });
|
|
46
|
+
}
|
|
47
|
+
// Step 2: BFS through scopes
|
|
48
|
+
while (queue.length > 0) {
|
|
49
|
+
const { id, depth } = queue.shift();
|
|
50
|
+
if (visited.has(id) || depth > maxDepth)
|
|
51
|
+
continue;
|
|
52
|
+
visited.add(id);
|
|
53
|
+
const containsEdges = await backend.getOutgoingEdges(id, ['CONTAINS']);
|
|
54
|
+
for (const edge of containsEdges) {
|
|
55
|
+
const child = await backend.getNode(edge.dst);
|
|
56
|
+
if (!child)
|
|
57
|
+
continue;
|
|
58
|
+
// Collect CALL and METHOD_CALL nodes
|
|
59
|
+
if (child.type === 'CALL' || child.type === 'METHOD_CALL') {
|
|
60
|
+
const callInfo = await buildCallInfo(backend, child, 0);
|
|
61
|
+
calls.push(callInfo);
|
|
62
|
+
// Transitive: follow resolved calls
|
|
63
|
+
if (transitive && callInfo.resolved && callInfo.target) {
|
|
64
|
+
await collectTransitiveCalls(backend, callInfo.target.id, 1, // Starting at depth 1
|
|
65
|
+
transitiveDepth, calls, seenTargets);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Continue into nested scopes, but NOT into nested functions/classes
|
|
69
|
+
if (child.type === 'SCOPE') {
|
|
70
|
+
queue.push({ id: child.id, depth: depth + 1 });
|
|
71
|
+
}
|
|
72
|
+
// Skip FUNCTION, CLASS - they have their own scope hierarchy
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return calls;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Build CallInfo from a call node
|
|
79
|
+
*/
|
|
80
|
+
async function buildCallInfo(backend, callNode, depth) {
|
|
81
|
+
// Check for CALLS edge (resolved target)
|
|
82
|
+
const callsEdges = await backend.getOutgoingEdges(callNode.id, ['CALLS']);
|
|
83
|
+
const isResolved = callsEdges.length > 0;
|
|
84
|
+
let target = undefined;
|
|
85
|
+
if (isResolved) {
|
|
86
|
+
const targetNode = await backend.getNode(callsEdges[0].dst);
|
|
87
|
+
if (targetNode) {
|
|
88
|
+
target = {
|
|
89
|
+
id: targetNode.id,
|
|
90
|
+
name: targetNode.name,
|
|
91
|
+
file: targetNode.file,
|
|
92
|
+
line: targetNode.line,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
id: callNode.id,
|
|
98
|
+
name: callNode.name,
|
|
99
|
+
type: callNode.type,
|
|
100
|
+
object: callNode.object,
|
|
101
|
+
resolved: isResolved,
|
|
102
|
+
target,
|
|
103
|
+
file: callNode.file,
|
|
104
|
+
line: callNode.line,
|
|
105
|
+
depth,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Recursively collect transitive calls
|
|
110
|
+
*
|
|
111
|
+
* Infinite loop prevention:
|
|
112
|
+
* - Track seen function IDs in seenTargets
|
|
113
|
+
* - Stop when we've seen a function before (handles recursion)
|
|
114
|
+
* - Stop at transitiveDepth limit
|
|
115
|
+
*/
|
|
116
|
+
async function collectTransitiveCalls(backend, functionId, currentDepth, maxTransitiveDepth, calls, seenTargets) {
|
|
117
|
+
// Prevent infinite loops and limit depth
|
|
118
|
+
if (seenTargets.has(functionId) || currentDepth > maxTransitiveDepth) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
seenTargets.add(functionId);
|
|
122
|
+
// Find calls in this function (non-transitive to avoid recursion)
|
|
123
|
+
const innerCalls = await findCallsInFunction(backend, functionId, {
|
|
124
|
+
maxDepth: 10,
|
|
125
|
+
transitive: false,
|
|
126
|
+
});
|
|
127
|
+
for (const call of innerCalls) {
|
|
128
|
+
// Add with updated depth
|
|
129
|
+
calls.push({ ...call, depth: currentDepth });
|
|
130
|
+
// Continue transitively if resolved
|
|
131
|
+
if (call.resolved && call.target) {
|
|
132
|
+
await collectTransitiveCalls(backend, call.target.id, currentDepth + 1, maxTransitiveDepth, calls, seenTargets);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find the FUNCTION, CLASS, or MODULE that contains a node.
|
|
3
|
+
*
|
|
4
|
+
* Graph structure (backward traversal):
|
|
5
|
+
* ```
|
|
6
|
+
* CALL <- CONTAINS <- SCOPE <- ... <- SCOPE <- HAS_SCOPE <- FUNCTION
|
|
7
|
+
* VARIABLE <- DECLARES <- SCOPE <- ... <- SCOPE <- HAS_SCOPE <- FUNCTION
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* Algorithm:
|
|
11
|
+
* 1. BFS up the containment tree via CONTAINS and DECLARES edges
|
|
12
|
+
* 2. Also follow HAS_SCOPE edges (connects FUNCTION to its body SCOPE)
|
|
13
|
+
* 3. Stop when we find FUNCTION, CLASS, or MODULE
|
|
14
|
+
*
|
|
15
|
+
* @module queries/findContainingFunction
|
|
16
|
+
*/
|
|
17
|
+
import type { CallerInfo } from './types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Graph backend interface (minimal surface)
|
|
20
|
+
*/
|
|
21
|
+
interface GraphBackend {
|
|
22
|
+
getNode(id: string): Promise<{
|
|
23
|
+
id: string;
|
|
24
|
+
type: string;
|
|
25
|
+
name: string;
|
|
26
|
+
file?: string;
|
|
27
|
+
line?: number;
|
|
28
|
+
} | null>;
|
|
29
|
+
getIncomingEdges(nodeId: string, edgeTypes: string[] | null): Promise<Array<{
|
|
30
|
+
src: string;
|
|
31
|
+
dst: string;
|
|
32
|
+
type: string;
|
|
33
|
+
}>>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Find the FUNCTION, CLASS, or MODULE that contains a node.
|
|
37
|
+
*
|
|
38
|
+
* @param backend - Graph backend for queries
|
|
39
|
+
* @param nodeId - ID of the node to find container for
|
|
40
|
+
* @param maxDepth - Maximum traversal depth (default: 15)
|
|
41
|
+
* @returns CallerInfo or null if no container found
|
|
42
|
+
*/
|
|
43
|
+
export declare function findContainingFunction(backend: GraphBackend, nodeId: string, maxDepth?: number): Promise<CallerInfo | null>;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=findContainingFunction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findContainingFunction.d.ts","sourceRoot":"","sources":["../../src/queries/findContainingFunction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;GAEG;AACH,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAC3B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI,CAAC,CAAC;IACV,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,GACzB,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC/D;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAkC5B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find the FUNCTION, CLASS, or MODULE that contains a node.
|
|
3
|
+
*
|
|
4
|
+
* Graph structure (backward traversal):
|
|
5
|
+
* ```
|
|
6
|
+
* CALL <- CONTAINS <- SCOPE <- ... <- SCOPE <- HAS_SCOPE <- FUNCTION
|
|
7
|
+
* VARIABLE <- DECLARES <- SCOPE <- ... <- SCOPE <- HAS_SCOPE <- FUNCTION
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* Algorithm:
|
|
11
|
+
* 1. BFS up the containment tree via CONTAINS and DECLARES edges
|
|
12
|
+
* 2. Also follow HAS_SCOPE edges (connects FUNCTION to its body SCOPE)
|
|
13
|
+
* 3. Stop when we find FUNCTION, CLASS, or MODULE
|
|
14
|
+
*
|
|
15
|
+
* @module queries/findContainingFunction
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Find the FUNCTION, CLASS, or MODULE that contains a node.
|
|
19
|
+
*
|
|
20
|
+
* @param backend - Graph backend for queries
|
|
21
|
+
* @param nodeId - ID of the node to find container for
|
|
22
|
+
* @param maxDepth - Maximum traversal depth (default: 15)
|
|
23
|
+
* @returns CallerInfo or null if no container found
|
|
24
|
+
*/
|
|
25
|
+
export async function findContainingFunction(backend, nodeId, maxDepth = 15) {
|
|
26
|
+
const visited = new Set();
|
|
27
|
+
const queue = [{ id: nodeId, depth: 0 }];
|
|
28
|
+
while (queue.length > 0) {
|
|
29
|
+
const { id, depth } = queue.shift();
|
|
30
|
+
if (visited.has(id) || depth > maxDepth)
|
|
31
|
+
continue;
|
|
32
|
+
visited.add(id);
|
|
33
|
+
// Get incoming edges: CONTAINS, HAS_SCOPE, and DECLARES (for variables)
|
|
34
|
+
const edges = await backend.getIncomingEdges(id, ['CONTAINS', 'HAS_SCOPE', 'DECLARES']);
|
|
35
|
+
for (const edge of edges) {
|
|
36
|
+
const parentNode = await backend.getNode(edge.src);
|
|
37
|
+
if (!parentNode || visited.has(parentNode.id))
|
|
38
|
+
continue;
|
|
39
|
+
// Found container!
|
|
40
|
+
if (parentNode.type === 'FUNCTION' || parentNode.type === 'CLASS' || parentNode.type === 'MODULE') {
|
|
41
|
+
return {
|
|
42
|
+
id: parentNode.id,
|
|
43
|
+
name: parentNode.name || '<anonymous>',
|
|
44
|
+
type: parentNode.type,
|
|
45
|
+
file: parentNode.file,
|
|
46
|
+
line: parentNode.line,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// Continue searching
|
|
50
|
+
queue.push({ id: parentNode.id, depth: depth + 1 });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph Query Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utilities for querying the code graph.
|
|
5
|
+
* Used by MCP, CLI, and other tools.
|
|
6
|
+
*
|
|
7
|
+
* @module queries
|
|
8
|
+
*/
|
|
9
|
+
export { findCallsInFunction } from './findCallsInFunction.js';
|
|
10
|
+
export { findContainingFunction } from './findContainingFunction.js';
|
|
11
|
+
export { traceValues, aggregateValues, NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS } from './traceValues.js';
|
|
12
|
+
export type { CallInfo, CallerInfo, FindCallsOptions } from './types.js';
|
|
13
|
+
export type { TracedValue, ValueSource, UnknownReason, TraceValuesOptions, ValueSetResult, TraceValuesGraphBackend, NondeterministicPattern, } from './types.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queries/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAErH,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph Query Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utilities for querying the code graph.
|
|
5
|
+
* Used by MCP, CLI, and other tools.
|
|
6
|
+
*
|
|
7
|
+
* @module queries
|
|
8
|
+
*/
|
|
9
|
+
export { findCallsInFunction } from './findCallsInFunction.js';
|
|
10
|
+
export { findContainingFunction } from './findContainingFunction.js';
|
|
11
|
+
export { traceValues, aggregateValues, NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS } from './traceValues.js';
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Value Tracing Utility (REG-244)
|
|
3
|
+
*
|
|
4
|
+
* Traces a node through ASSIGNED_FROM/DERIVES_FROM edges to find
|
|
5
|
+
* all possible literal values or mark as unknown.
|
|
6
|
+
*
|
|
7
|
+
* Graph structure:
|
|
8
|
+
* ```
|
|
9
|
+
* VARIABLE -[ASSIGNED_FROM]-> LITERAL (concrete value)
|
|
10
|
+
* VARIABLE -[ASSIGNED_FROM]-> PARAMETER (unknown: runtime input)
|
|
11
|
+
* VARIABLE -[ASSIGNED_FROM]-> CALL (unknown: function return)
|
|
12
|
+
* VARIABLE -[DERIVES_FROM]-> EXPRESSION (check nondeterministic patterns)
|
|
13
|
+
* VARIABLE -[ASSIGNED_FROM]-> VARIABLE (chain - recurse)
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Used by:
|
|
17
|
+
* - CLI trace command (sink-based tracing)
|
|
18
|
+
* - ValueDomainAnalyzer (computed member access resolution)
|
|
19
|
+
*
|
|
20
|
+
* @module queries/traceValues
|
|
21
|
+
*/
|
|
22
|
+
import type { TracedValue, TraceValuesOptions, TraceValuesGraphBackend, ValueSetResult, NondeterministicPattern } from './types.js';
|
|
23
|
+
/**
|
|
24
|
+
* Nondeterministic MemberExpression patterns.
|
|
25
|
+
* object.property combinations that represent external/user input.
|
|
26
|
+
*/
|
|
27
|
+
export declare const NONDETERMINISTIC_PATTERNS: NondeterministicPattern[];
|
|
28
|
+
/**
|
|
29
|
+
* Nondeterministic object prefixes.
|
|
30
|
+
* Any property access on these is nondeterministic.
|
|
31
|
+
*/
|
|
32
|
+
export declare const NONDETERMINISTIC_OBJECTS: string[];
|
|
33
|
+
/**
|
|
34
|
+
* Trace a node to all its possible literal values.
|
|
35
|
+
*
|
|
36
|
+
* Starting from the given node, follows ASSIGNED_FROM (and optionally
|
|
37
|
+
* DERIVES_FROM) edges backwards to find:
|
|
38
|
+
* - LITERAL nodes: concrete values
|
|
39
|
+
* - PARAMETER nodes: runtime inputs (unknown)
|
|
40
|
+
* - CALL nodes: function return values (unknown)
|
|
41
|
+
* - EXPRESSION nodes: checks for nondeterministic patterns
|
|
42
|
+
*
|
|
43
|
+
* @param backend - Graph backend for queries
|
|
44
|
+
* @param nodeId - Starting node ID
|
|
45
|
+
* @param options - Traversal options
|
|
46
|
+
* @returns Array of traced values with sources
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* const values = await traceValues(backend, variableId);
|
|
50
|
+
* for (const v of values) {
|
|
51
|
+
* if (v.isUnknown) {
|
|
52
|
+
* console.log(`Unknown from ${v.source.file}:${v.source.line} (${v.reason})`);
|
|
53
|
+
* } else {
|
|
54
|
+
* console.log(`Value: ${v.value} from ${v.source.file}:${v.source.line}`);
|
|
55
|
+
* }
|
|
56
|
+
* }
|
|
57
|
+
*/
|
|
58
|
+
export declare function traceValues(backend: TraceValuesGraphBackend, nodeId: string, options?: TraceValuesOptions): Promise<TracedValue[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Aggregate traced values into a simplified result.
|
|
61
|
+
* Useful for consumers who don't need source locations.
|
|
62
|
+
*
|
|
63
|
+
* Note: null and undefined values are NOT included in the values array.
|
|
64
|
+
* If you need to detect "assigned to null", check the raw TracedValue[] instead.
|
|
65
|
+
*
|
|
66
|
+
* @param traced - Array of traced values
|
|
67
|
+
* @returns Aggregated result with unique values and hasUnknown flag
|
|
68
|
+
*/
|
|
69
|
+
export declare function aggregateValues(traced: TracedValue[]): ValueSetResult;
|
|
70
|
+
//# sourceMappingURL=traceValues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceValues.d.ts","sourceRoot":"","sources":["../../src/queries/traceValues.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,uBAAuB,EAExB,MAAM,YAAY,CAAC;AAMpB;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,uBAAuB,EAiB9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,EAO5C,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,EAAE,CAAC,CAoBxB;AAuPD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,cAAc,CAgBrE"}
|