@grafema/core 0.1.0-alpha.5 → 0.1.1-alpha
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 +24 -2
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +197 -24
- package/dist/config/ConfigLoader.d.ts +72 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +187 -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/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 +225 -17
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +208 -18
- 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 +41 -0
- package/dist/core/nodes/CallSiteNode.d.ts +28 -0
- package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
- package/dist/core/nodes/CallSiteNode.js +46 -0
- package/dist/core/nodes/ClassNode.d.ts +33 -1
- package/dist/core/nodes/ClassNode.d.ts.map +1 -1
- package/dist/core/nodes/ClassNode.js +46 -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 +62 -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 +54 -0
- package/dist/core/nodes/ExportNode.d.ts +37 -1
- package/dist/core/nodes/ExportNode.d.ts.map +1 -1
- package/dist/core/nodes/ExportNode.js +48 -2
- 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 +178 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts +28 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
- package/dist/core/nodes/ExternalModuleNode.js +41 -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/ImportNode.d.ts +19 -5
- package/dist/core/nodes/ImportNode.d.ts.map +1 -1
- package/dist/core/nodes/ImportNode.js +23 -5
- 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 +55 -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/MethodCallNode.d.ts +30 -0
- package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodCallNode.js +49 -0
- package/dist/core/nodes/MethodNode.d.ts +32 -0
- package/dist/core/nodes/MethodNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodNode.js +48 -0
- 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 +41 -0
- 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 +53 -0
- package/dist/core/nodes/VariableDeclarationNode.d.ts +27 -0
- package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
- package/dist/core/nodes/VariableDeclarationNode.js +40 -0
- package/dist/core/nodes/index.d.ts +12 -1
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +14 -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 +77 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.js +159 -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 +118 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -0
- package/dist/errors/GrafemaError.js +131 -0
- package/dist/index.d.ts +57 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -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 +13 -6
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +27 -19
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +21 -14
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +1 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +34 -14
- 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 +180 -17
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +1171 -471
- 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 +15 -10
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +9 -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.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +27 -15
- 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 +34 -4
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +318 -298
- 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 +176 -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 +9 -4
- 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 +99 -9
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +663 -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 +4 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +128 -63
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +11 -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 +4 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +17 -13
- 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 +136 -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 +14 -8
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +14 -7
- 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 +18 -12
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +8 -3
- 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 +17 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +129 -10
- 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.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +63 -31
- package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +5 -4
- 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/CallResolverValidator.d.ts.map +1 -1
- package/dist/plugins/validation/CallResolverValidator.js +8 -7
- package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
- package/dist/plugins/validation/DataFlowValidator.js +17 -12
- 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 +19 -23
- 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 +59 -16
- 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/storage/backends/RFDBServerBackend.d.ts +10 -17
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +31 -10
- 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 +237 -24
- package/src/config/ConfigLoader.ts +263 -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/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 +401 -18
- 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 +65 -0
- package/src/core/nodes/CallSiteNode.ts +58 -0
- package/src/core/nodes/ClassNode.ts +63 -2
- package/src/core/nodes/DecoratorNode.ts +91 -0
- package/src/core/nodes/EnumNode.ts +86 -0
- package/src/core/nodes/ExportNode.ts +70 -2
- package/src/core/nodes/ExpressionNode.ts +231 -0
- package/src/core/nodes/ExternalModuleNode.ts +56 -0
- package/src/core/nodes/ExternalStdioNode.ts +17 -9
- package/src/core/nodes/FunctionNode.ts +101 -1
- package/src/core/nodes/ImportNode.ts +32 -10
- package/src/core/nodes/InterfaceNode.ts +91 -0
- package/src/core/nodes/IssueNode.ts +177 -0
- package/src/core/nodes/MethodCallNode.ts +64 -0
- package/src/core/nodes/MethodNode.ts +63 -0
- package/src/core/nodes/ModuleNode.ts +50 -0
- package/src/core/nodes/NetworkRequestNode.ts +77 -0
- package/src/core/nodes/ObjectLiteralNode.ts +65 -0
- package/src/core/nodes/ScopeNode.ts +65 -0
- package/src/core/nodes/TypeNode.ts +78 -0
- package/src/core/nodes/VariableDeclarationNode.ts +52 -0
- package/src/core/nodes/index.ts +18 -1
- package/src/diagnostics/DiagnosticCollector.ts +163 -0
- package/src/diagnostics/DiagnosticReporter.ts +204 -0
- package/src/diagnostics/DiagnosticWriter.ts +50 -0
- package/src/diagnostics/index.ts +16 -0
- package/src/errors/GrafemaError.ts +174 -0
- package/src/index.ts +148 -1
- package/src/logging/Logger.ts +152 -0
- package/src/plugins/Plugin.ts +42 -0
- package/src/plugins/analysis/DatabaseAnalyzer.ts +14 -8
- package/src/plugins/analysis/ExpressAnalyzer.ts +29 -19
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +22 -21
- package/src/plugins/analysis/FetchAnalyzer.ts +39 -16
- package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
- package/src/plugins/analysis/JSASTAnalyzer.ts +1483 -503
- package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
- package/src/plugins/analysis/RustAnalyzer.ts +15 -10
- package/src/plugins/analysis/SQLiteAnalyzer.ts +10 -7
- package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
- package/src/plugins/analysis/SocketIOAnalyzer.ts +31 -22
- package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
- package/src/plugins/analysis/ast/GraphBuilder.ts +439 -327
- package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
- package/src/plugins/analysis/ast/types.ts +209 -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 +11 -8
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +909 -83
- package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +159 -93
- package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +12 -8
- package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +37 -17
- package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
- package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
- package/src/plugins/discovery/WorkspaceDiscovery.ts +177 -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 +14 -8
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +14 -7
- package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
- package/src/plugins/enrichment/MethodCallResolver.ts +18 -12
- package/src/plugins/enrichment/MountPointResolver.ts +8 -3
- package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
- package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +149 -12
- package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
- package/src/plugins/indexing/JSModuleIndexer.ts +74 -34
- package/src/plugins/indexing/RustModuleIndexer.ts +5 -4
- package/src/plugins/validation/CallResolverValidator.ts +8 -7
- package/src/plugins/validation/DataFlowValidator.ts +16 -12
- package/src/plugins/validation/EvalBanValidator.ts +17 -16
- package/src/plugins/validation/GraphConnectivityValidator.ts +19 -23
- package/src/plugins/validation/NodeCreationValidator.ts +554 -0
- package/src/plugins/validation/SQLInjectionValidator.ts +61 -15
- 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/storage/backends/RFDBServerBackend.ts +43 -29
- 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
|
@@ -68,7 +68,6 @@ interface VersionAwareGraph extends GraphBackend {
|
|
|
68
68
|
version: string,
|
|
69
69
|
filter: { file: string }
|
|
70
70
|
): Promise<VersionedNode[]>;
|
|
71
|
-
getNodesByStableId(stableId: string): Promise<VersionedNode[]>;
|
|
72
71
|
}
|
|
73
72
|
|
|
74
73
|
export class IncrementalAnalysisPlugin extends Plugin {
|
|
@@ -88,26 +87,29 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
88
87
|
}
|
|
89
88
|
|
|
90
89
|
async initialize(context: PluginContext): Promise<void> {
|
|
91
|
-
|
|
90
|
+
const logger = this.log(context);
|
|
91
|
+
// Initialize VCS plugin
|
|
92
92
|
const manifest = context.manifest as AnalysisManifest | undefined;
|
|
93
93
|
this.vcsPlugin = await VCSPluginFactory.detect({
|
|
94
94
|
rootPath: manifest?.projectPath
|
|
95
|
-
});
|
|
95
|
+
}, logger);
|
|
96
96
|
|
|
97
97
|
if (!this.vcsPlugin) {
|
|
98
|
-
|
|
98
|
+
logger.warn('No VCS detected, skipping incremental analysis');
|
|
99
99
|
} else {
|
|
100
|
-
|
|
100
|
+
logger.info('VCS detected', { vcs: this.vcsPlugin.metadata.name });
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
async execute(context: PluginContext): Promise<PluginResult> {
|
|
105
|
+
const logger = this.log(context);
|
|
106
|
+
|
|
105
107
|
try {
|
|
106
108
|
const { graph } = context;
|
|
107
109
|
const manifest = context.manifest as AnalysisManifest | undefined;
|
|
108
110
|
const projectPath = manifest?.projectPath ?? '';
|
|
109
111
|
|
|
110
|
-
//
|
|
112
|
+
// Skip if no VCS detected
|
|
111
113
|
if (!this.vcsPlugin) {
|
|
112
114
|
return createSuccessResult(
|
|
113
115
|
{ nodes: 0, edges: 0 },
|
|
@@ -118,10 +120,10 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
118
120
|
);
|
|
119
121
|
}
|
|
120
122
|
|
|
121
|
-
//
|
|
123
|
+
// Check for uncommitted changes
|
|
122
124
|
const hasChanges = await this.vcsPlugin.hasUncommittedChanges();
|
|
123
125
|
if (!hasChanges) {
|
|
124
|
-
|
|
126
|
+
logger.info('No uncommitted changes detected');
|
|
125
127
|
return createSuccessResult(
|
|
126
128
|
{ nodes: 0, edges: 0 },
|
|
127
129
|
{
|
|
@@ -131,12 +133,9 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
131
133
|
);
|
|
132
134
|
}
|
|
133
135
|
|
|
134
|
-
//
|
|
136
|
+
// Get list of changed files
|
|
135
137
|
const changedFiles = (await this.vcsPlugin.getChangedFiles()) as ChangedFileInfo[];
|
|
136
|
-
|
|
137
|
-
`[IncrementalAnalysis] All changed files:`,
|
|
138
|
-
changedFiles.map(f => f.path)
|
|
139
|
-
);
|
|
138
|
+
logger.debug('Changed files detected', { count: changedFiles.length, files: changedFiles.map(f => f.path) });
|
|
140
139
|
|
|
141
140
|
const jsFiles = changedFiles.filter(
|
|
142
141
|
file =>
|
|
@@ -144,7 +143,7 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
144
143
|
);
|
|
145
144
|
|
|
146
145
|
if (jsFiles.length === 0) {
|
|
147
|
-
|
|
146
|
+
logger.info('No JavaScript files changed');
|
|
148
147
|
return createSuccessResult(
|
|
149
148
|
{ nodes: 0, edges: 0 },
|
|
150
149
|
{
|
|
@@ -154,28 +153,27 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
154
153
|
);
|
|
155
154
|
}
|
|
156
155
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
156
|
+
logger.info('Processing changed JS files', { count: jsFiles.length });
|
|
157
|
+
for (const f of jsFiles) {
|
|
158
|
+
logger.debug('Changed file', { path: f.path, status: f.status });
|
|
159
|
+
}
|
|
161
160
|
|
|
162
161
|
let totalNodesCreated = 0;
|
|
163
162
|
let totalEdgesCreated = 0;
|
|
164
163
|
|
|
165
|
-
//
|
|
164
|
+
// Process each changed file
|
|
166
165
|
for (const fileInfo of jsFiles) {
|
|
167
166
|
const result = await this.processChangedFile(
|
|
168
167
|
fileInfo,
|
|
169
168
|
projectPath,
|
|
170
|
-
graph as unknown as VersionAwareGraph
|
|
169
|
+
graph as unknown as VersionAwareGraph,
|
|
170
|
+
logger
|
|
171
171
|
);
|
|
172
172
|
totalNodesCreated += result.nodesCreated;
|
|
173
173
|
totalEdgesCreated += result.edgesCreated;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
|
|
177
|
-
`[IncrementalAnalysis] Created ${totalNodesCreated} __local nodes, ${totalEdgesCreated} edges`
|
|
178
|
-
);
|
|
176
|
+
logger.info('Incremental analysis complete', { nodesCreated: totalNodesCreated, edgesCreated: totalEdgesCreated });
|
|
179
177
|
|
|
180
178
|
return createSuccessResult(
|
|
181
179
|
{ nodes: totalNodesCreated, edges: totalEdgesCreated },
|
|
@@ -185,37 +183,41 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
185
183
|
}
|
|
186
184
|
);
|
|
187
185
|
} catch (error) {
|
|
188
|
-
|
|
186
|
+
logger.error('Incremental analysis failed', { error: error instanceof Error ? error.message : String(error) });
|
|
189
187
|
return createErrorResult(error as Error);
|
|
190
188
|
}
|
|
191
189
|
}
|
|
192
190
|
|
|
193
191
|
/**
|
|
194
|
-
*
|
|
192
|
+
* Process a single changed file
|
|
195
193
|
*/
|
|
196
194
|
private async processChangedFile(
|
|
197
195
|
fileInfo: ChangedFileInfo,
|
|
198
196
|
projectPath: string,
|
|
199
|
-
graph: VersionAwareGraph
|
|
197
|
+
graph: VersionAwareGraph,
|
|
198
|
+
logger: ReturnType<typeof this.log>
|
|
200
199
|
): Promise<{ nodesCreated: number; edgesCreated: number }> {
|
|
201
200
|
const { path: relativePath, status } = fileInfo;
|
|
202
|
-
// relativePath
|
|
201
|
+
// relativePath can start with / or be relative
|
|
203
202
|
const fullPath = relativePath.startsWith('/') ? relativePath : `${projectPath}/${relativePath}`;
|
|
204
203
|
|
|
205
|
-
|
|
204
|
+
logger.debug('Processing file', { path: relativePath, status });
|
|
206
205
|
|
|
207
|
-
//
|
|
206
|
+
// If file is deleted - do nothing (main version remains, no __local)
|
|
208
207
|
if (status === 'deleted') {
|
|
209
|
-
|
|
208
|
+
logger.debug('File deleted, keeping main version only');
|
|
210
209
|
return { nodesCreated: 0, edgesCreated: 0 };
|
|
211
210
|
}
|
|
212
211
|
|
|
213
|
-
//
|
|
214
|
-
const result = await this.finegrainedMerge(fullPath, graph);
|
|
212
|
+
// Execute fine-grained merge
|
|
213
|
+
const result = await this.finegrainedMerge(fullPath, graph, logger);
|
|
215
214
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
215
|
+
logger.debug('Merge result', {
|
|
216
|
+
added: result.added,
|
|
217
|
+
modified: result.modified,
|
|
218
|
+
unchanged: result.unchanged,
|
|
219
|
+
deleted: result.deleted
|
|
220
|
+
});
|
|
219
221
|
|
|
220
222
|
return {
|
|
221
223
|
nodesCreated: result.added + result.modified,
|
|
@@ -224,11 +226,12 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
224
226
|
}
|
|
225
227
|
|
|
226
228
|
/**
|
|
227
|
-
* Fine-grained merge -
|
|
229
|
+
* Fine-grained merge - key function for incremental analysis
|
|
228
230
|
*/
|
|
229
231
|
private async finegrainedMerge(
|
|
230
232
|
filePath: string,
|
|
231
|
-
graph: VersionAwareGraph
|
|
233
|
+
graph: VersionAwareGraph,
|
|
234
|
+
logger: ReturnType<typeof this.log>
|
|
232
235
|
): Promise<{
|
|
233
236
|
added: number;
|
|
234
237
|
modified: number;
|
|
@@ -236,13 +239,13 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
236
239
|
deleted: number;
|
|
237
240
|
edgesCreated: number;
|
|
238
241
|
}> {
|
|
239
|
-
// 1.
|
|
242
|
+
// 1. Parse new file content
|
|
240
243
|
const newContent = await readFile(filePath, 'utf-8');
|
|
241
244
|
const newNodes = await this.extractTopLevelNodes(newContent, filePath);
|
|
242
245
|
|
|
243
|
-
|
|
246
|
+
logger.debug('Parsed new content', { nodesCount: newNodes.length });
|
|
244
247
|
|
|
245
|
-
// 2.
|
|
248
|
+
// 2. Get existing main nodes for this file
|
|
246
249
|
const mainNodes = await graph.getNodesByVersion('main', {
|
|
247
250
|
file: filePath
|
|
248
251
|
});
|
|
@@ -251,25 +254,28 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
251
254
|
['FUNCTION', 'CLASS', 'VARIABLE_DECLARATION', 'MODULE'].includes(node.type!)
|
|
252
255
|
);
|
|
253
256
|
|
|
254
|
-
|
|
257
|
+
logger.debug('Existing main nodes', { count: mainTopLevel.length });
|
|
255
258
|
|
|
256
|
-
// 3.
|
|
259
|
+
// 3. Classify changes
|
|
257
260
|
const changes = versionManager.classifyChanges(mainTopLevel, newNodes);
|
|
258
261
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
+
logger.debug('Change classification', {
|
|
263
|
+
added: changes.added.length,
|
|
264
|
+
modified: changes.modified.length,
|
|
265
|
+
unchanged: changes.unchanged.length,
|
|
266
|
+
deleted: changes.deleted.length
|
|
267
|
+
});
|
|
262
268
|
|
|
263
|
-
// 4.
|
|
269
|
+
// 4. Create __local versions for added/modified nodes
|
|
264
270
|
let edgesCreated = 0;
|
|
265
271
|
|
|
266
|
-
// 4a. ADDED nodes -
|
|
272
|
+
// 4a. ADDED nodes - create with __local version
|
|
267
273
|
for (const node of changes.added) {
|
|
268
274
|
const enrichedNode = versionManager.enrichNodeWithVersion(node, '__local');
|
|
269
275
|
await graph.addNode(enrichedNode as unknown as NodeRecord);
|
|
270
276
|
}
|
|
271
277
|
|
|
272
|
-
// 4b. MODIFIED nodes -
|
|
278
|
+
// 4b. MODIFIED nodes - create __local version + REPLACES edge
|
|
273
279
|
for (const { old: oldNode, new: newNode } of changes.modified) {
|
|
274
280
|
const mainNodeId = versionManager.generateVersionedId(oldNode, 'main');
|
|
275
281
|
const enrichedNode = versionManager.enrichNodeWithVersion(newNode, '__local', {
|
|
@@ -278,9 +284,9 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
278
284
|
|
|
279
285
|
await graph.addNode(enrichedNode as unknown as NodeRecord);
|
|
280
286
|
|
|
281
|
-
//
|
|
287
|
+
// Create REPLACES edge
|
|
282
288
|
const replacesEdge = versionManager.createReplacesEdge(enrichedNode.id!, mainNodeId);
|
|
283
|
-
|
|
289
|
+
logger.debug('Node replacement', { name: newNode.name, from: enrichedNode.id, to: mainNodeId });
|
|
284
290
|
await graph.addEdge({
|
|
285
291
|
type: replacesEdge.type,
|
|
286
292
|
src: replacesEdge.fromId,
|
|
@@ -289,14 +295,14 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
289
295
|
edgesCreated++;
|
|
290
296
|
}
|
|
291
297
|
|
|
292
|
-
// 4c. UNCHANGED nodes -
|
|
293
|
-
// 4d. DELETED nodes -
|
|
298
|
+
// 4c. UNCHANGED nodes - no __local version (main is used)
|
|
299
|
+
// 4d. DELETED nodes - no __local version (main remains, showing what was deleted)
|
|
294
300
|
|
|
295
|
-
// 5.
|
|
301
|
+
// 5. Reanalyze changed nodes to create relationships (CALLS, USES)
|
|
296
302
|
const nodesToReanalyze = [...changes.added, ...changes.modified.map(m => m.new)];
|
|
297
303
|
|
|
298
304
|
if (nodesToReanalyze.length > 0) {
|
|
299
|
-
const reanalyzeResult = await this.reanalyzeNodes(nodesToReanalyze, filePath, '__local', graph);
|
|
305
|
+
const reanalyzeResult = await this.reanalyzeNodes(nodesToReanalyze, filePath, '__local', graph, logger);
|
|
300
306
|
edgesCreated += reanalyzeResult.edgesCreated;
|
|
301
307
|
}
|
|
302
308
|
|
|
@@ -434,8 +440,8 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
434
440
|
}
|
|
435
441
|
}
|
|
436
442
|
});
|
|
437
|
-
} catch
|
|
438
|
-
|
|
443
|
+
} catch {
|
|
444
|
+
// Parse error - return empty nodes array
|
|
439
445
|
}
|
|
440
446
|
|
|
441
447
|
return nodes;
|
|
@@ -480,27 +486,28 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
480
486
|
}
|
|
481
487
|
|
|
482
488
|
/**
|
|
483
|
-
*
|
|
489
|
+
* Reanalyze nodes to create CALLS/USES edges
|
|
484
490
|
*/
|
|
485
491
|
private async reanalyzeNodes(
|
|
486
492
|
nodes: VersionedNode[],
|
|
487
493
|
filePath: string,
|
|
488
494
|
version: string,
|
|
489
|
-
graph: VersionAwareGraph
|
|
495
|
+
graph: VersionAwareGraph,
|
|
496
|
+
logger: ReturnType<typeof this.log>
|
|
490
497
|
): Promise<{ edgesCreated: number }> {
|
|
491
498
|
let edgesCreated = 0;
|
|
492
499
|
|
|
493
500
|
try {
|
|
494
|
-
//
|
|
501
|
+
// Read file again
|
|
495
502
|
const content = await readFile(filePath, 'utf-8');
|
|
496
503
|
|
|
497
|
-
//
|
|
504
|
+
// Parse AST
|
|
498
505
|
const ast = parse(content, {
|
|
499
506
|
sourceType: 'module',
|
|
500
507
|
plugins: ['jsx', 'typescript', 'decorators-legacy'] as ParserPlugin[]
|
|
501
508
|
});
|
|
502
509
|
|
|
503
|
-
//
|
|
510
|
+
// For each node, find it in AST and analyze
|
|
504
511
|
for (const node of nodes) {
|
|
505
512
|
if (node.type === 'FUNCTION') {
|
|
506
513
|
const functionEdges = await this.analyzeFunctionCalls(node, ast, version, graph);
|
|
@@ -511,11 +518,11 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
511
518
|
}
|
|
512
519
|
}
|
|
513
520
|
|
|
514
|
-
|
|
521
|
+
logger.debug('Reanalyzed nodes', { nodesCount: nodes.length, edgesCreated });
|
|
515
522
|
|
|
516
523
|
return { edgesCreated };
|
|
517
|
-
} catch
|
|
518
|
-
|
|
524
|
+
} catch {
|
|
525
|
+
// Error reanalyzing nodes - silently return empty result
|
|
519
526
|
return { edgesCreated: 0 };
|
|
520
527
|
}
|
|
521
528
|
}
|
|
@@ -617,12 +624,12 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
617
624
|
const calleeName = callSite.callee.split('.')[0]; // Для method calls берём объект
|
|
618
625
|
const calleeStableId = `FUNCTION:${calleeName}:${functionNode.file}`;
|
|
619
626
|
|
|
620
|
-
//
|
|
627
|
+
// Find callee and create edge
|
|
621
628
|
try {
|
|
622
629
|
const created = await this.findCalleeAndCreateEdge(callerId, calleeStableId, version, graph);
|
|
623
630
|
if (created) edgesCreated++;
|
|
624
|
-
} catch
|
|
625
|
-
|
|
631
|
+
} catch {
|
|
632
|
+
// Error creating CALLS edge - skip silently
|
|
626
633
|
}
|
|
627
634
|
}
|
|
628
635
|
|
|
@@ -631,43 +638,19 @@ export class IncrementalAnalysisPlugin extends Plugin {
|
|
|
631
638
|
|
|
632
639
|
/**
|
|
633
640
|
* Найти callee и создать CALLS edge
|
|
641
|
+
* TODO: Implement using existing graph.queryNodes() method
|
|
642
|
+
* This method was disabled as part of stableId removal (REG-140).
|
|
643
|
+
* The getNodesByStableId method never existed on GraphBackend.
|
|
634
644
|
*/
|
|
645
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
635
646
|
private async findCalleeAndCreateEdge(
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
647
|
+
_callerId: string,
|
|
648
|
+
_calleeStableId: string,
|
|
649
|
+
_version: string,
|
|
650
|
+
_graph: VersionAwareGraph
|
|
640
651
|
): Promise<boolean> {
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
const calleeVersions = await graph.getNodesByStableId(calleeStableId);
|
|
644
|
-
|
|
645
|
-
if (calleeVersions.length === 0) {
|
|
646
|
-
// Callee не найден - возможно это external функция
|
|
647
|
-
return false;
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
// Предпочитаем __local версию, если есть
|
|
651
|
-
const calleeNode =
|
|
652
|
-
calleeVersions.find(n => n.version === '__local') ||
|
|
653
|
-
calleeVersions.find(n => n.version === 'main');
|
|
654
|
-
|
|
655
|
-
if (!calleeNode) {
|
|
656
|
-
return false;
|
|
657
|
-
}
|
|
658
|
-
|
|
659
|
-
// Создаём CALLS edge
|
|
660
|
-
await graph.addEdge({
|
|
661
|
-
type: 'CALLS',
|
|
662
|
-
src: callerId,
|
|
663
|
-
dst: calleeNode.id!
|
|
664
|
-
});
|
|
665
|
-
|
|
666
|
-
return true;
|
|
667
|
-
} catch (error) {
|
|
668
|
-
console.error(`[IncrementalAnalysis] Error finding callee:`, error);
|
|
669
|
-
return false;
|
|
670
|
-
}
|
|
652
|
+
// Disabled - needs implementation using graph.queryNodes()
|
|
653
|
+
return false;
|
|
671
654
|
}
|
|
672
655
|
|
|
673
656
|
/**
|