@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,365 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NodejsBuiltinsResolver - Creates EXTERNAL_FUNCTION nodes for Node.js builtin calls (REG-218)
|
|
3
|
+
*
|
|
4
|
+
* This ENRICHMENT plugin:
|
|
5
|
+
* 1. Queries all CALL nodes
|
|
6
|
+
* 2. For each call that targets a builtin function:
|
|
7
|
+
* - Checks if call's `object` matches a builtin module (fs, path, etc.)
|
|
8
|
+
* - Or traces via IMPORT node to find the module source
|
|
9
|
+
* 3. Creates EXTERNAL_FUNCTION node lazily (if not exists)
|
|
10
|
+
* 4. Creates CALLS edge from CALL to EXTERNAL_FUNCTION
|
|
11
|
+
*
|
|
12
|
+
* Architecture:
|
|
13
|
+
* - Nodes are created lazily - only when a call is detected
|
|
14
|
+
* - ID format: EXTERNAL_FUNCTION:fs.readFile
|
|
15
|
+
* - Metadata includes: isBuiltin:true, security?, pure?
|
|
16
|
+
*
|
|
17
|
+
* Also creates:
|
|
18
|
+
* - EXTERNAL_MODULE nodes for imported builtin modules
|
|
19
|
+
* - IMPORTS_FROM edges from IMPORT to EXTERNAL_MODULE
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { Plugin, createSuccessResult } from '../Plugin.js';
|
|
23
|
+
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
24
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
25
|
+
import { BuiltinRegistry } from '../../data/builtins/BuiltinRegistry.js';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Call node with method properties
|
|
29
|
+
*/
|
|
30
|
+
interface CallNode extends BaseNodeRecord {
|
|
31
|
+
object?: string;
|
|
32
|
+
method?: string;
|
|
33
|
+
callee?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Import node with source info
|
|
38
|
+
*/
|
|
39
|
+
interface ImportNode extends BaseNodeRecord {
|
|
40
|
+
source?: string;
|
|
41
|
+
imported?: string;
|
|
42
|
+
importType?: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class NodejsBuiltinsResolver extends Plugin {
|
|
46
|
+
private registry: BuiltinRegistry;
|
|
47
|
+
|
|
48
|
+
constructor(config: Record<string, unknown> = {}) {
|
|
49
|
+
super(config);
|
|
50
|
+
this.registry = new BuiltinRegistry();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get metadata(): PluginMetadata {
|
|
54
|
+
return {
|
|
55
|
+
name: 'NodejsBuiltinsResolver',
|
|
56
|
+
phase: 'ENRICHMENT',
|
|
57
|
+
priority: 45, // After ImportExportLinker (90), before/around MethodCallResolver (50)
|
|
58
|
+
creates: {
|
|
59
|
+
nodes: ['EXTERNAL_FUNCTION', 'EXTERNAL_MODULE'],
|
|
60
|
+
edges: ['CALLS', 'IMPORTS_FROM']
|
|
61
|
+
},
|
|
62
|
+
dependencies: ['JSASTAnalyzer', 'ImportExportLinker']
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async execute(context: PluginContext): Promise<PluginResult> {
|
|
67
|
+
const { graph, onProgress } = context;
|
|
68
|
+
const logger = this.log(context);
|
|
69
|
+
|
|
70
|
+
logger.info('Starting Node.js builtins resolution');
|
|
71
|
+
const startTime = Date.now();
|
|
72
|
+
|
|
73
|
+
// Track created nodes and edges to avoid duplicates
|
|
74
|
+
const createdExternalFunctions = new Set<string>();
|
|
75
|
+
const createdExternalModules = new Set<string>();
|
|
76
|
+
const createdCallsEdges = new Set<string>();
|
|
77
|
+
const createdImportsFromEdges = new Set<string>();
|
|
78
|
+
|
|
79
|
+
// Build import index: local name -> {source, imported}
|
|
80
|
+
// For tracking what module each imported function comes from
|
|
81
|
+
const importIndex = await this.buildImportIndex(graph);
|
|
82
|
+
logger.debug('Built import index', { entries: importIndex.size });
|
|
83
|
+
|
|
84
|
+
// Step 1: Create EXTERNAL_MODULE nodes for builtin imports
|
|
85
|
+
// and IMPORTS_FROM edges
|
|
86
|
+
let externalModulesCreated = 0;
|
|
87
|
+
let importsFromEdgesCreated = 0;
|
|
88
|
+
|
|
89
|
+
for (const [, importInfo] of importIndex) {
|
|
90
|
+
const { source, file, localName, importNodeId, importType } = importInfo;
|
|
91
|
+
const normalizedSource = this.registry.normalizeModule(source);
|
|
92
|
+
|
|
93
|
+
if (this.registry.isBuiltinModule(normalizedSource)) {
|
|
94
|
+
// Create EXTERNAL_MODULE node if not exists
|
|
95
|
+
if (!createdExternalModules.has(normalizedSource)) {
|
|
96
|
+
const moduleNodeId = `EXTERNAL_MODULE:${normalizedSource}`;
|
|
97
|
+
|
|
98
|
+
// Check if node already exists in graph
|
|
99
|
+
const existingNode = await graph.getNode(moduleNodeId);
|
|
100
|
+
if (!existingNode) {
|
|
101
|
+
await graph.addNode({
|
|
102
|
+
id: moduleNodeId,
|
|
103
|
+
type: 'EXTERNAL_MODULE',
|
|
104
|
+
name: normalizedSource,
|
|
105
|
+
file: '',
|
|
106
|
+
line: 0
|
|
107
|
+
});
|
|
108
|
+
externalModulesCreated++;
|
|
109
|
+
}
|
|
110
|
+
createdExternalModules.add(normalizedSource);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Create IMPORTS_FROM edge from IMPORT to EXTERNAL_MODULE
|
|
114
|
+
const moduleNodeId = `EXTERNAL_MODULE:${normalizedSource}`;
|
|
115
|
+
const edgeKey = `${importNodeId}:${moduleNodeId}`;
|
|
116
|
+
|
|
117
|
+
if (!createdImportsFromEdges.has(edgeKey) && importNodeId) {
|
|
118
|
+
// Check if edge already exists
|
|
119
|
+
const existingEdges = await graph.getOutgoingEdges(importNodeId, ['IMPORTS_FROM']);
|
|
120
|
+
const alreadyExists = existingEdges.some(e => e.dst === moduleNodeId);
|
|
121
|
+
|
|
122
|
+
if (!alreadyExists) {
|
|
123
|
+
await graph.addEdge({
|
|
124
|
+
type: 'IMPORTS_FROM',
|
|
125
|
+
src: importNodeId,
|
|
126
|
+
dst: moduleNodeId
|
|
127
|
+
});
|
|
128
|
+
importsFromEdgesCreated++;
|
|
129
|
+
}
|
|
130
|
+
createdImportsFromEdges.add(edgeKey);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
logger.debug('Created EXTERNAL_MODULE nodes', { count: externalModulesCreated });
|
|
136
|
+
logger.debug('Created IMPORTS_FROM edges', { count: importsFromEdgesCreated });
|
|
137
|
+
|
|
138
|
+
// Step 2: Process all CALL nodes
|
|
139
|
+
const allCalls: CallNode[] = [];
|
|
140
|
+
for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
|
|
141
|
+
allCalls.push(node as CallNode);
|
|
142
|
+
}
|
|
143
|
+
logger.info('Found CALL nodes to process', { count: allCalls.length });
|
|
144
|
+
|
|
145
|
+
let nodesCreated = 0;
|
|
146
|
+
let edgesCreated = 0;
|
|
147
|
+
let processed = 0;
|
|
148
|
+
|
|
149
|
+
for (const callNode of allCalls) {
|
|
150
|
+
processed++;
|
|
151
|
+
|
|
152
|
+
// Progress reporting
|
|
153
|
+
if (onProgress && processed % 100 === 0) {
|
|
154
|
+
onProgress({
|
|
155
|
+
phase: 'enrichment',
|
|
156
|
+
currentPlugin: 'NodejsBuiltinsResolver',
|
|
157
|
+
message: `Processing calls ${processed}/${allCalls.length}`,
|
|
158
|
+
totalFiles: allCalls.length,
|
|
159
|
+
processedFiles: processed
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Determine module and function name
|
|
164
|
+
const resolution = this.resolveBuiltinCall(callNode, importIndex);
|
|
165
|
+
if (!resolution) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const { moduleName, functionName } = resolution;
|
|
170
|
+
|
|
171
|
+
// Check if this is a known builtin function
|
|
172
|
+
const funcDef = this.registry.getFunction(moduleName, functionName);
|
|
173
|
+
if (!funcDef) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Create EXTERNAL_FUNCTION node if not exists
|
|
178
|
+
const externalFuncId = this.registry.createNodeId(moduleName, functionName);
|
|
179
|
+
|
|
180
|
+
if (!createdExternalFunctions.has(externalFuncId)) {
|
|
181
|
+
// Check if node already exists in graph
|
|
182
|
+
const existingNode = await graph.getNode(externalFuncId);
|
|
183
|
+
if (!existingNode) {
|
|
184
|
+
await graph.addNode({
|
|
185
|
+
id: externalFuncId,
|
|
186
|
+
type: 'EXTERNAL_FUNCTION',
|
|
187
|
+
name: `${this.registry.normalizeModule(moduleName)}.${functionName}`,
|
|
188
|
+
file: '',
|
|
189
|
+
line: 0,
|
|
190
|
+
isBuiltin: true,
|
|
191
|
+
...(funcDef.security && { security: funcDef.security }),
|
|
192
|
+
...(funcDef.pure !== undefined && { pure: funcDef.pure })
|
|
193
|
+
});
|
|
194
|
+
nodesCreated++;
|
|
195
|
+
}
|
|
196
|
+
createdExternalFunctions.add(externalFuncId);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Create CALLS edge from CALL to EXTERNAL_FUNCTION
|
|
200
|
+
const edgeKey = `${callNode.id}:${externalFuncId}`;
|
|
201
|
+
if (!createdCallsEdges.has(edgeKey)) {
|
|
202
|
+
// Check if CALLS edge already exists
|
|
203
|
+
const existingEdges = await graph.getOutgoingEdges(callNode.id, ['CALLS']);
|
|
204
|
+
const alreadyExists = existingEdges.some(e => e.dst === externalFuncId);
|
|
205
|
+
|
|
206
|
+
if (!alreadyExists) {
|
|
207
|
+
await graph.addEdge({
|
|
208
|
+
type: 'CALLS',
|
|
209
|
+
src: callNode.id,
|
|
210
|
+
dst: externalFuncId
|
|
211
|
+
});
|
|
212
|
+
edgesCreated++;
|
|
213
|
+
}
|
|
214
|
+
createdCallsEdges.add(edgeKey);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const totalTime = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
219
|
+
const summary = {
|
|
220
|
+
callsProcessed: processed,
|
|
221
|
+
externalFunctionsCreated: nodesCreated,
|
|
222
|
+
externalModulesCreated,
|
|
223
|
+
callsEdgesCreated: edgesCreated,
|
|
224
|
+
importsFromEdgesCreated,
|
|
225
|
+
time: `${totalTime}s`
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
logger.info('Complete', summary);
|
|
229
|
+
|
|
230
|
+
return createSuccessResult(
|
|
231
|
+
{
|
|
232
|
+
nodes: nodesCreated + externalModulesCreated,
|
|
233
|
+
edges: edgesCreated + importsFromEdgesCreated
|
|
234
|
+
},
|
|
235
|
+
summary
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Build index of imports for tracking module sources.
|
|
241
|
+
*
|
|
242
|
+
* Maps: file:localName -> {source, imported, importNodeId, importType}
|
|
243
|
+
*/
|
|
244
|
+
private async buildImportIndex(
|
|
245
|
+
graph: PluginContext['graph']
|
|
246
|
+
): Promise<Map<string, {
|
|
247
|
+
source: string;
|
|
248
|
+
imported: string;
|
|
249
|
+
localName: string;
|
|
250
|
+
file: string;
|
|
251
|
+
importNodeId: string;
|
|
252
|
+
importType?: string;
|
|
253
|
+
}>> {
|
|
254
|
+
const index = new Map<string, {
|
|
255
|
+
source: string;
|
|
256
|
+
imported: string;
|
|
257
|
+
localName: string;
|
|
258
|
+
file: string;
|
|
259
|
+
importNodeId: string;
|
|
260
|
+
importType?: string;
|
|
261
|
+
}>();
|
|
262
|
+
|
|
263
|
+
for await (const node of graph.queryNodes({ nodeType: 'IMPORT' })) {
|
|
264
|
+
const importNode = node as ImportNode;
|
|
265
|
+
if (!importNode.source || !importNode.file) continue;
|
|
266
|
+
|
|
267
|
+
const localName = importNode.name as string;
|
|
268
|
+
const imported = importNode.imported || localName;
|
|
269
|
+
const importType = importNode.importType;
|
|
270
|
+
|
|
271
|
+
// Key: file:localName - for looking up what module a local name comes from
|
|
272
|
+
const key = `${importNode.file}:${localName}`;
|
|
273
|
+
|
|
274
|
+
index.set(key, {
|
|
275
|
+
source: importNode.source,
|
|
276
|
+
imported,
|
|
277
|
+
localName,
|
|
278
|
+
file: importNode.file,
|
|
279
|
+
importNodeId: importNode.id,
|
|
280
|
+
importType
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return index;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Resolve a CALL node to its builtin module and function.
|
|
289
|
+
*
|
|
290
|
+
* Handles:
|
|
291
|
+
* 1. Method calls: fs.readFile() -> {module: 'fs', function: 'readFile'}
|
|
292
|
+
* 2. Direct calls from imports: readFile() -> trace to import source
|
|
293
|
+
* 3. Aliased imports: rf() where rf = readFile from 'fs'
|
|
294
|
+
*/
|
|
295
|
+
private resolveBuiltinCall(
|
|
296
|
+
callNode: CallNode,
|
|
297
|
+
importIndex: Map<string, {
|
|
298
|
+
source: string;
|
|
299
|
+
imported: string;
|
|
300
|
+
localName: string;
|
|
301
|
+
file: string;
|
|
302
|
+
importNodeId: string;
|
|
303
|
+
importType?: string;
|
|
304
|
+
}>
|
|
305
|
+
): { moduleName: string; functionName: string } | null {
|
|
306
|
+
const file = callNode.file;
|
|
307
|
+
if (!file) return null;
|
|
308
|
+
|
|
309
|
+
// Case 1: Method call - obj.method()
|
|
310
|
+
if (callNode.object && callNode.method) {
|
|
311
|
+
const objectName = callNode.object;
|
|
312
|
+
const methodName = callNode.method;
|
|
313
|
+
|
|
314
|
+
// Check if objectName is a namespace import (import * as fs from 'fs')
|
|
315
|
+
const importKey = `${file}:${objectName}`;
|
|
316
|
+
const importInfo = importIndex.get(importKey);
|
|
317
|
+
|
|
318
|
+
if (importInfo) {
|
|
319
|
+
// Object is an imported namespace or module
|
|
320
|
+
const normalizedSource = this.registry.normalizeModule(importInfo.source);
|
|
321
|
+
|
|
322
|
+
if (this.registry.isBuiltinModule(normalizedSource)) {
|
|
323
|
+
return {
|
|
324
|
+
moduleName: normalizedSource,
|
|
325
|
+
functionName: methodName
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Check if objectName directly matches a builtin module
|
|
331
|
+
// (for cases like: const fs = require('fs'); fs.readFile())
|
|
332
|
+
if (this.registry.isBuiltinModule(objectName)) {
|
|
333
|
+
return {
|
|
334
|
+
moduleName: this.registry.normalizeModule(objectName),
|
|
335
|
+
functionName: methodName
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// Case 2: Direct call - funcName()
|
|
343
|
+
const calleeName = callNode.name as string || callNode.callee;
|
|
344
|
+
if (!calleeName) return null;
|
|
345
|
+
|
|
346
|
+
// Look up in import index
|
|
347
|
+
const importKey = `${file}:${calleeName}`;
|
|
348
|
+
const importInfo = importIndex.get(importKey);
|
|
349
|
+
|
|
350
|
+
if (importInfo) {
|
|
351
|
+
const normalizedSource = this.registry.normalizeModule(importInfo.source);
|
|
352
|
+
|
|
353
|
+
if (this.registry.isBuiltinModule(normalizedSource)) {
|
|
354
|
+
// Use the original imported name, not the alias
|
|
355
|
+
const originalName = importInfo.imported || calleeName;
|
|
356
|
+
return {
|
|
357
|
+
moduleName: normalizedSource,
|
|
358
|
+
functionName: originalName
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
@@ -94,6 +94,7 @@ export class PrefixEvaluator extends Plugin {
|
|
|
94
94
|
async execute(context: PluginContext): Promise<PluginResult> {
|
|
95
95
|
try {
|
|
96
96
|
const { graph } = context;
|
|
97
|
+
const logger = this.log(context);
|
|
97
98
|
const graphTyped = graph as unknown as Graph;
|
|
98
99
|
|
|
99
100
|
let mountPointsEvaluated = 0;
|
|
@@ -112,7 +113,7 @@ export class PrefixEvaluator extends Plugin {
|
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
115
|
|
|
115
|
-
|
|
116
|
+
logger.info('Found mount points with placeholders', { count: mountPoints.length });
|
|
116
117
|
|
|
117
118
|
// For each mount point try to evaluate prefix
|
|
118
119
|
for (const mountPoint of mountPoints) {
|
|
@@ -125,7 +126,7 @@ export class PrefixEvaluator extends Plugin {
|
|
|
125
126
|
});
|
|
126
127
|
|
|
127
128
|
if (definesEdges.length === 0) {
|
|
128
|
-
|
|
129
|
+
logger.debug('No DEFINES edge for mount point', { mountPointId: mountPoint.id });
|
|
129
130
|
continue;
|
|
130
131
|
}
|
|
131
132
|
|
|
@@ -133,7 +134,7 @@ export class PrefixEvaluator extends Plugin {
|
|
|
133
134
|
const module = (graphTyped.nodes as Map<string, NodeRecord>).get(moduleId) as ModuleNode | undefined;
|
|
134
135
|
|
|
135
136
|
if (!module || module.type !== 'MODULE') {
|
|
136
|
-
|
|
137
|
+
logger.debug('Module not found for mount point', { mountPointId: mountPoint.id });
|
|
137
138
|
continue;
|
|
138
139
|
}
|
|
139
140
|
|
|
@@ -147,7 +148,7 @@ export class PrefixEvaluator extends Plugin {
|
|
|
147
148
|
});
|
|
148
149
|
} catch (error) {
|
|
149
150
|
const err = error as Error;
|
|
150
|
-
|
|
151
|
+
logger.debug('Failed to parse file', { file: module.file, error: err.message });
|
|
151
152
|
continue;
|
|
152
153
|
}
|
|
153
154
|
|
|
@@ -163,11 +164,18 @@ export class PrefixEvaluator extends Plugin {
|
|
|
163
164
|
mountPoint.prefix = evaluatedPrefix;
|
|
164
165
|
mountPoint.evaluated = true;
|
|
165
166
|
successfulEvaluations++;
|
|
166
|
-
|
|
167
|
+
logger.debug('Resolved prefix', {
|
|
168
|
+
file: mountPoint.file,
|
|
169
|
+
line: mountPoint.line,
|
|
170
|
+
prefix: evaluatedPrefix
|
|
171
|
+
});
|
|
167
172
|
}
|
|
168
173
|
}
|
|
169
174
|
|
|
170
|
-
|
|
175
|
+
logger.info('Evaluated mount points', {
|
|
176
|
+
successful: successfulEvaluations,
|
|
177
|
+
total: mountPointsEvaluated
|
|
178
|
+
});
|
|
171
179
|
|
|
172
180
|
return createSuccessResult(
|
|
173
181
|
{ nodes: 0, edges: 0 },
|
|
@@ -175,7 +183,8 @@ export class PrefixEvaluator extends Plugin {
|
|
|
175
183
|
);
|
|
176
184
|
|
|
177
185
|
} catch (error) {
|
|
178
|
-
|
|
186
|
+
const logger = this.log(context);
|
|
187
|
+
logger.error('Error in PrefixEvaluator', { error });
|
|
179
188
|
return createErrorResult(error as Error);
|
|
180
189
|
}
|
|
181
190
|
}
|
|
@@ -40,20 +40,21 @@ export class RustFFIEnricher extends Plugin {
|
|
|
40
40
|
|
|
41
41
|
async execute(context: PluginContext): Promise<PluginResult> {
|
|
42
42
|
const { graph } = context;
|
|
43
|
+
const logger = this.log(context);
|
|
43
44
|
|
|
44
45
|
// 1. Build index of NAPI-exported Rust functions/methods
|
|
45
46
|
const napiIndex = await this.buildNapiIndex(graph);
|
|
46
47
|
|
|
47
48
|
if (napiIndex.size === 0) {
|
|
48
|
-
|
|
49
|
+
logger.info('No NAPI exports found, skipping');
|
|
49
50
|
return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true, reason: 'No NAPI exports' });
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
logger.debug('Indexed NAPI exports', { count: napiIndex.size });
|
|
53
54
|
|
|
54
55
|
// 2. Find JS CALL nodes that target Rust
|
|
55
56
|
const jsCalls = await this.findRustCallingJsCalls(graph);
|
|
56
|
-
|
|
57
|
+
logger.debug('Found candidate JS calls', { count: jsCalls.length });
|
|
57
58
|
|
|
58
59
|
// 3. Match and create FFI_CALLS edges
|
|
59
60
|
let edgesCreated = 0;
|
|
@@ -78,10 +79,10 @@ export class RustFFIEnricher extends Plugin {
|
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
if (unmatched.length > 0 && unmatched.length <= 20) {
|
|
81
|
-
|
|
82
|
+
logger.debug('Unmatched calls', { calls: unmatched.slice(0, 10) });
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
|
|
85
|
+
logger.info('Created FFI_CALLS edges', { count: edgesCreated, unmatched: unmatched.length });
|
|
85
86
|
return createSuccessResult({ nodes: 0, edges: edgesCreated }, { unmatched: unmatched.length });
|
|
86
87
|
}
|
|
87
88
|
|