@grafema/core 0.2.5-beta → 0.2.7
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 +61 -23
- package/dist/DiscoveryManager.d.ts +59 -0
- package/dist/DiscoveryManager.d.ts.map +1 -0
- package/dist/DiscoveryManager.js +249 -0
- package/dist/DiscoveryManager.js.map +1 -0
- package/dist/GraphInitializer.d.ts +44 -0
- package/dist/GraphInitializer.d.ts.map +1 -0
- package/dist/GraphInitializer.js +121 -0
- package/dist/GraphInitializer.js.map +1 -0
- package/dist/GuaranteeChecker.d.ts +35 -0
- package/dist/GuaranteeChecker.d.ts.map +1 -0
- package/dist/GuaranteeChecker.js +81 -0
- package/dist/GuaranteeChecker.js.map +1 -0
- package/dist/Orchestrator.d.ts +34 -151
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +173 -741
- package/dist/Orchestrator.js.map +1 -1
- package/dist/OrchestratorTypes.d.ts +115 -0
- package/dist/OrchestratorTypes.d.ts.map +1 -0
- package/dist/OrchestratorTypes.js +6 -0
- package/dist/OrchestratorTypes.js.map +1 -0
- package/dist/ParallelAnalysisRunner.d.ts +43 -0
- package/dist/ParallelAnalysisRunner.d.ts.map +1 -0
- package/dist/ParallelAnalysisRunner.js +161 -0
- package/dist/ParallelAnalysisRunner.js.map +1 -0
- package/dist/PhaseRunner.d.ts +94 -0
- package/dist/PhaseRunner.d.ts.map +1 -0
- package/dist/PhaseRunner.js +332 -0
- package/dist/PhaseRunner.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +51 -1
- package/dist/config/ConfigLoader.d.ts.map +1 -1
- package/dist/config/ConfigLoader.js +121 -1
- package/dist/config/ConfigLoader.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/core/ASTWorker.d.ts +2 -0
- package/dist/core/ASTWorker.d.ts.map +1 -1
- package/dist/core/ASTWorker.js +6 -2
- package/dist/core/ASTWorker.js.map +1 -1
- package/dist/core/FileOverview.d.ts +124 -0
- package/dist/core/FileOverview.d.ts.map +1 -0
- package/dist/core/FileOverview.js +257 -0
- package/dist/core/FileOverview.js.map +1 -0
- package/dist/core/GraphFreshnessChecker.d.ts +1 -1
- package/dist/core/GraphFreshnessChecker.d.ts.map +1 -1
- package/dist/core/GraphFreshnessChecker.js +7 -5
- package/dist/core/GraphFreshnessChecker.js.map +1 -1
- package/dist/core/GuaranteeManager.d.ts +13 -0
- package/dist/core/GuaranteeManager.d.ts.map +1 -1
- package/dist/core/GuaranteeManager.js +63 -2
- package/dist/core/GuaranteeManager.js.map +1 -1
- package/dist/core/IncrementalReanalyzer.d.ts.map +1 -1
- package/dist/core/IncrementalReanalyzer.js +6 -3
- package/dist/core/IncrementalReanalyzer.js.map +1 -1
- package/dist/core/NodeFactory.d.ts +81 -415
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +139 -336
- package/dist/core/NodeFactory.js.map +1 -1
- package/dist/core/ResourceRegistry.d.ts +17 -0
- package/dist/core/ResourceRegistry.d.ts.map +1 -0
- package/dist/core/ResourceRegistry.js +32 -0
- package/dist/core/ResourceRegistry.js.map +1 -0
- package/dist/core/ScopeTracker.d.ts +12 -0
- package/dist/core/ScopeTracker.d.ts.map +1 -1
- package/dist/core/ScopeTracker.js +24 -0
- package/dist/core/ScopeTracker.js.map +1 -1
- package/dist/core/SemanticId.d.ts +69 -0
- package/dist/core/SemanticId.d.ts.map +1 -1
- package/dist/core/SemanticId.js +134 -0
- package/dist/core/SemanticId.js.map +1 -1
- package/dist/core/brandNodeInternal.d.ts +14 -0
- package/dist/core/brandNodeInternal.d.ts.map +1 -0
- package/dist/core/brandNodeInternal.js +4 -0
- package/dist/core/brandNodeInternal.js.map +1 -0
- package/dist/core/buildDependencyGraph.d.ts +36 -0
- package/dist/core/buildDependencyGraph.d.ts.map +1 -0
- package/dist/core/buildDependencyGraph.js +78 -0
- package/dist/core/buildDependencyGraph.js.map +1 -0
- package/dist/core/factories/CoreFactory.d.ts +223 -0
- package/dist/core/factories/CoreFactory.d.ts.map +1 -0
- package/dist/core/factories/CoreFactory.js +127 -0
- package/dist/core/factories/CoreFactory.js.map +1 -0
- package/dist/core/factories/DatabaseFactory.d.ts +29 -0
- package/dist/core/factories/DatabaseFactory.d.ts.map +1 -0
- package/dist/core/factories/DatabaseFactory.js +25 -0
- package/dist/core/factories/DatabaseFactory.js.map +1 -0
- package/dist/core/factories/ExternalFactory.d.ts +11 -0
- package/dist/core/factories/ExternalFactory.d.ts.map +1 -0
- package/dist/core/factories/ExternalFactory.js +16 -0
- package/dist/core/factories/ExternalFactory.js.map +1 -0
- package/dist/core/factories/HttpFactory.d.ts +22 -0
- package/dist/core/factories/HttpFactory.d.ts.map +1 -0
- package/dist/core/factories/HttpFactory.js +32 -0
- package/dist/core/factories/HttpFactory.js.map +1 -0
- package/dist/core/factories/ReactFactory.d.ts +14 -0
- package/dist/core/factories/ReactFactory.d.ts.map +1 -0
- package/dist/core/factories/ReactFactory.js +13 -0
- package/dist/core/factories/ReactFactory.js.map +1 -0
- package/dist/core/factories/RustFactory.d.ts +62 -0
- package/dist/core/factories/RustFactory.d.ts.map +1 -0
- package/dist/core/factories/RustFactory.js +32 -0
- package/dist/core/factories/RustFactory.js.map +1 -0
- package/dist/core/factories/ServiceFactory.d.ts +12 -0
- package/dist/core/factories/ServiceFactory.d.ts.map +1 -0
- package/dist/core/factories/ServiceFactory.js +22 -0
- package/dist/core/factories/ServiceFactory.js.map +1 -0
- package/dist/core/factories/SocketFactory.d.ts +31 -0
- package/dist/core/factories/SocketFactory.d.ts.map +1 -0
- package/dist/core/factories/SocketFactory.js +35 -0
- package/dist/core/factories/SocketFactory.js.map +1 -0
- package/dist/core/nodes/DatabaseNode.d.ts +85 -0
- package/dist/core/nodes/DatabaseNode.d.ts.map +1 -0
- package/dist/core/nodes/DatabaseNode.js +118 -0
- package/dist/core/nodes/DatabaseNode.js.map +1 -0
- package/dist/core/nodes/ExpressMiddlewareNode.d.ts +47 -0
- package/dist/core/nodes/ExpressMiddlewareNode.d.ts.map +1 -0
- package/dist/core/nodes/ExpressMiddlewareNode.js +63 -0
- package/dist/core/nodes/ExpressMiddlewareNode.js.map +1 -0
- package/dist/core/nodes/ExpressMountNode.d.ts +44 -0
- package/dist/core/nodes/ExpressMountNode.d.ts.map +1 -0
- package/dist/core/nodes/ExpressMountNode.js +61 -0
- package/dist/core/nodes/ExpressMountNode.js.map +1 -0
- package/dist/core/nodes/ExternalApiNode.d.ts +29 -0
- package/dist/core/nodes/ExternalApiNode.d.ts.map +1 -0
- package/dist/core/nodes/ExternalApiNode.js +41 -0
- package/dist/core/nodes/ExternalApiNode.js.map +1 -0
- package/dist/core/nodes/ExternalFunctionNode.d.ts +40 -0
- package/dist/core/nodes/ExternalFunctionNode.d.ts.map +1 -0
- package/dist/core/nodes/ExternalFunctionNode.js +54 -0
- package/dist/core/nodes/ExternalFunctionNode.js.map +1 -0
- package/dist/core/nodes/FetchRequestNode.d.ts +54 -0
- package/dist/core/nodes/FetchRequestNode.d.ts.map +1 -0
- package/dist/core/nodes/FetchRequestNode.js +67 -0
- package/dist/core/nodes/FetchRequestNode.js.map +1 -0
- package/dist/core/nodes/HttpRouteNode.d.ts +58 -0
- package/dist/core/nodes/HttpRouteNode.d.ts.map +1 -0
- package/dist/core/nodes/HttpRouteNode.js +72 -0
- package/dist/core/nodes/HttpRouteNode.js.map +1 -0
- package/dist/core/nodes/NodeKind.d.ts +1 -0
- package/dist/core/nodes/NodeKind.d.ts.map +1 -1
- package/dist/core/nodes/NodeKind.js +1 -0
- package/dist/core/nodes/NodeKind.js.map +1 -1
- package/dist/core/nodes/ReactNode.d.ts +53 -0
- package/dist/core/nodes/ReactNode.d.ts.map +1 -0
- package/dist/core/nodes/ReactNode.js +70 -0
- package/dist/core/nodes/ReactNode.js.map +1 -0
- package/dist/core/nodes/RustCallNode.d.ts +46 -0
- package/dist/core/nodes/RustCallNode.d.ts.map +1 -0
- package/dist/core/nodes/RustCallNode.js +62 -0
- package/dist/core/nodes/RustCallNode.js.map +1 -0
- package/dist/core/nodes/RustFunctionNode.d.ts +58 -0
- package/dist/core/nodes/RustFunctionNode.d.ts.map +1 -0
- package/dist/core/nodes/RustFunctionNode.js +67 -0
- package/dist/core/nodes/RustFunctionNode.js.map +1 -0
- package/dist/core/nodes/RustImplNode.d.ts +35 -0
- package/dist/core/nodes/RustImplNode.d.ts.map +1 -0
- package/dist/core/nodes/RustImplNode.js +55 -0
- package/dist/core/nodes/RustImplNode.js.map +1 -0
- package/dist/core/nodes/RustMethodNode.d.ts +64 -0
- package/dist/core/nodes/RustMethodNode.d.ts.map +1 -0
- package/dist/core/nodes/RustMethodNode.js +76 -0
- package/dist/core/nodes/RustMethodNode.js.map +1 -0
- package/dist/core/nodes/RustModuleNode.d.ts +40 -0
- package/dist/core/nodes/RustModuleNode.d.ts.map +1 -0
- package/dist/core/nodes/RustModuleNode.js +57 -0
- package/dist/core/nodes/RustModuleNode.js.map +1 -0
- package/dist/core/nodes/RustStructNode.d.ts +38 -0
- package/dist/core/nodes/RustStructNode.d.ts.map +1 -0
- package/dist/core/nodes/RustStructNode.js +54 -0
- package/dist/core/nodes/RustStructNode.js.map +1 -0
- package/dist/core/nodes/RustTraitNode.d.ts +40 -0
- package/dist/core/nodes/RustTraitNode.d.ts.map +1 -0
- package/dist/core/nodes/RustTraitNode.js +52 -0
- package/dist/core/nodes/RustTraitNode.js.map +1 -0
- package/dist/core/nodes/ServiceLayerNode.d.ts +85 -0
- package/dist/core/nodes/ServiceLayerNode.d.ts.map +1 -0
- package/dist/core/nodes/ServiceLayerNode.js +122 -0
- package/dist/core/nodes/ServiceLayerNode.js.map +1 -0
- package/dist/core/nodes/SocketIONode.d.ts +71 -0
- package/dist/core/nodes/SocketIONode.d.ts.map +1 -0
- package/dist/core/nodes/SocketIONode.js +111 -0
- package/dist/core/nodes/SocketIONode.js.map +1 -0
- package/dist/core/nodes/SocketNode.d.ts +87 -0
- package/dist/core/nodes/SocketNode.d.ts.map +1 -0
- package/dist/core/nodes/SocketNode.js +124 -0
- package/dist/core/nodes/SocketNode.js.map +1 -0
- package/dist/core/nodes/TypeNode.d.ts +26 -1
- package/dist/core/nodes/TypeNode.d.ts.map +1 -1
- package/dist/core/nodes/TypeNode.js +21 -3
- package/dist/core/nodes/TypeNode.js.map +1 -1
- package/dist/core/nodes/TypeParameterNode.d.ts +44 -0
- package/dist/core/nodes/TypeParameterNode.d.ts.map +1 -0
- package/dist/core/nodes/TypeParameterNode.js +64 -0
- package/dist/core/nodes/TypeParameterNode.js.map +1 -0
- package/dist/core/nodes/index.d.ts +19 -0
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +26 -0
- package/dist/core/nodes/index.js.map +1 -1
- package/dist/index.d.ts +33 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -3
- package/dist/index.js.map +1 -1
- package/dist/plugins/InfraAnalyzer.d.ts +110 -0
- package/dist/plugins/InfraAnalyzer.d.ts.map +1 -0
- package/dist/plugins/InfraAnalyzer.js +170 -0
- package/dist/plugins/InfraAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.js +18 -15
- package/dist/plugins/analysis/DatabaseAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +27 -26
- package/dist/plugins/analysis/ExpressAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js +5 -3
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +36 -39
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +23 -39
- package/dist/plugins/analysis/FetchAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +3 -2
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts +23 -85
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +351 -1887
- package/dist/plugins/analysis/JSASTAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/NestJSRouteAnalyzer.d.ts +28 -0
- package/dist/plugins/analysis/NestJSRouteAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/NestJSRouteAnalyzer.js +196 -0
- package/dist/plugins/analysis/NestJSRouteAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ReactAnalyzer.d.ts +1 -61
- package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ReactAnalyzer.js +24 -915
- package/dist/plugins/analysis/ReactAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/RustAnalyzer.js +31 -66
- package/dist/plugins/analysis/RustAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +13 -6
- package/dist/plugins/analysis/SQLiteAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js +10 -7
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/SocketAnalyzer.d.ts +81 -0
- package/dist/plugins/analysis/SocketAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/SocketAnalyzer.js +475 -0
- package/dist/plugins/analysis/SocketAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +13 -18
- package/dist/plugins/analysis/SocketIOAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SystemDbAnalyzer.js +8 -5
- package/dist/plugins/analysis/SystemDbAnalyzer.js.map +1 -1
- package/dist/plugins/analysis/ast/CollisionResolver.d.ts +65 -0
- package/dist/plugins/analysis/ast/CollisionResolver.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/CollisionResolver.js +106 -0
- package/dist/plugins/analysis/ast/CollisionResolver.js.map +1 -0
- package/dist/plugins/analysis/ast/FunctionBodyContext.d.ts +124 -0
- package/dist/plugins/analysis/ast/FunctionBodyContext.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/FunctionBodyContext.js +151 -0
- package/dist/plugins/analysis/ast/FunctionBodyContext.js.map +1 -0
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts +26 -261
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +251 -2494
- package/dist/plugins/analysis/ast/GraphBuilder.js.map +1 -1
- package/dist/plugins/analysis/ast/IdGenerator.d.ts +42 -0
- package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/IdGenerator.js +61 -1
- package/dist/plugins/analysis/ast/IdGenerator.js.map +1 -1
- package/dist/plugins/analysis/ast/builders/AssignmentBuilder.d.ts +15 -0
- package/dist/plugins/analysis/ast/builders/AssignmentBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/AssignmentBuilder.js +274 -0
- package/dist/plugins/analysis/ast/builders/AssignmentBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/CallFlowBuilder.d.ts +22 -0
- package/dist/plugins/analysis/ast/builders/CallFlowBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/CallFlowBuilder.js +178 -0
- package/dist/plugins/analysis/ast/builders/CallFlowBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/ControlFlowBuilder.d.ts +76 -0
- package/dist/plugins/analysis/ast/builders/ControlFlowBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/ControlFlowBuilder.js +387 -0
- package/dist/plugins/analysis/ast/builders/ControlFlowBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/CoreBuilder.d.ts +38 -0
- package/dist/plugins/analysis/ast/builders/CoreBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/CoreBuilder.js +240 -0
- package/dist/plugins/analysis/ast/builders/CoreBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/ModuleRuntimeBuilder.d.ts +53 -0
- package/dist/plugins/analysis/ast/builders/ModuleRuntimeBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/ModuleRuntimeBuilder.js +355 -0
- package/dist/plugins/analysis/ast/builders/ModuleRuntimeBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/MutationBuilder.d.ts +46 -0
- package/dist/plugins/analysis/ast/builders/MutationBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/MutationBuilder.js +264 -0
- package/dist/plugins/analysis/ast/builders/MutationBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/ReturnBuilder.d.ts +23 -0
- package/dist/plugins/analysis/ast/builders/ReturnBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/ReturnBuilder.js +206 -0
- package/dist/plugins/analysis/ast/builders/ReturnBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/TypeSystemBuilder.d.ts +64 -0
- package/dist/plugins/analysis/ast/builders/TypeSystemBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/TypeSystemBuilder.js +370 -0
- package/dist/plugins/analysis/ast/builders/TypeSystemBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/UpdateExpressionBuilder.d.ts +46 -0
- package/dist/plugins/analysis/ast/builders/UpdateExpressionBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/UpdateExpressionBuilder.js +191 -0
- package/dist/plugins/analysis/ast/builders/UpdateExpressionBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/YieldBuilder.d.ts +30 -0
- package/dist/plugins/analysis/ast/builders/YieldBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/YieldBuilder.js +214 -0
- package/dist/plugins/analysis/ast/builders/YieldBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/index.d.ts +12 -0
- package/dist/plugins/analysis/ast/builders/index.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/index.js +11 -0
- package/dist/plugins/analysis/ast/builders/index.js.map +1 -0
- package/dist/plugins/analysis/ast/builders/types.d.ts +30 -0
- package/dist/plugins/analysis/ast/builders/types.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/builders/types.js +8 -0
- package/dist/plugins/analysis/ast/builders/types.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/AnalyzerDelegate.d.ts +50 -0
- package/dist/plugins/analysis/ast/handlers/AnalyzerDelegate.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/AnalyzerDelegate.js +2 -0
- package/dist/plugins/analysis/ast/handlers/AnalyzerDelegate.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/BranchHandler.d.ts +18 -0
- package/dist/plugins/analysis/ast/handlers/BranchHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/BranchHandler.js +244 -0
- package/dist/plugins/analysis/ast/handlers/BranchHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/CallExpressionHandler.d.ts +7 -0
- package/dist/plugins/analysis/ast/handlers/CallExpressionHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/CallExpressionHandler.js +295 -0
- package/dist/plugins/analysis/ast/handlers/CallExpressionHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/FunctionBodyHandler.d.ts +22 -0
- package/dist/plugins/analysis/ast/handlers/FunctionBodyHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/FunctionBodyHandler.js +9 -0
- package/dist/plugins/analysis/ast/handlers/FunctionBodyHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/LoopHandler.d.ts +13 -0
- package/dist/plugins/analysis/ast/handlers/LoopHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/LoopHandler.js +207 -0
- package/dist/plugins/analysis/ast/handlers/LoopHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/NestedFunctionHandler.d.ts +13 -0
- package/dist/plugins/analysis/ast/handlers/NestedFunctionHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/NestedFunctionHandler.js +174 -0
- package/dist/plugins/analysis/ast/handlers/NestedFunctionHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/NewExpressionHandler.d.ts +12 -0
- package/dist/plugins/analysis/ast/handlers/NewExpressionHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/NewExpressionHandler.js +135 -0
- package/dist/plugins/analysis/ast/handlers/NewExpressionHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/PropertyAccessHandler.d.ts +13 -0
- package/dist/plugins/analysis/ast/handlers/PropertyAccessHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/PropertyAccessHandler.js +71 -0
- package/dist/plugins/analysis/ast/handlers/PropertyAccessHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/ReturnYieldHandler.d.ts +12 -0
- package/dist/plugins/analysis/ast/handlers/ReturnYieldHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/ReturnYieldHandler.js +135 -0
- package/dist/plugins/analysis/ast/handlers/ReturnYieldHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/ThrowHandler.d.ts +12 -0
- package/dist/plugins/analysis/ast/handlers/ThrowHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/ThrowHandler.js +82 -0
- package/dist/plugins/analysis/ast/handlers/ThrowHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/TryCatchHandler.d.ts +14 -0
- package/dist/plugins/analysis/ast/handlers/TryCatchHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/TryCatchHandler.js +220 -0
- package/dist/plugins/analysis/ast/handlers/TryCatchHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/VariableHandler.d.ts +12 -0
- package/dist/plugins/analysis/ast/handlers/VariableHandler.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/VariableHandler.js +57 -0
- package/dist/plugins/analysis/ast/handlers/VariableHandler.js.map +1 -0
- package/dist/plugins/analysis/ast/handlers/index.d.ts +13 -0
- package/dist/plugins/analysis/ast/handlers/index.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/handlers/index.js +12 -0
- package/dist/plugins/analysis/ast/handlers/index.js.map +1 -0
- package/dist/plugins/analysis/ast/types.d.ts +57 -6
- package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +5 -4
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js +94 -13
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js.map +1 -1
- package/dist/plugins/analysis/ast/utils/extractNamesFromPattern.d.ts +81 -0
- package/dist/plugins/analysis/ast/utils/extractNamesFromPattern.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/extractNamesFromPattern.js +140 -0
- package/dist/plugins/analysis/ast/utils/extractNamesFromPattern.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/getExpressionValue.d.ts +22 -0
- package/dist/plugins/analysis/ast/utils/getExpressionValue.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/getExpressionValue.js +35 -0
- package/dist/plugins/analysis/ast/utils/getExpressionValue.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/getMemberExpressionName.d.ts +25 -0
- package/dist/plugins/analysis/ast/utils/getMemberExpressionName.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/getMemberExpressionName.js +21 -0
- package/dist/plugins/analysis/ast/utils/getMemberExpressionName.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/index.d.ts +2 -0
- package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/utils/index.js +2 -0
- package/dist/plugins/analysis/ast/utils/index.js.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ArgumentExtractor.d.ts +23 -0
- package/dist/plugins/analysis/ast/visitors/ArgumentExtractor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ArgumentExtractor.js +241 -0
- package/dist/plugins/analysis/ast/visitors/ArgumentExtractor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ArrayElementExtractor.d.ts +20 -0
- package/dist/plugins/analysis/ast/visitors/ArrayElementExtractor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ArrayElementExtractor.js +110 -0
- package/dist/plugins/analysis/ast/visitors/ArrayElementExtractor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +15 -142
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +304 -937
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +26 -11
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +21 -6
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js.map +1 -1
- package/dist/plugins/analysis/ast/visitors/MutationDetector.d.ts +25 -0
- package/dist/plugins/analysis/ast/visitors/MutationDetector.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/MutationDetector.js +181 -0
- package/dist/plugins/analysis/ast/visitors/MutationDetector.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ObjectPropertyExtractor.d.ts +20 -0
- package/dist/plugins/analysis/ast/visitors/ObjectPropertyExtractor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ObjectPropertyExtractor.js +155 -0
- package/dist/plugins/analysis/ast/visitors/ObjectPropertyExtractor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts +9 -1
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js +51 -3
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js.map +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +20 -0
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +188 -12
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +6 -4
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js.map +1 -1
- package/dist/plugins/analysis/ast/visitors/call-expression-helpers.d.ts +19 -0
- package/dist/plugins/analysis/ast/visitors/call-expression-helpers.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/call-expression-helpers.js +57 -0
- package/dist/plugins/analysis/ast/visitors/call-expression-helpers.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/call-expression-types.d.ts +168 -0
- package/dist/plugins/analysis/ast/visitors/call-expression-types.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/call-expression-types.js +7 -0
- package/dist/plugins/analysis/ast/visitors/call-expression-types.js.map +1 -0
- package/dist/plugins/analysis/react-internal/browser-api.d.ts +20 -0
- package/dist/plugins/analysis/react-internal/browser-api.d.ts.map +1 -0
- package/dist/plugins/analysis/react-internal/browser-api.js +140 -0
- package/dist/plugins/analysis/react-internal/browser-api.js.map +1 -0
- package/dist/plugins/analysis/react-internal/hooks.d.ts +31 -0
- package/dist/plugins/analysis/react-internal/hooks.d.ts.map +1 -0
- package/dist/plugins/analysis/react-internal/hooks.js +465 -0
- package/dist/plugins/analysis/react-internal/hooks.js.map +1 -0
- package/dist/plugins/analysis/react-internal/jsx.d.ts +43 -0
- package/dist/plugins/analysis/react-internal/jsx.d.ts.map +1 -0
- package/dist/plugins/analysis/react-internal/jsx.js +231 -0
- package/dist/plugins/analysis/react-internal/jsx.js.map +1 -0
- package/dist/plugins/analysis/react-internal/types.d.ts +116 -0
- package/dist/plugins/analysis/react-internal/types.d.ts.map +1 -0
- package/dist/plugins/analysis/react-internal/types.js +83 -0
- package/dist/plugins/analysis/react-internal/types.js.map +1 -0
- package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js +6 -13
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js.map +1 -1
- package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
- package/dist/plugins/enrichment/AliasTracker.js +3 -1
- package/dist/plugins/enrichment/AliasTracker.js.map +1 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.js +3 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.js.map +1 -1
- package/dist/plugins/enrichment/CallbackCallResolver.d.ts +42 -0
- package/dist/plugins/enrichment/CallbackCallResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/CallbackCallResolver.js +311 -0
- package/dist/plugins/enrichment/CallbackCallResolver.js.map +1 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js +3 -1
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js.map +1 -1
- package/dist/plugins/enrichment/ConfigRoutingMapBuilder.d.ts +17 -0
- package/dist/plugins/enrichment/ConfigRoutingMapBuilder.d.ts.map +1 -0
- package/dist/plugins/enrichment/ConfigRoutingMapBuilder.js +55 -0
- package/dist/plugins/enrichment/ConfigRoutingMapBuilder.js.map +1 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ExpressHandlerLinker.js +3 -1
- package/dist/plugins/enrichment/ExpressHandlerLinker.js.map +1 -1
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/ExternalCallResolver.js +5 -8
- package/dist/plugins/enrichment/ExternalCallResolver.js.map +1 -1
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/FunctionCallResolver.js +6 -9
- package/dist/plugins/enrichment/FunctionCallResolver.js.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +3 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js.map +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.js +5 -3
- package/dist/plugins/enrichment/ImportExportLinker.js.map +1 -1
- package/dist/plugins/enrichment/InstanceOfResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/InstanceOfResolver.js +3 -1
- package/dist/plugins/enrichment/InstanceOfResolver.js.map +1 -1
- package/dist/plugins/enrichment/MethodCallResolver.d.ts +17 -68
- package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MethodCallResolver.js +42 -517
- package/dist/plugins/enrichment/MethodCallResolver.js.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +9 -2
- package/dist/plugins/enrichment/MountPointResolver.js.map +1 -1
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +7 -16
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js.map +1 -1
- package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
- package/dist/plugins/enrichment/PrefixEvaluator.js +6 -2
- package/dist/plugins/enrichment/PrefixEvaluator.js.map +1 -1
- package/dist/plugins/enrichment/RejectionPropagationEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/RejectionPropagationEnricher.js +3 -1
- package/dist/plugins/enrichment/RejectionPropagationEnricher.js.map +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js +3 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js.map +1 -1
- package/dist/plugins/enrichment/ServiceConnectionEnricher.d.ts +76 -0
- package/dist/plugins/enrichment/ServiceConnectionEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/ServiceConnectionEnricher.js +355 -0
- package/dist/plugins/enrichment/ServiceConnectionEnricher.js.map +1 -0
- package/dist/plugins/enrichment/SocketConnectionEnricher.d.ts +42 -0
- package/dist/plugins/enrichment/SocketConnectionEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/SocketConnectionEnricher.js +166 -0
- package/dist/plugins/enrichment/SocketConnectionEnricher.js.map +1 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +3 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js.map +1 -1
- package/dist/plugins/enrichment/method-call/MethodCallData.d.ts +68 -0
- package/dist/plugins/enrichment/method-call/MethodCallData.d.ts.map +1 -0
- package/dist/plugins/enrichment/method-call/MethodCallData.js +227 -0
- package/dist/plugins/enrichment/method-call/MethodCallData.js.map +1 -0
- package/dist/plugins/enrichment/method-call/MethodCallDetectors.d.ts +21 -0
- package/dist/plugins/enrichment/method-call/MethodCallDetectors.d.ts.map +1 -0
- package/dist/plugins/enrichment/method-call/MethodCallDetectors.js +52 -0
- package/dist/plugins/enrichment/method-call/MethodCallDetectors.js.map +1 -0
- package/dist/plugins/enrichment/method-call/MethodCallErrorAnalysis.d.ts +22 -0
- package/dist/plugins/enrichment/method-call/MethodCallErrorAnalysis.d.ts.map +1 -0
- package/dist/plugins/enrichment/method-call/MethodCallErrorAnalysis.js +105 -0
- package/dist/plugins/enrichment/method-call/MethodCallErrorAnalysis.js.map +1 -0
- package/dist/plugins/enrichment/method-call/MethodCallIndexers.d.ts +19 -0
- package/dist/plugins/enrichment/method-call/MethodCallIndexers.d.ts.map +1 -0
- package/dist/plugins/enrichment/method-call/MethodCallIndexers.js +63 -0
- package/dist/plugins/enrichment/method-call/MethodCallIndexers.js.map +1 -0
- package/dist/plugins/enrichment/method-call/MethodCallResolution.d.ts +30 -0
- package/dist/plugins/enrichment/method-call/MethodCallResolution.d.ts.map +1 -0
- package/dist/plugins/enrichment/method-call/MethodCallResolution.js +138 -0
- package/dist/plugins/enrichment/method-call/MethodCallResolution.js.map +1 -0
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/IncrementalModuleIndexer.js +2 -8
- package/dist/plugins/indexing/IncrementalModuleIndexer.js.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +13 -20
- package/dist/plugins/indexing/JSModuleIndexer.js.map +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +4 -8
- package/dist/plugins/indexing/RustModuleIndexer.js.map +1 -1
- package/dist/plugins/validation/AwaitInLoopValidator.d.ts +24 -0
- package/dist/plugins/validation/AwaitInLoopValidator.d.ts.map +1 -0
- package/dist/plugins/validation/AwaitInLoopValidator.js +69 -0
- package/dist/plugins/validation/AwaitInLoopValidator.js.map +1 -0
- package/dist/plugins/validation/PackageCoverageValidator.d.ts +33 -0
- package/dist/plugins/validation/PackageCoverageValidator.d.ts.map +1 -0
- package/dist/plugins/validation/PackageCoverageValidator.js +149 -0
- package/dist/plugins/validation/PackageCoverageValidator.js.map +1 -0
- package/dist/plugins/validation/UnconnectedRouteValidator.d.ts +18 -0
- package/dist/plugins/validation/UnconnectedRouteValidator.d.ts.map +1 -0
- package/dist/plugins/validation/UnconnectedRouteValidator.js +68 -0
- package/dist/plugins/validation/UnconnectedRouteValidator.js.map +1 -0
- package/dist/queries/NodeContext.d.ts +81 -0
- package/dist/queries/NodeContext.d.ts.map +1 -0
- package/dist/queries/NodeContext.js +193 -0
- package/dist/queries/NodeContext.js.map +1 -0
- package/dist/queries/findCallsInFunction.d.ts.map +1 -1
- package/dist/queries/findCallsInFunction.js +10 -2
- package/dist/queries/findCallsInFunction.js.map +1 -1
- package/dist/queries/findContainingFunction.d.ts +3 -2
- package/dist/queries/findContainingFunction.d.ts.map +1 -1
- package/dist/queries/findContainingFunction.js +13 -3
- package/dist/queries/findContainingFunction.js.map +1 -1
- package/dist/queries/index.d.ts +2 -0
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +1 -0
- package/dist/queries/index.js.map +1 -1
- package/dist/resources/InfraResourceMapImpl.d.ts +31 -0
- package/dist/resources/InfraResourceMapImpl.d.ts.map +1 -0
- package/dist/resources/InfraResourceMapImpl.js +110 -0
- package/dist/resources/InfraResourceMapImpl.js.map +1 -0
- package/dist/resources/RoutingMapImpl.d.ts +33 -0
- package/dist/resources/RoutingMapImpl.d.ts.map +1 -0
- package/dist/resources/RoutingMapImpl.js +115 -0
- package/dist/resources/RoutingMapImpl.js.map +1 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +35 -6
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +102 -70
- package/dist/storage/backends/RFDBServerBackend.js.map +1 -1
- package/dist/utils/findRfdbBinary.d.ts +3 -2
- package/dist/utils/findRfdbBinary.d.ts.map +1 -1
- package/dist/utils/findRfdbBinary.js +22 -7
- package/dist/utils/findRfdbBinary.js.map +1 -1
- package/dist/utils/moduleResolution.d.ts.map +1 -1
- package/dist/utils/moduleResolution.js +26 -1
- package/dist/utils/moduleResolution.js.map +1 -1
- package/dist/utils/resolveNodeFile.d.ts +13 -0
- package/dist/utils/resolveNodeFile.d.ts.map +1 -0
- package/dist/utils/resolveNodeFile.js +18 -0
- package/dist/utils/resolveNodeFile.js.map +1 -0
- package/dist/version.d.ts +11 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +26 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -3
- package/src/DiscoveryManager.ts +279 -0
- package/src/GraphInitializer.ts +131 -0
- package/src/GuaranteeChecker.ts +90 -0
- package/src/Orchestrator.ts +222 -963
- package/src/OrchestratorTypes.ts +122 -0
- package/src/ParallelAnalysisRunner.ts +188 -0
- package/src/PhaseRunner.ts +450 -0
- package/src/config/ConfigLoader.ts +176 -2
- package/src/config/index.ts +2 -0
- package/src/core/ASTWorker.ts +9 -2
- package/src/core/FileOverview.ts +374 -0
- package/src/core/GraphFreshnessChecker.ts +7 -5
- package/src/core/GuaranteeManager.ts +70 -2
- package/src/core/IncrementalReanalyzer.ts +6 -3
- package/src/core/NodeFactory.ts +173 -652
- package/src/core/ResourceRegistry.ts +39 -0
- package/src/core/ScopeTracker.ts +23 -0
- package/src/core/SemanticId.ts +183 -0
- package/src/core/brandNodeInternal.ts +16 -0
- package/src/core/buildDependencyGraph.ts +98 -0
- package/src/core/factories/CoreFactory.ts +489 -0
- package/src/core/factories/DatabaseFactory.ts +63 -0
- package/src/core/factories/ExternalFactory.ts +23 -0
- package/src/core/factories/HttpFactory.ts +57 -0
- package/src/core/factories/ReactFactory.ts +15 -0
- package/src/core/factories/RustFactory.ts +128 -0
- package/src/core/factories/ServiceFactory.ts +27 -0
- package/src/core/factories/SocketFactory.ts +94 -0
- package/src/core/nodes/DatabaseNode.ts +175 -0
- package/src/core/nodes/ExpressMiddlewareNode.ts +98 -0
- package/src/core/nodes/ExpressMountNode.ts +94 -0
- package/src/core/nodes/ExternalApiNode.ts +53 -0
- package/src/core/nodes/ExternalFunctionNode.ts +77 -0
- package/src/core/nodes/FetchRequestNode.ts +105 -0
- package/src/core/nodes/HttpRouteNode.ts +113 -0
- package/src/core/nodes/NodeKind.ts +1 -0
- package/src/core/nodes/ReactNode.ts +78 -0
- package/src/core/nodes/RustCallNode.ts +96 -0
- package/src/core/nodes/RustFunctionNode.ts +112 -0
- package/src/core/nodes/RustImplNode.ts +78 -0
- package/src/core/nodes/RustMethodNode.ts +125 -0
- package/src/core/nodes/RustModuleNode.ts +84 -0
- package/src/core/nodes/RustStructNode.ts +80 -0
- package/src/core/nodes/RustTraitNode.ts +82 -0
- package/src/core/nodes/ServiceLayerNode.ts +183 -0
- package/src/core/nodes/SocketIONode.ts +177 -0
- package/src/core/nodes/SocketNode.ts +206 -0
- package/src/core/nodes/TypeNode.ts +46 -3
- package/src/core/nodes/TypeParameterNode.ts +91 -0
- package/src/core/nodes/index.ts +57 -0
- package/src/index.ts +60 -4
- package/src/plugins/InfraAnalyzer.ts +208 -0
- package/src/plugins/analysis/DatabaseAnalyzer.ts +27 -17
- package/src/plugins/analysis/ExpressAnalyzer.ts +51 -38
- package/src/plugins/analysis/ExpressResponseAnalyzer.ts +15 -12
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +56 -56
- package/src/plugins/analysis/FetchAnalyzer.ts +42 -52
- package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +3 -2
- package/src/plugins/analysis/JSASTAnalyzer.ts +391 -2304
- package/src/plugins/analysis/NestJSRouteAnalyzer.ts +241 -0
- package/src/plugins/analysis/ReactAnalyzer.ts +33 -1085
- package/src/plugins/analysis/RustAnalyzer.ts +112 -116
- package/src/plugins/analysis/SQLiteAnalyzer.ts +23 -9
- package/src/plugins/analysis/ServiceLayerAnalyzer.ts +32 -10
- package/src/plugins/analysis/SocketAnalyzer.ts +601 -0
- package/src/plugins/analysis/SocketIOAnalyzer.ts +25 -34
- package/src/plugins/analysis/SystemDbAnalyzer.ts +15 -12
- package/src/plugins/analysis/ast/CollisionResolver.ts +137 -0
- package/src/plugins/analysis/ast/FunctionBodyContext.ts +291 -0
- package/src/plugins/analysis/ast/GraphBuilder.ts +274 -3180
- package/src/plugins/analysis/ast/IdGenerator.ts +81 -1
- package/src/plugins/analysis/ast/builders/AssignmentBuilder.ts +407 -0
- package/src/plugins/analysis/ast/builders/CallFlowBuilder.ts +255 -0
- package/src/plugins/analysis/ast/builders/ControlFlowBuilder.ts +470 -0
- package/src/plugins/analysis/ast/builders/CoreBuilder.ts +306 -0
- package/src/plugins/analysis/ast/builders/ModuleRuntimeBuilder.ts +452 -0
- package/src/plugins/analysis/ast/builders/MutationBuilder.ts +372 -0
- package/src/plugins/analysis/ast/builders/ReturnBuilder.ts +279 -0
- package/src/plugins/analysis/ast/builders/TypeSystemBuilder.ts +475 -0
- package/src/plugins/analysis/ast/builders/UpdateExpressionBuilder.ts +262 -0
- package/src/plugins/analysis/ast/builders/YieldBuilder.ts +287 -0
- package/src/plugins/analysis/ast/builders/index.ts +11 -0
- package/src/plugins/analysis/ast/builders/types.ts +65 -0
- package/src/plugins/analysis/ast/handlers/AnalyzerDelegate.ts +183 -0
- package/src/plugins/analysis/ast/handlers/BranchHandler.ts +313 -0
- package/src/plugins/analysis/ast/handlers/CallExpressionHandler.ts +347 -0
- package/src/plugins/analysis/ast/handlers/FunctionBodyHandler.ts +24 -0
- package/src/plugins/analysis/ast/handlers/LoopHandler.ts +240 -0
- package/src/plugins/analysis/ast/handlers/NestedFunctionHandler.ts +201 -0
- package/src/plugins/analysis/ast/handlers/NewExpressionHandler.ts +159 -0
- package/src/plugins/analysis/ast/handlers/PropertyAccessHandler.ts +112 -0
- package/src/plugins/analysis/ast/handlers/ReturnYieldHandler.ts +166 -0
- package/src/plugins/analysis/ast/handlers/ThrowHandler.ts +101 -0
- package/src/plugins/analysis/ast/handlers/TryCatchHandler.ts +262 -0
- package/src/plugins/analysis/ast/handlers/VariableHandler.ts +93 -0
- package/src/plugins/analysis/ast/handlers/index.ts +12 -0
- package/src/plugins/analysis/ast/types.ts +68 -9
- package/src/plugins/analysis/ast/utils/createParameterNodes.ts +118 -13
- package/src/plugins/analysis/ast/utils/extractNamesFromPattern.ts +166 -0
- package/src/plugins/analysis/ast/utils/getExpressionValue.ts +34 -0
- package/src/plugins/analysis/ast/utils/getMemberExpressionName.ts +33 -0
- package/src/plugins/analysis/ast/utils/index.ts +2 -0
- package/src/plugins/analysis/ast/visitors/ArgumentExtractor.ts +307 -0
- package/src/plugins/analysis/ast/visitors/ArrayElementExtractor.ts +172 -0
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +425 -1374
- package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +43 -12
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +39 -8
- package/src/plugins/analysis/ast/visitors/MutationDetector.ts +211 -0
- package/src/plugins/analysis/ast/visitors/ObjectPropertyExtractor.ts +217 -0
- package/src/plugins/analysis/ast/visitors/PropertyAccessVisitor.ts +69 -4
- package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +232 -13
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +8 -11
- package/src/plugins/analysis/ast/visitors/call-expression-helpers.ts +65 -0
- package/src/plugins/analysis/ast/visitors/call-expression-types.ts +179 -0
- package/src/plugins/analysis/react-internal/browser-api.ts +168 -0
- package/src/plugins/analysis/react-internal/hooks.ts +517 -0
- package/src/plugins/analysis/react-internal/jsx.ts +279 -0
- package/src/plugins/analysis/react-internal/types.ts +183 -0
- package/src/plugins/discovery/MonorepoServiceDiscovery.ts +6 -14
- package/src/plugins/enrichment/AliasTracker.ts +3 -1
- package/src/plugins/enrichment/ArgumentParameterLinker.ts +3 -1
- package/src/plugins/enrichment/CallbackCallResolver.ts +398 -0
- package/src/plugins/enrichment/ClosureCaptureEnricher.ts +3 -1
- package/src/plugins/enrichment/ConfigRoutingMapBuilder.ts +67 -0
- package/src/plugins/enrichment/ExpressHandlerLinker.ts +3 -1
- package/src/plugins/enrichment/ExternalCallResolver.ts +5 -8
- package/src/plugins/enrichment/FunctionCallResolver.ts +6 -9
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +3 -1
- package/src/plugins/enrichment/ImportExportLinker.ts +5 -3
- package/src/plugins/enrichment/InstanceOfResolver.ts +3 -1
- package/src/plugins/enrichment/MethodCallResolver.ts +48 -659
- package/src/plugins/enrichment/MountPointResolver.ts +9 -2
- package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +13 -18
- package/src/plugins/enrichment/PrefixEvaluator.ts +6 -2
- package/src/plugins/enrichment/RejectionPropagationEnricher.ts +3 -1
- package/src/plugins/enrichment/RustFFIEnricher.ts +3 -1
- package/src/plugins/enrichment/ServiceConnectionEnricher.ts +472 -0
- package/src/plugins/enrichment/SocketConnectionEnricher.ts +228 -0
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +3 -1
- package/src/plugins/enrichment/method-call/MethodCallData.ts +299 -0
- package/src/plugins/enrichment/method-call/MethodCallDetectors.ts +70 -0
- package/src/plugins/enrichment/method-call/MethodCallErrorAnalysis.ts +131 -0
- package/src/plugins/enrichment/method-call/MethodCallIndexers.ts +83 -0
- package/src/plugins/enrichment/method-call/MethodCallResolution.ts +181 -0
- package/src/plugins/indexing/IncrementalModuleIndexer.ts +5 -10
- package/src/plugins/indexing/JSModuleIndexer.ts +17 -21
- package/src/plugins/indexing/RustModuleIndexer.ts +14 -13
- package/src/plugins/validation/AwaitInLoopValidator.ts +91 -0
- package/src/plugins/validation/PackageCoverageValidator.ts +181 -0
- package/src/plugins/validation/UnconnectedRouteValidator.ts +93 -0
- package/src/queries/NodeContext.ts +277 -0
- package/src/queries/findCallsInFunction.ts +11 -2
- package/src/queries/findContainingFunction.ts +14 -3
- package/src/queries/index.ts +13 -0
- package/src/resources/InfraResourceMapImpl.ts +119 -0
- package/src/resources/RoutingMapImpl.ts +133 -0
- package/src/storage/backends/RFDBServerBackend.ts +106 -77
- package/src/utils/findRfdbBinary.ts +22 -7
- package/src/utils/moduleResolution.ts +28 -1
- package/src/utils/resolveNodeFile.ts +18 -0
- package/src/version.ts +28 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhaseRunner - Executes plugin phases with toposort ordering
|
|
3
|
+
*
|
|
4
|
+
* Extracted from Orchestrator.ts (RFD-16, STEP 2.5) to keep
|
|
5
|
+
* Orchestrator as coordinator, PhaseRunner as executor.
|
|
6
|
+
*
|
|
7
|
+
* RFD-17: Enrichment dependency propagation — when an enricher's delta
|
|
8
|
+
* has changedEdgeTypes, downstream enrichers consuming those types are
|
|
9
|
+
* enqueued and re-run. Queue respects topological order, each enricher
|
|
10
|
+
* runs at most once.
|
|
11
|
+
*/
|
|
12
|
+
import { NodeFactory } from './core/NodeFactory.js';
|
|
13
|
+
import { toposort } from './core/toposort.js';
|
|
14
|
+
import { buildDependencyGraph } from './core/buildDependencyGraph.js';
|
|
15
|
+
export class PhaseRunner {
|
|
16
|
+
deps;
|
|
17
|
+
suppressedByIgnoreCount = 0;
|
|
18
|
+
constructor(deps) {
|
|
19
|
+
this.deps = deps;
|
|
20
|
+
}
|
|
21
|
+
getSuppressedByIgnoreCount() {
|
|
22
|
+
return this.suppressedByIgnoreCount;
|
|
23
|
+
}
|
|
24
|
+
resetSuppressedByIgnoreCount() {
|
|
25
|
+
this.suppressedByIgnoreCount = 0;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Execute a plugin wrapped in a CommitBatch.
|
|
29
|
+
* If the backend doesn't support batching, falls back to direct execution.
|
|
30
|
+
* Returns the PluginResult and an optional CommitDelta.
|
|
31
|
+
*/
|
|
32
|
+
async runPluginWithBatch(plugin, pluginContext, phaseName) {
|
|
33
|
+
const graph = pluginContext.graph;
|
|
34
|
+
// Fallback: backend doesn't support batching
|
|
35
|
+
if (!graph.beginBatch || !graph.commitBatch || !graph.abortBatch) {
|
|
36
|
+
const result = await plugin.execute(pluginContext);
|
|
37
|
+
return { result, delta: null };
|
|
38
|
+
}
|
|
39
|
+
const tags = [plugin.metadata.name, phaseName];
|
|
40
|
+
// File tags from manifest path (available in ANALYSIS, not ENRICHMENT)
|
|
41
|
+
const manifest = pluginContext.manifest;
|
|
42
|
+
if (manifest?.path)
|
|
43
|
+
tags.push(manifest.path);
|
|
44
|
+
graph.beginBatch();
|
|
45
|
+
try {
|
|
46
|
+
const result = await plugin.execute(pluginContext);
|
|
47
|
+
const delta = await graph.commitBatch(tags);
|
|
48
|
+
return { result, delta };
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
graph.abortBatch();
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Build a complete PluginContext from partial context + injected deps.
|
|
57
|
+
* Extracted from runPhase() (RFD-17, STEP 2.5) for reuse in propagation path.
|
|
58
|
+
*/
|
|
59
|
+
buildPluginContext(baseContext, phaseName, plugin) {
|
|
60
|
+
const { onProgress, forceAnalysis, logger, strictMode, resourceRegistry, configServices, routing } = this.deps;
|
|
61
|
+
const pluginContext = {
|
|
62
|
+
...baseContext,
|
|
63
|
+
onProgress: onProgress,
|
|
64
|
+
forceAnalysis: forceAnalysis,
|
|
65
|
+
logger: logger,
|
|
66
|
+
strictMode: strictMode, // REG-330: Pass strict mode flag
|
|
67
|
+
// REG-76: Pass rootPrefix for multi-root workspace support
|
|
68
|
+
rootPrefix: baseContext.rootPrefix,
|
|
69
|
+
// REG-256: Pass resource registry for inter-plugin communication
|
|
70
|
+
resources: resourceRegistry,
|
|
71
|
+
};
|
|
72
|
+
// REG-256: Ensure config is available with routing and services for all plugins
|
|
73
|
+
if (!pluginContext.config) {
|
|
74
|
+
pluginContext.config = {
|
|
75
|
+
projectPath: baseContext.manifest?.projectPath ?? '',
|
|
76
|
+
services: configServices,
|
|
77
|
+
routing: routing,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Merge routing and services into existing config
|
|
82
|
+
const cfg = pluginContext.config;
|
|
83
|
+
if (routing && !cfg.routing) {
|
|
84
|
+
cfg.routing = routing;
|
|
85
|
+
}
|
|
86
|
+
if (configServices && !cfg.services) {
|
|
87
|
+
cfg.services = configServices;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Add reportIssue for VALIDATION phase
|
|
91
|
+
if (phaseName === 'VALIDATION') {
|
|
92
|
+
pluginContext.reportIssue = async (issue) => {
|
|
93
|
+
const node = NodeFactory.createIssue(issue.category, issue.severity, issue.message, plugin.metadata.name, issue.file, issue.line, issue.column || 0, { context: issue.context });
|
|
94
|
+
await baseContext.graph.addNode(node);
|
|
95
|
+
if (issue.targetNodeId) {
|
|
96
|
+
await baseContext.graph.addEdge({
|
|
97
|
+
src: node.id,
|
|
98
|
+
dst: issue.targetNodeId,
|
|
99
|
+
type: 'AFFECTS',
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return node.id;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
return pluginContext;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check whether an enricher should be skipped based on selective enrichment.
|
|
109
|
+
* Returns true if the enricher's consumed types have no overlap with accumulated types
|
|
110
|
+
* (i.e., no upstream enricher produced anything this one needs).
|
|
111
|
+
* Level-0 enrichers (consumes: []) are never skipped.
|
|
112
|
+
*/
|
|
113
|
+
shouldSkipEnricher(plugin, accumulatedTypes) {
|
|
114
|
+
const consumes = plugin.metadata.consumes ?? [];
|
|
115
|
+
const isLevel0 = consumes.length === 0;
|
|
116
|
+
if (isLevel0)
|
|
117
|
+
return false;
|
|
118
|
+
return !consumes.some(t => accumulatedTypes.has(t));
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Execute a plugin, collect diagnostics, and check for fatal errors.
|
|
122
|
+
* Shared between the fallback loop and the propagation path.
|
|
123
|
+
* Returns the delta from the batch commit (if any).
|
|
124
|
+
*/
|
|
125
|
+
async executePlugin(plugin, context, phaseName) {
|
|
126
|
+
const { logger, strictMode, diagnosticCollector } = this.deps;
|
|
127
|
+
const pluginName = plugin.metadata.name;
|
|
128
|
+
const pluginContext = this.buildPluginContext(context, phaseName, plugin);
|
|
129
|
+
try {
|
|
130
|
+
const { result, delta } = await this.runPluginWithBatch(plugin, pluginContext, phaseName);
|
|
131
|
+
// Log batch delta
|
|
132
|
+
if (delta) {
|
|
133
|
+
logger.debug(`[${pluginName}] batch: +${delta.nodesAdded} nodes, +${delta.edgesAdded} edges, ` +
|
|
134
|
+
`-${delta.nodesRemoved} nodes, -${delta.edgesRemoved} edges`);
|
|
135
|
+
}
|
|
136
|
+
// Collect errors into diagnostics
|
|
137
|
+
diagnosticCollector.addFromPluginResult(phaseName, pluginName, result);
|
|
138
|
+
// REG-357: Collect suppressedByIgnore from ENRICHMENT plugin results
|
|
139
|
+
if (phaseName === 'ENRICHMENT' && result.metadata) {
|
|
140
|
+
const suppressed = result.metadata.suppressedByIgnore;
|
|
141
|
+
if (typeof suppressed === 'number') {
|
|
142
|
+
this.suppressedByIgnoreCount += suppressed;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Log plugin completion with warning if errors occurred
|
|
146
|
+
if (!result.success) {
|
|
147
|
+
console.warn(`[Orchestrator] Plugin ${pluginName} reported failure`, {
|
|
148
|
+
errors: result.errors.length,
|
|
149
|
+
warnings: result.warnings.length,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
// Check for fatal errors - STOP immediately
|
|
153
|
+
// REG-357: In strict mode ENRICHMENT, don't halt on strict mode errors.
|
|
154
|
+
// The strict mode barrier after ENRICHMENT handles them collectively.
|
|
155
|
+
if (diagnosticCollector.hasFatal()) {
|
|
156
|
+
const allDiagnostics = diagnosticCollector.getAll();
|
|
157
|
+
const fatals = allDiagnostics.filter(d => d.severity === 'fatal');
|
|
158
|
+
// Skip halt only if ALL fatals are strict mode errors during ENRICHMENT.
|
|
159
|
+
// If any non-strict fatal exists, halt immediately.
|
|
160
|
+
const allStrictErrors = fatals.every(d => d.code.startsWith('STRICT_'));
|
|
161
|
+
if (!(strictMode && phaseName === 'ENRICHMENT' && allStrictErrors)) {
|
|
162
|
+
const fatal = fatals[0];
|
|
163
|
+
throw new Error(`Fatal error in ${pluginName}: ${fatal?.message || 'Unknown fatal error'}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return delta;
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
// Plugin threw an exception (not just returned errors)
|
|
170
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
171
|
+
// Don't re-add if this was already a fatal error we threw
|
|
172
|
+
if (!diagnosticCollector.hasFatal()) {
|
|
173
|
+
diagnosticCollector.add({
|
|
174
|
+
code: 'ERR_PLUGIN_THREW',
|
|
175
|
+
severity: 'fatal',
|
|
176
|
+
message: error.message,
|
|
177
|
+
phase: phaseName,
|
|
178
|
+
plugin: pluginName,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
throw error; // Re-throw to stop analysis
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async runPhase(phaseName, context) {
|
|
185
|
+
const { plugins, onProgress, logger } = this.deps;
|
|
186
|
+
// Filter plugins for this phase
|
|
187
|
+
const phasePlugins = plugins.filter(plugin => plugin.metadata.phase === phaseName);
|
|
188
|
+
// Topological sort by dependencies (REG-367, RFD-2)
|
|
189
|
+
const pluginMap = new Map(phasePlugins.map(p => [p.metadata.name, p]));
|
|
190
|
+
// Build dependency graph for ENRICHMENT (includes consumer index for RFD-17),
|
|
191
|
+
// or simple dependency list for other phases.
|
|
192
|
+
let consumerIndex = null;
|
|
193
|
+
const sortedIds = (() => {
|
|
194
|
+
if (phaseName === 'ENRICHMENT') {
|
|
195
|
+
const depInfo = buildDependencyGraph(phasePlugins);
|
|
196
|
+
consumerIndex = depInfo.consumerIndex;
|
|
197
|
+
return toposort(depInfo.items);
|
|
198
|
+
}
|
|
199
|
+
return toposort(phasePlugins.map(p => ({
|
|
200
|
+
id: p.metadata.name,
|
|
201
|
+
dependencies: p.metadata.dependencies ?? [],
|
|
202
|
+
})));
|
|
203
|
+
})();
|
|
204
|
+
phasePlugins.length = 0;
|
|
205
|
+
for (const id of sortedIds) {
|
|
206
|
+
const plugin = pluginMap.get(id);
|
|
207
|
+
if (plugin)
|
|
208
|
+
phasePlugins.push(plugin);
|
|
209
|
+
}
|
|
210
|
+
// Delta-driven selective enrichment (RFD-16 Phase 3)
|
|
211
|
+
const supportsBatch = !!(context.graph.beginBatch && context.graph.commitBatch);
|
|
212
|
+
// RFD-17: Use queue-based propagation for ENRICHMENT with batch support
|
|
213
|
+
if (phaseName === 'ENRICHMENT' && supportsBatch && consumerIndex) {
|
|
214
|
+
await this.runEnrichmentWithPropagation(phasePlugins, pluginMap, sortedIds, consumerIndex, context);
|
|
215
|
+
return new Set();
|
|
216
|
+
}
|
|
217
|
+
// Track accumulated changed types for ENRICHMENT skip optimization (fallback path)
|
|
218
|
+
const accumulatedTypes = new Set();
|
|
219
|
+
// Execute plugins sequentially (non-ENRICHMENT phases or non-batch backends)
|
|
220
|
+
for (let i = 0; i < phasePlugins.length; i++) {
|
|
221
|
+
const plugin = phasePlugins[i];
|
|
222
|
+
// Selective enrichment: skip enrichers whose consumed types didn't change
|
|
223
|
+
if (phaseName === 'ENRICHMENT' && supportsBatch) {
|
|
224
|
+
if (this.shouldSkipEnricher(plugin, accumulatedTypes)) {
|
|
225
|
+
logger.debug(`[SKIP] ${plugin.metadata.name} — no changes in consumed types [${(plugin.metadata.consumes ?? []).join(', ')}]`);
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
onProgress({
|
|
230
|
+
phase: phaseName.toLowerCase(),
|
|
231
|
+
currentPlugin: plugin.metadata.name,
|
|
232
|
+
message: `Running plugin ${i + 1}/${phasePlugins.length}: ${plugin.metadata.name}`
|
|
233
|
+
});
|
|
234
|
+
const delta = await this.executePlugin(plugin, context, phaseName);
|
|
235
|
+
// Accumulate changed types for downstream enricher skip checks
|
|
236
|
+
if (delta) {
|
|
237
|
+
for (const t of delta.changedNodeTypes)
|
|
238
|
+
accumulatedTypes.add(t);
|
|
239
|
+
for (const t of delta.changedEdgeTypes)
|
|
240
|
+
accumulatedTypes.add(t);
|
|
241
|
+
}
|
|
242
|
+
// Send completion for this plugin
|
|
243
|
+
onProgress({
|
|
244
|
+
phase: phaseName.toLowerCase(),
|
|
245
|
+
currentPlugin: plugin.metadata.name,
|
|
246
|
+
message: `✓ ${plugin.metadata.name} complete`
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
return accumulatedTypes;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Queue-based enrichment with dependency propagation (RFD-17).
|
|
253
|
+
*
|
|
254
|
+
* When an enricher's output changes (delta.changedEdgeTypes non-empty),
|
|
255
|
+
* downstream enrichers consuming those edge types are enqueued for re-run.
|
|
256
|
+
* Queue respects topological order. Each enricher runs at most once.
|
|
257
|
+
* Termination guaranteed by DAG structure + processed-set deduplication.
|
|
258
|
+
*/
|
|
259
|
+
async runEnrichmentWithPropagation(phasePlugins, pluginMap, sortedIds, consumerIndex, context) {
|
|
260
|
+
const { onProgress, logger } = this.deps;
|
|
261
|
+
// Queue state
|
|
262
|
+
const pending = new Set();
|
|
263
|
+
const processed = new Set();
|
|
264
|
+
// Seed: enqueue all level-0 enrichers (they always run)
|
|
265
|
+
for (const plugin of phasePlugins) {
|
|
266
|
+
const consumes = plugin.metadata.consumes ?? [];
|
|
267
|
+
if (consumes.length === 0) {
|
|
268
|
+
pending.add(plugin.metadata.name);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Propagation loop
|
|
272
|
+
while (pending.size > 0) {
|
|
273
|
+
const enricherName = this.dequeueNextEnricher(pending, sortedIds);
|
|
274
|
+
if (!enricherName)
|
|
275
|
+
break;
|
|
276
|
+
if (processed.has(enricherName))
|
|
277
|
+
continue;
|
|
278
|
+
const plugin = pluginMap.get(enricherName);
|
|
279
|
+
if (!plugin)
|
|
280
|
+
continue;
|
|
281
|
+
onProgress({
|
|
282
|
+
phase: 'enrichment',
|
|
283
|
+
currentPlugin: enricherName,
|
|
284
|
+
message: `Running enricher ${processed.size + 1}/${phasePlugins.length}: ${enricherName}`,
|
|
285
|
+
});
|
|
286
|
+
const delta = await this.executePlugin(plugin, context, 'ENRICHMENT');
|
|
287
|
+
processed.add(enricherName);
|
|
288
|
+
// Propagate: enqueue downstream enrichers for changed types.
|
|
289
|
+
// Check both changedEdgeTypes and changedNodeTypes, since consumes
|
|
290
|
+
// declarations can match either (consistent with RFD-16 accumulation).
|
|
291
|
+
if (delta) {
|
|
292
|
+
const changedTypes = [...delta.changedEdgeTypes, ...delta.changedNodeTypes];
|
|
293
|
+
for (const changedType of changedTypes) {
|
|
294
|
+
const consumers = consumerIndex.get(changedType);
|
|
295
|
+
if (!consumers)
|
|
296
|
+
continue;
|
|
297
|
+
for (const consumer of consumers) {
|
|
298
|
+
if (!processed.has(consumer)) {
|
|
299
|
+
pending.add(consumer);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
onProgress({
|
|
305
|
+
phase: 'enrichment',
|
|
306
|
+
currentPlugin: enricherName,
|
|
307
|
+
message: `✓ ${enricherName} complete`,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
// Log skipped enrichers (not enqueued because their consumed types never appeared)
|
|
311
|
+
for (const plugin of phasePlugins) {
|
|
312
|
+
if (!processed.has(plugin.metadata.name)) {
|
|
313
|
+
const consumes = plugin.metadata.consumes ?? [];
|
|
314
|
+
logger.debug(`[SKIP] ${plugin.metadata.name} — no changes in consumed types [${consumes.join(', ')}]`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Dequeue the next enricher from pending set, respecting topological order.
|
|
320
|
+
* Returns null if pending is empty.
|
|
321
|
+
*/
|
|
322
|
+
dequeueNextEnricher(pending, sortedIds) {
|
|
323
|
+
for (const id of sortedIds) {
|
|
324
|
+
if (pending.has(id)) {
|
|
325
|
+
pending.delete(id);
|
|
326
|
+
return id;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=PhaseRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhaseRunner.js","sourceRoot":"","sources":["../src/PhaseRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ServiceDefinition } from '@grafema/types';
|
|
1
|
+
import type { ServiceDefinition, RoutingRule } from '@grafema/types';
|
|
2
2
|
/**
|
|
3
3
|
* Grafema configuration schema.
|
|
4
4
|
*
|
|
@@ -32,6 +32,14 @@ import type { ServiceDefinition } from '@grafema/types';
|
|
|
32
32
|
* If 'services' is specified and non-empty, auto-discovery plugins are skipped entirely.
|
|
33
33
|
*/
|
|
34
34
|
export interface GrafemaConfig {
|
|
35
|
+
/**
|
|
36
|
+
* Config schema version (major.minor.patch, no pre-release tag).
|
|
37
|
+
* Must be compatible with the running Grafema version.
|
|
38
|
+
* If omitted, no version check is performed (backward compatibility).
|
|
39
|
+
*
|
|
40
|
+
* @example "0.2.5"
|
|
41
|
+
*/
|
|
42
|
+
version?: string;
|
|
35
43
|
plugins: {
|
|
36
44
|
discovery?: string[];
|
|
37
45
|
indexing: string[];
|
|
@@ -54,6 +62,22 @@ export interface GrafemaConfig {
|
|
|
54
62
|
* See OrchestratorConfig.exclude for documentation.
|
|
55
63
|
*/
|
|
56
64
|
exclude?: string[];
|
|
65
|
+
/**
|
|
66
|
+
* Routing rules for cross-service URL mapping (REG-256).
|
|
67
|
+
* Describes how infrastructure (nginx, gateway) transforms URLs between services.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```yaml
|
|
71
|
+
* routing:
|
|
72
|
+
* - from: frontend
|
|
73
|
+
* to: backend
|
|
74
|
+
* stripPrefix: /api
|
|
75
|
+
* - from: frontend
|
|
76
|
+
* to: auth-service
|
|
77
|
+
* stripPrefix: /auth
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
routing?: RoutingRule[];
|
|
57
81
|
/**
|
|
58
82
|
* Enable strict mode for fail-fast debugging.
|
|
59
83
|
* When true, analysis fails if enrichers cannot resolve references.
|
|
@@ -115,6 +139,17 @@ export declare const DEFAULT_CONFIG: GrafemaConfig;
|
|
|
115
139
|
export declare function loadConfig(projectPath: string, logger?: {
|
|
116
140
|
warn: (msg: string) => void;
|
|
117
141
|
}): GrafemaConfig;
|
|
142
|
+
/**
|
|
143
|
+
* Validate config version compatibility with running Grafema version.
|
|
144
|
+
* THROWS on error (fail loudly per project convention).
|
|
145
|
+
*
|
|
146
|
+
* Compares major.minor.patch (pre-release tags are stripped).
|
|
147
|
+
* If config has no version field, validation passes silently (backward compat).
|
|
148
|
+
*
|
|
149
|
+
* @param configVersion - Version string from config file (may be undefined)
|
|
150
|
+
* @param currentVersion - Override for testing (defaults to GRAFEMA_VERSION)
|
|
151
|
+
*/
|
|
152
|
+
export declare function validateVersion(configVersion: unknown, currentVersion?: string): void;
|
|
118
153
|
/**
|
|
119
154
|
* Validate services array structure.
|
|
120
155
|
* THROWS on error (fail loudly per Linus review).
|
|
@@ -137,6 +172,21 @@ export declare function validateServices(services: unknown, projectPath: string)
|
|
|
137
172
|
* @param projectPath - Project root for path validation
|
|
138
173
|
*/
|
|
139
174
|
export declare function validateWorkspace(workspace: unknown, projectPath: string): void;
|
|
175
|
+
/**
|
|
176
|
+
* Validate routing rules structure (REG-256).
|
|
177
|
+
* THROWS on error (fail loudly per project convention).
|
|
178
|
+
*
|
|
179
|
+
* Validation rules:
|
|
180
|
+
* 1. Must be an array if provided
|
|
181
|
+
* 2. Each rule must have 'from' and 'to' as non-empty strings
|
|
182
|
+
* 3. 'stripPrefix' must start with '/' if provided
|
|
183
|
+
* 4. 'addPrefix' must start with '/' if provided
|
|
184
|
+
* 5. 'from' and 'to' must reference services defined in the services array
|
|
185
|
+
*
|
|
186
|
+
* @param routing - Parsed routing rules (may be undefined)
|
|
187
|
+
* @param services - Parsed services array (for cross-validation)
|
|
188
|
+
*/
|
|
189
|
+
export declare function validateRouting(routing: unknown, services: ServiceDefinition[]): void;
|
|
140
190
|
/**
|
|
141
191
|
* Validate include/exclude patterns.
|
|
142
192
|
* THROWS on error (fail loudly per project convention).
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,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;IAE9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IAExB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,aA8C5B,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,CAsFf;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,OAAO,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CAyBN;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAqE7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA+D/E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,IAAI,CA8DrF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GACtC,IAAI,CAkCN"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { readFileSync, existsSync, statSync } from 'fs';
|
|
2
2
|
import { join, basename } from 'path';
|
|
3
3
|
import { parse as parseYAML } from 'yaml';
|
|
4
|
+
import { GRAFEMA_VERSION, getSchemaVersion } from '../version.js';
|
|
4
5
|
/**
|
|
5
6
|
* Default plugin configuration.
|
|
6
7
|
* Matches current DEFAULT_PLUGINS in analyze.ts and config.ts (MCP).
|
|
7
8
|
*/
|
|
8
9
|
export const DEFAULT_CONFIG = {
|
|
10
|
+
version: getSchemaVersion(GRAFEMA_VERSION),
|
|
9
11
|
plugins: {
|
|
10
12
|
discovery: [],
|
|
11
13
|
indexing: ['JSModuleIndexer'],
|
|
@@ -13,6 +15,7 @@ export const DEFAULT_CONFIG = {
|
|
|
13
15
|
'JSASTAnalyzer',
|
|
14
16
|
'ExpressRouteAnalyzer',
|
|
15
17
|
'ExpressResponseAnalyzer',
|
|
18
|
+
'NestJSRouteAnalyzer',
|
|
16
19
|
'SocketIOAnalyzer',
|
|
17
20
|
'DatabaseAnalyzer',
|
|
18
21
|
'FetchAnalyzer',
|
|
@@ -29,7 +32,9 @@ export const DEFAULT_CONFIG = {
|
|
|
29
32
|
'ExpressHandlerLinker',
|
|
30
33
|
'PrefixEvaluator',
|
|
31
34
|
'ImportExportLinker',
|
|
32
|
-
'
|
|
35
|
+
'ConfigRoutingMapBuilder',
|
|
36
|
+
'ServiceConnectionEnricher',
|
|
37
|
+
'CallbackCallResolver',
|
|
33
38
|
],
|
|
34
39
|
validation: [
|
|
35
40
|
'GraphConnectivityValidator',
|
|
@@ -37,9 +42,12 @@ export const DEFAULT_CONFIG = {
|
|
|
37
42
|
'EvalBanValidator',
|
|
38
43
|
'CallResolverValidator',
|
|
39
44
|
'SQLInjectionValidator',
|
|
45
|
+
'AwaitInLoopValidator',
|
|
40
46
|
'ShadowingDetector',
|
|
41
47
|
'TypeScriptDeadCodeValidator',
|
|
42
48
|
'BrokenImportValidator',
|
|
49
|
+
'UnconnectedRouteValidator',
|
|
50
|
+
'PackageCoverageValidator',
|
|
43
51
|
],
|
|
44
52
|
},
|
|
45
53
|
services: [], // Empty by default (uses auto-discovery)
|
|
@@ -87,6 +95,8 @@ export function loadConfig(projectPath, logger = console) {
|
|
|
87
95
|
logger.warn('Using default configuration');
|
|
88
96
|
return DEFAULT_CONFIG;
|
|
89
97
|
}
|
|
98
|
+
// Validate version compatibility (THROWS on error) - REG-403
|
|
99
|
+
validateVersion(parsed.version);
|
|
90
100
|
// Validate services array if present (THROWS on error per Linus review)
|
|
91
101
|
// This is OUTSIDE try-catch - config errors MUST throw
|
|
92
102
|
validateServices(parsed.services, projectPath);
|
|
@@ -94,6 +104,8 @@ export function loadConfig(projectPath, logger = console) {
|
|
|
94
104
|
validatePatterns(parsed.include, parsed.exclude, logger);
|
|
95
105
|
// Validate workspace.roots if present (THROWS on error) - REG-76
|
|
96
106
|
validateWorkspace(parsed.workspace, projectPath);
|
|
107
|
+
// Validate routing rules if present (THROWS on error) - REG-256
|
|
108
|
+
validateRouting(parsed.routing, (parsed.services || []));
|
|
97
109
|
// Merge with defaults (user config may be partial)
|
|
98
110
|
return mergeConfig(DEFAULT_CONFIG, parsed);
|
|
99
111
|
}
|
|
@@ -111,6 +123,8 @@ export function loadConfig(projectPath, logger = console) {
|
|
|
111
123
|
logger.warn('Using default configuration');
|
|
112
124
|
return DEFAULT_CONFIG;
|
|
113
125
|
}
|
|
126
|
+
// Validate version compatibility (THROWS on error) - REG-403
|
|
127
|
+
validateVersion(parsed.version);
|
|
114
128
|
// Validate services array if present (THROWS on error)
|
|
115
129
|
// This is OUTSIDE try-catch - config errors MUST throw
|
|
116
130
|
validateServices(parsed.services, projectPath);
|
|
@@ -118,11 +132,43 @@ export function loadConfig(projectPath, logger = console) {
|
|
|
118
132
|
validatePatterns(parsed.include, parsed.exclude, logger);
|
|
119
133
|
// Validate workspace.roots if present (THROWS on error) - REG-76
|
|
120
134
|
validateWorkspace(parsed.workspace, projectPath);
|
|
135
|
+
// Validate routing rules if present (THROWS on error) - REG-256
|
|
136
|
+
validateRouting(parsed.routing, (parsed.services || []));
|
|
121
137
|
return mergeConfig(DEFAULT_CONFIG, parsed);
|
|
122
138
|
}
|
|
123
139
|
// 3. No config file - return defaults
|
|
124
140
|
return DEFAULT_CONFIG;
|
|
125
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Validate config version compatibility with running Grafema version.
|
|
144
|
+
* THROWS on error (fail loudly per project convention).
|
|
145
|
+
*
|
|
146
|
+
* Compares major.minor.patch (pre-release tags are stripped).
|
|
147
|
+
* If config has no version field, validation passes silently (backward compat).
|
|
148
|
+
*
|
|
149
|
+
* @param configVersion - Version string from config file (may be undefined)
|
|
150
|
+
* @param currentVersion - Override for testing (defaults to GRAFEMA_VERSION)
|
|
151
|
+
*/
|
|
152
|
+
export function validateVersion(configVersion, currentVersion) {
|
|
153
|
+
// No version field = backward compat, accept silently
|
|
154
|
+
if (configVersion === undefined || configVersion === null) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (typeof configVersion !== 'string') {
|
|
158
|
+
throw new Error(`Config error: version must be a string, got ${typeof configVersion}`);
|
|
159
|
+
}
|
|
160
|
+
if (!configVersion.trim()) {
|
|
161
|
+
throw new Error('Config error: version cannot be empty');
|
|
162
|
+
}
|
|
163
|
+
const current = currentVersion ?? GRAFEMA_VERSION;
|
|
164
|
+
const configSchema = getSchemaVersion(configVersion);
|
|
165
|
+
const currentSchema = getSchemaVersion(current);
|
|
166
|
+
if (configSchema !== currentSchema) {
|
|
167
|
+
throw new Error(`Config error: config version "${configVersion}" is not compatible with ` +
|
|
168
|
+
`Grafema ${current}. Expected "${currentSchema}".\n` +
|
|
169
|
+
` Run: grafema init --force (to regenerate config for current version)`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
126
172
|
/**
|
|
127
173
|
* Validate services array structure.
|
|
128
174
|
* THROWS on error (fail loudly per Linus review).
|
|
@@ -182,6 +228,12 @@ export function validateServices(services, projectPath) {
|
|
|
182
228
|
throw new Error(`Config error: services[${i}].entryPoint cannot be empty or whitespace-only`);
|
|
183
229
|
}
|
|
184
230
|
}
|
|
231
|
+
// customerFacing validation (optional field) - must be boolean if provided (REG-256)
|
|
232
|
+
if (svc.customerFacing !== undefined) {
|
|
233
|
+
if (typeof svc.customerFacing !== 'boolean') {
|
|
234
|
+
throw new Error(`Config error: services[${i}].customerFacing must be a boolean, got ${typeof svc.customerFacing}`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
185
237
|
}
|
|
186
238
|
}
|
|
187
239
|
/**
|
|
@@ -249,6 +301,71 @@ export function validateWorkspace(workspace, projectPath) {
|
|
|
249
301
|
seenNames.add(rootName);
|
|
250
302
|
}
|
|
251
303
|
}
|
|
304
|
+
/**
|
|
305
|
+
* Validate routing rules structure (REG-256).
|
|
306
|
+
* THROWS on error (fail loudly per project convention).
|
|
307
|
+
*
|
|
308
|
+
* Validation rules:
|
|
309
|
+
* 1. Must be an array if provided
|
|
310
|
+
* 2. Each rule must have 'from' and 'to' as non-empty strings
|
|
311
|
+
* 3. 'stripPrefix' must start with '/' if provided
|
|
312
|
+
* 4. 'addPrefix' must start with '/' if provided
|
|
313
|
+
* 5. 'from' and 'to' must reference services defined in the services array
|
|
314
|
+
*
|
|
315
|
+
* @param routing - Parsed routing rules (may be undefined)
|
|
316
|
+
* @param services - Parsed services array (for cross-validation)
|
|
317
|
+
*/
|
|
318
|
+
export function validateRouting(routing, services) {
|
|
319
|
+
if (routing === undefined || routing === null)
|
|
320
|
+
return;
|
|
321
|
+
if (!Array.isArray(routing)) {
|
|
322
|
+
throw new Error(`Config error: routing must be an array, got ${typeof routing}`);
|
|
323
|
+
}
|
|
324
|
+
const serviceNames = new Set(services.map(s => s.name));
|
|
325
|
+
for (let i = 0; i < routing.length; i++) {
|
|
326
|
+
const rule = routing[i];
|
|
327
|
+
if (typeof rule !== 'object' || rule === null) {
|
|
328
|
+
throw new Error(`Config error: routing[${i}] must be an object`);
|
|
329
|
+
}
|
|
330
|
+
// from — required
|
|
331
|
+
if (typeof rule.from !== 'string' || !rule.from.trim()) {
|
|
332
|
+
throw new Error(`Config error: routing[${i}].from must be a non-empty string`);
|
|
333
|
+
}
|
|
334
|
+
// to — required
|
|
335
|
+
if (typeof rule.to !== 'string' || !rule.to.trim()) {
|
|
336
|
+
throw new Error(`Config error: routing[${i}].to must be a non-empty string`);
|
|
337
|
+
}
|
|
338
|
+
// Cross-validate against services (only if services are defined)
|
|
339
|
+
if (serviceNames.size > 0) {
|
|
340
|
+
if (!serviceNames.has(rule.from)) {
|
|
341
|
+
throw new Error(`Config error: routing[${i}].from "${rule.from}" does not match any service name. ` +
|
|
342
|
+
`Available: ${[...serviceNames].join(', ')}`);
|
|
343
|
+
}
|
|
344
|
+
if (!serviceNames.has(rule.to)) {
|
|
345
|
+
throw new Error(`Config error: routing[${i}].to "${rule.to}" does not match any service name. ` +
|
|
346
|
+
`Available: ${[...serviceNames].join(', ')}`);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// stripPrefix — optional, must start with /
|
|
350
|
+
if (rule.stripPrefix !== undefined) {
|
|
351
|
+
if (typeof rule.stripPrefix !== 'string') {
|
|
352
|
+
throw new Error(`Config error: routing[${i}].stripPrefix must be a string`);
|
|
353
|
+
}
|
|
354
|
+
if (!rule.stripPrefix.startsWith('/')) {
|
|
355
|
+
throw new Error(`Config error: routing[${i}].stripPrefix must start with '/'`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// addPrefix — optional, must start with /
|
|
359
|
+
if (rule.addPrefix !== undefined) {
|
|
360
|
+
if (typeof rule.addPrefix !== 'string') {
|
|
361
|
+
throw new Error(`Config error: routing[${i}].addPrefix must be a string`);
|
|
362
|
+
}
|
|
363
|
+
if (!rule.addPrefix.startsWith('/')) {
|
|
364
|
+
throw new Error(`Config error: routing[${i}].addPrefix must start with '/'`);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
252
369
|
/**
|
|
253
370
|
* Validate include/exclude patterns.
|
|
254
371
|
* THROWS on error (fail loudly per project convention).
|
|
@@ -302,6 +419,7 @@ export function validatePatterns(include, exclude, logger) {
|
|
|
302
419
|
*/
|
|
303
420
|
function mergeConfig(defaults, user) {
|
|
304
421
|
return {
|
|
422
|
+
version: user.version ?? defaults.version,
|
|
305
423
|
plugins: {
|
|
306
424
|
discovery: user.plugins?.discovery ?? defaults.plugins.discovery,
|
|
307
425
|
indexing: user.plugins?.indexing ?? defaults.plugins.indexing,
|
|
@@ -316,6 +434,8 @@ function mergeConfig(defaults, user) {
|
|
|
316
434
|
include: user.include ?? undefined,
|
|
317
435
|
exclude: user.exclude ?? undefined,
|
|
318
436
|
strict: user.strict ?? defaults.strict,
|
|
437
|
+
// Routing rules: pass through if specified (REG-256)
|
|
438
|
+
routing: user.routing ?? undefined,
|
|
319
439
|
// Workspace config: pass through if specified (REG-76)
|
|
320
440
|
workspace: user.workspace ?? undefined,
|
|
321
441
|
};
|