@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
|
@@ -13,37 +13,11 @@
|
|
|
13
13
|
* - CALL -> CALLS -> METHOD (with isConditional: true for conditional calls)
|
|
14
14
|
*/
|
|
15
15
|
import { Plugin, createSuccessResult } from '../Plugin.js';
|
|
16
|
+
import { traceValues, aggregateValues, NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS, } from '../../queries/traceValues.js';
|
|
17
|
+
// Re-export for backward compatibility
|
|
18
|
+
export { NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS };
|
|
16
19
|
export class ValueDomainAnalyzer extends Plugin {
|
|
17
20
|
static MAX_DEPTH = 10; // Maximum depth for tracing
|
|
18
|
-
// Nondeterministic MemberExpression patterns
|
|
19
|
-
// object.property patterns that are external/user input
|
|
20
|
-
static NONDETERMINISTIC_PATTERNS = [
|
|
21
|
-
// Environment variables
|
|
22
|
-
{ object: 'process', property: 'env' },
|
|
23
|
-
// HTTP request data (Express.js patterns)
|
|
24
|
-
{ object: 'req', property: 'body' },
|
|
25
|
-
{ object: 'req', property: 'query' },
|
|
26
|
-
{ object: 'req', property: 'params' },
|
|
27
|
-
{ object: 'req', property: 'headers' },
|
|
28
|
-
{ object: 'req', property: 'cookies' },
|
|
29
|
-
{ object: 'request', property: 'body' },
|
|
30
|
-
{ object: 'request', property: 'query' },
|
|
31
|
-
{ object: 'request', property: 'params' },
|
|
32
|
-
// Context patterns (Koa, etc.)
|
|
33
|
-
{ object: 'ctx', property: 'request' },
|
|
34
|
-
{ object: 'ctx', property: 'body' },
|
|
35
|
-
{ object: 'ctx', property: 'query' },
|
|
36
|
-
{ object: 'ctx', property: 'params' },
|
|
37
|
-
];
|
|
38
|
-
// Nondeterministic object prefixes (any property access is nondeterministic)
|
|
39
|
-
static NONDETERMINISTIC_OBJECTS = [
|
|
40
|
-
'process.env', // process.env.ANY_VAR
|
|
41
|
-
'req.body', // req.body.userId
|
|
42
|
-
'req.query', // req.query.filter
|
|
43
|
-
'req.params', // req.params.id
|
|
44
|
-
'request.body',
|
|
45
|
-
'ctx.request',
|
|
46
|
-
];
|
|
47
21
|
get metadata() {
|
|
48
22
|
return {
|
|
49
23
|
name: 'ValueDomainAnalyzer',
|
|
@@ -51,15 +25,16 @@ export class ValueDomainAnalyzer extends Plugin {
|
|
|
51
25
|
priority: 65, // After AliasTracker (60)
|
|
52
26
|
creates: {
|
|
53
27
|
nodes: [],
|
|
54
|
-
edges: ['CALLS']
|
|
28
|
+
edges: ['CALLS', 'FLOWS_INTO'] // Added FLOWS_INTO (modifies existing)
|
|
55
29
|
}
|
|
56
30
|
};
|
|
57
31
|
}
|
|
58
32
|
async execute(context) {
|
|
59
33
|
const { graph } = context;
|
|
34
|
+
const logger = this.log(context);
|
|
60
35
|
const onProgress = context.onProgress;
|
|
61
36
|
const graphTyped = graph;
|
|
62
|
-
|
|
37
|
+
logger.info('Starting value domain analysis');
|
|
63
38
|
let callsProcessed = 0;
|
|
64
39
|
let callsResolved = 0;
|
|
65
40
|
let edgesCreated = 0;
|
|
@@ -74,7 +49,7 @@ export class ValueDomainAnalyzer extends Plugin {
|
|
|
74
49
|
computedCalls.push(callNode);
|
|
75
50
|
}
|
|
76
51
|
}
|
|
77
|
-
|
|
52
|
+
logger.info('Found computed member calls', { count: computedCalls.length });
|
|
78
53
|
// 2. For each computed call get value set
|
|
79
54
|
for (const call of computedCalls) {
|
|
80
55
|
callsProcessed++;
|
|
@@ -130,15 +105,20 @@ export class ValueDomainAnalyzer extends Plugin {
|
|
|
130
105
|
}
|
|
131
106
|
}
|
|
132
107
|
}
|
|
108
|
+
// 5. Resolve computed property mutations in FLOWS_INTO edges
|
|
109
|
+
logger.debug('Resolving computed property mutations');
|
|
110
|
+
const mutationStats = await this.resolveComputedMutations(graphTyped, logger);
|
|
111
|
+
logger.debug('Mutation resolution stats', mutationStats);
|
|
133
112
|
const summary = {
|
|
134
113
|
callsProcessed,
|
|
135
114
|
callsResolved,
|
|
136
115
|
edgesCreated,
|
|
137
116
|
conditionalCalls,
|
|
138
|
-
partialCalls
|
|
117
|
+
partialCalls,
|
|
118
|
+
computedMutations: mutationStats
|
|
139
119
|
};
|
|
140
|
-
|
|
141
|
-
return createSuccessResult({ nodes: 0, edges: edgesCreated }, summary);
|
|
120
|
+
logger.info('Summary', summary);
|
|
121
|
+
return createSuccessResult({ nodes: 0, edges: edgesCreated + mutationStats.resolved + mutationStats.conditional }, summary);
|
|
142
122
|
}
|
|
143
123
|
/**
|
|
144
124
|
* Get set of possible values for a variable
|
|
@@ -167,11 +147,9 @@ export class ValueDomainAnalyzer extends Plugin {
|
|
|
167
147
|
}
|
|
168
148
|
}
|
|
169
149
|
if (variables.length === 0) {
|
|
170
|
-
console.log(`[ValueDomainAnalyzer] No variable found for ${variableName} in ${file}`);
|
|
171
150
|
result.hasUnknown = true;
|
|
172
151
|
return result;
|
|
173
152
|
}
|
|
174
|
-
console.log(`[ValueDomainAnalyzer] Found ${variables.length} variable(s) for ${variableName}`);
|
|
175
153
|
// Trace ASSIGNED_FROM to LITERAL or nondeterministic sources
|
|
176
154
|
const visited = new Set();
|
|
177
155
|
const valueSet = new Set();
|
|
@@ -223,8 +201,7 @@ export class ValueDomainAnalyzer extends Plugin {
|
|
|
223
201
|
for await (const s of graph.queryNodes({ nodeType: 'SCOPE' })) {
|
|
224
202
|
const scopeNode = s;
|
|
225
203
|
if (scopeNode.id === currentScopeId ||
|
|
226
|
-
scopeNode.originalId === currentScopeId
|
|
227
|
-
scopeNode.stableId === currentScopeId) {
|
|
204
|
+
scopeNode.originalId === currentScopeId) {
|
|
228
205
|
scope = scopeNode;
|
|
229
206
|
break;
|
|
230
207
|
}
|
|
@@ -324,107 +301,63 @@ export class ValueDomainAnalyzer extends Plugin {
|
|
|
324
301
|
}
|
|
325
302
|
}
|
|
326
303
|
/**
|
|
327
|
-
*
|
|
304
|
+
* Recursive value set tracing through ASSIGNED_FROM edges.
|
|
305
|
+
* Delegates to shared traceValues utility (REG-244).
|
|
328
306
|
*/
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
if (nodeType === 'PARAMETER') {
|
|
382
|
-
result.hasUnknown = true;
|
|
383
|
-
return result;
|
|
384
|
-
}
|
|
385
|
-
// If it's a CALL - consider nondeterministic (for now)
|
|
386
|
-
if (nodeType === 'CALL') {
|
|
387
|
-
result.hasUnknown = true;
|
|
388
|
-
return result;
|
|
389
|
-
}
|
|
390
|
-
// If it's an EXPRESSION - check nondeterministic patterns
|
|
391
|
-
if (nodeType === 'EXPRESSION') {
|
|
392
|
-
if (this.isNondeterministicExpression(node)) {
|
|
393
|
-
result.hasUnknown = true;
|
|
394
|
-
return result;
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
// Follow ASSIGNED_FROM and DERIVES_FROM edges
|
|
398
|
-
// DERIVES_FROM is used for template literals and other composite expressions
|
|
399
|
-
const outgoing = await graph.getOutgoingEdges(node.id);
|
|
400
|
-
// edgeType (from getOutgoingEdges) or edge_type (from other APIs)
|
|
401
|
-
const dataFlowEdges = outgoing.filter(e => {
|
|
402
|
-
const edgeType = e.edgeType ||
|
|
403
|
-
e.edge_type;
|
|
404
|
-
return edgeType === 'ASSIGNED_FROM' || edgeType === 'DERIVES_FROM';
|
|
307
|
+
async traceValueSet(node, graph, _visited, depth) {
|
|
308
|
+
// Create adapter from Graph interface to TraceValuesGraphBackend
|
|
309
|
+
const backend = {
|
|
310
|
+
getNode: async (id) => {
|
|
311
|
+
const n = await graph.getNode(id);
|
|
312
|
+
if (!n)
|
|
313
|
+
return null;
|
|
314
|
+
return {
|
|
315
|
+
id: n.id,
|
|
316
|
+
type: n.type,
|
|
317
|
+
nodeType: n.nodeType,
|
|
318
|
+
value: n.value,
|
|
319
|
+
file: n.file,
|
|
320
|
+
line: n.line,
|
|
321
|
+
expressionType: n.expressionType,
|
|
322
|
+
object: n.object,
|
|
323
|
+
property: n.property,
|
|
324
|
+
};
|
|
325
|
+
},
|
|
326
|
+
getOutgoingEdges: async (nodeId, edgeTypes) => {
|
|
327
|
+
const edges = await graph.getOutgoingEdges(nodeId);
|
|
328
|
+
const filtered = edgeTypes === null
|
|
329
|
+
? edges
|
|
330
|
+
: edges.filter(e => edgeTypes.includes(e.type));
|
|
331
|
+
return filtered.map(e => ({
|
|
332
|
+
src: e.src ||
|
|
333
|
+
e.source_id || '',
|
|
334
|
+
dst: e.dst ||
|
|
335
|
+
e.target_id || '',
|
|
336
|
+
type: e.type,
|
|
337
|
+
}));
|
|
338
|
+
},
|
|
339
|
+
// REG-334: getIncomingEdges required for Promise tracing
|
|
340
|
+
getIncomingEdges: async (nodeId, edgeTypes) => {
|
|
341
|
+
const edges = await graph.getIncomingEdges(nodeId);
|
|
342
|
+
const filtered = edgeTypes === null
|
|
343
|
+
? edges
|
|
344
|
+
: edges.filter(e => edgeTypes.includes(e.type));
|
|
345
|
+
return filtered.map(e => ({
|
|
346
|
+
src: e.src ||
|
|
347
|
+
e.source_id || '',
|
|
348
|
+
dst: e.dst ||
|
|
349
|
+
e.target_id || '',
|
|
350
|
+
type: e.type,
|
|
351
|
+
}));
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
// Use shared utility
|
|
355
|
+
const traced = await traceValues(backend, node.id, {
|
|
356
|
+
maxDepth: ValueDomainAnalyzer.MAX_DEPTH - depth,
|
|
357
|
+
followDerivesFrom: true,
|
|
358
|
+
detectNondeterministic: true,
|
|
405
359
|
});
|
|
406
|
-
|
|
407
|
-
// No sources - unknown
|
|
408
|
-
result.hasUnknown = true;
|
|
409
|
-
return result;
|
|
410
|
-
}
|
|
411
|
-
// Recursively trace each source
|
|
412
|
-
for (const edge of dataFlowEdges) {
|
|
413
|
-
// dst (from getOutgoingEdges) or target_id (from other APIs)
|
|
414
|
-
const targetId = edge.dst ||
|
|
415
|
-
edge.target_id;
|
|
416
|
-
if (!targetId)
|
|
417
|
-
continue;
|
|
418
|
-
const sourceNode = await graph.getNode(targetId);
|
|
419
|
-
if (!sourceNode)
|
|
420
|
-
continue;
|
|
421
|
-
const sourceResult = await this.traceValueSet(sourceNode, graph, visited, depth + 1);
|
|
422
|
-
sourceResult.values.forEach(v => result.values.push(v));
|
|
423
|
-
if (sourceResult.hasUnknown) {
|
|
424
|
-
result.hasUnknown = true;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
return result;
|
|
360
|
+
return aggregateValues(traced);
|
|
428
361
|
}
|
|
429
362
|
/**
|
|
430
363
|
* Find method by object name and method name
|
|
@@ -437,11 +370,7 @@ export class ValueDomainAnalyzer extends Plugin {
|
|
|
437
370
|
// Check if this is a method of the right object
|
|
438
371
|
// Simplified: check via incoming CONTAINS edges from CLASS
|
|
439
372
|
const incoming = await graph.getIncomingEdges(node.id);
|
|
440
|
-
const containsEdges = incoming.filter(e =>
|
|
441
|
-
const edgeType = e.edgeType ||
|
|
442
|
-
e.edge_type;
|
|
443
|
-
return edgeType === 'CONTAINS';
|
|
444
|
-
});
|
|
373
|
+
const containsEdges = incoming.filter(e => e.type === 'CONTAINS');
|
|
445
374
|
for (const edge of containsEdges) {
|
|
446
375
|
const sourceId = edge.src ||
|
|
447
376
|
edge.source_id;
|
|
@@ -460,5 +389,118 @@ export class ValueDomainAnalyzer extends Plugin {
|
|
|
460
389
|
}
|
|
461
390
|
return null;
|
|
462
391
|
}
|
|
392
|
+
/**
|
|
393
|
+
* Resolve computed property names for object mutations.
|
|
394
|
+
* Finds FLOWS_INTO edges with mutationType: 'computed' and resolves
|
|
395
|
+
* the property name using value set tracing.
|
|
396
|
+
*
|
|
397
|
+
* @param graph - Graph backend with edge operations
|
|
398
|
+
* @returns Statistics about resolution
|
|
399
|
+
*/
|
|
400
|
+
async resolveComputedMutations(graph, logger) {
|
|
401
|
+
const stats = {
|
|
402
|
+
resolved: 0,
|
|
403
|
+
conditional: 0,
|
|
404
|
+
unknownParameter: 0,
|
|
405
|
+
unknownRuntime: 0,
|
|
406
|
+
deferredCrossFile: 0,
|
|
407
|
+
total: 0
|
|
408
|
+
};
|
|
409
|
+
// Process edges by finding all VARIABLE and CONSTANT nodes and checking their outgoing edges
|
|
410
|
+
const processedEdges = new Set();
|
|
411
|
+
// Helper to process a node's outgoing edges
|
|
412
|
+
const processNodeEdges = async (node) => {
|
|
413
|
+
const outgoing = await graph.getOutgoingEdges(node.id);
|
|
414
|
+
for (const edge of outgoing) {
|
|
415
|
+
if (edge.type !== 'FLOWS_INTO')
|
|
416
|
+
continue;
|
|
417
|
+
const edgeKey = `${edge.src}->${edge.dst}:FLOWS_INTO`;
|
|
418
|
+
if (processedEdges.has(edgeKey))
|
|
419
|
+
continue;
|
|
420
|
+
processedEdges.add(edgeKey);
|
|
421
|
+
const mutationType = edge.metadata?.mutationType;
|
|
422
|
+
const computedPropertyVar = edge.metadata?.computedPropertyVar;
|
|
423
|
+
if (mutationType !== 'computed' || !computedPropertyVar)
|
|
424
|
+
continue;
|
|
425
|
+
stats.total++;
|
|
426
|
+
// Get file from source node
|
|
427
|
+
const sourceNode = await graph.getNode(edge.src);
|
|
428
|
+
const file = sourceNode?.file;
|
|
429
|
+
if (!file)
|
|
430
|
+
continue;
|
|
431
|
+
// Resolve the computed property variable using existing getValueSet
|
|
432
|
+
const valueSet = await this.getValueSet(computedPropertyVar, file, graph);
|
|
433
|
+
// Check if the variable is a PARAMETER node
|
|
434
|
+
let isParameter = false;
|
|
435
|
+
for await (const node of graph.queryNodes({ nodeType: 'PARAMETER' })) {
|
|
436
|
+
const paramNode = node;
|
|
437
|
+
const nodeName = paramNode.name || paramNode.attrs?.name;
|
|
438
|
+
const nodeFile = paramNode.file || paramNode.attrs?.file;
|
|
439
|
+
if (nodeName === computedPropertyVar && nodeFile === file) {
|
|
440
|
+
isParameter = true;
|
|
441
|
+
break;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// Determine resolution status based on value set
|
|
445
|
+
let resolutionStatus;
|
|
446
|
+
let resolvedPropertyNames = [];
|
|
447
|
+
if (valueSet.values.length === 0 && isParameter) {
|
|
448
|
+
// Variable is a function parameter - cannot be statically resolved
|
|
449
|
+
resolutionStatus = 'UNKNOWN_PARAMETER';
|
|
450
|
+
stats.unknownParameter++;
|
|
451
|
+
}
|
|
452
|
+
else if (valueSet.values.length === 0 && valueSet.hasUnknown) {
|
|
453
|
+
// Completely nondeterministic - runtime value (function call result, etc.)
|
|
454
|
+
resolutionStatus = 'UNKNOWN_RUNTIME';
|
|
455
|
+
stats.unknownRuntime++;
|
|
456
|
+
}
|
|
457
|
+
else if (valueSet.values.length === 0) {
|
|
458
|
+
// No values found at all - treat as unknown
|
|
459
|
+
resolutionStatus = 'UNKNOWN_RUNTIME';
|
|
460
|
+
stats.unknownRuntime++;
|
|
461
|
+
}
|
|
462
|
+
else if (valueSet.values.length === 1 && !valueSet.hasUnknown) {
|
|
463
|
+
// Single deterministic value
|
|
464
|
+
resolutionStatus = 'RESOLVED';
|
|
465
|
+
resolvedPropertyNames = valueSet.values.map(v => String(v));
|
|
466
|
+
stats.resolved++;
|
|
467
|
+
}
|
|
468
|
+
else {
|
|
469
|
+
// Multiple values (conditional) or partial resolution
|
|
470
|
+
resolutionStatus = 'RESOLVED_CONDITIONAL';
|
|
471
|
+
resolvedPropertyNames = valueSet.values.map(v => String(v));
|
|
472
|
+
stats.conditional++;
|
|
473
|
+
}
|
|
474
|
+
// Update edge: delete old, create new with resolved data
|
|
475
|
+
// Following the same pattern as InstanceOfResolver
|
|
476
|
+
if (graph.deleteEdge) {
|
|
477
|
+
await graph.deleteEdge(edge.src, edge.dst, 'FLOWS_INTO');
|
|
478
|
+
}
|
|
479
|
+
// Preserve original edge data and add resolution info
|
|
480
|
+
// For UNKNOWN cases, keep propertyName as '<computed>' and resolvedPropertyNames empty
|
|
481
|
+
await graph.addEdge({
|
|
482
|
+
src: edge.src,
|
|
483
|
+
dst: edge.dst,
|
|
484
|
+
type: 'FLOWS_INTO',
|
|
485
|
+
metadata: {
|
|
486
|
+
mutationType,
|
|
487
|
+
propertyName: resolvedPropertyNames[0] || '<computed>',
|
|
488
|
+
computedPropertyVar,
|
|
489
|
+
resolvedPropertyNames,
|
|
490
|
+
resolutionStatus
|
|
491
|
+
}
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
};
|
|
495
|
+
// Process VARIABLE nodes
|
|
496
|
+
for await (const node of graph.queryNodes({ nodeType: 'VARIABLE' })) {
|
|
497
|
+
await processNodeEdges(node);
|
|
498
|
+
}
|
|
499
|
+
// Process CONSTANT nodes
|
|
500
|
+
for await (const node of graph.queryNodes({ nodeType: 'CONSTANT' })) {
|
|
501
|
+
await processNodeEdges(node);
|
|
502
|
+
}
|
|
503
|
+
return stats;
|
|
504
|
+
}
|
|
463
505
|
}
|
|
464
506
|
export default ValueDomainAnalyzer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncrementalModuleIndexer.d.ts","sourceRoot":"","sources":["../../../src/plugins/indexing/IncrementalModuleIndexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAyBhF,qBAAa,wBAAyB,SAAQ,MAAM;IAClD,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAuBlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqCd,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"IncrementalModuleIndexer.d.ts","sourceRoot":"","sources":["../../../src/plugins/indexing/IncrementalModuleIndexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAyBhF,qBAAa,wBAAyB,SAAQ,MAAM;IAClD,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAuBlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqCd,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAyI7D"}
|
|
@@ -119,11 +119,12 @@ export class IncrementalModuleIndexer extends Plugin {
|
|
|
119
119
|
return imports;
|
|
120
120
|
}
|
|
121
121
|
catch (err) {
|
|
122
|
-
|
|
122
|
+
// Parse error will be logged by execute() when it needs logger context
|
|
123
123
|
return [];
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
async execute(context) {
|
|
127
|
+
const logger = this.log(context);
|
|
127
128
|
try {
|
|
128
129
|
const { manifest, graph } = context;
|
|
129
130
|
// Cast manifest to expected shape
|
|
@@ -139,17 +140,18 @@ export class IncrementalModuleIndexer extends Plugin {
|
|
|
139
140
|
let edgesCreated = 0;
|
|
140
141
|
let totalImportsParsed = 0;
|
|
141
142
|
let unresolvedImports = 0;
|
|
142
|
-
|
|
143
|
+
logger.info('Starting incremental indexing', { entryFile: relative(projectPath, entryFile) });
|
|
143
144
|
while (queue.length > 0) {
|
|
144
145
|
const file = queue.shift();
|
|
145
146
|
if (processed.has(file))
|
|
146
147
|
continue;
|
|
147
148
|
processed.add(file);
|
|
148
|
-
// Create MODULE node
|
|
149
|
+
// Create MODULE node with semantic ID
|
|
149
150
|
const fileHash = this.calculateFileHash(file);
|
|
150
151
|
const relativePath = relative(projectPath, file);
|
|
152
|
+
const semanticId = `${relativePath}->global->MODULE->module`;
|
|
151
153
|
const moduleNode = {
|
|
152
|
-
id:
|
|
154
|
+
id: semanticId,
|
|
153
155
|
type: 'MODULE',
|
|
154
156
|
name: relativePath,
|
|
155
157
|
file: file,
|
|
@@ -169,10 +171,12 @@ export class IncrementalModuleIndexer extends Plugin {
|
|
|
169
171
|
const imports = this.parseImports(file, projectPath);
|
|
170
172
|
totalImportsParsed += imports.length;
|
|
171
173
|
for (const importFile of imports) {
|
|
172
|
-
// Store for later edge creation
|
|
174
|
+
// Store for later edge creation with semantic ID format
|
|
175
|
+
const importRelativePath = relative(projectPath, importFile);
|
|
176
|
+
const importSemanticId = `${importRelativePath}->global->MODULE->module`;
|
|
173
177
|
pendingImports.push({
|
|
174
178
|
src: moduleNode.id,
|
|
175
|
-
dst:
|
|
179
|
+
dst: importSemanticId
|
|
176
180
|
});
|
|
177
181
|
if (!processed.has(importFile)) {
|
|
178
182
|
queue.push(importFile);
|
|
@@ -209,13 +213,15 @@ export class IncrementalModuleIndexer extends Plugin {
|
|
|
209
213
|
// Ignore parse errors for unresolved count
|
|
210
214
|
}
|
|
211
215
|
if (processed.size % 10 === 0) {
|
|
212
|
-
|
|
216
|
+
logger.debug('Indexing progress', { indexed: processed.size, queueLength: queue.length });
|
|
213
217
|
}
|
|
214
218
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
+
logger.info('Modules indexed', { count: processed.size });
|
|
220
|
+
logger.debug('Import statistics', {
|
|
221
|
+
totalImportsParsed,
|
|
222
|
+
unresolvedImports,
|
|
223
|
+
pendingEdges: pendingImports.length
|
|
224
|
+
});
|
|
219
225
|
// Now create all IMPORTS edges after all MODULE nodes exist
|
|
220
226
|
for (const { src, dst } of pendingImports) {
|
|
221
227
|
await graph.addEdge({
|
|
@@ -226,12 +232,15 @@ export class IncrementalModuleIndexer extends Plugin {
|
|
|
226
232
|
});
|
|
227
233
|
edgesCreated++;
|
|
228
234
|
}
|
|
229
|
-
|
|
230
|
-
|
|
235
|
+
logger.info('Indexing complete', {
|
|
236
|
+
nodesCreated,
|
|
237
|
+
edgesCreated,
|
|
238
|
+
importsEdgesCreated: pendingImports.length
|
|
239
|
+
});
|
|
231
240
|
return createSuccessResult({ nodes: nodesCreated, edges: edgesCreated }, { filesScanned: processed.size });
|
|
232
241
|
}
|
|
233
242
|
catch (error) {
|
|
234
|
-
|
|
243
|
+
logger.error('Indexing failed', { error });
|
|
235
244
|
return createErrorResult(error);
|
|
236
245
|
}
|
|
237
246
|
}
|
|
@@ -9,11 +9,26 @@ export declare class JSModuleIndexer extends Plugin {
|
|
|
9
9
|
private cache;
|
|
10
10
|
private testPatterns;
|
|
11
11
|
private markTestFiles;
|
|
12
|
+
private includePatterns?;
|
|
13
|
+
private excludePatterns?;
|
|
14
|
+
private projectPath;
|
|
12
15
|
constructor();
|
|
13
16
|
/**
|
|
14
17
|
* Check if file is a test file based on path patterns
|
|
15
18
|
*/
|
|
16
19
|
private isTestFile;
|
|
20
|
+
/**
|
|
21
|
+
* Check if a file should be skipped based on include/exclude patterns.
|
|
22
|
+
*
|
|
23
|
+
* Logic:
|
|
24
|
+
* 1. If file matches any exclude pattern -> SKIP
|
|
25
|
+
* 2. If include patterns specified AND file doesn't match any -> SKIP
|
|
26
|
+
* 3. Otherwise -> PROCESS
|
|
27
|
+
*
|
|
28
|
+
* @param absolutePath - Absolute path to the file
|
|
29
|
+
* @returns true if file should be skipped, false if it should be processed
|
|
30
|
+
*/
|
|
31
|
+
private shouldSkipFile;
|
|
17
32
|
get metadata(): PluginMetadata;
|
|
18
33
|
private calculateFileHash;
|
|
19
34
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSModuleIndexer.d.ts","sourceRoot":"","sources":["../../../src/plugins/indexing/JSModuleIndexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"JSModuleIndexer.d.ts","sourceRoot":"","sources":["../../../src/plugins/indexing/JSModuleIndexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,MAAM,EAAqB,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgEhF,qBAAa,eAAgB,SAAQ,MAAM;IACzC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,aAAa,CAAU;IAE/B,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,WAAW,CAAc;;IAYjC;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IA0BtB,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAED,OAAO,CAAC,iBAAiB;IASzB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAuEnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBnB,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA6N7D"}
|