@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
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BrokenImportValidator - detects broken imports and undefined symbols (REG-261)
|
|
3
|
+
*
|
|
4
|
+
* This VALIDATION plugin queries the graph (built by ANALYSIS and ENRICHMENT phases)
|
|
5
|
+
* to detect:
|
|
6
|
+
*
|
|
7
|
+
* 1. ERR_BROKEN_IMPORT: Named/default import references non-existent export
|
|
8
|
+
* - IMPORT node with relative source but no IMPORTS_FROM edge
|
|
9
|
+
* - Skips: external (npm) imports, namespace imports, type-only imports
|
|
10
|
+
*
|
|
11
|
+
* 2. ERR_UNDEFINED_SYMBOL: Symbol used but not defined, imported, or global
|
|
12
|
+
* - CALL node without CALLS edge
|
|
13
|
+
* - Not a method call (no `object` property)
|
|
14
|
+
* - Not a local definition (FUNCTION/CLASS/VARIABLE in same file)
|
|
15
|
+
* - Not an import (IMPORT with matching local name)
|
|
16
|
+
* - Not a known global (console, setTimeout, etc.)
|
|
17
|
+
*
|
|
18
|
+
* Architecture follows existing validator patterns:
|
|
19
|
+
* - Phase: VALIDATION
|
|
20
|
+
* - Priority: 85 (after enrichment, before general validators)
|
|
21
|
+
* - Returns: ValidationError[] collected via DiagnosticCollector
|
|
22
|
+
*/
|
|
23
|
+
import { Plugin, createSuccessResult } from '../Plugin.js';
|
|
24
|
+
import { ValidationError } from '../../errors/GrafemaError.js';
|
|
25
|
+
import { GlobalsRegistry } from '../../data/globals/index.js';
|
|
26
|
+
// === CONSTANTS ===
|
|
27
|
+
const ERROR_CODES = {
|
|
28
|
+
BROKEN_IMPORT: 'ERR_BROKEN_IMPORT',
|
|
29
|
+
UNDEFINED_SYMBOL: 'ERR_UNDEFINED_SYMBOL',
|
|
30
|
+
};
|
|
31
|
+
// Types that represent local definitions
|
|
32
|
+
const DEFINITION_TYPES = new Set([
|
|
33
|
+
'FUNCTION',
|
|
34
|
+
'CLASS',
|
|
35
|
+
'VARIABLE_DECLARATION',
|
|
36
|
+
'CONSTANT',
|
|
37
|
+
'PARAMETER',
|
|
38
|
+
]);
|
|
39
|
+
// === PLUGIN CLASS ===
|
|
40
|
+
export class BrokenImportValidator extends Plugin {
|
|
41
|
+
globalsRegistry;
|
|
42
|
+
constructor(config = {}) {
|
|
43
|
+
super(config);
|
|
44
|
+
this.globalsRegistry = new GlobalsRegistry();
|
|
45
|
+
// Allow custom globals from config
|
|
46
|
+
const customGlobals = config.customGlobals;
|
|
47
|
+
if (customGlobals) {
|
|
48
|
+
this.globalsRegistry.addCustomGlobals(customGlobals);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
get metadata() {
|
|
52
|
+
return {
|
|
53
|
+
name: 'BrokenImportValidator',
|
|
54
|
+
phase: 'VALIDATION',
|
|
55
|
+
priority: 85, // After enrichment plugins, before general validators
|
|
56
|
+
creates: {
|
|
57
|
+
nodes: [],
|
|
58
|
+
edges: []
|
|
59
|
+
},
|
|
60
|
+
dependencies: ['ImportExportLinker', 'FunctionCallResolver']
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async execute(context) {
|
|
64
|
+
const { graph, onProgress } = context;
|
|
65
|
+
const logger = this.log(context);
|
|
66
|
+
logger.info('Starting broken import validation');
|
|
67
|
+
const startTime = Date.now();
|
|
68
|
+
const errors = [];
|
|
69
|
+
const stats = {
|
|
70
|
+
importsChecked: 0,
|
|
71
|
+
brokenImports: 0,
|
|
72
|
+
callsChecked: 0,
|
|
73
|
+
undefinedSymbols: 0,
|
|
74
|
+
skipped: {
|
|
75
|
+
externalImports: 0,
|
|
76
|
+
namespaceImports: 0,
|
|
77
|
+
typeOnlyImports: 0,
|
|
78
|
+
methodCalls: 0,
|
|
79
|
+
alreadyResolved: 0,
|
|
80
|
+
localDefinitions: 0,
|
|
81
|
+
imports: 0,
|
|
82
|
+
globals: 0,
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
// === Step 1: Build indexes ===
|
|
86
|
+
// Index: file -> Set<name> for local definitions
|
|
87
|
+
const definitionsByFile = new Map();
|
|
88
|
+
for await (const node of graph.queryNodes({})) {
|
|
89
|
+
if (!DEFINITION_TYPES.has(node.type))
|
|
90
|
+
continue;
|
|
91
|
+
if (!node.file || !node.name)
|
|
92
|
+
continue;
|
|
93
|
+
if (!definitionsByFile.has(node.file)) {
|
|
94
|
+
definitionsByFile.set(node.file, new Set());
|
|
95
|
+
}
|
|
96
|
+
definitionsByFile.get(node.file).add(node.name);
|
|
97
|
+
}
|
|
98
|
+
logger.debug('Indexed definitions', { files: definitionsByFile.size });
|
|
99
|
+
// Index: file:local -> ImportNode
|
|
100
|
+
const importsByFile = new Map();
|
|
101
|
+
const allImports = [];
|
|
102
|
+
for await (const node of graph.queryNodes({ nodeType: 'IMPORT' })) {
|
|
103
|
+
const imp = node;
|
|
104
|
+
if (!imp.file)
|
|
105
|
+
continue;
|
|
106
|
+
allImports.push(imp);
|
|
107
|
+
// Index by local name for undefined symbol checking
|
|
108
|
+
const localName = imp.local || imp.name;
|
|
109
|
+
if (localName) {
|
|
110
|
+
if (!importsByFile.has(imp.file)) {
|
|
111
|
+
importsByFile.set(imp.file, new Map());
|
|
112
|
+
}
|
|
113
|
+
importsByFile.get(imp.file).set(localName, imp);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
logger.debug('Indexed imports', { count: allImports.length });
|
|
117
|
+
// === Step 2: Check for broken imports ===
|
|
118
|
+
for (const imp of allImports) {
|
|
119
|
+
stats.importsChecked++;
|
|
120
|
+
// Progress reporting
|
|
121
|
+
if (onProgress && stats.importsChecked % 100 === 0) {
|
|
122
|
+
onProgress({
|
|
123
|
+
phase: 'validation',
|
|
124
|
+
currentPlugin: 'BrokenImportValidator',
|
|
125
|
+
message: `Checking imports ${stats.importsChecked}/${allImports.length}`,
|
|
126
|
+
totalFiles: allImports.length,
|
|
127
|
+
processedFiles: stats.importsChecked
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// Skip external (npm) imports - only check relative imports
|
|
131
|
+
const isRelative = imp.source &&
|
|
132
|
+
(imp.source.startsWith('./') || imp.source.startsWith('../'));
|
|
133
|
+
if (!isRelative) {
|
|
134
|
+
stats.skipped.externalImports++;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
// Skip namespace imports - they link to MODULE, not EXPORT
|
|
138
|
+
if (imp.importType === 'namespace') {
|
|
139
|
+
stats.skipped.namespaceImports++;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
// Skip type-only imports (TypeScript) - erased at compile time
|
|
143
|
+
if (imp.importBinding === 'type') {
|
|
144
|
+
stats.skipped.typeOnlyImports++;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
// Check for IMPORTS_FROM edge
|
|
148
|
+
const importsFromEdges = await graph.getOutgoingEdges(imp.id, ['IMPORTS_FROM']);
|
|
149
|
+
if (importsFromEdges.length === 0) {
|
|
150
|
+
// No IMPORTS_FROM edge = broken import
|
|
151
|
+
const importedName = imp.imported || imp.local || imp.name;
|
|
152
|
+
errors.push(new ValidationError(`Import "${importedName}" from "${imp.source}" - export doesn't exist`, ERROR_CODES.BROKEN_IMPORT, {
|
|
153
|
+
filePath: imp.file,
|
|
154
|
+
lineNumber: imp.line,
|
|
155
|
+
phase: 'VALIDATION',
|
|
156
|
+
plugin: 'BrokenImportValidator',
|
|
157
|
+
importedName,
|
|
158
|
+
source: imp.source,
|
|
159
|
+
importType: imp.importType,
|
|
160
|
+
}, `Check if "${importedName}" is exported from "${imp.source}"`, 'error'));
|
|
161
|
+
stats.brokenImports++;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
logger.debug('Broken imports found', { count: stats.brokenImports });
|
|
165
|
+
// === Step 3: Check for undefined symbols ===
|
|
166
|
+
const callsToCheck = [];
|
|
167
|
+
for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
|
|
168
|
+
const call = node;
|
|
169
|
+
// Skip method calls (have object attribute)
|
|
170
|
+
if (call.object) {
|
|
171
|
+
stats.skipped.methodCalls++;
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
// Skip if already has CALLS edge (resolved)
|
|
175
|
+
const callsEdges = await graph.getOutgoingEdges(call.id, ['CALLS']);
|
|
176
|
+
if (callsEdges.length > 0) {
|
|
177
|
+
stats.skipped.alreadyResolved++;
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
callsToCheck.push(call);
|
|
181
|
+
}
|
|
182
|
+
logger.debug('Unresolved calls to check', { count: callsToCheck.length });
|
|
183
|
+
for (const call of callsToCheck) {
|
|
184
|
+
stats.callsChecked++;
|
|
185
|
+
const calledName = call.name;
|
|
186
|
+
const file = call.file;
|
|
187
|
+
if (!calledName || !file)
|
|
188
|
+
continue;
|
|
189
|
+
// Check 1: Is it a local definition?
|
|
190
|
+
const fileDefinitions = definitionsByFile.get(file);
|
|
191
|
+
if (fileDefinitions?.has(calledName)) {
|
|
192
|
+
stats.skipped.localDefinitions++;
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
// Check 2: Is it imported? (even if broken, that's a different error)
|
|
196
|
+
const fileImports = importsByFile.get(file);
|
|
197
|
+
if (fileImports?.has(calledName)) {
|
|
198
|
+
stats.skipped.imports++;
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
// Check 3: Is it a global?
|
|
202
|
+
if (this.globalsRegistry.isGlobal(calledName)) {
|
|
203
|
+
stats.skipped.globals++;
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
// Symbol is undefined
|
|
207
|
+
errors.push(new ValidationError(`"${calledName}" is used but not defined or imported`, ERROR_CODES.UNDEFINED_SYMBOL, {
|
|
208
|
+
filePath: file,
|
|
209
|
+
lineNumber: call.line,
|
|
210
|
+
phase: 'VALIDATION',
|
|
211
|
+
plugin: 'BrokenImportValidator',
|
|
212
|
+
symbol: calledName,
|
|
213
|
+
}, `Add an import for "${calledName}" or define it locally`, 'warning' // Warning severity - might be a false positive
|
|
214
|
+
));
|
|
215
|
+
stats.undefinedSymbols++;
|
|
216
|
+
}
|
|
217
|
+
// === Step 4: Summary ===
|
|
218
|
+
const totalTime = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
219
|
+
const summary = {
|
|
220
|
+
importsChecked: stats.importsChecked,
|
|
221
|
+
brokenImports: stats.brokenImports,
|
|
222
|
+
callsChecked: stats.callsChecked,
|
|
223
|
+
undefinedSymbols: stats.undefinedSymbols,
|
|
224
|
+
skipped: stats.skipped,
|
|
225
|
+
totalIssues: stats.brokenImports + stats.undefinedSymbols,
|
|
226
|
+
time: `${totalTime}s`,
|
|
227
|
+
};
|
|
228
|
+
logger.info('Validation complete', summary);
|
|
229
|
+
if (errors.length > 0) {
|
|
230
|
+
logger.warn('Issues found', {
|
|
231
|
+
brokenImports: stats.brokenImports,
|
|
232
|
+
undefinedSymbols: stats.undefinedSymbols,
|
|
233
|
+
});
|
|
234
|
+
// Log first few errors for visibility
|
|
235
|
+
for (const error of errors.slice(0, 5)) {
|
|
236
|
+
if (error.code === ERROR_CODES.BROKEN_IMPORT) {
|
|
237
|
+
logger.error(`[${error.code}] ${error.message}`);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
logger.warn(`[${error.code}] ${error.message}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (errors.length > 5) {
|
|
244
|
+
logger.debug(`... and ${errors.length - 5} more issues`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return createSuccessResult({ nodes: 0, edges: 0 }, { summary }, errors);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
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
|
import { Plugin } from '../Plugin.js';
|
|
14
14
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
@@ -16,8 +16,19 @@ export declare class CallResolverValidator extends Plugin {
|
|
|
16
16
|
get metadata(): PluginMetadata;
|
|
17
17
|
execute(context: PluginContext): Promise<PluginResult>;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Determine the resolution type for a CALL node.
|
|
20
|
+
*
|
|
21
|
+
* Resolution priority:
|
|
22
|
+
* 1. Method call (has 'object' attribute) -> 'method'
|
|
23
|
+
* 2. Has CALLS edge to FUNCTION -> 'internal'
|
|
24
|
+
* 3. Has CALLS edge to EXTERNAL_MODULE -> 'external'
|
|
25
|
+
* 4. Name in JS_GLOBAL_FUNCTIONS -> 'builtin'
|
|
26
|
+
* 5. Otherwise -> 'unresolved'
|
|
27
|
+
*/
|
|
28
|
+
private determineResolutionType;
|
|
29
|
+
/**
|
|
30
|
+
* Create a warning for an unresolved call.
|
|
20
31
|
*/
|
|
21
|
-
private
|
|
32
|
+
private createWarning;
|
|
22
33
|
}
|
|
23
34
|
//# sourceMappingURL=CallResolverValidator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallResolverValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/CallResolverValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"CallResolverValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/CallResolverValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8BhF,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgE5D;;;;;;;;;OASG;YACW,uBAAuB;IAuCrC;;OAEG;IACH,OAAO,CAAC,aAAa;CAgBtB"}
|
|
@@ -1,16 +1,18 @@
|
|
|
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
|
import { Plugin, createSuccessResult } from '../Plugin.js';
|
|
14
|
+
import { ValidationError } from '../../errors/GrafemaError.js';
|
|
15
|
+
import { JS_GLOBAL_FUNCTIONS } from '../../data/builtins/index.js';
|
|
14
16
|
export class CallResolverValidator extends Plugin {
|
|
15
17
|
get metadata() {
|
|
16
18
|
return {
|
|
@@ -20,89 +22,113 @@ export class CallResolverValidator extends Plugin {
|
|
|
20
22
|
creates: {
|
|
21
23
|
nodes: [],
|
|
22
24
|
edges: []
|
|
23
|
-
}
|
|
25
|
+
},
|
|
26
|
+
dependencies: ['FunctionCallResolver', 'ExternalCallResolver']
|
|
24
27
|
};
|
|
25
28
|
}
|
|
26
29
|
async execute(context) {
|
|
27
30
|
const { graph } = context;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
console.log('[CallResolverValidator] Graph does not support checkGuarantee, skipping validation');
|
|
32
|
-
return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true });
|
|
33
|
-
}
|
|
34
|
-
// Datalog гарантия:
|
|
35
|
-
// CALL без "object" (т.е. CALL_SITE) должен иметь CALLS ребро
|
|
36
|
-
const violations = await graph.checkGuarantee(`
|
|
37
|
-
violation(X) :- node(X, "CALL"), \\+ attr(X, "object", _), \\+ edge(X, _, "CALLS").
|
|
38
|
-
`);
|
|
39
|
-
const issues = [];
|
|
40
|
-
if (violations.length > 0) {
|
|
41
|
-
console.log(`[CallResolverValidator] Found ${violations.length} unresolved function calls`);
|
|
42
|
-
for (const v of violations) {
|
|
43
|
-
const nodeId = v.bindings.find(b => b.name === 'X')?.value;
|
|
44
|
-
if (nodeId) {
|
|
45
|
-
const node = await graph.getNode(nodeId);
|
|
46
|
-
if (node) {
|
|
47
|
-
issues.push({
|
|
48
|
-
type: 'UNRESOLVED_FUNCTION_CALL',
|
|
49
|
-
severity: 'WARNING',
|
|
50
|
-
message: `Call to "${node.name}" at ${node.file}:${node.line || '?'} does not resolve to a function definition`,
|
|
51
|
-
callName: node.name,
|
|
52
|
-
nodeId: nodeId,
|
|
53
|
-
file: node.file,
|
|
54
|
-
line: node.line
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// Также проверим METHOD_CALL на известные внешние методы
|
|
61
|
-
// (это информационно, не ошибка)
|
|
62
|
-
const methodCallStats = await this.countMethodCalls(graph);
|
|
31
|
+
const logger = this.log(context);
|
|
32
|
+
logger.info('Starting call resolution validation');
|
|
33
|
+
const warnings = [];
|
|
63
34
|
const summary = {
|
|
64
|
-
totalCalls:
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
35
|
+
totalCalls: 0,
|
|
36
|
+
resolvedInternal: 0,
|
|
37
|
+
resolvedExternal: 0,
|
|
38
|
+
resolvedBuiltin: 0,
|
|
39
|
+
methodCalls: 0,
|
|
40
|
+
unresolvedCalls: 0,
|
|
41
|
+
warnings: 0
|
|
69
42
|
};
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
43
|
+
// Process all CALL nodes
|
|
44
|
+
for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
|
|
45
|
+
summary.totalCalls++;
|
|
46
|
+
const callNode = node;
|
|
47
|
+
const resolutionType = await this.determineResolutionType(graph, callNode);
|
|
48
|
+
switch (resolutionType) {
|
|
49
|
+
case 'internal':
|
|
50
|
+
summary.resolvedInternal++;
|
|
51
|
+
break;
|
|
52
|
+
case 'external':
|
|
53
|
+
summary.resolvedExternal++;
|
|
54
|
+
break;
|
|
55
|
+
case 'builtin':
|
|
56
|
+
summary.resolvedBuiltin++;
|
|
57
|
+
break;
|
|
58
|
+
case 'method':
|
|
59
|
+
summary.methodCalls++;
|
|
60
|
+
break;
|
|
61
|
+
case 'unresolved':
|
|
62
|
+
summary.unresolvedCalls++;
|
|
63
|
+
summary.warnings++;
|
|
64
|
+
warnings.push(this.createWarning(callNode));
|
|
65
|
+
break;
|
|
75
66
|
}
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
}
|
|
68
|
+
logger.info('Validation complete', { ...summary });
|
|
69
|
+
if (warnings.length > 0) {
|
|
70
|
+
logger.warn('Unresolved calls detected', { count: warnings.length });
|
|
71
|
+
for (const warning of warnings.slice(0, 10)) {
|
|
72
|
+
logger.warn(warning.message);
|
|
73
|
+
}
|
|
74
|
+
if (warnings.length > 10) {
|
|
75
|
+
logger.debug(`... and ${warnings.length - 10} more`);
|
|
78
76
|
}
|
|
79
77
|
}
|
|
80
|
-
return createSuccessResult({ nodes: 0, edges: 0 }, { summary,
|
|
78
|
+
return createSuccessResult({ nodes: 0, edges: 0 }, { summary }, warnings);
|
|
81
79
|
}
|
|
82
80
|
/**
|
|
83
|
-
*
|
|
81
|
+
* Determine the resolution type for a CALL node.
|
|
82
|
+
*
|
|
83
|
+
* Resolution priority:
|
|
84
|
+
* 1. Method call (has 'object' attribute) -> 'method'
|
|
85
|
+
* 2. Has CALLS edge to FUNCTION -> 'internal'
|
|
86
|
+
* 3. Has CALLS edge to EXTERNAL_MODULE -> 'external'
|
|
87
|
+
* 4. Name in JS_GLOBAL_FUNCTIONS -> 'builtin'
|
|
88
|
+
* 5. Otherwise -> 'unresolved'
|
|
84
89
|
*/
|
|
85
|
-
async
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
stats.resolved++;
|
|
90
|
+
async determineResolutionType(graph, callNode) {
|
|
91
|
+
// 1. Check if method call (has object attribute)
|
|
92
|
+
if (callNode.object) {
|
|
93
|
+
return 'method';
|
|
94
|
+
}
|
|
95
|
+
// 2. Check for CALLS edges
|
|
96
|
+
const edges = await graph.getOutgoingEdges(callNode.id, ['CALLS']);
|
|
97
|
+
if (edges.length > 0) {
|
|
98
|
+
// Determine destination type
|
|
99
|
+
const edge = edges[0];
|
|
100
|
+
const dstNode = await graph.getNode(edge.dst);
|
|
101
|
+
if (dstNode) {
|
|
102
|
+
if (dstNode.type === 'FUNCTION') {
|
|
103
|
+
return 'internal';
|
|
104
|
+
}
|
|
105
|
+
if (dstNode.type === 'EXTERNAL_MODULE') {
|
|
106
|
+
return 'external';
|
|
103
107
|
}
|
|
104
108
|
}
|
|
109
|
+
// Has edge but unknown destination type - treat as resolved
|
|
110
|
+
return 'internal';
|
|
111
|
+
}
|
|
112
|
+
// 3. Check if builtin
|
|
113
|
+
const calledName = callNode.name;
|
|
114
|
+
if (calledName && JS_GLOBAL_FUNCTIONS.has(calledName)) {
|
|
115
|
+
return 'builtin';
|
|
105
116
|
}
|
|
106
|
-
|
|
117
|
+
// 4. Unresolved
|
|
118
|
+
return 'unresolved';
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create a warning for an unresolved call.
|
|
122
|
+
*/
|
|
123
|
+
createWarning(callNode) {
|
|
124
|
+
return new ValidationError(`Unresolved call to "${callNode.name}" at ${callNode.file}:${callNode.line || '?'}`, 'WARN_UNRESOLVED_CALL', {
|
|
125
|
+
filePath: callNode.file,
|
|
126
|
+
lineNumber: callNode.line,
|
|
127
|
+
phase: 'VALIDATION',
|
|
128
|
+
plugin: 'CallResolverValidator',
|
|
129
|
+
nodeId: callNode.id,
|
|
130
|
+
callName: callNode.name,
|
|
131
|
+
}, 'Ensure the function is defined, imported, or is a known global', 'warning' // Severity: warning (not error)
|
|
132
|
+
);
|
|
107
133
|
}
|
|
108
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataFlowValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/DataFlowValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"DataFlowValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/DataFlowValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgChF,qBAAa,iBAAkB,SAAQ,MAAM;IAC3C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAwI5D;;OAEG;IACH,OAAO,CAAC,cAAc;CAsDvB"}
|