@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
|
@@ -26,11 +26,14 @@ import type {
|
|
|
26
26
|
EnumDeclarationInfo,
|
|
27
27
|
EnumMemberInfo
|
|
28
28
|
} from '../types.js';
|
|
29
|
+
import { ScopeTracker } from '../../../../core/ScopeTracker.js';
|
|
30
|
+
import { computeSemanticId } from '../../../../core/SemanticId.js';
|
|
31
|
+
import { getLine, getColumn } from '../utils/location.js';
|
|
29
32
|
|
|
30
33
|
/**
|
|
31
34
|
* Extracts a string representation of a TypeScript type node
|
|
32
35
|
*/
|
|
33
|
-
function typeNodeToString(node: unknown): string {
|
|
36
|
+
export function typeNodeToString(node: unknown): string {
|
|
34
37
|
if (!node || typeof node !== 'object') return 'unknown';
|
|
35
38
|
|
|
36
39
|
const typeNode = node as { type: string; [key: string]: unknown };
|
|
@@ -97,8 +100,16 @@ function typeNodeToString(node: unknown): string {
|
|
|
97
100
|
}
|
|
98
101
|
|
|
99
102
|
export class TypeScriptVisitor extends ASTVisitor {
|
|
100
|
-
|
|
103
|
+
private scopeTracker?: ScopeTracker;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @param module - Current module being analyzed
|
|
107
|
+
* @param collections - Must contain interfaces, typeAliases, enums arrays
|
|
108
|
+
* @param scopeTracker - Optional ScopeTracker for semantic ID generation
|
|
109
|
+
*/
|
|
110
|
+
constructor(module: VisitorModule, collections: VisitorCollections, scopeTracker?: ScopeTracker) {
|
|
101
111
|
super(module, collections);
|
|
112
|
+
this.scopeTracker = scopeTracker;
|
|
102
113
|
}
|
|
103
114
|
|
|
104
115
|
getHandlers(): VisitorHandlers {
|
|
@@ -108,6 +119,7 @@ export class TypeScriptVisitor extends ASTVisitor {
|
|
|
108
119
|
typeAliases,
|
|
109
120
|
enums
|
|
110
121
|
} = this.collections;
|
|
122
|
+
const scopeTracker = this.scopeTracker;
|
|
111
123
|
|
|
112
124
|
return {
|
|
113
125
|
TSInterfaceDeclaration: (path: NodePath) => {
|
|
@@ -115,7 +127,12 @@ export class TypeScriptVisitor extends ASTVisitor {
|
|
|
115
127
|
if (!node.id) return;
|
|
116
128
|
|
|
117
129
|
const interfaceName = node.id.name;
|
|
118
|
-
|
|
130
|
+
|
|
131
|
+
// Generate semantic ID if scopeTracker available
|
|
132
|
+
let interfaceSemanticId: string | undefined;
|
|
133
|
+
if (scopeTracker) {
|
|
134
|
+
interfaceSemanticId = computeSemanticId('INTERFACE', interfaceName, scopeTracker.getContext());
|
|
135
|
+
}
|
|
119
136
|
|
|
120
137
|
// Extract extends
|
|
121
138
|
const extendsNames: string[] = [];
|
|
@@ -156,12 +173,12 @@ export class TypeScriptVisitor extends ASTVisitor {
|
|
|
156
173
|
}
|
|
157
174
|
|
|
158
175
|
(interfaces as InterfaceDeclarationInfo[]).push({
|
|
159
|
-
|
|
176
|
+
semanticId: interfaceSemanticId,
|
|
160
177
|
type: 'INTERFACE',
|
|
161
178
|
name: interfaceName,
|
|
162
179
|
file: module.file,
|
|
163
|
-
line: node
|
|
164
|
-
column: node
|
|
180
|
+
line: getLine(node),
|
|
181
|
+
column: getColumn(node),
|
|
165
182
|
extends: extendsNames.length > 0 ? extendsNames : undefined,
|
|
166
183
|
properties
|
|
167
184
|
});
|
|
@@ -172,18 +189,23 @@ export class TypeScriptVisitor extends ASTVisitor {
|
|
|
172
189
|
if (!node.id) return;
|
|
173
190
|
|
|
174
191
|
const typeName = node.id.name;
|
|
175
|
-
|
|
192
|
+
|
|
193
|
+
// Generate semantic ID if scopeTracker available
|
|
194
|
+
let typeSemanticId: string | undefined;
|
|
195
|
+
if (scopeTracker) {
|
|
196
|
+
typeSemanticId = computeSemanticId('TYPE', typeName, scopeTracker.getContext());
|
|
197
|
+
}
|
|
176
198
|
|
|
177
199
|
// Extract the type being aliased
|
|
178
200
|
const aliasOf = typeNodeToString(node.typeAnnotation);
|
|
179
201
|
|
|
180
202
|
(typeAliases as TypeAliasInfo[]).push({
|
|
181
|
-
|
|
203
|
+
semanticId: typeSemanticId,
|
|
182
204
|
type: 'TYPE',
|
|
183
205
|
name: typeName,
|
|
184
206
|
file: module.file,
|
|
185
|
-
line: node
|
|
186
|
-
column: node
|
|
207
|
+
line: getLine(node),
|
|
208
|
+
column: getColumn(node),
|
|
187
209
|
aliasOf
|
|
188
210
|
});
|
|
189
211
|
},
|
|
@@ -193,7 +215,12 @@ export class TypeScriptVisitor extends ASTVisitor {
|
|
|
193
215
|
if (!node.id) return;
|
|
194
216
|
|
|
195
217
|
const enumName = node.id.name;
|
|
196
|
-
|
|
218
|
+
|
|
219
|
+
// Generate semantic ID if scopeTracker available
|
|
220
|
+
let enumSemanticId: string | undefined;
|
|
221
|
+
if (scopeTracker) {
|
|
222
|
+
enumSemanticId = computeSemanticId('ENUM', enumName, scopeTracker.getContext());
|
|
223
|
+
}
|
|
197
224
|
|
|
198
225
|
// Extract members
|
|
199
226
|
const members: EnumMemberInfo[] = [];
|
|
@@ -220,12 +247,12 @@ export class TypeScriptVisitor extends ASTVisitor {
|
|
|
220
247
|
}
|
|
221
248
|
|
|
222
249
|
(enums as EnumDeclarationInfo[]).push({
|
|
223
|
-
|
|
250
|
+
semanticId: enumSemanticId,
|
|
224
251
|
type: 'ENUM',
|
|
225
252
|
name: enumName,
|
|
226
253
|
file: module.file,
|
|
227
|
-
line: node
|
|
228
|
-
column: node
|
|
254
|
+
line: getLine(node),
|
|
255
|
+
column: getColumn(node),
|
|
229
256
|
isConst: node.const || false,
|
|
230
257
|
members
|
|
231
258
|
});
|
|
@@ -17,6 +17,9 @@ import type {
|
|
|
17
17
|
import type { NodePath } from '@babel/traverse';
|
|
18
18
|
import { ASTVisitor, type VisitorModule, type VisitorCollections, type VisitorHandlers, type CounterRef } from './ASTVisitor.js';
|
|
19
19
|
import { ExpressionEvaluator } from '../ExpressionEvaluator.js';
|
|
20
|
+
import { ScopeTracker } from '../../../../core/ScopeTracker.js';
|
|
21
|
+
import { IdGenerator } from '../IdGenerator.js';
|
|
22
|
+
import { NodeFactory } from '../../../../core/NodeFactory.js';
|
|
20
23
|
|
|
21
24
|
/**
|
|
22
25
|
* Variable info extracted from pattern
|
|
@@ -26,6 +29,7 @@ export interface VariableInfo {
|
|
|
26
29
|
loc: { start: { line: number; column: number } };
|
|
27
30
|
propertyPath?: string[];
|
|
28
31
|
arrayIndex?: number;
|
|
32
|
+
isRest?: boolean;
|
|
29
33
|
}
|
|
30
34
|
|
|
31
35
|
/**
|
|
@@ -44,7 +48,10 @@ export type TrackVariableAssignmentCallback = (
|
|
|
44
48
|
line: number,
|
|
45
49
|
literals: unknown[],
|
|
46
50
|
variableAssignments: unknown[],
|
|
47
|
-
literalCounterRef: CounterRef
|
|
51
|
+
literalCounterRef: CounterRef,
|
|
52
|
+
objectLiterals: unknown[],
|
|
53
|
+
objectProperties: unknown[],
|
|
54
|
+
objectLiteralCounterRef: CounterRef
|
|
48
55
|
) => void;
|
|
49
56
|
|
|
50
57
|
/**
|
|
@@ -97,25 +104,100 @@ interface VariableAssignmentInfo {
|
|
|
97
104
|
file?: string;
|
|
98
105
|
}
|
|
99
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Call info extracted from CallExpression (REG-223)
|
|
109
|
+
*/
|
|
110
|
+
interface CallInfo {
|
|
111
|
+
line: number;
|
|
112
|
+
column: number;
|
|
113
|
+
name: string;
|
|
114
|
+
isMethodCall: boolean;
|
|
115
|
+
}
|
|
116
|
+
|
|
100
117
|
export class VariableVisitor extends ASTVisitor {
|
|
101
118
|
private extractVariableNamesFromPattern: ExtractVariableNamesCallback;
|
|
102
119
|
private trackVariableAssignment: TrackVariableAssignmentCallback;
|
|
120
|
+
private scopeTracker?: ScopeTracker;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Recursively unwrap AwaitExpression to get the underlying expression.
|
|
124
|
+
* await await fetch() -> fetch() (REG-223)
|
|
125
|
+
*/
|
|
126
|
+
private unwrapAwaitExpression(node: Node): Node {
|
|
127
|
+
if (node.type === 'AwaitExpression' && (node as { argument?: Node }).argument) {
|
|
128
|
+
return this.unwrapAwaitExpression((node as { argument: Node }).argument);
|
|
129
|
+
}
|
|
130
|
+
return node;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Check if expression is CallExpression or AwaitExpression wrapping a call. (REG-223)
|
|
135
|
+
*/
|
|
136
|
+
private isCallOrAwaitExpression(node: Node): boolean {
|
|
137
|
+
const unwrapped = this.unwrapAwaitExpression(node);
|
|
138
|
+
return unwrapped.type === 'CallExpression';
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Extract call site information from CallExpression. (REG-223)
|
|
143
|
+
* Returns null if not a valid CallExpression.
|
|
144
|
+
*/
|
|
145
|
+
private extractCallInfo(node: Node): CallInfo | null {
|
|
146
|
+
if (node.type !== 'CallExpression') {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const callExpr = node as { callee: Node; loc?: { start: { line: number; column: number } } };
|
|
151
|
+
const callee = callExpr.callee;
|
|
152
|
+
let name: string;
|
|
153
|
+
let isMethodCall = false;
|
|
154
|
+
|
|
155
|
+
// Direct call: fetchUser()
|
|
156
|
+
if (callee.type === 'Identifier') {
|
|
157
|
+
name = (callee as Identifier).name;
|
|
158
|
+
}
|
|
159
|
+
// Method call: obj.fetchUser() or arr.map()
|
|
160
|
+
else if (callee.type === 'MemberExpression') {
|
|
161
|
+
isMethodCall = true;
|
|
162
|
+
const memberExpr = callee as { object: Node; property: Node };
|
|
163
|
+
const objectName = memberExpr.object.type === 'Identifier'
|
|
164
|
+
? (memberExpr.object as Identifier).name
|
|
165
|
+
: (memberExpr.object.type === 'ThisExpression' ? 'this' : 'unknown');
|
|
166
|
+
const methodName = memberExpr.property.type === 'Identifier'
|
|
167
|
+
? (memberExpr.property as Identifier).name
|
|
168
|
+
: 'unknown';
|
|
169
|
+
name = `${objectName}.${methodName}`;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
line: callExpr.loc?.start.line ?? 0,
|
|
177
|
+
column: callExpr.loc?.start.column ?? 0,
|
|
178
|
+
name,
|
|
179
|
+
isMethodCall
|
|
180
|
+
};
|
|
181
|
+
}
|
|
103
182
|
|
|
104
183
|
/**
|
|
105
184
|
* @param module - Current module being analyzed
|
|
106
185
|
* @param collections - Must contain arrays and counter refs
|
|
107
186
|
* @param extractVariableNamesFromPattern - Helper for destructuring
|
|
108
187
|
* @param trackVariableAssignment - Helper for data flow tracking
|
|
188
|
+
* @param scopeTracker - Optional ScopeTracker for semantic ID generation
|
|
109
189
|
*/
|
|
110
190
|
constructor(
|
|
111
191
|
module: VisitorModule,
|
|
112
192
|
collections: VisitorCollections,
|
|
113
193
|
extractVariableNamesFromPattern: ExtractVariableNamesCallback,
|
|
114
|
-
trackVariableAssignment: TrackVariableAssignmentCallback
|
|
194
|
+
trackVariableAssignment: TrackVariableAssignmentCallback,
|
|
195
|
+
scopeTracker?: ScopeTracker
|
|
115
196
|
) {
|
|
116
197
|
super(module, collections);
|
|
117
198
|
this.extractVariableNamesFromPattern = extractVariableNamesFromPattern;
|
|
118
199
|
this.trackVariableAssignment = trackVariableAssignment;
|
|
200
|
+
this.scopeTracker = scopeTracker;
|
|
119
201
|
}
|
|
120
202
|
|
|
121
203
|
getHandlers(): VisitorHandlers {
|
|
@@ -124,12 +206,22 @@ export class VariableVisitor extends ASTVisitor {
|
|
|
124
206
|
const classInstantiations = this.collections.classInstantiations ?? [];
|
|
125
207
|
const literals = (this.collections.literals ?? []) as unknown[];
|
|
126
208
|
const variableAssignments = this.collections.variableAssignments ?? [];
|
|
209
|
+
const scopes = (this.collections.scopes ?? []) as unknown[];
|
|
127
210
|
const varDeclCounterRef = (this.collections.varDeclCounterRef ?? { value: 0 }) as CounterRef;
|
|
128
211
|
const literalCounterRef = (this.collections.literalCounterRef ?? { value: 0 }) as CounterRef;
|
|
212
|
+
const scopeCounterRef = (this.collections.scopeCounterRef ?? { value: 0 }) as CounterRef;
|
|
213
|
+
// Object literal tracking collections (REG-328)
|
|
214
|
+
const objectLiterals = (this.collections.objectLiterals ?? []) as unknown[];
|
|
215
|
+
const objectProperties = (this.collections.objectProperties ?? []) as unknown[];
|
|
216
|
+
const objectLiteralCounterRef = (this.collections.objectLiteralCounterRef ?? { value: 0 }) as CounterRef;
|
|
217
|
+
const scopeTracker = this.scopeTracker;
|
|
129
218
|
|
|
130
219
|
const extractVariableNamesFromPattern = this.extractVariableNamesFromPattern;
|
|
131
220
|
const trackVariableAssignment = this.trackVariableAssignment;
|
|
132
221
|
|
|
222
|
+
// Track which loops we've already created scopes for
|
|
223
|
+
const processedLoops = new Set<unknown>();
|
|
224
|
+
|
|
133
225
|
return {
|
|
134
226
|
VariableDeclaration: (path: NodePath) => {
|
|
135
227
|
// Only module-level variables
|
|
@@ -138,6 +230,41 @@ export class VariableVisitor extends ASTVisitor {
|
|
|
138
230
|
const varNode = path.node as VariableDeclaration;
|
|
139
231
|
const isConst = varNode.kind === 'const';
|
|
140
232
|
|
|
233
|
+
// Check if this is a loop variable (for...of or for...in)
|
|
234
|
+
const parent = path.parent;
|
|
235
|
+
const isLoopVariable = (parent.type === 'ForOfStatement' || parent.type === 'ForInStatement')
|
|
236
|
+
&& (parent as {left?: unknown}).left === varNode;
|
|
237
|
+
|
|
238
|
+
// If this is a loop variable, create the loop scope first (if not already created)
|
|
239
|
+
if (isLoopVariable && !processedLoops.has(parent)) {
|
|
240
|
+
processedLoops.add(parent);
|
|
241
|
+
|
|
242
|
+
const loopNode = parent as { type: string; loc?: { start: { line: number } } };
|
|
243
|
+
const line = loopNode.loc?.start.line ?? 0;
|
|
244
|
+
const scopeType = loopNode.type === 'ForOfStatement' ? 'for-of-loop' : 'for-in-loop';
|
|
245
|
+
const trackerType = loopNode.type === 'ForOfStatement' ? 'for-of' : 'for-in';
|
|
246
|
+
const scopeId = `SCOPE#${scopeType}#${module.file}#${line}:${scopeCounterRef.value++}`;
|
|
247
|
+
|
|
248
|
+
// Enter scope in tracker BEFORE generating semantic ID
|
|
249
|
+
if (scopeTracker) {
|
|
250
|
+
scopeTracker.enterCountedScope(trackerType);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const semanticId = scopeTracker
|
|
254
|
+
? scopeTracker.getContext().scopePath.join('->')
|
|
255
|
+
: scopeId;
|
|
256
|
+
|
|
257
|
+
(scopes as { id: string; type: string; scopeType: string; semanticId: string; file: string; line: number; parentScopeId: string }[]).push({
|
|
258
|
+
id: scopeId,
|
|
259
|
+
type: 'SCOPE',
|
|
260
|
+
scopeType,
|
|
261
|
+
semanticId,
|
|
262
|
+
file: module.file,
|
|
263
|
+
line,
|
|
264
|
+
parentScopeId: module.id
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
|
|
141
268
|
varNode.declarations.forEach((declarator: VariableDeclarator) => {
|
|
142
269
|
// Extract all variable names from the pattern (handles destructuring)
|
|
143
270
|
const variables = extractVariableNamesFromPattern(declarator.id);
|
|
@@ -147,13 +274,22 @@ export class VariableVisitor extends ASTVisitor {
|
|
|
147
274
|
const isLiteral = literalValue !== null;
|
|
148
275
|
const isNewExpression = declarator.init && declarator.init.type === 'NewExpression';
|
|
149
276
|
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
const shouldBeConstant = isConst && (isLiteral || isNewExpression);
|
|
277
|
+
// Loop variables with const should be CONSTANT (they can't be reassigned in loop body)
|
|
278
|
+
// Regular variables with const are CONSTANT only if initialized with literal or new expression
|
|
279
|
+
const shouldBeConstant = isConst && (isLoopVariable || isLiteral || isNewExpression);
|
|
153
280
|
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
281
|
+
const nodeType = shouldBeConstant ? 'CONSTANT' : 'VARIABLE';
|
|
282
|
+
|
|
283
|
+
// Generate ID using centralized IdGenerator
|
|
284
|
+
const idGenerator = new IdGenerator(scopeTracker);
|
|
285
|
+
const varId = idGenerator.generate(
|
|
286
|
+
nodeType,
|
|
287
|
+
varInfo.name,
|
|
288
|
+
module.file,
|
|
289
|
+
varInfo.loc.start.line,
|
|
290
|
+
varInfo.loc.start.column,
|
|
291
|
+
varDeclCounterRef as CounterRef
|
|
292
|
+
);
|
|
157
293
|
|
|
158
294
|
if (shouldBeConstant) {
|
|
159
295
|
// CONSTANT node
|
|
@@ -198,64 +334,173 @@ export class VariableVisitor extends ASTVisitor {
|
|
|
198
334
|
}
|
|
199
335
|
|
|
200
336
|
// Track assignment for data flow analysis
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const initName = declarator.init.type === 'Identifier'
|
|
206
|
-
? (declarator.init as Identifier).name
|
|
207
|
-
: 'expr';
|
|
208
|
-
let expressionPath = initName;
|
|
209
|
-
|
|
210
|
-
if (varInfo.propertyPath) {
|
|
211
|
-
expressionPath = `${initName}.${varInfo.propertyPath.join('.')}`;
|
|
212
|
-
} else if (varInfo.arrayIndex !== undefined) {
|
|
213
|
-
expressionPath = `${initName}[${varInfo.arrayIndex}]`;
|
|
214
|
-
}
|
|
337
|
+
// For loop variables, the "init" is the right side of for...of/for...in
|
|
338
|
+
const initExpression = isLoopVariable
|
|
339
|
+
? (parent as {right?: Node}).right
|
|
340
|
+
: declarator.init;
|
|
215
341
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
propertyPath: varInfo.propertyPath || null,
|
|
226
|
-
arrayIndex: varInfo.arrayIndex,
|
|
342
|
+
if (initExpression) {
|
|
343
|
+
// For loop variables, create DERIVES_FROM edges instead of ASSIGNED_FROM
|
|
344
|
+
// Loop variables derive their values from the collection (semantic difference)
|
|
345
|
+
if (isLoopVariable && initExpression.type === 'Identifier') {
|
|
346
|
+
const sourceName = (initExpression as Identifier).name;
|
|
347
|
+
(variableAssignments as unknown[]).push({
|
|
348
|
+
variableId: varId,
|
|
349
|
+
sourceType: 'DERIVES_FROM_VARIABLE',
|
|
350
|
+
sourceName,
|
|
227
351
|
file: module.file,
|
|
228
352
|
line: varInfo.loc.start.line
|
|
229
353
|
});
|
|
354
|
+
}
|
|
355
|
+
// Handle destructuring - create EXPRESSION for property path
|
|
356
|
+
else if (varInfo.propertyPath || varInfo.arrayIndex !== undefined || varInfo.isRest) {
|
|
357
|
+
// Phase 1: Simple Identifier init expressions (REG-201)
|
|
358
|
+
if (initExpression.type === 'Identifier') {
|
|
359
|
+
const sourceBaseName = (initExpression as Identifier).name;
|
|
360
|
+
const expressionLine = varInfo.loc.start.line;
|
|
230
361
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
362
|
+
// Handle rest elements specially - create edge to whole source
|
|
363
|
+
if (varInfo.isRest) {
|
|
364
|
+
(variableAssignments as unknown[]).push({
|
|
365
|
+
variableId: varId,
|
|
366
|
+
sourceType: 'VARIABLE',
|
|
367
|
+
sourceName: sourceBaseName,
|
|
368
|
+
line: expressionLine
|
|
369
|
+
});
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
const expressionColumn = varInfo.loc.start.column;
|
|
374
|
+
|
|
375
|
+
// Build property path string
|
|
376
|
+
let fullPath = sourceBaseName;
|
|
377
|
+
if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
|
|
378
|
+
fullPath = `${sourceBaseName}.${varInfo.propertyPath.join('.')}`;
|
|
379
|
+
}
|
|
237
380
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
381
|
+
// Generate expression ID (matches GraphBuilder expectations)
|
|
382
|
+
const expressionId = `${module.file}:EXPRESSION:MemberExpression:${expressionLine}:${expressionColumn}`;
|
|
383
|
+
|
|
384
|
+
// Determine property for display
|
|
385
|
+
let property: string;
|
|
386
|
+
if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
|
|
387
|
+
property = varInfo.propertyPath[varInfo.propertyPath.length - 1];
|
|
388
|
+
} else if (varInfo.arrayIndex !== undefined) {
|
|
389
|
+
property = String(varInfo.arrayIndex);
|
|
390
|
+
} else {
|
|
391
|
+
property = '';
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// Push assignment with full metadata for GraphBuilder (REG-201)
|
|
395
|
+
// GraphBuilder will create the EXPRESSION node from this metadata
|
|
396
|
+
(variableAssignments as unknown[]).push({
|
|
397
|
+
variableId: varId,
|
|
398
|
+
sourceId: expressionId,
|
|
399
|
+
sourceType: 'EXPRESSION',
|
|
400
|
+
expressionType: 'MemberExpression',
|
|
401
|
+
object: sourceBaseName,
|
|
402
|
+
property: property,
|
|
403
|
+
computed: varInfo.arrayIndex !== undefined,
|
|
404
|
+
path: fullPath,
|
|
405
|
+
objectSourceName: sourceBaseName, // Use objectSourceName for DERIVES_FROM edge creation
|
|
406
|
+
propertyPath: varInfo.propertyPath || undefined,
|
|
407
|
+
arrayIndex: varInfo.arrayIndex,
|
|
408
|
+
file: module.file,
|
|
409
|
+
line: expressionLine,
|
|
410
|
+
column: expressionColumn
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
// Phase 2: CallExpression or AwaitExpression (REG-223)
|
|
414
|
+
else if (this.isCallOrAwaitExpression(initExpression)) {
|
|
415
|
+
const unwrapped = this.unwrapAwaitExpression(initExpression);
|
|
416
|
+
const callInfo = this.extractCallInfo(unwrapped);
|
|
417
|
+
|
|
418
|
+
if (!callInfo) {
|
|
419
|
+
// Unsupported call pattern (computed callee, etc.)
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
const callRepresentation = `${callInfo.name}()`;
|
|
424
|
+
const expressionLine = varInfo.loc.start.line;
|
|
425
|
+
const expressionColumn = varInfo.loc.start.column;
|
|
426
|
+
|
|
427
|
+
// Handle rest elements - create direct CALL_SITE assignment
|
|
428
|
+
if (varInfo.isRest) {
|
|
429
|
+
(variableAssignments as unknown[]).push({
|
|
430
|
+
variableId: varId,
|
|
431
|
+
sourceType: 'CALL_SITE',
|
|
432
|
+
callName: callInfo.name,
|
|
433
|
+
callLine: callInfo.line,
|
|
434
|
+
callColumn: callInfo.column,
|
|
435
|
+
callSourceLine: callInfo.line,
|
|
436
|
+
callSourceColumn: callInfo.column,
|
|
437
|
+
callSourceFile: module.file,
|
|
438
|
+
callSourceName: callInfo.name,
|
|
439
|
+
line: expressionLine
|
|
440
|
+
});
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// Generate expression ID (matches GraphBuilder expectations)
|
|
445
|
+
const expressionId = `${module.file}:EXPRESSION:MemberExpression:${expressionLine}:${expressionColumn}`;
|
|
446
|
+
|
|
447
|
+
// Determine property for display
|
|
448
|
+
let property: string;
|
|
449
|
+
if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
|
|
450
|
+
property = varInfo.propertyPath[varInfo.propertyPath.length - 1];
|
|
451
|
+
} else if (varInfo.arrayIndex !== undefined) {
|
|
452
|
+
property = String(varInfo.arrayIndex);
|
|
453
|
+
} else {
|
|
454
|
+
property = '';
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// Build property path string: "fetchUser().data" or "fetchUser().user.name"
|
|
458
|
+
let fullPath = callRepresentation;
|
|
459
|
+
if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
|
|
460
|
+
fullPath = `${callRepresentation}.${varInfo.propertyPath.join('.')}`;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
// Push assignment with call source metadata for GraphBuilder (REG-223)
|
|
464
|
+
(variableAssignments as unknown[]).push({
|
|
465
|
+
variableId: varId,
|
|
466
|
+
sourceId: expressionId,
|
|
467
|
+
sourceType: 'EXPRESSION',
|
|
468
|
+
expressionType: 'MemberExpression',
|
|
469
|
+
object: callRepresentation, // "fetchUser()" - display name
|
|
470
|
+
property: property,
|
|
471
|
+
computed: varInfo.arrayIndex !== undefined,
|
|
472
|
+
path: fullPath,
|
|
473
|
+
propertyPath: varInfo.propertyPath || undefined,
|
|
474
|
+
arrayIndex: varInfo.arrayIndex,
|
|
475
|
+
// Call source for DERIVES_FROM lookup (REG-223)
|
|
476
|
+
callSourceLine: callInfo.line,
|
|
477
|
+
callSourceColumn: callInfo.column,
|
|
478
|
+
callSourceFile: module.file,
|
|
479
|
+
callSourceName: callInfo.name,
|
|
480
|
+
sourceMetadata: {
|
|
481
|
+
sourceType: callInfo.isMethodCall ? 'method-call' : 'call'
|
|
482
|
+
},
|
|
483
|
+
file: module.file,
|
|
484
|
+
line: expressionLine,
|
|
485
|
+
column: expressionColumn
|
|
246
486
|
});
|
|
247
487
|
}
|
|
488
|
+
// Unsupported init type (MemberExpression without call, etc.)
|
|
489
|
+
// Skip silently
|
|
248
490
|
} else {
|
|
249
491
|
// Normal assignment tracking
|
|
250
492
|
trackVariableAssignment(
|
|
251
|
-
|
|
493
|
+
initExpression,
|
|
252
494
|
varId,
|
|
253
495
|
varInfo.name,
|
|
254
496
|
module,
|
|
255
497
|
varInfo.loc.start.line,
|
|
256
498
|
literals,
|
|
257
499
|
variableAssignments,
|
|
258
|
-
literalCounterRef as CounterRef
|
|
500
|
+
literalCounterRef as CounterRef,
|
|
501
|
+
objectLiterals,
|
|
502
|
+
objectProperties,
|
|
503
|
+
objectLiteralCounterRef
|
|
259
504
|
);
|
|
260
505
|
}
|
|
261
506
|
}
|
|
@@ -57,10 +57,11 @@ export class MonorepoServiceDiscovery extends DiscoveryPlugin {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
async execute(context: PluginContext): Promise<PluginResult> {
|
|
60
|
+
const logger = this.log(context);
|
|
60
61
|
const { projectPath, graph } = context;
|
|
61
62
|
const servicesPath = join(projectPath!, this.servicesDir);
|
|
62
63
|
|
|
63
|
-
|
|
64
|
+
logger.debug('Looking for services', { servicesPath });
|
|
64
65
|
|
|
65
66
|
if (!existsSync(servicesPath)) {
|
|
66
67
|
return createErrorResult(
|
|
@@ -71,7 +72,7 @@ export class MonorepoServiceDiscovery extends DiscoveryPlugin {
|
|
|
71
72
|
try {
|
|
72
73
|
const services: ServiceInfo[] = [];
|
|
73
74
|
const entries = readdirSync(servicesPath);
|
|
74
|
-
|
|
75
|
+
logger.debug('Found entries', { count: entries.length });
|
|
75
76
|
|
|
76
77
|
for (const entry of entries) {
|
|
77
78
|
const fullPath = join(servicesPath, entry);
|
|
@@ -11,6 +11,7 @@ import { join } from 'path';
|
|
|
11
11
|
import { NodeFactory } from '../../core/NodeFactory.js';
|
|
12
12
|
import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
13
13
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
14
|
+
import { resolveSourceEntrypoint } from './resolveSourceEntrypoint.js';
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* Service info returned in metadata
|
|
@@ -33,6 +34,7 @@ interface PackageJson {
|
|
|
33
34
|
name?: string;
|
|
34
35
|
version?: string;
|
|
35
36
|
main?: string;
|
|
37
|
+
source?: string;
|
|
36
38
|
description?: string;
|
|
37
39
|
dependencies?: Record<string, string>;
|
|
38
40
|
}
|
|
@@ -70,7 +72,10 @@ export class SimpleProjectDiscovery extends Plugin {
|
|
|
70
72
|
try {
|
|
71
73
|
const packageJson: PackageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
72
74
|
const serviceName = packageJson.name || 'unnamed-service';
|
|
73
|
-
|
|
75
|
+
// Prefer TypeScript source over compiled output
|
|
76
|
+
const entrypoint = resolveSourceEntrypoint(projectPath, packageJson)
|
|
77
|
+
?? packageJson.main
|
|
78
|
+
?? 'index.js';
|
|
74
79
|
|
|
75
80
|
// Используем NodeFactory для создания SERVICE ноды
|
|
76
81
|
const serviceNode = NodeFactory.createService(serviceName, projectPath, {
|