@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
|
@@ -1,58 +1,45 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CallResolverValidator -
|
|
2
|
+
* CallResolverValidator - validates function call resolution (REG-227)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Checks that all function calls are properly resolved:
|
|
5
|
+
* - Internal calls: CALLS edge to FUNCTION node
|
|
6
|
+
* - External calls: CALLS edge to EXTERNAL_MODULE node
|
|
7
|
+
* - Builtin calls: recognized by name (no edge needed)
|
|
8
|
+
* - Unresolved: no edge, not builtin -> WARNING
|
|
6
9
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* Это находит CALL узлы без "object" метаданных (т.е. CALL_SITE, не METHOD_CALL),
|
|
11
|
-
* которые не имеют CALLS ребра к определению функции.
|
|
10
|
+
* This validator runs AFTER FunctionCallResolver and ExternalCallResolver
|
|
11
|
+
* to verify resolution quality and report issues.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { Plugin, createSuccessResult } from '../Plugin.js';
|
|
15
15
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
16
|
-
import type {
|
|
16
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
17
|
+
import { ValidationError } from '../../errors/GrafemaError.js';
|
|
18
|
+
import { JS_GLOBAL_FUNCTIONS } from '../../data/builtins/index.js';
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
|
-
*
|
|
21
|
+
* Resolution type for a CALL node
|
|
20
22
|
*/
|
|
21
|
-
|
|
22
|
-
type: string;
|
|
23
|
-
severity: string;
|
|
24
|
-
message: string;
|
|
25
|
-
callName: string;
|
|
26
|
-
nodeId: string;
|
|
27
|
-
file?: string;
|
|
28
|
-
line?: number;
|
|
29
|
-
}
|
|
23
|
+
type ResolutionType = 'internal' | 'external' | 'builtin' | 'method' | 'unresolved';
|
|
30
24
|
|
|
31
25
|
/**
|
|
32
|
-
*
|
|
26
|
+
* Call node with optional attributes
|
|
33
27
|
*/
|
|
34
|
-
interface
|
|
35
|
-
|
|
36
|
-
resolved: number;
|
|
37
|
-
external: number;
|
|
28
|
+
interface CallNode extends BaseNodeRecord {
|
|
29
|
+
object?: string; // If present, this is a method call
|
|
38
30
|
}
|
|
39
31
|
|
|
40
32
|
/**
|
|
41
|
-
* Validation summary
|
|
33
|
+
* Validation summary showing resolution breakdown
|
|
42
34
|
*/
|
|
43
35
|
interface ValidationSummary {
|
|
44
36
|
totalCalls: number;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Datalog violation result
|
|
53
|
-
*/
|
|
54
|
-
interface DatalogViolation {
|
|
55
|
-
bindings: Array<{ name: string; value: string }>;
|
|
37
|
+
resolvedInternal: number; // CALLS -> FUNCTION
|
|
38
|
+
resolvedExternal: number; // CALLS -> EXTERNAL_MODULE
|
|
39
|
+
resolvedBuiltin: number; // Name in JS_GLOBAL_FUNCTIONS
|
|
40
|
+
methodCalls: number; // Has 'object' attribute (not validated)
|
|
41
|
+
unresolvedCalls: number; // No edge, not builtin
|
|
42
|
+
warnings: number; // = unresolvedCalls
|
|
56
43
|
}
|
|
57
44
|
|
|
58
45
|
export class CallResolverValidator extends Plugin {
|
|
@@ -64,107 +51,141 @@ export class CallResolverValidator extends Plugin {
|
|
|
64
51
|
creates: {
|
|
65
52
|
nodes: [],
|
|
66
53
|
edges: []
|
|
67
|
-
}
|
|
54
|
+
},
|
|
55
|
+
dependencies: ['FunctionCallResolver', 'ExternalCallResolver']
|
|
68
56
|
};
|
|
69
57
|
}
|
|
70
58
|
|
|
71
59
|
async execute(context: PluginContext): Promise<PluginResult> {
|
|
72
60
|
const { graph } = context;
|
|
61
|
+
const logger = this.log(context);
|
|
73
62
|
|
|
74
|
-
|
|
63
|
+
logger.info('Starting call resolution validation');
|
|
75
64
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
65
|
+
const warnings: ValidationError[] = [];
|
|
66
|
+
const summary: ValidationSummary = {
|
|
67
|
+
totalCalls: 0,
|
|
68
|
+
resolvedInternal: 0,
|
|
69
|
+
resolvedExternal: 0,
|
|
70
|
+
resolvedBuiltin: 0,
|
|
71
|
+
methodCalls: 0,
|
|
72
|
+
unresolvedCalls: 0,
|
|
73
|
+
warnings: 0
|
|
74
|
+
};
|
|
81
75
|
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
}
|
|
76
|
+
// Process all CALL nodes
|
|
77
|
+
for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
|
|
78
|
+
summary.totalCalls++;
|
|
79
|
+
const callNode = node as CallNode;
|
|
80
|
+
|
|
81
|
+
const resolutionType = await this.determineResolutionType(graph, callNode);
|
|
82
|
+
|
|
83
|
+
switch (resolutionType) {
|
|
84
|
+
case 'internal':
|
|
85
|
+
summary.resolvedInternal++;
|
|
86
|
+
break;
|
|
87
|
+
case 'external':
|
|
88
|
+
summary.resolvedExternal++;
|
|
89
|
+
break;
|
|
90
|
+
case 'builtin':
|
|
91
|
+
summary.resolvedBuiltin++;
|
|
92
|
+
break;
|
|
93
|
+
case 'method':
|
|
94
|
+
summary.methodCalls++;
|
|
95
|
+
break;
|
|
96
|
+
case 'unresolved':
|
|
97
|
+
summary.unresolvedCalls++;
|
|
98
|
+
summary.warnings++;
|
|
99
|
+
warnings.push(this.createWarning(callNode));
|
|
100
|
+
break;
|
|
109
101
|
}
|
|
110
102
|
}
|
|
111
103
|
|
|
112
|
-
|
|
113
|
-
// (это информационно, не ошибка)
|
|
114
|
-
const methodCallStats = await this.countMethodCalls(graph);
|
|
115
|
-
|
|
116
|
-
const summary: ValidationSummary = {
|
|
117
|
-
totalCalls: methodCallStats.total,
|
|
118
|
-
resolvedInternalCalls: methodCallStats.resolved,
|
|
119
|
-
unresolvedInternalCalls: issues.length,
|
|
120
|
-
externalMethodCalls: methodCallStats.external,
|
|
121
|
-
issues: issues.length
|
|
122
|
-
};
|
|
104
|
+
logger.info('Validation complete', { ...summary });
|
|
123
105
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
for (const issue of issues.slice(0, 10)) { // Show first 10
|
|
129
|
-
console.log(` ⚠️ ${issue.message}`);
|
|
106
|
+
if (warnings.length > 0) {
|
|
107
|
+
logger.warn('Unresolved calls detected', { count: warnings.length });
|
|
108
|
+
for (const warning of warnings.slice(0, 10)) {
|
|
109
|
+
logger.warn(warning.message);
|
|
130
110
|
}
|
|
131
|
-
if (
|
|
132
|
-
|
|
111
|
+
if (warnings.length > 10) {
|
|
112
|
+
logger.debug(`... and ${warnings.length - 10} more`);
|
|
133
113
|
}
|
|
134
114
|
}
|
|
135
115
|
|
|
136
116
|
return createSuccessResult(
|
|
137
117
|
{ nodes: 0, edges: 0 },
|
|
138
|
-
{ summary
|
|
118
|
+
{ summary },
|
|
119
|
+
warnings
|
|
139
120
|
);
|
|
140
121
|
}
|
|
141
122
|
|
|
142
123
|
/**
|
|
143
|
-
*
|
|
124
|
+
* Determine the resolution type for a CALL node.
|
|
125
|
+
*
|
|
126
|
+
* Resolution priority:
|
|
127
|
+
* 1. Method call (has 'object' attribute) -> 'method'
|
|
128
|
+
* 2. Has CALLS edge to FUNCTION -> 'internal'
|
|
129
|
+
* 3. Has CALLS edge to EXTERNAL_MODULE -> 'external'
|
|
130
|
+
* 4. Name in JS_GLOBAL_FUNCTIONS -> 'builtin'
|
|
131
|
+
* 5. Otherwise -> 'unresolved'
|
|
144
132
|
*/
|
|
145
|
-
private async
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
133
|
+
private async determineResolutionType(
|
|
134
|
+
graph: PluginContext['graph'],
|
|
135
|
+
callNode: CallNode
|
|
136
|
+
): Promise<ResolutionType> {
|
|
137
|
+
// 1. Check if method call (has object attribute)
|
|
138
|
+
if (callNode.object) {
|
|
139
|
+
return 'method';
|
|
140
|
+
}
|
|
151
141
|
|
|
152
|
-
//
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
142
|
+
// 2. Check for CALLS edges
|
|
143
|
+
const edges = await graph.getOutgoingEdges(callNode.id, ['CALLS']);
|
|
144
|
+
if (edges.length > 0) {
|
|
145
|
+
// Determine destination type
|
|
146
|
+
const edge = edges[0];
|
|
147
|
+
const dstNode = await graph.getNode(edge.dst);
|
|
148
|
+
|
|
149
|
+
if (dstNode) {
|
|
150
|
+
if (dstNode.type === 'FUNCTION') {
|
|
151
|
+
return 'internal';
|
|
152
|
+
}
|
|
153
|
+
if (dstNode.type === 'EXTERNAL_MODULE') {
|
|
154
|
+
return 'external';
|
|
164
155
|
}
|
|
165
156
|
}
|
|
157
|
+
|
|
158
|
+
// Has edge but unknown destination type - treat as resolved
|
|
159
|
+
return 'internal';
|
|
166
160
|
}
|
|
167
161
|
|
|
168
|
-
|
|
162
|
+
// 3. Check if builtin
|
|
163
|
+
const calledName = callNode.name as string;
|
|
164
|
+
if (calledName && JS_GLOBAL_FUNCTIONS.has(calledName)) {
|
|
165
|
+
return 'builtin';
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// 4. Unresolved
|
|
169
|
+
return 'unresolved';
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Create a warning for an unresolved call.
|
|
174
|
+
*/
|
|
175
|
+
private createWarning(callNode: CallNode): ValidationError {
|
|
176
|
+
return new ValidationError(
|
|
177
|
+
`Unresolved call to "${callNode.name}" at ${callNode.file}:${callNode.line || '?'}`,
|
|
178
|
+
'WARN_UNRESOLVED_CALL',
|
|
179
|
+
{
|
|
180
|
+
filePath: callNode.file,
|
|
181
|
+
lineNumber: callNode.line as number | undefined,
|
|
182
|
+
phase: 'VALIDATION',
|
|
183
|
+
plugin: 'CallResolverValidator',
|
|
184
|
+
nodeId: callNode.id,
|
|
185
|
+
callName: callNode.name as string,
|
|
186
|
+
},
|
|
187
|
+
'Ensure the function is defined, imported, or is a known global',
|
|
188
|
+
'warning' // Severity: warning (not error)
|
|
189
|
+
);
|
|
169
190
|
}
|
|
170
191
|
}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import { Plugin, createSuccessResult } from '../Plugin.js';
|
|
16
16
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
17
17
|
import type { NodeRecord } from '@grafema/types';
|
|
18
|
+
import { ValidationError } from '../../errors/GrafemaError.js';
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* Edge structure
|
|
@@ -26,19 +27,6 @@ interface EdgeRecord {
|
|
|
26
27
|
[key: string]: unknown;
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
/**
|
|
30
|
-
* Data flow issue
|
|
31
|
-
*/
|
|
32
|
-
interface DataFlowIssue {
|
|
33
|
-
type: string;
|
|
34
|
-
severity: string;
|
|
35
|
-
message: string;
|
|
36
|
-
variable: string;
|
|
37
|
-
file?: string;
|
|
38
|
-
line?: number;
|
|
39
|
-
chain?: string[];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
30
|
/**
|
|
43
31
|
* Path finding result
|
|
44
32
|
*/
|
|
@@ -72,12 +60,13 @@ export class DataFlowValidator extends Plugin {
|
|
|
72
60
|
|
|
73
61
|
async execute(context: PluginContext): Promise<PluginResult> {
|
|
74
62
|
const { graph } = context;
|
|
63
|
+
const logger = this.log(context);
|
|
75
64
|
|
|
76
|
-
|
|
65
|
+
logger.info('Starting data flow validation');
|
|
77
66
|
|
|
78
67
|
// Check if graph supports getAllEdges
|
|
79
68
|
if (!graph.getAllEdges) {
|
|
80
|
-
|
|
69
|
+
logger.debug('Graph does not support getAllEdges, skipping validation');
|
|
81
70
|
return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true });
|
|
82
71
|
}
|
|
83
72
|
|
|
@@ -89,16 +78,16 @@ export class DataFlowValidator extends Plugin {
|
|
|
89
78
|
n.type === 'VARIABLE_DECLARATION' || n.type === 'CONSTANT'
|
|
90
79
|
);
|
|
91
80
|
|
|
92
|
-
|
|
81
|
+
logger.debug('Variables collected', { count: variables.length });
|
|
93
82
|
|
|
94
|
-
const
|
|
83
|
+
const errors: ValidationError[] = [];
|
|
95
84
|
const leafTypes = new Set([
|
|
96
85
|
'LITERAL',
|
|
97
|
-
'
|
|
98
|
-
'
|
|
99
|
-
'
|
|
100
|
-
'
|
|
101
|
-
'
|
|
86
|
+
'net:stdio',
|
|
87
|
+
'db:query',
|
|
88
|
+
'net:request',
|
|
89
|
+
'fs:operation',
|
|
90
|
+
'event:listener',
|
|
102
91
|
'CLASS', // NewExpression - конструкторы классов
|
|
103
92
|
'FUNCTION', // Arrow functions и function expressions
|
|
104
93
|
'METHOD_CALL', // Вызовы методов (промежуточные узлы)
|
|
@@ -112,75 +101,96 @@ export class DataFlowValidator extends Plugin {
|
|
|
112
101
|
);
|
|
113
102
|
|
|
114
103
|
if (!assignment) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
104
|
+
errors.push(new ValidationError(
|
|
105
|
+
`Variable "${variable.name}" (${variable.file}:${variable.line}) has no ASSIGNED_FROM edge`,
|
|
106
|
+
'ERR_MISSING_ASSIGNMENT',
|
|
107
|
+
{
|
|
108
|
+
filePath: variable.file,
|
|
109
|
+
lineNumber: variable.line as number | undefined,
|
|
110
|
+
phase: 'VALIDATION',
|
|
111
|
+
plugin: 'DataFlowValidator',
|
|
112
|
+
variable: variable.name as string,
|
|
113
|
+
},
|
|
114
|
+
undefined,
|
|
115
|
+
'warning'
|
|
116
|
+
));
|
|
123
117
|
continue;
|
|
124
118
|
}
|
|
125
119
|
|
|
126
120
|
// Проверяем что источник существует
|
|
127
121
|
const source = allNodes.find(n => n.id === assignment.dst);
|
|
128
122
|
if (!source) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
123
|
+
errors.push(new ValidationError(
|
|
124
|
+
`Variable "${variable.name}" references non-existent node ${assignment.dst}`,
|
|
125
|
+
'ERR_BROKEN_REFERENCE',
|
|
126
|
+
{
|
|
127
|
+
filePath: variable.file,
|
|
128
|
+
lineNumber: variable.line as number | undefined,
|
|
129
|
+
phase: 'VALIDATION',
|
|
130
|
+
plugin: 'DataFlowValidator',
|
|
131
|
+
variable: variable.name as string,
|
|
132
|
+
targetNodeId: assignment.dst,
|
|
133
|
+
},
|
|
134
|
+
undefined,
|
|
135
|
+
'error'
|
|
136
|
+
));
|
|
137
137
|
continue;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
// Проверяем путь до листового узла
|
|
141
141
|
const path = this.findPathToLeaf(variable, allNodes, allEdges, leafTypes);
|
|
142
142
|
if (!path.found) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
143
|
+
errors.push(new ValidationError(
|
|
144
|
+
`Variable "${variable.name}" (${variable.file}:${variable.line}) does not trace to a leaf node. Chain: ${path.chain.join(' -> ')}`,
|
|
145
|
+
'ERR_NO_LEAF_NODE',
|
|
146
|
+
{
|
|
147
|
+
filePath: variable.file,
|
|
148
|
+
lineNumber: variable.line as number | undefined,
|
|
149
|
+
phase: 'VALIDATION',
|
|
150
|
+
plugin: 'DataFlowValidator',
|
|
151
|
+
variable: variable.name as string,
|
|
152
|
+
chain: path.chain,
|
|
153
|
+
},
|
|
154
|
+
undefined,
|
|
155
|
+
'warning'
|
|
156
|
+
));
|
|
152
157
|
}
|
|
153
158
|
}
|
|
154
159
|
|
|
155
|
-
// Группируем
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
byType: {}
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
for (const issue of issues) {
|
|
164
|
-
if (!summary.byType[issue.type]) {
|
|
165
|
-
summary.byType[issue.type] = 0;
|
|
160
|
+
// Группируем errors по коду
|
|
161
|
+
const byCode: Record<string, number> = {};
|
|
162
|
+
for (const error of errors) {
|
|
163
|
+
if (!byCode[error.code]) {
|
|
164
|
+
byCode[error.code] = 0;
|
|
166
165
|
}
|
|
167
|
-
|
|
166
|
+
byCode[error.code]++;
|
|
168
167
|
}
|
|
169
168
|
|
|
170
|
-
|
|
169
|
+
const summary: ValidationSummary = {
|
|
170
|
+
total: variables.length,
|
|
171
|
+
validated: variables.length - errors.length,
|
|
172
|
+
issues: errors.length,
|
|
173
|
+
byType: byCode
|
|
174
|
+
};
|
|
171
175
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
logger.info('Validation complete', { ...summary });
|
|
177
|
+
|
|
178
|
+
// Выводим errors
|
|
179
|
+
if (errors.length > 0) {
|
|
180
|
+
logger.warn('Data flow issues found', { count: errors.length });
|
|
181
|
+
for (const error of errors) {
|
|
182
|
+
if (error.severity === 'error') {
|
|
183
|
+
logger.error(`[${error.code}] ${error.message}`);
|
|
184
|
+
} else {
|
|
185
|
+
logger.warn(`[${error.code}] ${error.message}`);
|
|
186
|
+
}
|
|
178
187
|
}
|
|
179
188
|
}
|
|
180
189
|
|
|
181
190
|
return createSuccessResult(
|
|
182
191
|
{ nodes: 0, edges: 0 },
|
|
183
|
-
{ summary
|
|
192
|
+
{ summary },
|
|
193
|
+
errors
|
|
184
194
|
);
|
|
185
195
|
}
|
|
186
196
|
|
|
@@ -208,6 +218,17 @@ export class DataFlowValidator extends Plugin {
|
|
|
208
218
|
return { found: true, chain };
|
|
209
219
|
}
|
|
210
220
|
|
|
221
|
+
// REG-262: Check if variable is used by a method call (incoming USES edge)
|
|
222
|
+
// If something USES this variable, the variable is not dead
|
|
223
|
+
const usedByCall = allEdges.find(e =>
|
|
224
|
+
e.type === 'USES' && e.dst === startNode.id
|
|
225
|
+
);
|
|
226
|
+
if (usedByCall) {
|
|
227
|
+
const callNode = allNodes.find(n => n.id === usedByCall.src);
|
|
228
|
+
const callName = callNode?.name ?? usedByCall.src;
|
|
229
|
+
return { found: true, chain: [...chain, `(used by ${callName})`] };
|
|
230
|
+
}
|
|
231
|
+
|
|
211
232
|
// Ищем ASSIGNED_FROM ребро
|
|
212
233
|
const assignment = allEdges.find(e =>
|
|
213
234
|
e.type === 'ASSIGNED_FROM' && e.src === startNode.id
|
|
@@ -69,17 +69,18 @@ export class EvalBanValidator extends Plugin {
|
|
|
69
69
|
|
|
70
70
|
async execute(context: PluginContext): Promise<PluginResult> {
|
|
71
71
|
const { graph } = context;
|
|
72
|
+
const logger = this.log(context);
|
|
72
73
|
|
|
73
|
-
|
|
74
|
+
logger.info('Starting eval/Function usage validation');
|
|
74
75
|
const startTime = Date.now();
|
|
75
76
|
|
|
76
77
|
const issues: EvalBanIssue[] = [];
|
|
77
78
|
|
|
78
|
-
//
|
|
79
|
-
// Datalog
|
|
79
|
+
// OPTIMIZATION: use direct graph queries instead of Datalog (slow full scan)
|
|
80
|
+
// Datalog hangs on large graphs due to lack of indexes
|
|
80
81
|
|
|
81
|
-
// 1.
|
|
82
|
-
|
|
82
|
+
// 1. Direct eval("code") call - find all CALL nodes with name="eval"
|
|
83
|
+
logger.debug('Searching for eval() calls');
|
|
83
84
|
const evalStart = Date.now();
|
|
84
85
|
let evalCount = 0;
|
|
85
86
|
|
|
@@ -96,10 +97,10 @@ export class EvalBanValidator extends Plugin {
|
|
|
96
97
|
});
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
|
-
|
|
100
|
+
logger.debug('eval() search complete', { timeMs: Date.now() - evalStart, count: evalCount });
|
|
100
101
|
|
|
101
|
-
// 2.
|
|
102
|
-
|
|
102
|
+
// 2. Function("code") or new Function("code") call
|
|
103
|
+
logger.debug('Searching for Function() calls');
|
|
103
104
|
const funcStart = Date.now();
|
|
104
105
|
let funcCount = 0;
|
|
105
106
|
|
|
@@ -116,11 +117,11 @@ export class EvalBanValidator extends Plugin {
|
|
|
116
117
|
});
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
|
-
|
|
120
|
+
logger.debug('Function() search complete', { timeMs: Date.now() - funcStart, count: funcCount });
|
|
120
121
|
|
|
121
122
|
// 3. Method call: window.eval, globalThis.eval, this.eval
|
|
122
123
|
// Note: METHOD_CALL was merged into CALL - method calls have 'method' attribute
|
|
123
|
-
|
|
124
|
+
logger.debug('Searching for method eval() calls');
|
|
124
125
|
const methodStart = Date.now();
|
|
125
126
|
let methodCount = 0;
|
|
126
127
|
|
|
@@ -141,10 +142,10 @@ export class EvalBanValidator extends Plugin {
|
|
|
141
142
|
});
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
|
-
|
|
145
|
+
logger.debug('Method eval() search complete', { timeMs: Date.now() - methodStart, count: methodCount });
|
|
145
146
|
|
|
146
147
|
// 4. Aliased eval - SKIP for now (complex Datalog query causes OOM)
|
|
147
|
-
|
|
148
|
+
logger.debug('Skipping aliased eval detection', { reason: 'requires optimized implementation' });
|
|
148
149
|
|
|
149
150
|
const totalTime = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
150
151
|
const summary: ValidationSummary = {
|
|
@@ -156,15 +157,15 @@ export class EvalBanValidator extends Plugin {
|
|
|
156
157
|
timeSeconds: totalTime
|
|
157
158
|
};
|
|
158
159
|
|
|
159
|
-
|
|
160
|
+
logger.info('Validation summary', { ...summary });
|
|
160
161
|
|
|
161
162
|
if (issues.length > 0) {
|
|
162
|
-
|
|
163
|
+
logger.info('Security violations found', { count: issues.length });
|
|
163
164
|
for (const issue of issues) {
|
|
164
|
-
|
|
165
|
+
logger.warn('Violation', { message: issue.message, type: issue.type, file: issue.file, line: issue.line });
|
|
165
166
|
}
|
|
166
167
|
} else {
|
|
167
|
-
|
|
168
|
+
logger.info('Validation passed: no eval/Function usage detected');
|
|
168
169
|
}
|
|
169
170
|
|
|
170
171
|
return createSuccessResult(
|