@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
package/README.md
CHANGED
|
@@ -52,7 +52,6 @@ The orchestrator runs analysis in 5 phases:
|
|
|
52
52
|
### Indexing
|
|
53
53
|
- `JSModuleIndexer` - JavaScript/TypeScript module resolution
|
|
54
54
|
- `RustModuleIndexer` - Rust crate analysis
|
|
55
|
-
- `ServiceDetector` - Monorepo service discovery
|
|
56
55
|
|
|
57
56
|
### Analysis
|
|
58
57
|
- `JSASTAnalyzer` - Core JS/TS AST analysis
|
package/dist/Orchestrator.d.ts
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Orchestrator - управляет процессом анализа через фазы
|
|
3
3
|
* Полностью абстрактный - специфичная логика в плагинах
|
|
4
4
|
*/
|
|
5
|
+
import { DiagnosticCollector } from './diagnostics/DiagnosticCollector.js';
|
|
5
6
|
import type { Plugin, PluginContext } from './plugins/Plugin.js';
|
|
6
|
-
import type { GraphBackend } from '@grafema/types';
|
|
7
|
+
import type { GraphBackend, Logger, LogLevel, ServiceDefinition } from '@grafema/types';
|
|
7
8
|
/**
|
|
8
9
|
* Progress callback info
|
|
9
10
|
*/
|
|
@@ -37,8 +38,19 @@ export interface OrchestratorOptions {
|
|
|
37
38
|
onProgress?: ProgressCallback;
|
|
38
39
|
forceAnalysis?: boolean;
|
|
39
40
|
serviceFilter?: string | null;
|
|
41
|
+
/** Override entrypoint, bypasses auto-detection. Path relative to project root. */
|
|
42
|
+
entrypoint?: string;
|
|
40
43
|
indexOnly?: boolean;
|
|
41
44
|
parallel?: ParallelConfig | null;
|
|
45
|
+
/** Logger instance for structured logging. */
|
|
46
|
+
logger?: Logger;
|
|
47
|
+
/** Log level for the default logger. Ignored if logger is provided. */
|
|
48
|
+
logLevel?: LogLevel;
|
|
49
|
+
/**
|
|
50
|
+
* Config-provided services (REG-174).
|
|
51
|
+
* If provided and non-empty, discovery plugins are skipped.
|
|
52
|
+
*/
|
|
53
|
+
services?: ServiceDefinition[];
|
|
42
54
|
}
|
|
43
55
|
/**
|
|
44
56
|
* Service info from discovery
|
|
@@ -93,12 +105,17 @@ export declare class Orchestrator {
|
|
|
93
105
|
private onProgress;
|
|
94
106
|
private forceAnalysis;
|
|
95
107
|
private serviceFilter;
|
|
108
|
+
private entrypoint;
|
|
96
109
|
private indexOnly;
|
|
97
110
|
private profiler;
|
|
98
111
|
private parallelConfig;
|
|
99
112
|
private analysisQueue;
|
|
100
113
|
private rfdbServerProcess;
|
|
101
114
|
private _serverWasExternal;
|
|
115
|
+
private diagnosticCollector;
|
|
116
|
+
private logger;
|
|
117
|
+
/** Config-provided services (REG-174) */
|
|
118
|
+
private configServices;
|
|
102
119
|
constructor(options?: OrchestratorOptions);
|
|
103
120
|
/**
|
|
104
121
|
* Запустить анализ проекта
|
|
@@ -110,7 +127,8 @@ export declare class Orchestrator {
|
|
|
110
127
|
*/
|
|
111
128
|
buildIndexingUnits(manifest: DiscoveryManifest): IndexingUnit[];
|
|
112
129
|
/**
|
|
113
|
-
* PHASE 0: Discovery - запуск плагинов DISCOVERY
|
|
130
|
+
* PHASE 0: Discovery - запуск плагинов DISCOVERY фазы.
|
|
131
|
+
* If config services are provided, they take precedence and plugins are skipped.
|
|
114
132
|
*/
|
|
115
133
|
discover(projectPath: string): Promise<DiscoveryManifest>;
|
|
116
134
|
/**
|
|
@@ -119,6 +137,10 @@ export declare class Orchestrator {
|
|
|
119
137
|
runPhase(phaseName: string, context: Partial<PluginContext> & {
|
|
120
138
|
graph: PluginContext['graph'];
|
|
121
139
|
}): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* Get the diagnostic collector for retrieving all collected diagnostics
|
|
142
|
+
*/
|
|
143
|
+
getDiagnostics(): DiagnosticCollector;
|
|
122
144
|
/**
|
|
123
145
|
* Run queue-based parallel analysis using worker_threads and RFDB server
|
|
124
146
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Orchestrator.d.ts","sourceRoot":"","sources":["../src/Orchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"Orchestrator.d.ts","sourceRoot":"","sources":["../src/Orchestrator.ts"],"names":[],"mappings":"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"}
|
package/dist/Orchestrator.js
CHANGED
|
@@ -2,14 +2,18 @@
|
|
|
2
2
|
* Orchestrator - управляет процессом анализа через фазы
|
|
3
3
|
* Полностью абстрактный - специфичная логика в плагинах
|
|
4
4
|
*/
|
|
5
|
-
import { existsSync, unlinkSync } from 'fs';
|
|
5
|
+
import { readFileSync, existsSync, unlinkSync } from 'fs';
|
|
6
6
|
import { join, dirname, resolve } from 'path';
|
|
7
7
|
import { fileURLToPath } from 'url';
|
|
8
8
|
import { spawn, execSync } from 'child_process';
|
|
9
9
|
import { setTimeout as sleep } from 'timers/promises';
|
|
10
10
|
import { SimpleProjectDiscovery } from './plugins/discovery/SimpleProjectDiscovery.js';
|
|
11
|
+
import { resolveSourceEntrypoint } from './plugins/discovery/resolveSourceEntrypoint.js';
|
|
11
12
|
import { Profiler } from './core/Profiler.js';
|
|
12
13
|
import { AnalysisQueue } from './core/AnalysisQueue.js';
|
|
14
|
+
import { DiagnosticCollector } from './diagnostics/DiagnosticCollector.js';
|
|
15
|
+
import { createLogger } from './logging/Logger.js';
|
|
16
|
+
import { NodeFactory } from './core/NodeFactory.js';
|
|
13
17
|
export class Orchestrator {
|
|
14
18
|
graph;
|
|
15
19
|
config;
|
|
@@ -18,12 +22,17 @@ export class Orchestrator {
|
|
|
18
22
|
onProgress;
|
|
19
23
|
forceAnalysis;
|
|
20
24
|
serviceFilter;
|
|
25
|
+
entrypoint;
|
|
21
26
|
indexOnly;
|
|
22
27
|
profiler;
|
|
23
28
|
parallelConfig;
|
|
24
29
|
analysisQueue;
|
|
25
30
|
rfdbServerProcess;
|
|
26
31
|
_serverWasExternal;
|
|
32
|
+
diagnosticCollector;
|
|
33
|
+
logger;
|
|
34
|
+
/** Config-provided services (REG-174) */
|
|
35
|
+
configServices;
|
|
27
36
|
constructor(options = {}) {
|
|
28
37
|
this.graph = options.graph;
|
|
29
38
|
this.config = options;
|
|
@@ -32,6 +41,7 @@ export class Orchestrator {
|
|
|
32
41
|
this.onProgress = options.onProgress || (() => { }); // Callback для прогресса
|
|
33
42
|
this.forceAnalysis = options.forceAnalysis || false; // Флаг для игнорирования кэша
|
|
34
43
|
this.serviceFilter = options.serviceFilter || null; // Фильтр для одного сервиса
|
|
44
|
+
this.entrypoint = options.entrypoint; // Override entrypoint, bypasses discovery
|
|
35
45
|
this.indexOnly = options.indexOnly || false; // Только DISCOVERY + INDEXING (для coverage)
|
|
36
46
|
this.profiler = new Profiler('Orchestrator');
|
|
37
47
|
// Parallel/queue-based analysis config
|
|
@@ -39,9 +49,17 @@ export class Orchestrator {
|
|
|
39
49
|
this.analysisQueue = null;
|
|
40
50
|
this.rfdbServerProcess = null;
|
|
41
51
|
this._serverWasExternal = false;
|
|
42
|
-
//
|
|
52
|
+
// Initialize diagnostic collector
|
|
53
|
+
this.diagnosticCollector = new DiagnosticCollector();
|
|
54
|
+
// Initialize logger (use provided or create default)
|
|
55
|
+
this.logger = options.logger ?? createLogger(options.logLevel ?? 'info');
|
|
56
|
+
// Store config-provided services (REG-174)
|
|
57
|
+
this.configServices = options.services;
|
|
58
|
+
// Modified auto-add logic: SKIP auto-add if config services provided (REG-174)
|
|
43
59
|
const hasDiscovery = this.plugins.some(p => p.metadata?.phase === 'DISCOVERY');
|
|
44
|
-
|
|
60
|
+
const hasConfigServices = this.configServices && this.configServices.length > 0;
|
|
61
|
+
if (!hasDiscovery && !hasConfigServices) {
|
|
62
|
+
// Only auto-add if NO discovery plugins AND NO config services
|
|
45
63
|
this.plugins.unshift(new SimpleProjectDiscovery());
|
|
46
64
|
}
|
|
47
65
|
}
|
|
@@ -52,10 +70,37 @@ export class Orchestrator {
|
|
|
52
70
|
const totalStartTime = Date.now();
|
|
53
71
|
// Resolve to absolute path
|
|
54
72
|
const absoluteProjectPath = projectPath.startsWith('/') ? projectPath : resolve(projectPath);
|
|
73
|
+
// RADICAL SIMPLIFICATION: Clear entire graph once at the start if forceAnalysis
|
|
74
|
+
if (this.forceAnalysis && this.graph.clear) {
|
|
75
|
+
this.logger.info('Clearing entire graph (forceAnalysis=true)');
|
|
76
|
+
await this.graph.clear();
|
|
77
|
+
this.logger.info('Graph cleared successfully');
|
|
78
|
+
}
|
|
55
79
|
this.onProgress({ phase: 'discovery', currentPlugin: 'Starting discovery...', message: 'Discovering services...', totalFiles: 0, processedFiles: 0 });
|
|
56
|
-
// PHASE 0: DISCOVERY - запуск плагинов фазы DISCOVERY
|
|
80
|
+
// PHASE 0: DISCOVERY - запуск плагинов фазы DISCOVERY (or use entrypoint override)
|
|
57
81
|
this.profiler.start('DISCOVERY');
|
|
58
|
-
|
|
82
|
+
let manifest;
|
|
83
|
+
if (this.entrypoint) {
|
|
84
|
+
// Skip discovery, create synthetic manifest with single service
|
|
85
|
+
const entrypointPath = this.entrypoint.startsWith('/')
|
|
86
|
+
? this.entrypoint
|
|
87
|
+
: join(absoluteProjectPath, this.entrypoint);
|
|
88
|
+
const serviceName = this.entrypoint.split('/').pop()?.replace(/\.[^.]+$/, '') || 'main';
|
|
89
|
+
manifest = {
|
|
90
|
+
services: [{
|
|
91
|
+
id: `service:${serviceName}`,
|
|
92
|
+
name: serviceName,
|
|
93
|
+
path: entrypointPath,
|
|
94
|
+
metadata: { entrypoint: entrypointPath }
|
|
95
|
+
}],
|
|
96
|
+
entrypoints: [],
|
|
97
|
+
projectPath: absoluteProjectPath
|
|
98
|
+
};
|
|
99
|
+
this.logger.info('Using entrypoint override', { entrypoint: this.entrypoint, resolved: entrypointPath });
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
manifest = await this.discover(absoluteProjectPath);
|
|
103
|
+
}
|
|
59
104
|
this.profiler.end('DISCOVERY');
|
|
60
105
|
const epCount = manifest.entrypoints?.length || 0;
|
|
61
106
|
const svcCount = manifest.services?.length || 0;
|
|
@@ -66,7 +111,7 @@ export class Orchestrator {
|
|
|
66
111
|
totalFiles: 0,
|
|
67
112
|
processedFiles: 0
|
|
68
113
|
});
|
|
69
|
-
|
|
114
|
+
this.logger.info('Discovery complete', { services: svcCount, entrypoints: epCount });
|
|
70
115
|
// Build unified list of indexing units from services AND entrypoints
|
|
71
116
|
const indexingUnits = this.buildIndexingUnits(manifest);
|
|
72
117
|
// Filter if specified
|
|
@@ -76,13 +121,12 @@ export class Orchestrator {
|
|
|
76
121
|
u.path === this.serviceFilter ||
|
|
77
122
|
u.name.includes(this.serviceFilter) ||
|
|
78
123
|
u.path.includes(this.serviceFilter));
|
|
79
|
-
|
|
124
|
+
this.logger.info('Filtering services', { filter: this.serviceFilter, found: unitsToProcess.length, total: indexingUnits.length });
|
|
80
125
|
}
|
|
81
126
|
else {
|
|
82
127
|
unitsToProcess = indexingUnits;
|
|
83
128
|
}
|
|
84
|
-
|
|
85
|
-
console.log(`[Orchestrator] Strategy: Phase-by-phase with DFS dependency tree per entrypoint`);
|
|
129
|
+
this.logger.info('Processing indexing units', { count: unitsToProcess.length, strategy: 'Phase-by-phase with DFS' });
|
|
86
130
|
// PHASE 1: INDEXING - каждый сервис строит своё дерево зависимостей от entrypoint
|
|
87
131
|
const indexingStart = Date.now();
|
|
88
132
|
this.profiler.start('INDEXING');
|
|
@@ -118,9 +162,13 @@ export class Orchestrator {
|
|
|
118
162
|
},
|
|
119
163
|
modules: []
|
|
120
164
|
};
|
|
121
|
-
await this.runPhase('INDEXING', {
|
|
165
|
+
await this.runPhase('INDEXING', {
|
|
166
|
+
manifest: unitManifest,
|
|
167
|
+
graph: this.graph,
|
|
168
|
+
workerCount: 1,
|
|
169
|
+
});
|
|
122
170
|
const unitTime = ((Date.now() - unitStart) / 1000).toFixed(2);
|
|
123
|
-
|
|
171
|
+
this.logger.debug('INDEXING complete', { unit: unit.name, duration: unitTime });
|
|
124
172
|
this.onProgress({
|
|
125
173
|
phase: 'indexing',
|
|
126
174
|
currentPlugin: 'JSModuleIndexer',
|
|
@@ -133,12 +181,11 @@ export class Orchestrator {
|
|
|
133
181
|
processedUnits += batch.length;
|
|
134
182
|
}
|
|
135
183
|
this.profiler.end('INDEXING');
|
|
136
|
-
|
|
184
|
+
this.logger.info('INDEXING phase complete', { duration: ((Date.now() - indexingStart) / 1000).toFixed(2) });
|
|
137
185
|
// Skip remaining phases if indexOnly mode (for coverage)
|
|
138
186
|
if (this.indexOnly) {
|
|
139
187
|
const totalTime = ((Date.now() - totalStartTime) / 1000).toFixed(2);
|
|
140
|
-
|
|
141
|
-
console.log(`[Orchestrator] ⏱️ Total time: ${totalTime}s for ${unitsToProcess.length} units`);
|
|
188
|
+
this.logger.info('indexOnly mode - skipping remaining phases', { duration: totalTime, units: unitsToProcess.length });
|
|
142
189
|
return manifest;
|
|
143
190
|
}
|
|
144
191
|
// PHASE 2: ANALYSIS - все units (параллельно батчами)
|
|
@@ -180,9 +227,13 @@ export class Orchestrator {
|
|
|
180
227
|
},
|
|
181
228
|
modules: []
|
|
182
229
|
};
|
|
183
|
-
await this.runPhase('ANALYSIS', {
|
|
230
|
+
await this.runPhase('ANALYSIS', {
|
|
231
|
+
manifest: unitManifest,
|
|
232
|
+
graph: this.graph,
|
|
233
|
+
workerCount: 1,
|
|
234
|
+
});
|
|
184
235
|
const unitTime = ((Date.now() - unitStart) / 1000).toFixed(2);
|
|
185
|
-
|
|
236
|
+
this.logger.debug('ANALYSIS complete', { unit: unit.name, duration: unitTime });
|
|
186
237
|
this.onProgress({
|
|
187
238
|
phase: 'analysis',
|
|
188
239
|
currentPlugin: 'Analyzers',
|
|
@@ -196,27 +247,27 @@ export class Orchestrator {
|
|
|
196
247
|
}
|
|
197
248
|
}
|
|
198
249
|
this.profiler.end('ANALYSIS');
|
|
199
|
-
|
|
250
|
+
this.logger.info('ANALYSIS phase complete', { duration: ((Date.now() - analysisStart) / 1000).toFixed(2) });
|
|
200
251
|
// PHASE 3: ENRICHMENT - post-processing, граф traversal, вычисления (глобально)
|
|
201
252
|
const enrichmentStart = Date.now();
|
|
202
253
|
this.profiler.start('ENRICHMENT');
|
|
203
254
|
this.onProgress({ phase: 'enrichment', currentPlugin: 'Starting enrichment...', message: 'Enriching graph data...', totalFiles: 0, processedFiles: 0 });
|
|
204
255
|
await this.runPhase('ENRICHMENT', { manifest, graph: this.graph, workerCount: this.workerCount });
|
|
205
256
|
this.profiler.end('ENRICHMENT');
|
|
206
|
-
|
|
257
|
+
this.logger.info('ENRICHMENT phase complete', { duration: ((Date.now() - enrichmentStart) / 1000).toFixed(2) });
|
|
207
258
|
// PHASE 4: VALIDATION - проверка корректности графа (глобально)
|
|
208
259
|
const validationStart = Date.now();
|
|
209
260
|
this.profiler.start('VALIDATION');
|
|
210
261
|
this.onProgress({ phase: 'validation', currentPlugin: 'Starting validation...', message: 'Validating graph structure...', totalFiles: 0, processedFiles: 0 });
|
|
211
262
|
await this.runPhase('VALIDATION', { manifest, graph: this.graph, workerCount: this.workerCount });
|
|
212
263
|
this.profiler.end('VALIDATION');
|
|
213
|
-
|
|
264
|
+
this.logger.info('VALIDATION phase complete', { duration: ((Date.now() - validationStart) / 1000).toFixed(2) });
|
|
214
265
|
// Flush graph to ensure all edges are persisted and queryable
|
|
215
266
|
if (this.graph.flush) {
|
|
216
267
|
await this.graph.flush();
|
|
217
268
|
}
|
|
218
269
|
const totalTime = ((Date.now() - totalStartTime) / 1000).toFixed(2);
|
|
219
|
-
|
|
270
|
+
this.logger.info('Analysis complete', { duration: totalTime, units: unitsToProcess.length });
|
|
220
271
|
// Print profiling summary
|
|
221
272
|
this.profiler.printSummary();
|
|
222
273
|
return manifest;
|
|
@@ -262,14 +313,82 @@ export class Orchestrator {
|
|
|
262
313
|
return units;
|
|
263
314
|
}
|
|
264
315
|
/**
|
|
265
|
-
* PHASE 0: Discovery - запуск плагинов DISCOVERY
|
|
316
|
+
* PHASE 0: Discovery - запуск плагинов DISCOVERY фазы.
|
|
317
|
+
* If config services are provided, they take precedence and plugins are skipped.
|
|
266
318
|
*/
|
|
267
319
|
async discover(projectPath) {
|
|
320
|
+
// REG-174: If config provided services, use them directly instead of running discovery plugins
|
|
321
|
+
if (this.configServices && this.configServices.length > 0) {
|
|
322
|
+
this.logger.info('Using config-provided services (skipping discovery plugins)', {
|
|
323
|
+
serviceCount: this.configServices.length
|
|
324
|
+
});
|
|
325
|
+
const services = [];
|
|
326
|
+
// For each config service:
|
|
327
|
+
// 1. Resolve path relative to project root (validation ensures paths are relative)
|
|
328
|
+
// 2. Auto-detect entrypoint from package.json if not specified
|
|
329
|
+
// 3. Fall back to 'index.js' if detection fails
|
|
330
|
+
for (const configSvc of this.configServices) {
|
|
331
|
+
// All paths are relative (absolute paths rejected by ConfigLoader validation)
|
|
332
|
+
const servicePath = join(projectPath, configSvc.path);
|
|
333
|
+
// Resolve entrypoint
|
|
334
|
+
let entrypoint;
|
|
335
|
+
if (configSvc.entryPoint) {
|
|
336
|
+
entrypoint = configSvc.entryPoint;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
// Auto-detect if not provided
|
|
340
|
+
const packageJsonPath = join(servicePath, 'package.json');
|
|
341
|
+
if (existsSync(packageJsonPath)) {
|
|
342
|
+
try {
|
|
343
|
+
const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
344
|
+
entrypoint = resolveSourceEntrypoint(servicePath, pkg) ?? pkg.main ?? 'index.js';
|
|
345
|
+
}
|
|
346
|
+
catch (e) {
|
|
347
|
+
this.logger.warn('Failed to read package.json for auto-detection', {
|
|
348
|
+
service: configSvc.name,
|
|
349
|
+
path: packageJsonPath,
|
|
350
|
+
error: e.message
|
|
351
|
+
});
|
|
352
|
+
entrypoint = 'index.js';
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
entrypoint = 'index.js';
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// Create SERVICE node
|
|
360
|
+
const serviceNode = NodeFactory.createService(configSvc.name, servicePath, {
|
|
361
|
+
discoveryMethod: 'config',
|
|
362
|
+
entrypoint: entrypoint,
|
|
363
|
+
});
|
|
364
|
+
await this.graph.addNode(serviceNode);
|
|
365
|
+
services.push({
|
|
366
|
+
id: serviceNode.id,
|
|
367
|
+
name: configSvc.name,
|
|
368
|
+
path: servicePath,
|
|
369
|
+
metadata: {
|
|
370
|
+
entrypoint: join(servicePath, entrypoint),
|
|
371
|
+
},
|
|
372
|
+
});
|
|
373
|
+
this.logger.info('Registered config service', {
|
|
374
|
+
name: configSvc.name,
|
|
375
|
+
path: servicePath,
|
|
376
|
+
entrypoint: entrypoint
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
return {
|
|
380
|
+
services,
|
|
381
|
+
entrypoints: [], // Config services don't provide entrypoints
|
|
382
|
+
projectPath: projectPath
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
// ORIGINAL CODE: Run discovery plugins if no config services
|
|
268
386
|
const context = {
|
|
269
387
|
projectPath,
|
|
270
388
|
graph: this.graph,
|
|
271
389
|
config: this.config,
|
|
272
|
-
phase: 'DISCOVERY'
|
|
390
|
+
phase: 'DISCOVERY',
|
|
391
|
+
logger: this.logger,
|
|
273
392
|
};
|
|
274
393
|
// Фильтруем плагины для фазы DISCOVERY
|
|
275
394
|
const discoveryPlugins = this.plugins.filter(p => p.metadata.phase === 'DISCOVERY');
|
|
@@ -325,9 +444,57 @@ export class Orchestrator {
|
|
|
325
444
|
const pluginContext = {
|
|
326
445
|
...context,
|
|
327
446
|
onProgress: this.onProgress,
|
|
328
|
-
forceAnalysis: this.forceAnalysis
|
|
447
|
+
forceAnalysis: this.forceAnalysis,
|
|
448
|
+
logger: this.logger,
|
|
329
449
|
};
|
|
330
|
-
|
|
450
|
+
// Add reportIssue for VALIDATION phase
|
|
451
|
+
if (phaseName === 'VALIDATION') {
|
|
452
|
+
pluginContext.reportIssue = async (issue) => {
|
|
453
|
+
const node = NodeFactory.createIssue(issue.category, issue.severity, issue.message, plugin.metadata.name, issue.file, issue.line, issue.column || 0, { context: issue.context });
|
|
454
|
+
await context.graph.addNode(node);
|
|
455
|
+
if (issue.targetNodeId) {
|
|
456
|
+
await context.graph.addEdge({
|
|
457
|
+
src: node.id,
|
|
458
|
+
dst: issue.targetNodeId,
|
|
459
|
+
type: 'AFFECTS',
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
return node.id;
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
try {
|
|
466
|
+
const result = await plugin.execute(pluginContext);
|
|
467
|
+
// Collect errors into diagnostics
|
|
468
|
+
this.diagnosticCollector.addFromPluginResult(phaseName, plugin.metadata.name, result);
|
|
469
|
+
// Log plugin completion with warning if errors occurred
|
|
470
|
+
if (!result.success) {
|
|
471
|
+
console.warn(`[Orchestrator] Plugin ${plugin.metadata.name} reported failure`, {
|
|
472
|
+
errors: result.errors.length,
|
|
473
|
+
warnings: result.warnings.length,
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
// Check for fatal errors - STOP immediately
|
|
477
|
+
if (this.diagnosticCollector.hasFatal()) {
|
|
478
|
+
const allDiagnostics = this.diagnosticCollector.getAll();
|
|
479
|
+
const fatal = allDiagnostics.find(d => d.severity === 'fatal');
|
|
480
|
+
throw new Error(`Fatal error in ${plugin.metadata.name}: ${fatal?.message || 'Unknown fatal error'}`);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
catch (e) {
|
|
484
|
+
// Plugin threw an exception (not just returned errors)
|
|
485
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
486
|
+
// Don't re-add if this was already a fatal error we threw
|
|
487
|
+
if (!this.diagnosticCollector.hasFatal()) {
|
|
488
|
+
this.diagnosticCollector.add({
|
|
489
|
+
code: 'ERR_PLUGIN_THREW',
|
|
490
|
+
severity: 'fatal',
|
|
491
|
+
message: error.message,
|
|
492
|
+
phase: phaseName,
|
|
493
|
+
plugin: plugin.metadata.name,
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
throw error; // Re-throw to stop analysis
|
|
497
|
+
}
|
|
331
498
|
// Send completion for this plugin
|
|
332
499
|
this.onProgress({
|
|
333
500
|
phase: phaseName.toLowerCase(),
|
|
@@ -336,6 +503,12 @@ export class Orchestrator {
|
|
|
336
503
|
});
|
|
337
504
|
}
|
|
338
505
|
}
|
|
506
|
+
/**
|
|
507
|
+
* Get the diagnostic collector for retrieving all collected diagnostics
|
|
508
|
+
*/
|
|
509
|
+
getDiagnostics() {
|
|
510
|
+
return this.diagnosticCollector;
|
|
511
|
+
}
|
|
339
512
|
/**
|
|
340
513
|
* Run queue-based parallel analysis using worker_threads and RFDB server
|
|
341
514
|
*
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { ServiceDefinition } from '@grafema/types';
|
|
2
|
+
/**
|
|
3
|
+
* Grafema configuration schema.
|
|
4
|
+
*
|
|
5
|
+
* YAML Location: .grafema/config.yaml (preferred) or .grafema/config.json (deprecated)
|
|
6
|
+
*
|
|
7
|
+
* Example config.yaml:
|
|
8
|
+
*
|
|
9
|
+
* ```yaml
|
|
10
|
+
* # Plugins for each analysis phase
|
|
11
|
+
* plugins:
|
|
12
|
+
* indexing:
|
|
13
|
+
* - JSModuleIndexer
|
|
14
|
+
* analysis:
|
|
15
|
+
* - JSASTAnalyzer
|
|
16
|
+
* - ExpressRouteAnalyzer
|
|
17
|
+
* enrichment:
|
|
18
|
+
* - MethodCallResolver
|
|
19
|
+
* validation:
|
|
20
|
+
* - EvalBanValidator
|
|
21
|
+
*
|
|
22
|
+
* # Optional: Explicit service definitions (bypass auto-discovery)
|
|
23
|
+
* services:
|
|
24
|
+
* - name: "backend"
|
|
25
|
+
* path: "apps/backend" # Relative to project root
|
|
26
|
+
* entryPoint: "src/index.ts" # Optional, auto-detected if omitted
|
|
27
|
+
* - name: "frontend"
|
|
28
|
+
* path: "apps/frontend"
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* If 'services' is not specified or empty, auto-discovery is used (SimpleProjectDiscovery).
|
|
32
|
+
* If 'services' is specified and non-empty, auto-discovery plugins are skipped entirely.
|
|
33
|
+
*/
|
|
34
|
+
export interface GrafemaConfig {
|
|
35
|
+
plugins: {
|
|
36
|
+
discovery?: string[];
|
|
37
|
+
indexing: string[];
|
|
38
|
+
analysis: string[];
|
|
39
|
+
enrichment: string[];
|
|
40
|
+
validation: string[];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Optional explicit services for manual configuration.
|
|
44
|
+
* If provided and non-empty, auto-discovery is skipped.
|
|
45
|
+
*/
|
|
46
|
+
services: ServiceDefinition[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Default plugin configuration.
|
|
50
|
+
* Matches current DEFAULT_PLUGINS in analyze.ts and config.ts (MCP).
|
|
51
|
+
*/
|
|
52
|
+
export declare const DEFAULT_CONFIG: GrafemaConfig;
|
|
53
|
+
/**
|
|
54
|
+
* Load Grafema config from project directory.
|
|
55
|
+
*
|
|
56
|
+
* Priority:
|
|
57
|
+
* 1. config.yaml (preferred)
|
|
58
|
+
* 2. config.json (deprecated, fallback)
|
|
59
|
+
* 3. DEFAULT_CONFIG (if neither exists)
|
|
60
|
+
*
|
|
61
|
+
* Warnings:
|
|
62
|
+
* - Logs deprecation warning if config.json is used
|
|
63
|
+
* - Logs parse errors but doesn't throw (returns defaults)
|
|
64
|
+
*
|
|
65
|
+
* @param projectPath - Absolute path to project root
|
|
66
|
+
* @param logger - Optional logger for warnings (defaults to console.warn)
|
|
67
|
+
* @returns Parsed config or defaults
|
|
68
|
+
*/
|
|
69
|
+
export declare function loadConfig(projectPath: string, logger?: {
|
|
70
|
+
warn: (msg: string) => void;
|
|
71
|
+
}): GrafemaConfig;
|
|
72
|
+
//# sourceMappingURL=ConfigLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF;;;OAGG;IACH,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,aAgC5B,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAY,GAChD,aAAa,CA8Df"}
|