@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
|
@@ -12,6 +12,7 @@ import { readFileSync } from 'fs';
|
|
|
12
12
|
import { parse } from '@babel/parser';
|
|
13
13
|
import traverseModule from '@babel/traverse';
|
|
14
14
|
import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
15
|
+
import { getLine } from './ast/utils/location.js';
|
|
15
16
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
17
|
const traverse = traverseModule.default || traverseModule;
|
|
17
18
|
export class ServiceLayerAnalyzer extends Plugin {
|
|
@@ -28,11 +29,12 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
28
29
|
};
|
|
29
30
|
}
|
|
30
31
|
async execute(context) {
|
|
32
|
+
const logger = this.log(context);
|
|
31
33
|
try {
|
|
32
34
|
const { graph } = context;
|
|
33
35
|
// Получаем все модули
|
|
34
36
|
const modules = await this.getModules(graph);
|
|
35
|
-
|
|
37
|
+
logger.info('Processing modules', { count: modules.length });
|
|
36
38
|
let classesCount = 0;
|
|
37
39
|
let instancesCount = 0;
|
|
38
40
|
let registrationsCount = 0;
|
|
@@ -49,10 +51,20 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
49
51
|
if ((i + 1) % 20 === 0 || i === modules.length - 1) {
|
|
50
52
|
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
51
53
|
const avgTime = ((Date.now() - startTime) / (i + 1)).toFixed(0);
|
|
52
|
-
|
|
54
|
+
logger.debug('Progress', {
|
|
55
|
+
current: i + 1,
|
|
56
|
+
total: modules.length,
|
|
57
|
+
elapsed: `${elapsed}s`,
|
|
58
|
+
avgTime: `${avgTime}ms/module`
|
|
59
|
+
});
|
|
53
60
|
}
|
|
54
61
|
}
|
|
55
|
-
|
|
62
|
+
logger.info('Analysis complete', {
|
|
63
|
+
classesCount,
|
|
64
|
+
instancesCount,
|
|
65
|
+
registrationsCount,
|
|
66
|
+
usagesCount
|
|
67
|
+
});
|
|
56
68
|
return createSuccessResult({
|
|
57
69
|
nodes: classesCount + instancesCount + registrationsCount + usagesCount,
|
|
58
70
|
edges: 0
|
|
@@ -64,7 +76,7 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
64
76
|
});
|
|
65
77
|
}
|
|
66
78
|
catch (error) {
|
|
67
|
-
|
|
79
|
+
logger.error('Analysis failed', { error });
|
|
68
80
|
return createErrorResult(error);
|
|
69
81
|
}
|
|
70
82
|
}
|
|
@@ -95,7 +107,7 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
95
107
|
const node = path.node;
|
|
96
108
|
const className = node.id?.name;
|
|
97
109
|
if (className && this.isServiceClass(className)) {
|
|
98
|
-
const line = node
|
|
110
|
+
const line = getLine(node);
|
|
99
111
|
// Извлекаем методы сервиса
|
|
100
112
|
const methods = node.body.body
|
|
101
113
|
.filter(m => m.type === 'ClassMethod' && m.kind === 'method')
|
|
@@ -117,7 +129,7 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
117
129
|
if (callee.type === 'Identifier') {
|
|
118
130
|
const className = callee.name;
|
|
119
131
|
if (this.isServiceClass(className)) {
|
|
120
|
-
const line = node
|
|
132
|
+
const line = getLine(node);
|
|
121
133
|
serviceInstances.push({
|
|
122
134
|
id: `${module.file}:SERVICE_INSTANCE:${className}:${line}`,
|
|
123
135
|
type: 'SERVICE_INSTANCE',
|
|
@@ -139,7 +151,7 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
139
151
|
const objectName = this.getObjectName(callee.object);
|
|
140
152
|
if (objectName === 'app' && node.arguments.length >= 2) {
|
|
141
153
|
const serviceName = this.extractStringArg(node.arguments[0]);
|
|
142
|
-
const line = node
|
|
154
|
+
const line = getLine(node);
|
|
143
155
|
// Проверяем что это похоже на service (имя содержит 'service' или '*Service')
|
|
144
156
|
if (serviceName.toLowerCase().includes('service') ||
|
|
145
157
|
this.isServiceClass(serviceName)) {
|
|
@@ -164,7 +176,7 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
164
176
|
objectChain.includes('app')) {
|
|
165
177
|
if (node.arguments.length >= 1) {
|
|
166
178
|
const serviceName = this.extractStringArg(node.arguments[0]);
|
|
167
|
-
const line = node
|
|
179
|
+
const line = getLine(node);
|
|
168
180
|
// Проверяем что это похоже на service
|
|
169
181
|
if (serviceName.toLowerCase().includes('service') ||
|
|
170
182
|
this.isServiceClass(serviceName)) {
|
|
@@ -237,7 +249,7 @@ export class ServiceLayerAnalyzer extends Plugin {
|
|
|
237
249
|
};
|
|
238
250
|
}
|
|
239
251
|
catch (error) {
|
|
240
|
-
|
|
252
|
+
// Silent - per-module errors shouldn't spam logs
|
|
241
253
|
return { classes: 0, instances: 0, registrations: 0, usages: 0 };
|
|
242
254
|
}
|
|
243
255
|
}
|
|
@@ -19,6 +19,15 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
|
19
19
|
export declare class SocketIOAnalyzer extends Plugin {
|
|
20
20
|
get metadata(): PluginMetadata;
|
|
21
21
|
execute(context: PluginContext): Promise<PluginResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Create event channel nodes and connect them to emits/listeners
|
|
24
|
+
*
|
|
25
|
+
* This runs AFTER all modules are analyzed, so all emit/listener nodes exist.
|
|
26
|
+
* Creates one socketio:event node per unique event name, then connects:
|
|
27
|
+
* - socketio:emit → EMITS_EVENT → socketio:event
|
|
28
|
+
* - socketio:event → LISTENED_BY → socketio:on
|
|
29
|
+
*/
|
|
30
|
+
private createEventChannels;
|
|
22
31
|
private analyzeModule;
|
|
23
32
|
/**
|
|
24
33
|
* Извлекает имя объекта из MemberExpression
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SocketIOAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/plugins/analysis/SocketIOAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"SocketIOAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/plugins/analysis/SocketIOAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAwEhF,qBAAa,gBAAiB,SAAQ,MAAM;IAC1C,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA2D5D;;;;;;;OAOG;YACW,mBAAmB;YAiFnB,aAAa;IAsN3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CA4BzB"}
|
|
@@ -18,6 +18,7 @@ import { readFileSync } from 'fs';
|
|
|
18
18
|
import { parse } from '@babel/parser';
|
|
19
19
|
import traverseModule from '@babel/traverse';
|
|
20
20
|
import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
21
|
+
import { getLine, getColumn } from './ast/utils/location.js';
|
|
21
22
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
23
|
const traverse = traverseModule.default || traverseModule;
|
|
23
24
|
export class SocketIOAnalyzer extends Plugin {
|
|
@@ -27,22 +28,24 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
27
28
|
phase: 'ANALYSIS',
|
|
28
29
|
priority: 75, // После JSASTAnalyzer (80)
|
|
29
30
|
creates: {
|
|
30
|
-
nodes: ['socketio:emit', 'socketio:on', 'socketio:room'],
|
|
31
|
-
edges: ['CONTAINS', 'EMITS_EVENT', 'LISTENS_TO', 'JOINS_ROOM']
|
|
31
|
+
nodes: ['socketio:emit', 'socketio:on', 'socketio:room', 'socketio:event'],
|
|
32
|
+
edges: ['CONTAINS', 'EMITS_EVENT', 'LISTENS_TO', 'JOINS_ROOM', 'LISTENED_BY']
|
|
32
33
|
},
|
|
33
34
|
dependencies: ['JSModuleIndexer', 'JSASTAnalyzer']
|
|
34
35
|
};
|
|
35
36
|
}
|
|
36
37
|
async execute(context) {
|
|
38
|
+
const logger = this.log(context);
|
|
37
39
|
try {
|
|
38
40
|
const { graph } = context;
|
|
39
41
|
// Получаем все модули
|
|
40
42
|
const modules = await this.getModules(graph);
|
|
41
|
-
|
|
43
|
+
logger.info('Processing modules', { count: modules.length });
|
|
42
44
|
let emitsCount = 0;
|
|
43
45
|
let listenersCount = 0;
|
|
44
46
|
let roomsCount = 0;
|
|
45
47
|
const startTime = Date.now();
|
|
48
|
+
// PHASE 1: Analyze modules and create emit/listener/room nodes
|
|
46
49
|
for (let i = 0; i < modules.length; i++) {
|
|
47
50
|
const module = modules[i];
|
|
48
51
|
const result = await this.analyzeModule(module, graph);
|
|
@@ -53,20 +56,106 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
53
56
|
if ((i + 1) % 20 === 0 || i === modules.length - 1) {
|
|
54
57
|
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
55
58
|
const avgTime = ((Date.now() - startTime) / (i + 1)).toFixed(0);
|
|
56
|
-
|
|
59
|
+
logger.debug('Progress', {
|
|
60
|
+
current: i + 1,
|
|
61
|
+
total: modules.length,
|
|
62
|
+
elapsed: `${elapsed}s`,
|
|
63
|
+
avgTime: `${avgTime}ms/module`
|
|
64
|
+
});
|
|
57
65
|
}
|
|
58
66
|
}
|
|
59
|
-
|
|
67
|
+
// PHASE 2: Create event channel nodes and edges
|
|
68
|
+
const eventCount = await this.createEventChannels(graph, logger);
|
|
69
|
+
logger.info('Analysis complete', {
|
|
70
|
+
emitsCount,
|
|
71
|
+
listenersCount,
|
|
72
|
+
roomsCount,
|
|
73
|
+
eventCount
|
|
74
|
+
});
|
|
60
75
|
return createSuccessResult({
|
|
61
|
-
nodes: emitsCount + listenersCount + roomsCount,
|
|
76
|
+
nodes: emitsCount + listenersCount + roomsCount + eventCount,
|
|
62
77
|
edges: 0
|
|
63
|
-
}, { emitsCount, listenersCount, roomsCount });
|
|
78
|
+
}, { emitsCount, listenersCount, roomsCount, eventCount });
|
|
64
79
|
}
|
|
65
80
|
catch (error) {
|
|
66
|
-
|
|
81
|
+
logger.error('Analysis failed', { error });
|
|
67
82
|
return createErrorResult(error);
|
|
68
83
|
}
|
|
69
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Create event channel nodes and connect them to emits/listeners
|
|
87
|
+
*
|
|
88
|
+
* This runs AFTER all modules are analyzed, so all emit/listener nodes exist.
|
|
89
|
+
* Creates one socketio:event node per unique event name, then connects:
|
|
90
|
+
* - socketio:emit → EMITS_EVENT → socketio:event
|
|
91
|
+
* - socketio:event → LISTENED_BY → socketio:on
|
|
92
|
+
*/
|
|
93
|
+
async createEventChannels(graph, logger) {
|
|
94
|
+
try {
|
|
95
|
+
// Step 1: Get all emit and listener nodes
|
|
96
|
+
const allEmits = await graph.getAllNodes({ type: 'socketio:emit' });
|
|
97
|
+
const allListeners = await graph.getAllNodes({ type: 'socketio:on' });
|
|
98
|
+
logger.debug('Creating event channels', {
|
|
99
|
+
emits: allEmits.length,
|
|
100
|
+
listeners: allListeners.length
|
|
101
|
+
});
|
|
102
|
+
// Step 2: Extract unique event names
|
|
103
|
+
const eventNames = new Set();
|
|
104
|
+
for (const emit of allEmits) {
|
|
105
|
+
if (emit.event && typeof emit.event === 'string') {
|
|
106
|
+
eventNames.add(emit.event);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
for (const listener of allListeners) {
|
|
110
|
+
if (listener.event && typeof listener.event === 'string') {
|
|
111
|
+
eventNames.add(listener.event);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
logger.debug('Unique events found', { count: eventNames.size });
|
|
115
|
+
// Step 3: Create event channel node for each unique event
|
|
116
|
+
let createdCount = 0;
|
|
117
|
+
for (const eventName of eventNames) {
|
|
118
|
+
const eventNodeId = `socketio:event#${eventName}`;
|
|
119
|
+
// Create event channel node
|
|
120
|
+
const eventNode = {
|
|
121
|
+
id: eventNodeId,
|
|
122
|
+
type: 'socketio:event',
|
|
123
|
+
name: eventName,
|
|
124
|
+
event: eventName
|
|
125
|
+
};
|
|
126
|
+
await graph.addNode(eventNode);
|
|
127
|
+
createdCount++;
|
|
128
|
+
// Step 4: Connect all emits of this event to the channel
|
|
129
|
+
const matchingEmits = allEmits.filter(e => e.event === eventName);
|
|
130
|
+
for (const emit of matchingEmits) {
|
|
131
|
+
await graph.addEdge({
|
|
132
|
+
type: 'EMITS_EVENT',
|
|
133
|
+
src: emit.id,
|
|
134
|
+
dst: eventNodeId
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
// Step 5: Connect event channel to all listeners of this event
|
|
138
|
+
const matchingListeners = allListeners.filter(l => l.event === eventName);
|
|
139
|
+
for (const listener of matchingListeners) {
|
|
140
|
+
await graph.addEdge({
|
|
141
|
+
type: 'LISTENED_BY',
|
|
142
|
+
src: eventNodeId,
|
|
143
|
+
dst: listener.id
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
logger.debug('Created event channel', {
|
|
147
|
+
event: eventName,
|
|
148
|
+
emits: matchingEmits.length,
|
|
149
|
+
listeners: matchingListeners.length
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return createdCount;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
logger.error('Failed to create event channels', { error });
|
|
156
|
+
return 0;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
70
159
|
async analyzeModule(module, graph) {
|
|
71
160
|
try {
|
|
72
161
|
const code = readFileSync(module.file, 'utf-8');
|
|
@@ -97,8 +186,8 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
97
186
|
callee.property.name === 'emit') {
|
|
98
187
|
const objectName = this.getObjectName(callee.object);
|
|
99
188
|
const event = this.extractStringArg(node.arguments[0]);
|
|
100
|
-
const line = node
|
|
101
|
-
const column = node
|
|
189
|
+
const line = getLine(node);
|
|
190
|
+
const column = getColumn(node);
|
|
102
191
|
// io.to('room').emit() - room-based emit
|
|
103
192
|
let room = null;
|
|
104
193
|
if (callee.object.type === 'CallExpression' &&
|
|
@@ -138,7 +227,7 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
138
227
|
callee.property.name === 'on') {
|
|
139
228
|
const objectName = this.getObjectName(callee.object);
|
|
140
229
|
const event = this.extractStringArg(node.arguments[0]);
|
|
141
|
-
const line = node
|
|
230
|
+
const line = getLine(node);
|
|
142
231
|
const handler = node.arguments[1];
|
|
143
232
|
// Извлекаем имя handler функции
|
|
144
233
|
let handlerName = 'anonymous';
|
|
@@ -146,8 +235,8 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
146
235
|
if (handler) {
|
|
147
236
|
if (handler.type === 'FunctionExpression' ||
|
|
148
237
|
handler.type === 'ArrowFunctionExpression') {
|
|
149
|
-
handlerName = `anonymous:${handler
|
|
150
|
-
handlerLine = handler
|
|
238
|
+
handlerName = `anonymous:${getLine(handler)}`;
|
|
239
|
+
handlerLine = getLine(handler);
|
|
151
240
|
}
|
|
152
241
|
else if (handler.type === 'Identifier') {
|
|
153
242
|
handlerName = handler.name;
|
|
@@ -161,7 +250,8 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
161
250
|
handlerName: handlerName,
|
|
162
251
|
handlerLine: handlerLine,
|
|
163
252
|
file: module.file,
|
|
164
|
-
line: line
|
|
253
|
+
line: line,
|
|
254
|
+
column: getColumn(node)
|
|
165
255
|
});
|
|
166
256
|
}
|
|
167
257
|
// Pattern: socket.join(room)
|
|
@@ -170,7 +260,7 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
170
260
|
callee.property.name === 'join') {
|
|
171
261
|
const objectName = this.getObjectName(callee.object);
|
|
172
262
|
const roomName = this.extractStringArg(node.arguments[0]);
|
|
173
|
-
const line = node
|
|
263
|
+
const line = getLine(node);
|
|
174
264
|
if (objectName === 'socket') {
|
|
175
265
|
rooms.push({
|
|
176
266
|
id: `socketio:room#${roomName}#${module.file}#${line}`,
|
|
@@ -178,7 +268,8 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
178
268
|
room: roomName,
|
|
179
269
|
objectName: objectName,
|
|
180
270
|
file: module.file,
|
|
181
|
-
line: line
|
|
271
|
+
line: line,
|
|
272
|
+
column: getColumn(node)
|
|
182
273
|
});
|
|
183
274
|
}
|
|
184
275
|
}
|
|
@@ -202,14 +293,19 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
202
293
|
src: module.id,
|
|
203
294
|
dst: listener.id
|
|
204
295
|
});
|
|
205
|
-
//
|
|
206
|
-
const
|
|
207
|
-
|
|
296
|
+
// Find FUNCTION node for handler by name and file (supports both legacy and semantic IDs)
|
|
297
|
+
const handlerFunctions = await graph.getAllNodes({
|
|
298
|
+
type: 'FUNCTION',
|
|
299
|
+
name: listener.handlerName,
|
|
300
|
+
file: listener.file
|
|
301
|
+
});
|
|
302
|
+
// Find the handler at the matching line
|
|
303
|
+
const handlerFunction = handlerFunctions.find(fn => fn.line === listener.handlerLine);
|
|
208
304
|
if (handlerFunction) {
|
|
209
305
|
await graph.addEdge({
|
|
210
306
|
type: 'LISTENS_TO',
|
|
211
307
|
src: listener.id,
|
|
212
|
-
dst:
|
|
308
|
+
dst: handlerFunction.id
|
|
213
309
|
});
|
|
214
310
|
}
|
|
215
311
|
}
|
|
@@ -229,7 +325,7 @@ export class SocketIOAnalyzer extends Plugin {
|
|
|
229
325
|
};
|
|
230
326
|
}
|
|
231
327
|
catch (error) {
|
|
232
|
-
|
|
328
|
+
// Silent - per-module errors shouldn't spam logs
|
|
233
329
|
return { emits: 0, listeners: 0, rooms: 0 };
|
|
234
330
|
}
|
|
235
331
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SystemDbAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/plugins/analysis/SystemDbAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA2BhF,qBAAa,gBAAiB,SAAQ,MAAM;IAC1C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"SystemDbAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/plugins/analysis/SystemDbAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA2BhF,qBAAa,gBAAiB,SAAQ,MAAM;IAC1C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA4L5D;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAkB1B"}
|
|
@@ -29,13 +29,14 @@ export class SystemDbAnalyzer extends Plugin {
|
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
async execute(context) {
|
|
32
|
+
const logger = this.log(context);
|
|
32
33
|
try {
|
|
33
34
|
const { graph } = context;
|
|
34
35
|
let nodesCreated = 0;
|
|
35
36
|
let edgesCreated = 0;
|
|
36
37
|
// Get all MODULE nodes
|
|
37
38
|
const modules = await this.getModules(graph);
|
|
38
|
-
|
|
39
|
+
logger.info('Analyzing modules for system_db patterns', { count: modules.length });
|
|
39
40
|
for (const module of modules) {
|
|
40
41
|
if (!module.file)
|
|
41
42
|
continue;
|
|
@@ -114,7 +115,13 @@ export class SystemDbAnalyzer extends Plugin {
|
|
|
114
115
|
// Create SYSTEM_DB_VIEW_REGISTRATION nodes
|
|
115
116
|
for (const reg of registrations) {
|
|
116
117
|
const nodeId = `${module.file}:SYSTEM_DB_VIEW_REGISTRATION:${reg.viewName}:${reg.line}`;
|
|
117
|
-
|
|
118
|
+
logger.debug('Found registration', {
|
|
119
|
+
type: reg.type,
|
|
120
|
+
viewName: reg.viewName,
|
|
121
|
+
serverName: reg.serverName,
|
|
122
|
+
file: module.file.split('/').pop(),
|
|
123
|
+
line: reg.line
|
|
124
|
+
});
|
|
118
125
|
await graph.addNode({
|
|
119
126
|
id: nodeId,
|
|
120
127
|
type: 'SYSTEM_DB_VIEW_REGISTRATION',
|
|
@@ -160,15 +167,18 @@ export class SystemDbAnalyzer extends Plugin {
|
|
|
160
167
|
catch (err) {
|
|
161
168
|
// Skip files that can't be parsed
|
|
162
169
|
if (err.code !== 'ENOENT') {
|
|
163
|
-
|
|
170
|
+
logger.warn('Failed to analyze module', {
|
|
171
|
+
file: module.file,
|
|
172
|
+
error: err.message
|
|
173
|
+
});
|
|
164
174
|
}
|
|
165
175
|
}
|
|
166
176
|
}
|
|
167
|
-
|
|
177
|
+
logger.info('Analysis complete', { nodesCreated, edgesCreated });
|
|
168
178
|
return createSuccessResult({ nodes: nodesCreated, edges: edgesCreated }, { modulesAnalyzed: modules.length });
|
|
169
179
|
}
|
|
170
180
|
catch (error) {
|
|
171
|
-
|
|
181
|
+
logger.error('Analysis failed', { error });
|
|
172
182
|
return createErrorResult(error);
|
|
173
183
|
}
|
|
174
184
|
}
|
|
@@ -31,6 +31,69 @@ export declare class GraphBuilder {
|
|
|
31
31
|
build(module: ModuleNode, graph: GraphBackend, projectPath: string, data: ASTCollections): Promise<BuildResult>;
|
|
32
32
|
private bufferFunctionEdges;
|
|
33
33
|
private bufferScopeEdges;
|
|
34
|
+
/**
|
|
35
|
+
* Buffer LOOP edges (CONTAINS, HAS_BODY, ITERATES_OVER)
|
|
36
|
+
*
|
|
37
|
+
* Creates edges for:
|
|
38
|
+
* - Parent -> CONTAINS -> LOOP
|
|
39
|
+
* - LOOP -> HAS_BODY -> body SCOPE
|
|
40
|
+
* - LOOP -> ITERATES_OVER -> collection VARIABLE/PARAMETER (for for-in/for-of)
|
|
41
|
+
*
|
|
42
|
+
* Scope-aware variable lookup for ITERATES_OVER:
|
|
43
|
+
* For for-of/for-in, finds the iterated variable preferring:
|
|
44
|
+
* 1. Variables declared before the loop on same or earlier line (closest first)
|
|
45
|
+
* 2. Parameters (function arguments)
|
|
46
|
+
*/
|
|
47
|
+
private bufferLoopEdges;
|
|
48
|
+
/**
|
|
49
|
+
* Buffer HAS_CONDITION edges from LOOP to condition EXPRESSION/CALL nodes.
|
|
50
|
+
* Also creates EXPRESSION nodes for non-CallExpression conditions.
|
|
51
|
+
*
|
|
52
|
+
* REG-280: For while/do-while/for loops, creates HAS_CONDITION edge to the
|
|
53
|
+
* condition expression. For-in/for-of loops don't have conditions (use ITERATES_OVER).
|
|
54
|
+
*
|
|
55
|
+
* For CallExpression conditions, links to existing CALL_SITE node by coordinates.
|
|
56
|
+
*/
|
|
57
|
+
private bufferLoopConditionEdges;
|
|
58
|
+
/**
|
|
59
|
+
* Buffer EXPRESSION nodes for loop condition expressions (non-CallExpression).
|
|
60
|
+
* Similar to bufferDiscriminantExpressions but for loops.
|
|
61
|
+
*
|
|
62
|
+
* REG-280: Creates EXPRESSION nodes for while/do-while/for loop conditions.
|
|
63
|
+
* CallExpression conditions use existing CALL_SITE nodes (no EXPRESSION created).
|
|
64
|
+
*/
|
|
65
|
+
private bufferLoopConditionExpressions;
|
|
66
|
+
/**
|
|
67
|
+
* Buffer BRANCH edges (CONTAINS, HAS_CONDITION, HAS_CONSEQUENT, HAS_ALTERNATE)
|
|
68
|
+
*
|
|
69
|
+
* REG-275: For CallExpression discriminants (switch(getType())), looks up the
|
|
70
|
+
* actual CALL_SITE node by coordinates since the CALL_SITE uses semantic IDs.
|
|
71
|
+
*
|
|
72
|
+
* Phase 3 (REG-267): For if-branches, creates HAS_CONSEQUENT and HAS_ALTERNATE edges
|
|
73
|
+
* pointing to the if-body and else-body SCOPEs.
|
|
74
|
+
*/
|
|
75
|
+
private bufferBranchEdges;
|
|
76
|
+
/**
|
|
77
|
+
* Buffer CASE edges (HAS_CASE, HAS_DEFAULT)
|
|
78
|
+
*/
|
|
79
|
+
private bufferCaseEdges;
|
|
80
|
+
/**
|
|
81
|
+
* Buffer edges for TRY_BLOCK, CATCH_BLOCK, FINALLY_BLOCK nodes (Phase 4)
|
|
82
|
+
*
|
|
83
|
+
* Creates edges for:
|
|
84
|
+
* - Parent -> CONTAINS -> TRY_BLOCK
|
|
85
|
+
* - TRY_BLOCK -> HAS_CATCH -> CATCH_BLOCK
|
|
86
|
+
* - TRY_BLOCK -> HAS_FINALLY -> FINALLY_BLOCK
|
|
87
|
+
*/
|
|
88
|
+
private bufferTryCatchFinallyEdges;
|
|
89
|
+
/**
|
|
90
|
+
* Buffer EXPRESSION nodes for switch discriminants
|
|
91
|
+
* Uses stored metadata directly instead of parsing from ID (Linus improvement)
|
|
92
|
+
*
|
|
93
|
+
* REG-275: For CallExpression discriminants, we don't create nodes here since
|
|
94
|
+
* bufferBranchEdges links to the existing CALL_SITE node by coordinates.
|
|
95
|
+
*/
|
|
96
|
+
private bufferDiscriminantExpressions;
|
|
34
97
|
private bufferVariableEdges;
|
|
35
98
|
private bufferCallSiteEdges;
|
|
36
99
|
private bufferMethodCalls;
|
|
@@ -47,6 +110,10 @@ export declare class GraphBuilder {
|
|
|
47
110
|
private bufferArgumentEdges;
|
|
48
111
|
/**
|
|
49
112
|
* Buffer INTERFACE nodes and EXTENDS edges
|
|
113
|
+
*
|
|
114
|
+
* Uses two-pass approach:
|
|
115
|
+
* 1. First pass: create all interface nodes, store in Map
|
|
116
|
+
* 2. Second pass: create EXTENDS edges using stored node IDs
|
|
50
117
|
*/
|
|
51
118
|
private bufferInterfaceNodes;
|
|
52
119
|
/**
|
|
@@ -55,6 +122,7 @@ export declare class GraphBuilder {
|
|
|
55
122
|
private bufferTypeAliasNodes;
|
|
56
123
|
/**
|
|
57
124
|
* Buffer ENUM nodes
|
|
125
|
+
* Uses EnumNode.create() to ensure consistent ID format (colon separator)
|
|
58
126
|
*/
|
|
59
127
|
private bufferEnumNodes;
|
|
60
128
|
/**
|
|
@@ -66,12 +134,147 @@ export declare class GraphBuilder {
|
|
|
66
134
|
*/
|
|
67
135
|
private bufferImplementsEdges;
|
|
68
136
|
/**
|
|
69
|
-
*
|
|
137
|
+
* Buffer FLOWS_INTO edges for array mutations (push, unshift, splice, indexed assignment)
|
|
138
|
+
* Creates edges from inserted values to the array variable
|
|
139
|
+
*
|
|
140
|
+
* REG-117: Now handles nested mutations like obj.arr.push(item):
|
|
141
|
+
* - For nested mutations, falls back to base object if array property not found
|
|
142
|
+
* - Adds nestedProperty metadata for tracking
|
|
143
|
+
*
|
|
144
|
+
* OPTIMIZED: Uses Map-based lookup cache for O(1) variable lookups instead of O(n) find()
|
|
70
145
|
*/
|
|
71
|
-
private
|
|
146
|
+
private bufferArrayMutationEdges;
|
|
147
|
+
/**
|
|
148
|
+
* Buffer FLOWS_INTO edges for object mutations (property assignment, Object.assign)
|
|
149
|
+
* Creates edges from source values to the object variable being mutated.
|
|
150
|
+
*
|
|
151
|
+
* REG-152: For 'this.prop = value' patterns inside classes, creates edges
|
|
152
|
+
* to the CLASS node with mutationType: 'this_property'.
|
|
153
|
+
*/
|
|
154
|
+
private bufferObjectMutationEdges;
|
|
155
|
+
/**
|
|
156
|
+
* Resolve variable by name using scope chain lookup (REG-309).
|
|
157
|
+
* Mirrors JavaScript lexical scoping: search current scope, then parent, then grandparent, etc.
|
|
158
|
+
*
|
|
159
|
+
* @param name - Variable name
|
|
160
|
+
* @param scopePath - Scope path where reference occurs (from ScopeTracker)
|
|
161
|
+
* @param file - File path
|
|
162
|
+
* @param variables - All variable declarations
|
|
163
|
+
* @returns Variable declaration or null if not found
|
|
164
|
+
*/
|
|
165
|
+
private resolveVariableInScope;
|
|
166
|
+
/**
|
|
167
|
+
* Resolve parameter by name using scope chain lookup (REG-309).
|
|
168
|
+
* Same semantics as resolveVariableInScope but for parameters.
|
|
169
|
+
*
|
|
170
|
+
* @param name - Parameter name
|
|
171
|
+
* @param scopePath - Scope path where reference occurs (from ScopeTracker)
|
|
172
|
+
* @param file - File path
|
|
173
|
+
* @param parameters - All parameter declarations
|
|
174
|
+
* @returns Parameter declaration or null if not found
|
|
175
|
+
*/
|
|
176
|
+
private resolveParameterInScope;
|
|
72
177
|
/**
|
|
73
|
-
*
|
|
178
|
+
* Check if two scope paths match (REG-309).
|
|
179
|
+
* Handles: ['foo', 'if#0'] vs ['foo', 'if#0']
|
|
74
180
|
*/
|
|
75
|
-
private
|
|
181
|
+
private scopePathsMatch;
|
|
182
|
+
/**
|
|
183
|
+
* Buffer FLOWS_INTO edges for variable reassignments.
|
|
184
|
+
* Handles: x = y, x += y (when x is already declared, not initialization)
|
|
185
|
+
*
|
|
186
|
+
* Edge patterns:
|
|
187
|
+
* - Simple assignment (=): source --FLOWS_INTO--> variable
|
|
188
|
+
* - Compound operators (+=, -=, etc.):
|
|
189
|
+
* - source --FLOWS_INTO--> variable (write new value)
|
|
190
|
+
* - variable --READS_FROM--> variable (self-loop: reads current value before write)
|
|
191
|
+
*
|
|
192
|
+
* REG-309: Uses scope-aware variable lookup via resolveVariableInScope().
|
|
193
|
+
*
|
|
194
|
+
* REG-290: Complete implementation with inline node creation (no continue statements).
|
|
195
|
+
*/
|
|
196
|
+
private bufferVariableReassignmentEdges;
|
|
197
|
+
/**
|
|
198
|
+
* Buffer RETURNS edges connecting return expressions to their containing functions.
|
|
199
|
+
*
|
|
200
|
+
* Edge direction: returnExpression --RETURNS--> function
|
|
201
|
+
*
|
|
202
|
+
* This enables tracing data flow through function calls:
|
|
203
|
+
* - Query: "What does formatDate return?"
|
|
204
|
+
* - Answer: Follow RETURNS edges from function to see all possible return values
|
|
205
|
+
*/
|
|
206
|
+
private bufferReturnEdges;
|
|
207
|
+
/**
|
|
208
|
+
* Buffer UPDATE_EXPRESSION nodes and edges for increment/decrement operations.
|
|
209
|
+
*
|
|
210
|
+
* Handles two target types:
|
|
211
|
+
* - IDENTIFIER: Simple variable (i++, --count)
|
|
212
|
+
* - MEMBER_EXPRESSION: Object property (obj.prop++, arr[i]++, this.count++)
|
|
213
|
+
*
|
|
214
|
+
* Creates:
|
|
215
|
+
* - UPDATE_EXPRESSION node with operator and target metadata
|
|
216
|
+
* - MODIFIES edge: UPDATE_EXPRESSION -> target (VARIABLE, PARAMETER, or CLASS)
|
|
217
|
+
* - READS_FROM self-loop: target -> target (reads current value before update)
|
|
218
|
+
* - CONTAINS edge: SCOPE -> UPDATE_EXPRESSION
|
|
219
|
+
*
|
|
220
|
+
* REG-288: Initial implementation for IDENTIFIER targets
|
|
221
|
+
* REG-312: Extended for MEMBER_EXPRESSION targets
|
|
222
|
+
*/
|
|
223
|
+
private bufferUpdateExpressionEdges;
|
|
224
|
+
/**
|
|
225
|
+
* Buffer UPDATE_EXPRESSION node and edges for simple identifier updates (i++, --count)
|
|
226
|
+
* REG-288: Original implementation extracted for clarity
|
|
227
|
+
*/
|
|
228
|
+
private bufferIdentifierUpdate;
|
|
229
|
+
/**
|
|
230
|
+
* Buffer UPDATE_EXPRESSION node and edges for member expression updates (obj.prop++, arr[i]++)
|
|
231
|
+
* REG-312: New implementation for member expression targets
|
|
232
|
+
*
|
|
233
|
+
* Creates:
|
|
234
|
+
* - UPDATE_EXPRESSION node with member expression metadata
|
|
235
|
+
* - MODIFIES edge: UPDATE_EXPRESSION -> VARIABLE(object) or CLASS (for this.prop++)
|
|
236
|
+
* - READS_FROM self-loop: VARIABLE(object) -> VARIABLE(object)
|
|
237
|
+
* - CONTAINS edge: SCOPE -> UPDATE_EXPRESSION
|
|
238
|
+
*/
|
|
239
|
+
private bufferMemberExpressionUpdate;
|
|
240
|
+
/**
|
|
241
|
+
* Buffer RESOLVES_TO edges for Promise resolution data flow (REG-334).
|
|
242
|
+
*
|
|
243
|
+
* Links resolve/reject CALL nodes to their parent Promise CONSTRUCTOR_CALL.
|
|
244
|
+
* This enables traceValues to follow Promise data flow:
|
|
245
|
+
*
|
|
246
|
+
* Example:
|
|
247
|
+
* ```
|
|
248
|
+
* const result = new Promise((resolve) => {
|
|
249
|
+
* resolve(42); // CALL[resolve] --RESOLVES_TO--> CONSTRUCTOR_CALL[Promise]
|
|
250
|
+
* });
|
|
251
|
+
* ```
|
|
252
|
+
*
|
|
253
|
+
* The edge direction (CALL -> CONSTRUCTOR_CALL) matches data flow semantics:
|
|
254
|
+
* data flows FROM resolve(value) TO the Promise result.
|
|
255
|
+
*/
|
|
256
|
+
private bufferPromiseResolutionEdges;
|
|
257
|
+
/**
|
|
258
|
+
* Buffer OBJECT_LITERAL nodes to the graph.
|
|
259
|
+
* These are object literals passed as function arguments or nested in other literals.
|
|
260
|
+
*/
|
|
261
|
+
private bufferObjectLiteralNodes;
|
|
262
|
+
/**
|
|
263
|
+
* Buffer ARRAY_LITERAL nodes to the graph.
|
|
264
|
+
* These are array literals passed as function arguments or nested in other literals.
|
|
265
|
+
*/
|
|
266
|
+
private bufferArrayLiteralNodes;
|
|
267
|
+
/**
|
|
268
|
+
* Buffer HAS_PROPERTY edges connecting OBJECT_LITERAL nodes to their property values.
|
|
269
|
+
* Creates edges from object literal to its property value nodes (LITERAL, nested OBJECT_LITERAL, ARRAY_LITERAL, etc.)
|
|
270
|
+
*
|
|
271
|
+
* REG-329: Adds scope-aware variable resolution for VARIABLE property values.
|
|
272
|
+
* Uses the same resolveVariableInScope infrastructure as mutation handlers.
|
|
273
|
+
*/
|
|
274
|
+
private bufferObjectPropertyEdges;
|
|
275
|
+
/**
|
|
276
|
+
* Handle CLASS ASSIGNED_FROM edges asynchronously (needs graph queries)
|
|
277
|
+
*/
|
|
278
|
+
private createClassAssignmentEdges;
|
|
76
279
|
}
|
|
77
280
|
//# sourceMappingURL=GraphBuilder.d.ts.map
|