@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.
Files changed (769) hide show
  1. package/README.md +61 -23
  2. package/dist/DiscoveryManager.d.ts +59 -0
  3. package/dist/DiscoveryManager.d.ts.map +1 -0
  4. package/dist/DiscoveryManager.js +249 -0
  5. package/dist/DiscoveryManager.js.map +1 -0
  6. package/dist/GraphInitializer.d.ts +44 -0
  7. package/dist/GraphInitializer.d.ts.map +1 -0
  8. package/dist/GraphInitializer.js +121 -0
  9. package/dist/GraphInitializer.js.map +1 -0
  10. package/dist/GuaranteeChecker.d.ts +35 -0
  11. package/dist/GuaranteeChecker.d.ts.map +1 -0
  12. package/dist/GuaranteeChecker.js +81 -0
  13. package/dist/GuaranteeChecker.js.map +1 -0
  14. package/dist/Orchestrator.d.ts +34 -151
  15. package/dist/Orchestrator.d.ts.map +1 -1
  16. package/dist/Orchestrator.js +173 -741
  17. package/dist/Orchestrator.js.map +1 -1
  18. package/dist/OrchestratorTypes.d.ts +115 -0
  19. package/dist/OrchestratorTypes.d.ts.map +1 -0
  20. package/dist/OrchestratorTypes.js +6 -0
  21. package/dist/OrchestratorTypes.js.map +1 -0
  22. package/dist/ParallelAnalysisRunner.d.ts +43 -0
  23. package/dist/ParallelAnalysisRunner.d.ts.map +1 -0
  24. package/dist/ParallelAnalysisRunner.js +161 -0
  25. package/dist/ParallelAnalysisRunner.js.map +1 -0
  26. package/dist/PhaseRunner.d.ts +94 -0
  27. package/dist/PhaseRunner.d.ts.map +1 -0
  28. package/dist/PhaseRunner.js +332 -0
  29. package/dist/PhaseRunner.js.map +1 -0
  30. package/dist/config/ConfigLoader.d.ts +51 -1
  31. package/dist/config/ConfigLoader.d.ts.map +1 -1
  32. package/dist/config/ConfigLoader.js +121 -1
  33. package/dist/config/ConfigLoader.js.map +1 -1
  34. package/dist/config/index.d.ts +1 -1
  35. package/dist/config/index.d.ts.map +1 -1
  36. package/dist/config/index.js +1 -1
  37. package/dist/config/index.js.map +1 -1
  38. package/dist/core/ASTWorker.d.ts +2 -0
  39. package/dist/core/ASTWorker.d.ts.map +1 -1
  40. package/dist/core/ASTWorker.js +6 -2
  41. package/dist/core/ASTWorker.js.map +1 -1
  42. package/dist/core/FileOverview.d.ts +124 -0
  43. package/dist/core/FileOverview.d.ts.map +1 -0
  44. package/dist/core/FileOverview.js +257 -0
  45. package/dist/core/FileOverview.js.map +1 -0
  46. package/dist/core/GraphFreshnessChecker.d.ts +1 -1
  47. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -1
  48. package/dist/core/GraphFreshnessChecker.js +7 -5
  49. package/dist/core/GraphFreshnessChecker.js.map +1 -1
  50. package/dist/core/GuaranteeManager.d.ts +13 -0
  51. package/dist/core/GuaranteeManager.d.ts.map +1 -1
  52. package/dist/core/GuaranteeManager.js +63 -2
  53. package/dist/core/GuaranteeManager.js.map +1 -1
  54. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -1
  55. package/dist/core/IncrementalReanalyzer.js +6 -3
  56. package/dist/core/IncrementalReanalyzer.js.map +1 -1
  57. package/dist/core/NodeFactory.d.ts +81 -415
  58. package/dist/core/NodeFactory.d.ts.map +1 -1
  59. package/dist/core/NodeFactory.js +139 -336
  60. package/dist/core/NodeFactory.js.map +1 -1
  61. package/dist/core/ResourceRegistry.d.ts +17 -0
  62. package/dist/core/ResourceRegistry.d.ts.map +1 -0
  63. package/dist/core/ResourceRegistry.js +32 -0
  64. package/dist/core/ResourceRegistry.js.map +1 -0
  65. package/dist/core/ScopeTracker.d.ts +12 -0
  66. package/dist/core/ScopeTracker.d.ts.map +1 -1
  67. package/dist/core/ScopeTracker.js +24 -0
  68. package/dist/core/ScopeTracker.js.map +1 -1
  69. package/dist/core/SemanticId.d.ts +69 -0
  70. package/dist/core/SemanticId.d.ts.map +1 -1
  71. package/dist/core/SemanticId.js +134 -0
  72. package/dist/core/SemanticId.js.map +1 -1
  73. package/dist/core/brandNodeInternal.d.ts +14 -0
  74. package/dist/core/brandNodeInternal.d.ts.map +1 -0
  75. package/dist/core/brandNodeInternal.js +4 -0
  76. package/dist/core/brandNodeInternal.js.map +1 -0
  77. package/dist/core/buildDependencyGraph.d.ts +36 -0
  78. package/dist/core/buildDependencyGraph.d.ts.map +1 -0
  79. package/dist/core/buildDependencyGraph.js +78 -0
  80. package/dist/core/buildDependencyGraph.js.map +1 -0
  81. package/dist/core/factories/CoreFactory.d.ts +223 -0
  82. package/dist/core/factories/CoreFactory.d.ts.map +1 -0
  83. package/dist/core/factories/CoreFactory.js +127 -0
  84. package/dist/core/factories/CoreFactory.js.map +1 -0
  85. package/dist/core/factories/DatabaseFactory.d.ts +29 -0
  86. package/dist/core/factories/DatabaseFactory.d.ts.map +1 -0
  87. package/dist/core/factories/DatabaseFactory.js +25 -0
  88. package/dist/core/factories/DatabaseFactory.js.map +1 -0
  89. package/dist/core/factories/ExternalFactory.d.ts +11 -0
  90. package/dist/core/factories/ExternalFactory.d.ts.map +1 -0
  91. package/dist/core/factories/ExternalFactory.js +16 -0
  92. package/dist/core/factories/ExternalFactory.js.map +1 -0
  93. package/dist/core/factories/HttpFactory.d.ts +22 -0
  94. package/dist/core/factories/HttpFactory.d.ts.map +1 -0
  95. package/dist/core/factories/HttpFactory.js +32 -0
  96. package/dist/core/factories/HttpFactory.js.map +1 -0
  97. package/dist/core/factories/ReactFactory.d.ts +14 -0
  98. package/dist/core/factories/ReactFactory.d.ts.map +1 -0
  99. package/dist/core/factories/ReactFactory.js +13 -0
  100. package/dist/core/factories/ReactFactory.js.map +1 -0
  101. package/dist/core/factories/RustFactory.d.ts +62 -0
  102. package/dist/core/factories/RustFactory.d.ts.map +1 -0
  103. package/dist/core/factories/RustFactory.js +32 -0
  104. package/dist/core/factories/RustFactory.js.map +1 -0
  105. package/dist/core/factories/ServiceFactory.d.ts +12 -0
  106. package/dist/core/factories/ServiceFactory.d.ts.map +1 -0
  107. package/dist/core/factories/ServiceFactory.js +22 -0
  108. package/dist/core/factories/ServiceFactory.js.map +1 -0
  109. package/dist/core/factories/SocketFactory.d.ts +31 -0
  110. package/dist/core/factories/SocketFactory.d.ts.map +1 -0
  111. package/dist/core/factories/SocketFactory.js +35 -0
  112. package/dist/core/factories/SocketFactory.js.map +1 -0
  113. package/dist/core/nodes/DatabaseNode.d.ts +85 -0
  114. package/dist/core/nodes/DatabaseNode.d.ts.map +1 -0
  115. package/dist/core/nodes/DatabaseNode.js +118 -0
  116. package/dist/core/nodes/DatabaseNode.js.map +1 -0
  117. package/dist/core/nodes/ExpressMiddlewareNode.d.ts +47 -0
  118. package/dist/core/nodes/ExpressMiddlewareNode.d.ts.map +1 -0
  119. package/dist/core/nodes/ExpressMiddlewareNode.js +63 -0
  120. package/dist/core/nodes/ExpressMiddlewareNode.js.map +1 -0
  121. package/dist/core/nodes/ExpressMountNode.d.ts +44 -0
  122. package/dist/core/nodes/ExpressMountNode.d.ts.map +1 -0
  123. package/dist/core/nodes/ExpressMountNode.js +61 -0
  124. package/dist/core/nodes/ExpressMountNode.js.map +1 -0
  125. package/dist/core/nodes/ExternalApiNode.d.ts +29 -0
  126. package/dist/core/nodes/ExternalApiNode.d.ts.map +1 -0
  127. package/dist/core/nodes/ExternalApiNode.js +41 -0
  128. package/dist/core/nodes/ExternalApiNode.js.map +1 -0
  129. package/dist/core/nodes/ExternalFunctionNode.d.ts +40 -0
  130. package/dist/core/nodes/ExternalFunctionNode.d.ts.map +1 -0
  131. package/dist/core/nodes/ExternalFunctionNode.js +54 -0
  132. package/dist/core/nodes/ExternalFunctionNode.js.map +1 -0
  133. package/dist/core/nodes/FetchRequestNode.d.ts +54 -0
  134. package/dist/core/nodes/FetchRequestNode.d.ts.map +1 -0
  135. package/dist/core/nodes/FetchRequestNode.js +67 -0
  136. package/dist/core/nodes/FetchRequestNode.js.map +1 -0
  137. package/dist/core/nodes/HttpRouteNode.d.ts +58 -0
  138. package/dist/core/nodes/HttpRouteNode.d.ts.map +1 -0
  139. package/dist/core/nodes/HttpRouteNode.js +72 -0
  140. package/dist/core/nodes/HttpRouteNode.js.map +1 -0
  141. package/dist/core/nodes/NodeKind.d.ts +1 -0
  142. package/dist/core/nodes/NodeKind.d.ts.map +1 -1
  143. package/dist/core/nodes/NodeKind.js +1 -0
  144. package/dist/core/nodes/NodeKind.js.map +1 -1
  145. package/dist/core/nodes/ReactNode.d.ts +53 -0
  146. package/dist/core/nodes/ReactNode.d.ts.map +1 -0
  147. package/dist/core/nodes/ReactNode.js +70 -0
  148. package/dist/core/nodes/ReactNode.js.map +1 -0
  149. package/dist/core/nodes/RustCallNode.d.ts +46 -0
  150. package/dist/core/nodes/RustCallNode.d.ts.map +1 -0
  151. package/dist/core/nodes/RustCallNode.js +62 -0
  152. package/dist/core/nodes/RustCallNode.js.map +1 -0
  153. package/dist/core/nodes/RustFunctionNode.d.ts +58 -0
  154. package/dist/core/nodes/RustFunctionNode.d.ts.map +1 -0
  155. package/dist/core/nodes/RustFunctionNode.js +67 -0
  156. package/dist/core/nodes/RustFunctionNode.js.map +1 -0
  157. package/dist/core/nodes/RustImplNode.d.ts +35 -0
  158. package/dist/core/nodes/RustImplNode.d.ts.map +1 -0
  159. package/dist/core/nodes/RustImplNode.js +55 -0
  160. package/dist/core/nodes/RustImplNode.js.map +1 -0
  161. package/dist/core/nodes/RustMethodNode.d.ts +64 -0
  162. package/dist/core/nodes/RustMethodNode.d.ts.map +1 -0
  163. package/dist/core/nodes/RustMethodNode.js +76 -0
  164. package/dist/core/nodes/RustMethodNode.js.map +1 -0
  165. package/dist/core/nodes/RustModuleNode.d.ts +40 -0
  166. package/dist/core/nodes/RustModuleNode.d.ts.map +1 -0
  167. package/dist/core/nodes/RustModuleNode.js +57 -0
  168. package/dist/core/nodes/RustModuleNode.js.map +1 -0
  169. package/dist/core/nodes/RustStructNode.d.ts +38 -0
  170. package/dist/core/nodes/RustStructNode.d.ts.map +1 -0
  171. package/dist/core/nodes/RustStructNode.js +54 -0
  172. package/dist/core/nodes/RustStructNode.js.map +1 -0
  173. package/dist/core/nodes/RustTraitNode.d.ts +40 -0
  174. package/dist/core/nodes/RustTraitNode.d.ts.map +1 -0
  175. package/dist/core/nodes/RustTraitNode.js +52 -0
  176. package/dist/core/nodes/RustTraitNode.js.map +1 -0
  177. package/dist/core/nodes/ServiceLayerNode.d.ts +85 -0
  178. package/dist/core/nodes/ServiceLayerNode.d.ts.map +1 -0
  179. package/dist/core/nodes/ServiceLayerNode.js +122 -0
  180. package/dist/core/nodes/ServiceLayerNode.js.map +1 -0
  181. package/dist/core/nodes/SocketIONode.d.ts +71 -0
  182. package/dist/core/nodes/SocketIONode.d.ts.map +1 -0
  183. package/dist/core/nodes/SocketIONode.js +111 -0
  184. package/dist/core/nodes/SocketIONode.js.map +1 -0
  185. package/dist/core/nodes/SocketNode.d.ts +87 -0
  186. package/dist/core/nodes/SocketNode.d.ts.map +1 -0
  187. package/dist/core/nodes/SocketNode.js +124 -0
  188. package/dist/core/nodes/SocketNode.js.map +1 -0
  189. package/dist/core/nodes/TypeNode.d.ts +26 -1
  190. package/dist/core/nodes/TypeNode.d.ts.map +1 -1
  191. package/dist/core/nodes/TypeNode.js +21 -3
  192. package/dist/core/nodes/TypeNode.js.map +1 -1
  193. package/dist/core/nodes/TypeParameterNode.d.ts +44 -0
  194. package/dist/core/nodes/TypeParameterNode.d.ts.map +1 -0
  195. package/dist/core/nodes/TypeParameterNode.js +64 -0
  196. package/dist/core/nodes/TypeParameterNode.js.map +1 -0
  197. package/dist/core/nodes/index.d.ts +19 -0
  198. package/dist/core/nodes/index.d.ts.map +1 -1
  199. package/dist/core/nodes/index.js +26 -0
  200. package/dist/core/nodes/index.js.map +1 -1
  201. package/dist/index.d.ts +33 -6
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +30 -3
  204. package/dist/index.js.map +1 -1
  205. package/dist/plugins/InfraAnalyzer.d.ts +110 -0
  206. package/dist/plugins/InfraAnalyzer.d.ts.map +1 -0
  207. package/dist/plugins/InfraAnalyzer.js +170 -0
  208. package/dist/plugins/InfraAnalyzer.js.map +1 -0
  209. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  210. package/dist/plugins/analysis/DatabaseAnalyzer.js +18 -15
  211. package/dist/plugins/analysis/DatabaseAnalyzer.js.map +1 -1
  212. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  213. package/dist/plugins/analysis/ExpressAnalyzer.js +27 -26
  214. package/dist/plugins/analysis/ExpressAnalyzer.js.map +1 -1
  215. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -1
  216. package/dist/plugins/analysis/ExpressResponseAnalyzer.js +5 -3
  217. package/dist/plugins/analysis/ExpressResponseAnalyzer.js.map +1 -1
  218. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  219. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +36 -39
  220. package/dist/plugins/analysis/ExpressRouteAnalyzer.js.map +1 -1
  221. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  222. package/dist/plugins/analysis/FetchAnalyzer.js +23 -39
  223. package/dist/plugins/analysis/FetchAnalyzer.js.map +1 -1
  224. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  225. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +3 -2
  226. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js.map +1 -1
  227. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +23 -85
  228. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  229. package/dist/plugins/analysis/JSASTAnalyzer.js +351 -1887
  230. package/dist/plugins/analysis/JSASTAnalyzer.js.map +1 -1
  231. package/dist/plugins/analysis/NestJSRouteAnalyzer.d.ts +28 -0
  232. package/dist/plugins/analysis/NestJSRouteAnalyzer.d.ts.map +1 -0
  233. package/dist/plugins/analysis/NestJSRouteAnalyzer.js +196 -0
  234. package/dist/plugins/analysis/NestJSRouteAnalyzer.js.map +1 -0
  235. package/dist/plugins/analysis/ReactAnalyzer.d.ts +1 -61
  236. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  237. package/dist/plugins/analysis/ReactAnalyzer.js +24 -915
  238. package/dist/plugins/analysis/ReactAnalyzer.js.map +1 -1
  239. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  240. package/dist/plugins/analysis/RustAnalyzer.js +31 -66
  241. package/dist/plugins/analysis/RustAnalyzer.js.map +1 -1
  242. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  243. package/dist/plugins/analysis/SQLiteAnalyzer.js +13 -6
  244. package/dist/plugins/analysis/SQLiteAnalyzer.js.map +1 -1
  245. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  246. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +10 -7
  247. package/dist/plugins/analysis/ServiceLayerAnalyzer.js.map +1 -1
  248. package/dist/plugins/analysis/SocketAnalyzer.d.ts +81 -0
  249. package/dist/plugins/analysis/SocketAnalyzer.d.ts.map +1 -0
  250. package/dist/plugins/analysis/SocketAnalyzer.js +475 -0
  251. package/dist/plugins/analysis/SocketAnalyzer.js.map +1 -0
  252. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  253. package/dist/plugins/analysis/SocketIOAnalyzer.js +13 -18
  254. package/dist/plugins/analysis/SocketIOAnalyzer.js.map +1 -1
  255. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  256. package/dist/plugins/analysis/SystemDbAnalyzer.js +8 -5
  257. package/dist/plugins/analysis/SystemDbAnalyzer.js.map +1 -1
  258. package/dist/plugins/analysis/ast/CollisionResolver.d.ts +65 -0
  259. package/dist/plugins/analysis/ast/CollisionResolver.d.ts.map +1 -0
  260. package/dist/plugins/analysis/ast/CollisionResolver.js +106 -0
  261. package/dist/plugins/analysis/ast/CollisionResolver.js.map +1 -0
  262. package/dist/plugins/analysis/ast/FunctionBodyContext.d.ts +124 -0
  263. package/dist/plugins/analysis/ast/FunctionBodyContext.d.ts.map +1 -0
  264. package/dist/plugins/analysis/ast/FunctionBodyContext.js +151 -0
  265. package/dist/plugins/analysis/ast/FunctionBodyContext.js.map +1 -0
  266. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +26 -261
  267. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  268. package/dist/plugins/analysis/ast/GraphBuilder.js +251 -2494
  269. package/dist/plugins/analysis/ast/GraphBuilder.js.map +1 -1
  270. package/dist/plugins/analysis/ast/IdGenerator.d.ts +42 -0
  271. package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -1
  272. package/dist/plugins/analysis/ast/IdGenerator.js +61 -1
  273. package/dist/plugins/analysis/ast/IdGenerator.js.map +1 -1
  274. package/dist/plugins/analysis/ast/builders/AssignmentBuilder.d.ts +15 -0
  275. package/dist/plugins/analysis/ast/builders/AssignmentBuilder.d.ts.map +1 -0
  276. package/dist/plugins/analysis/ast/builders/AssignmentBuilder.js +274 -0
  277. package/dist/plugins/analysis/ast/builders/AssignmentBuilder.js.map +1 -0
  278. package/dist/plugins/analysis/ast/builders/CallFlowBuilder.d.ts +22 -0
  279. package/dist/plugins/analysis/ast/builders/CallFlowBuilder.d.ts.map +1 -0
  280. package/dist/plugins/analysis/ast/builders/CallFlowBuilder.js +178 -0
  281. package/dist/plugins/analysis/ast/builders/CallFlowBuilder.js.map +1 -0
  282. package/dist/plugins/analysis/ast/builders/ControlFlowBuilder.d.ts +76 -0
  283. package/dist/plugins/analysis/ast/builders/ControlFlowBuilder.d.ts.map +1 -0
  284. package/dist/plugins/analysis/ast/builders/ControlFlowBuilder.js +387 -0
  285. package/dist/plugins/analysis/ast/builders/ControlFlowBuilder.js.map +1 -0
  286. package/dist/plugins/analysis/ast/builders/CoreBuilder.d.ts +38 -0
  287. package/dist/plugins/analysis/ast/builders/CoreBuilder.d.ts.map +1 -0
  288. package/dist/plugins/analysis/ast/builders/CoreBuilder.js +240 -0
  289. package/dist/plugins/analysis/ast/builders/CoreBuilder.js.map +1 -0
  290. package/dist/plugins/analysis/ast/builders/ModuleRuntimeBuilder.d.ts +53 -0
  291. package/dist/plugins/analysis/ast/builders/ModuleRuntimeBuilder.d.ts.map +1 -0
  292. package/dist/plugins/analysis/ast/builders/ModuleRuntimeBuilder.js +355 -0
  293. package/dist/plugins/analysis/ast/builders/ModuleRuntimeBuilder.js.map +1 -0
  294. package/dist/plugins/analysis/ast/builders/MutationBuilder.d.ts +46 -0
  295. package/dist/plugins/analysis/ast/builders/MutationBuilder.d.ts.map +1 -0
  296. package/dist/plugins/analysis/ast/builders/MutationBuilder.js +264 -0
  297. package/dist/plugins/analysis/ast/builders/MutationBuilder.js.map +1 -0
  298. package/dist/plugins/analysis/ast/builders/ReturnBuilder.d.ts +23 -0
  299. package/dist/plugins/analysis/ast/builders/ReturnBuilder.d.ts.map +1 -0
  300. package/dist/plugins/analysis/ast/builders/ReturnBuilder.js +206 -0
  301. package/dist/plugins/analysis/ast/builders/ReturnBuilder.js.map +1 -0
  302. package/dist/plugins/analysis/ast/builders/TypeSystemBuilder.d.ts +64 -0
  303. package/dist/plugins/analysis/ast/builders/TypeSystemBuilder.d.ts.map +1 -0
  304. package/dist/plugins/analysis/ast/builders/TypeSystemBuilder.js +370 -0
  305. package/dist/plugins/analysis/ast/builders/TypeSystemBuilder.js.map +1 -0
  306. package/dist/plugins/analysis/ast/builders/UpdateExpressionBuilder.d.ts +46 -0
  307. package/dist/plugins/analysis/ast/builders/UpdateExpressionBuilder.d.ts.map +1 -0
  308. package/dist/plugins/analysis/ast/builders/UpdateExpressionBuilder.js +191 -0
  309. package/dist/plugins/analysis/ast/builders/UpdateExpressionBuilder.js.map +1 -0
  310. package/dist/plugins/analysis/ast/builders/YieldBuilder.d.ts +30 -0
  311. package/dist/plugins/analysis/ast/builders/YieldBuilder.d.ts.map +1 -0
  312. package/dist/plugins/analysis/ast/builders/YieldBuilder.js +214 -0
  313. package/dist/plugins/analysis/ast/builders/YieldBuilder.js.map +1 -0
  314. package/dist/plugins/analysis/ast/builders/index.d.ts +12 -0
  315. package/dist/plugins/analysis/ast/builders/index.d.ts.map +1 -0
  316. package/dist/plugins/analysis/ast/builders/index.js +11 -0
  317. package/dist/plugins/analysis/ast/builders/index.js.map +1 -0
  318. package/dist/plugins/analysis/ast/builders/types.d.ts +30 -0
  319. package/dist/plugins/analysis/ast/builders/types.d.ts.map +1 -0
  320. package/dist/plugins/analysis/ast/builders/types.js +8 -0
  321. package/dist/plugins/analysis/ast/builders/types.js.map +1 -0
  322. package/dist/plugins/analysis/ast/handlers/AnalyzerDelegate.d.ts +50 -0
  323. package/dist/plugins/analysis/ast/handlers/AnalyzerDelegate.d.ts.map +1 -0
  324. package/dist/plugins/analysis/ast/handlers/AnalyzerDelegate.js +2 -0
  325. package/dist/plugins/analysis/ast/handlers/AnalyzerDelegate.js.map +1 -0
  326. package/dist/plugins/analysis/ast/handlers/BranchHandler.d.ts +18 -0
  327. package/dist/plugins/analysis/ast/handlers/BranchHandler.d.ts.map +1 -0
  328. package/dist/plugins/analysis/ast/handlers/BranchHandler.js +244 -0
  329. package/dist/plugins/analysis/ast/handlers/BranchHandler.js.map +1 -0
  330. package/dist/plugins/analysis/ast/handlers/CallExpressionHandler.d.ts +7 -0
  331. package/dist/plugins/analysis/ast/handlers/CallExpressionHandler.d.ts.map +1 -0
  332. package/dist/plugins/analysis/ast/handlers/CallExpressionHandler.js +295 -0
  333. package/dist/plugins/analysis/ast/handlers/CallExpressionHandler.js.map +1 -0
  334. package/dist/plugins/analysis/ast/handlers/FunctionBodyHandler.d.ts +22 -0
  335. package/dist/plugins/analysis/ast/handlers/FunctionBodyHandler.d.ts.map +1 -0
  336. package/dist/plugins/analysis/ast/handlers/FunctionBodyHandler.js +9 -0
  337. package/dist/plugins/analysis/ast/handlers/FunctionBodyHandler.js.map +1 -0
  338. package/dist/plugins/analysis/ast/handlers/LoopHandler.d.ts +13 -0
  339. package/dist/plugins/analysis/ast/handlers/LoopHandler.d.ts.map +1 -0
  340. package/dist/plugins/analysis/ast/handlers/LoopHandler.js +207 -0
  341. package/dist/plugins/analysis/ast/handlers/LoopHandler.js.map +1 -0
  342. package/dist/plugins/analysis/ast/handlers/NestedFunctionHandler.d.ts +13 -0
  343. package/dist/plugins/analysis/ast/handlers/NestedFunctionHandler.d.ts.map +1 -0
  344. package/dist/plugins/analysis/ast/handlers/NestedFunctionHandler.js +174 -0
  345. package/dist/plugins/analysis/ast/handlers/NestedFunctionHandler.js.map +1 -0
  346. package/dist/plugins/analysis/ast/handlers/NewExpressionHandler.d.ts +12 -0
  347. package/dist/plugins/analysis/ast/handlers/NewExpressionHandler.d.ts.map +1 -0
  348. package/dist/plugins/analysis/ast/handlers/NewExpressionHandler.js +135 -0
  349. package/dist/plugins/analysis/ast/handlers/NewExpressionHandler.js.map +1 -0
  350. package/dist/plugins/analysis/ast/handlers/PropertyAccessHandler.d.ts +13 -0
  351. package/dist/plugins/analysis/ast/handlers/PropertyAccessHandler.d.ts.map +1 -0
  352. package/dist/plugins/analysis/ast/handlers/PropertyAccessHandler.js +71 -0
  353. package/dist/plugins/analysis/ast/handlers/PropertyAccessHandler.js.map +1 -0
  354. package/dist/plugins/analysis/ast/handlers/ReturnYieldHandler.d.ts +12 -0
  355. package/dist/plugins/analysis/ast/handlers/ReturnYieldHandler.d.ts.map +1 -0
  356. package/dist/plugins/analysis/ast/handlers/ReturnYieldHandler.js +135 -0
  357. package/dist/plugins/analysis/ast/handlers/ReturnYieldHandler.js.map +1 -0
  358. package/dist/plugins/analysis/ast/handlers/ThrowHandler.d.ts +12 -0
  359. package/dist/plugins/analysis/ast/handlers/ThrowHandler.d.ts.map +1 -0
  360. package/dist/plugins/analysis/ast/handlers/ThrowHandler.js +82 -0
  361. package/dist/plugins/analysis/ast/handlers/ThrowHandler.js.map +1 -0
  362. package/dist/plugins/analysis/ast/handlers/TryCatchHandler.d.ts +14 -0
  363. package/dist/plugins/analysis/ast/handlers/TryCatchHandler.d.ts.map +1 -0
  364. package/dist/plugins/analysis/ast/handlers/TryCatchHandler.js +220 -0
  365. package/dist/plugins/analysis/ast/handlers/TryCatchHandler.js.map +1 -0
  366. package/dist/plugins/analysis/ast/handlers/VariableHandler.d.ts +12 -0
  367. package/dist/plugins/analysis/ast/handlers/VariableHandler.d.ts.map +1 -0
  368. package/dist/plugins/analysis/ast/handlers/VariableHandler.js +57 -0
  369. package/dist/plugins/analysis/ast/handlers/VariableHandler.js.map +1 -0
  370. package/dist/plugins/analysis/ast/handlers/index.d.ts +13 -0
  371. package/dist/plugins/analysis/ast/handlers/index.d.ts.map +1 -0
  372. package/dist/plugins/analysis/ast/handlers/index.js +12 -0
  373. package/dist/plugins/analysis/ast/handlers/index.js.map +1 -0
  374. package/dist/plugins/analysis/ast/types.d.ts +57 -6
  375. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  376. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +5 -4
  377. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -1
  378. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +94 -13
  379. package/dist/plugins/analysis/ast/utils/createParameterNodes.js.map +1 -1
  380. package/dist/plugins/analysis/ast/utils/extractNamesFromPattern.d.ts +81 -0
  381. package/dist/plugins/analysis/ast/utils/extractNamesFromPattern.d.ts.map +1 -0
  382. package/dist/plugins/analysis/ast/utils/extractNamesFromPattern.js +140 -0
  383. package/dist/plugins/analysis/ast/utils/extractNamesFromPattern.js.map +1 -0
  384. package/dist/plugins/analysis/ast/utils/getExpressionValue.d.ts +22 -0
  385. package/dist/plugins/analysis/ast/utils/getExpressionValue.d.ts.map +1 -0
  386. package/dist/plugins/analysis/ast/utils/getExpressionValue.js +35 -0
  387. package/dist/plugins/analysis/ast/utils/getExpressionValue.js.map +1 -0
  388. package/dist/plugins/analysis/ast/utils/getMemberExpressionName.d.ts +25 -0
  389. package/dist/plugins/analysis/ast/utils/getMemberExpressionName.d.ts.map +1 -0
  390. package/dist/plugins/analysis/ast/utils/getMemberExpressionName.js +21 -0
  391. package/dist/plugins/analysis/ast/utils/getMemberExpressionName.js.map +1 -0
  392. package/dist/plugins/analysis/ast/utils/index.d.ts +2 -0
  393. package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -1
  394. package/dist/plugins/analysis/ast/utils/index.js +2 -0
  395. package/dist/plugins/analysis/ast/utils/index.js.map +1 -1
  396. package/dist/plugins/analysis/ast/visitors/ArgumentExtractor.d.ts +23 -0
  397. package/dist/plugins/analysis/ast/visitors/ArgumentExtractor.d.ts.map +1 -0
  398. package/dist/plugins/analysis/ast/visitors/ArgumentExtractor.js +241 -0
  399. package/dist/plugins/analysis/ast/visitors/ArgumentExtractor.js.map +1 -0
  400. package/dist/plugins/analysis/ast/visitors/ArrayElementExtractor.d.ts +20 -0
  401. package/dist/plugins/analysis/ast/visitors/ArrayElementExtractor.d.ts.map +1 -0
  402. package/dist/plugins/analysis/ast/visitors/ArrayElementExtractor.js +110 -0
  403. package/dist/plugins/analysis/ast/visitors/ArrayElementExtractor.js.map +1 -0
  404. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +15 -142
  405. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  406. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +304 -937
  407. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js.map +1 -1
  408. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  409. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +26 -11
  410. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js.map +1 -1
  411. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  412. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +21 -6
  413. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js.map +1 -1
  414. package/dist/plugins/analysis/ast/visitors/MutationDetector.d.ts +25 -0
  415. package/dist/plugins/analysis/ast/visitors/MutationDetector.d.ts.map +1 -0
  416. package/dist/plugins/analysis/ast/visitors/MutationDetector.js +181 -0
  417. package/dist/plugins/analysis/ast/visitors/MutationDetector.js.map +1 -0
  418. package/dist/plugins/analysis/ast/visitors/ObjectPropertyExtractor.d.ts +20 -0
  419. package/dist/plugins/analysis/ast/visitors/ObjectPropertyExtractor.d.ts.map +1 -0
  420. package/dist/plugins/analysis/ast/visitors/ObjectPropertyExtractor.js +155 -0
  421. package/dist/plugins/analysis/ast/visitors/ObjectPropertyExtractor.js.map +1 -0
  422. package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts +9 -1
  423. package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts.map +1 -1
  424. package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js +51 -3
  425. package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js.map +1 -1
  426. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +20 -0
  427. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  428. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +188 -12
  429. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js.map +1 -1
  430. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  431. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +6 -4
  432. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js.map +1 -1
  433. package/dist/plugins/analysis/ast/visitors/call-expression-helpers.d.ts +19 -0
  434. package/dist/plugins/analysis/ast/visitors/call-expression-helpers.d.ts.map +1 -0
  435. package/dist/plugins/analysis/ast/visitors/call-expression-helpers.js +57 -0
  436. package/dist/plugins/analysis/ast/visitors/call-expression-helpers.js.map +1 -0
  437. package/dist/plugins/analysis/ast/visitors/call-expression-types.d.ts +168 -0
  438. package/dist/plugins/analysis/ast/visitors/call-expression-types.d.ts.map +1 -0
  439. package/dist/plugins/analysis/ast/visitors/call-expression-types.js +7 -0
  440. package/dist/plugins/analysis/ast/visitors/call-expression-types.js.map +1 -0
  441. package/dist/plugins/analysis/react-internal/browser-api.d.ts +20 -0
  442. package/dist/plugins/analysis/react-internal/browser-api.d.ts.map +1 -0
  443. package/dist/plugins/analysis/react-internal/browser-api.js +140 -0
  444. package/dist/plugins/analysis/react-internal/browser-api.js.map +1 -0
  445. package/dist/plugins/analysis/react-internal/hooks.d.ts +31 -0
  446. package/dist/plugins/analysis/react-internal/hooks.d.ts.map +1 -0
  447. package/dist/plugins/analysis/react-internal/hooks.js +465 -0
  448. package/dist/plugins/analysis/react-internal/hooks.js.map +1 -0
  449. package/dist/plugins/analysis/react-internal/jsx.d.ts +43 -0
  450. package/dist/plugins/analysis/react-internal/jsx.d.ts.map +1 -0
  451. package/dist/plugins/analysis/react-internal/jsx.js +231 -0
  452. package/dist/plugins/analysis/react-internal/jsx.js.map +1 -0
  453. package/dist/plugins/analysis/react-internal/types.d.ts +116 -0
  454. package/dist/plugins/analysis/react-internal/types.d.ts.map +1 -0
  455. package/dist/plugins/analysis/react-internal/types.js +83 -0
  456. package/dist/plugins/analysis/react-internal/types.js.map +1 -0
  457. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  458. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +6 -13
  459. package/dist/plugins/discovery/MonorepoServiceDiscovery.js.map +1 -1
  460. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  461. package/dist/plugins/enrichment/AliasTracker.js +3 -1
  462. package/dist/plugins/enrichment/AliasTracker.js.map +1 -1
  463. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -1
  464. package/dist/plugins/enrichment/ArgumentParameterLinker.js +3 -1
  465. package/dist/plugins/enrichment/ArgumentParameterLinker.js.map +1 -1
  466. package/dist/plugins/enrichment/CallbackCallResolver.d.ts +42 -0
  467. package/dist/plugins/enrichment/CallbackCallResolver.d.ts.map +1 -0
  468. package/dist/plugins/enrichment/CallbackCallResolver.js +311 -0
  469. package/dist/plugins/enrichment/CallbackCallResolver.js.map +1 -0
  470. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -1
  471. package/dist/plugins/enrichment/ClosureCaptureEnricher.js +3 -1
  472. package/dist/plugins/enrichment/ClosureCaptureEnricher.js.map +1 -1
  473. package/dist/plugins/enrichment/ConfigRoutingMapBuilder.d.ts +17 -0
  474. package/dist/plugins/enrichment/ConfigRoutingMapBuilder.d.ts.map +1 -0
  475. package/dist/plugins/enrichment/ConfigRoutingMapBuilder.js +55 -0
  476. package/dist/plugins/enrichment/ConfigRoutingMapBuilder.js.map +1 -0
  477. package/dist/plugins/enrichment/ExpressHandlerLinker.d.ts.map +1 -1
  478. package/dist/plugins/enrichment/ExpressHandlerLinker.js +3 -1
  479. package/dist/plugins/enrichment/ExpressHandlerLinker.js.map +1 -1
  480. package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -1
  481. package/dist/plugins/enrichment/ExternalCallResolver.js +5 -8
  482. package/dist/plugins/enrichment/ExternalCallResolver.js.map +1 -1
  483. package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -1
  484. package/dist/plugins/enrichment/FunctionCallResolver.js +6 -9
  485. package/dist/plugins/enrichment/FunctionCallResolver.js.map +1 -1
  486. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  487. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +3 -1
  488. package/dist/plugins/enrichment/HTTPConnectionEnricher.js.map +1 -1
  489. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  490. package/dist/plugins/enrichment/ImportExportLinker.js +5 -3
  491. package/dist/plugins/enrichment/ImportExportLinker.js.map +1 -1
  492. package/dist/plugins/enrichment/InstanceOfResolver.d.ts.map +1 -1
  493. package/dist/plugins/enrichment/InstanceOfResolver.js +3 -1
  494. package/dist/plugins/enrichment/InstanceOfResolver.js.map +1 -1
  495. package/dist/plugins/enrichment/MethodCallResolver.d.ts +17 -68
  496. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  497. package/dist/plugins/enrichment/MethodCallResolver.js +42 -517
  498. package/dist/plugins/enrichment/MethodCallResolver.js.map +1 -1
  499. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  500. package/dist/plugins/enrichment/MountPointResolver.js +9 -2
  501. package/dist/plugins/enrichment/MountPointResolver.js.map +1 -1
  502. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -1
  503. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +7 -16
  504. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js.map +1 -1
  505. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  506. package/dist/plugins/enrichment/PrefixEvaluator.js +6 -2
  507. package/dist/plugins/enrichment/PrefixEvaluator.js.map +1 -1
  508. package/dist/plugins/enrichment/RejectionPropagationEnricher.d.ts.map +1 -1
  509. package/dist/plugins/enrichment/RejectionPropagationEnricher.js +3 -1
  510. package/dist/plugins/enrichment/RejectionPropagationEnricher.js.map +1 -1
  511. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  512. package/dist/plugins/enrichment/RustFFIEnricher.js +3 -1
  513. package/dist/plugins/enrichment/RustFFIEnricher.js.map +1 -1
  514. package/dist/plugins/enrichment/ServiceConnectionEnricher.d.ts +76 -0
  515. package/dist/plugins/enrichment/ServiceConnectionEnricher.d.ts.map +1 -0
  516. package/dist/plugins/enrichment/ServiceConnectionEnricher.js +355 -0
  517. package/dist/plugins/enrichment/ServiceConnectionEnricher.js.map +1 -0
  518. package/dist/plugins/enrichment/SocketConnectionEnricher.d.ts +42 -0
  519. package/dist/plugins/enrichment/SocketConnectionEnricher.d.ts.map +1 -0
  520. package/dist/plugins/enrichment/SocketConnectionEnricher.js +166 -0
  521. package/dist/plugins/enrichment/SocketConnectionEnricher.js.map +1 -0
  522. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  523. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +3 -1
  524. package/dist/plugins/enrichment/ValueDomainAnalyzer.js.map +1 -1
  525. package/dist/plugins/enrichment/method-call/MethodCallData.d.ts +68 -0
  526. package/dist/plugins/enrichment/method-call/MethodCallData.d.ts.map +1 -0
  527. package/dist/plugins/enrichment/method-call/MethodCallData.js +227 -0
  528. package/dist/plugins/enrichment/method-call/MethodCallData.js.map +1 -0
  529. package/dist/plugins/enrichment/method-call/MethodCallDetectors.d.ts +21 -0
  530. package/dist/plugins/enrichment/method-call/MethodCallDetectors.d.ts.map +1 -0
  531. package/dist/plugins/enrichment/method-call/MethodCallDetectors.js +52 -0
  532. package/dist/plugins/enrichment/method-call/MethodCallDetectors.js.map +1 -0
  533. package/dist/plugins/enrichment/method-call/MethodCallErrorAnalysis.d.ts +22 -0
  534. package/dist/plugins/enrichment/method-call/MethodCallErrorAnalysis.d.ts.map +1 -0
  535. package/dist/plugins/enrichment/method-call/MethodCallErrorAnalysis.js +105 -0
  536. package/dist/plugins/enrichment/method-call/MethodCallErrorAnalysis.js.map +1 -0
  537. package/dist/plugins/enrichment/method-call/MethodCallIndexers.d.ts +19 -0
  538. package/dist/plugins/enrichment/method-call/MethodCallIndexers.d.ts.map +1 -0
  539. package/dist/plugins/enrichment/method-call/MethodCallIndexers.js +63 -0
  540. package/dist/plugins/enrichment/method-call/MethodCallIndexers.js.map +1 -0
  541. package/dist/plugins/enrichment/method-call/MethodCallResolution.d.ts +30 -0
  542. package/dist/plugins/enrichment/method-call/MethodCallResolution.d.ts.map +1 -0
  543. package/dist/plugins/enrichment/method-call/MethodCallResolution.js +138 -0
  544. package/dist/plugins/enrichment/method-call/MethodCallResolution.js.map +1 -0
  545. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  546. package/dist/plugins/indexing/IncrementalModuleIndexer.js +2 -8
  547. package/dist/plugins/indexing/IncrementalModuleIndexer.js.map +1 -1
  548. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  549. package/dist/plugins/indexing/JSModuleIndexer.js +13 -20
  550. package/dist/plugins/indexing/JSModuleIndexer.js.map +1 -1
  551. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  552. package/dist/plugins/indexing/RustModuleIndexer.js +4 -8
  553. package/dist/plugins/indexing/RustModuleIndexer.js.map +1 -1
  554. package/dist/plugins/validation/AwaitInLoopValidator.d.ts +24 -0
  555. package/dist/plugins/validation/AwaitInLoopValidator.d.ts.map +1 -0
  556. package/dist/plugins/validation/AwaitInLoopValidator.js +69 -0
  557. package/dist/plugins/validation/AwaitInLoopValidator.js.map +1 -0
  558. package/dist/plugins/validation/PackageCoverageValidator.d.ts +33 -0
  559. package/dist/plugins/validation/PackageCoverageValidator.d.ts.map +1 -0
  560. package/dist/plugins/validation/PackageCoverageValidator.js +149 -0
  561. package/dist/plugins/validation/PackageCoverageValidator.js.map +1 -0
  562. package/dist/plugins/validation/UnconnectedRouteValidator.d.ts +18 -0
  563. package/dist/plugins/validation/UnconnectedRouteValidator.d.ts.map +1 -0
  564. package/dist/plugins/validation/UnconnectedRouteValidator.js +68 -0
  565. package/dist/plugins/validation/UnconnectedRouteValidator.js.map +1 -0
  566. package/dist/queries/NodeContext.d.ts +81 -0
  567. package/dist/queries/NodeContext.d.ts.map +1 -0
  568. package/dist/queries/NodeContext.js +193 -0
  569. package/dist/queries/NodeContext.js.map +1 -0
  570. package/dist/queries/findCallsInFunction.d.ts.map +1 -1
  571. package/dist/queries/findCallsInFunction.js +10 -2
  572. package/dist/queries/findCallsInFunction.js.map +1 -1
  573. package/dist/queries/findContainingFunction.d.ts +3 -2
  574. package/dist/queries/findContainingFunction.d.ts.map +1 -1
  575. package/dist/queries/findContainingFunction.js +13 -3
  576. package/dist/queries/findContainingFunction.js.map +1 -1
  577. package/dist/queries/index.d.ts +2 -0
  578. package/dist/queries/index.d.ts.map +1 -1
  579. package/dist/queries/index.js +1 -0
  580. package/dist/queries/index.js.map +1 -1
  581. package/dist/resources/InfraResourceMapImpl.d.ts +31 -0
  582. package/dist/resources/InfraResourceMapImpl.d.ts.map +1 -0
  583. package/dist/resources/InfraResourceMapImpl.js +110 -0
  584. package/dist/resources/InfraResourceMapImpl.js.map +1 -0
  585. package/dist/resources/RoutingMapImpl.d.ts +33 -0
  586. package/dist/resources/RoutingMapImpl.d.ts.map +1 -0
  587. package/dist/resources/RoutingMapImpl.js +115 -0
  588. package/dist/resources/RoutingMapImpl.js.map +1 -0
  589. package/dist/storage/backends/RFDBServerBackend.d.ts +35 -6
  590. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  591. package/dist/storage/backends/RFDBServerBackend.js +102 -70
  592. package/dist/storage/backends/RFDBServerBackend.js.map +1 -1
  593. package/dist/utils/findRfdbBinary.d.ts +3 -2
  594. package/dist/utils/findRfdbBinary.d.ts.map +1 -1
  595. package/dist/utils/findRfdbBinary.js +22 -7
  596. package/dist/utils/findRfdbBinary.js.map +1 -1
  597. package/dist/utils/moduleResolution.d.ts.map +1 -1
  598. package/dist/utils/moduleResolution.js +26 -1
  599. package/dist/utils/moduleResolution.js.map +1 -1
  600. package/dist/utils/resolveNodeFile.d.ts +13 -0
  601. package/dist/utils/resolveNodeFile.d.ts.map +1 -0
  602. package/dist/utils/resolveNodeFile.js +18 -0
  603. package/dist/utils/resolveNodeFile.js.map +1 -0
  604. package/dist/version.d.ts +11 -0
  605. package/dist/version.d.ts.map +1 -0
  606. package/dist/version.js +26 -0
  607. package/dist/version.js.map +1 -0
  608. package/package.json +3 -3
  609. package/src/DiscoveryManager.ts +279 -0
  610. package/src/GraphInitializer.ts +131 -0
  611. package/src/GuaranteeChecker.ts +90 -0
  612. package/src/Orchestrator.ts +222 -963
  613. package/src/OrchestratorTypes.ts +122 -0
  614. package/src/ParallelAnalysisRunner.ts +188 -0
  615. package/src/PhaseRunner.ts +450 -0
  616. package/src/config/ConfigLoader.ts +176 -2
  617. package/src/config/index.ts +2 -0
  618. package/src/core/ASTWorker.ts +9 -2
  619. package/src/core/FileOverview.ts +374 -0
  620. package/src/core/GraphFreshnessChecker.ts +7 -5
  621. package/src/core/GuaranteeManager.ts +70 -2
  622. package/src/core/IncrementalReanalyzer.ts +6 -3
  623. package/src/core/NodeFactory.ts +173 -652
  624. package/src/core/ResourceRegistry.ts +39 -0
  625. package/src/core/ScopeTracker.ts +23 -0
  626. package/src/core/SemanticId.ts +183 -0
  627. package/src/core/brandNodeInternal.ts +16 -0
  628. package/src/core/buildDependencyGraph.ts +98 -0
  629. package/src/core/factories/CoreFactory.ts +489 -0
  630. package/src/core/factories/DatabaseFactory.ts +63 -0
  631. package/src/core/factories/ExternalFactory.ts +23 -0
  632. package/src/core/factories/HttpFactory.ts +57 -0
  633. package/src/core/factories/ReactFactory.ts +15 -0
  634. package/src/core/factories/RustFactory.ts +128 -0
  635. package/src/core/factories/ServiceFactory.ts +27 -0
  636. package/src/core/factories/SocketFactory.ts +94 -0
  637. package/src/core/nodes/DatabaseNode.ts +175 -0
  638. package/src/core/nodes/ExpressMiddlewareNode.ts +98 -0
  639. package/src/core/nodes/ExpressMountNode.ts +94 -0
  640. package/src/core/nodes/ExternalApiNode.ts +53 -0
  641. package/src/core/nodes/ExternalFunctionNode.ts +77 -0
  642. package/src/core/nodes/FetchRequestNode.ts +105 -0
  643. package/src/core/nodes/HttpRouteNode.ts +113 -0
  644. package/src/core/nodes/NodeKind.ts +1 -0
  645. package/src/core/nodes/ReactNode.ts +78 -0
  646. package/src/core/nodes/RustCallNode.ts +96 -0
  647. package/src/core/nodes/RustFunctionNode.ts +112 -0
  648. package/src/core/nodes/RustImplNode.ts +78 -0
  649. package/src/core/nodes/RustMethodNode.ts +125 -0
  650. package/src/core/nodes/RustModuleNode.ts +84 -0
  651. package/src/core/nodes/RustStructNode.ts +80 -0
  652. package/src/core/nodes/RustTraitNode.ts +82 -0
  653. package/src/core/nodes/ServiceLayerNode.ts +183 -0
  654. package/src/core/nodes/SocketIONode.ts +177 -0
  655. package/src/core/nodes/SocketNode.ts +206 -0
  656. package/src/core/nodes/TypeNode.ts +46 -3
  657. package/src/core/nodes/TypeParameterNode.ts +91 -0
  658. package/src/core/nodes/index.ts +57 -0
  659. package/src/index.ts +60 -4
  660. package/src/plugins/InfraAnalyzer.ts +208 -0
  661. package/src/plugins/analysis/DatabaseAnalyzer.ts +27 -17
  662. package/src/plugins/analysis/ExpressAnalyzer.ts +51 -38
  663. package/src/plugins/analysis/ExpressResponseAnalyzer.ts +15 -12
  664. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +56 -56
  665. package/src/plugins/analysis/FetchAnalyzer.ts +42 -52
  666. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +3 -2
  667. package/src/plugins/analysis/JSASTAnalyzer.ts +391 -2304
  668. package/src/plugins/analysis/NestJSRouteAnalyzer.ts +241 -0
  669. package/src/plugins/analysis/ReactAnalyzer.ts +33 -1085
  670. package/src/plugins/analysis/RustAnalyzer.ts +112 -116
  671. package/src/plugins/analysis/SQLiteAnalyzer.ts +23 -9
  672. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +32 -10
  673. package/src/plugins/analysis/SocketAnalyzer.ts +601 -0
  674. package/src/plugins/analysis/SocketIOAnalyzer.ts +25 -34
  675. package/src/plugins/analysis/SystemDbAnalyzer.ts +15 -12
  676. package/src/plugins/analysis/ast/CollisionResolver.ts +137 -0
  677. package/src/plugins/analysis/ast/FunctionBodyContext.ts +291 -0
  678. package/src/plugins/analysis/ast/GraphBuilder.ts +274 -3180
  679. package/src/plugins/analysis/ast/IdGenerator.ts +81 -1
  680. package/src/plugins/analysis/ast/builders/AssignmentBuilder.ts +407 -0
  681. package/src/plugins/analysis/ast/builders/CallFlowBuilder.ts +255 -0
  682. package/src/plugins/analysis/ast/builders/ControlFlowBuilder.ts +470 -0
  683. package/src/plugins/analysis/ast/builders/CoreBuilder.ts +306 -0
  684. package/src/plugins/analysis/ast/builders/ModuleRuntimeBuilder.ts +452 -0
  685. package/src/plugins/analysis/ast/builders/MutationBuilder.ts +372 -0
  686. package/src/plugins/analysis/ast/builders/ReturnBuilder.ts +279 -0
  687. package/src/plugins/analysis/ast/builders/TypeSystemBuilder.ts +475 -0
  688. package/src/plugins/analysis/ast/builders/UpdateExpressionBuilder.ts +262 -0
  689. package/src/plugins/analysis/ast/builders/YieldBuilder.ts +287 -0
  690. package/src/plugins/analysis/ast/builders/index.ts +11 -0
  691. package/src/plugins/analysis/ast/builders/types.ts +65 -0
  692. package/src/plugins/analysis/ast/handlers/AnalyzerDelegate.ts +183 -0
  693. package/src/plugins/analysis/ast/handlers/BranchHandler.ts +313 -0
  694. package/src/plugins/analysis/ast/handlers/CallExpressionHandler.ts +347 -0
  695. package/src/plugins/analysis/ast/handlers/FunctionBodyHandler.ts +24 -0
  696. package/src/plugins/analysis/ast/handlers/LoopHandler.ts +240 -0
  697. package/src/plugins/analysis/ast/handlers/NestedFunctionHandler.ts +201 -0
  698. package/src/plugins/analysis/ast/handlers/NewExpressionHandler.ts +159 -0
  699. package/src/plugins/analysis/ast/handlers/PropertyAccessHandler.ts +112 -0
  700. package/src/plugins/analysis/ast/handlers/ReturnYieldHandler.ts +166 -0
  701. package/src/plugins/analysis/ast/handlers/ThrowHandler.ts +101 -0
  702. package/src/plugins/analysis/ast/handlers/TryCatchHandler.ts +262 -0
  703. package/src/plugins/analysis/ast/handlers/VariableHandler.ts +93 -0
  704. package/src/plugins/analysis/ast/handlers/index.ts +12 -0
  705. package/src/plugins/analysis/ast/types.ts +68 -9
  706. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +118 -13
  707. package/src/plugins/analysis/ast/utils/extractNamesFromPattern.ts +166 -0
  708. package/src/plugins/analysis/ast/utils/getExpressionValue.ts +34 -0
  709. package/src/plugins/analysis/ast/utils/getMemberExpressionName.ts +33 -0
  710. package/src/plugins/analysis/ast/utils/index.ts +2 -0
  711. package/src/plugins/analysis/ast/visitors/ArgumentExtractor.ts +307 -0
  712. package/src/plugins/analysis/ast/visitors/ArrayElementExtractor.ts +172 -0
  713. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +425 -1374
  714. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +43 -12
  715. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +39 -8
  716. package/src/plugins/analysis/ast/visitors/MutationDetector.ts +211 -0
  717. package/src/plugins/analysis/ast/visitors/ObjectPropertyExtractor.ts +217 -0
  718. package/src/plugins/analysis/ast/visitors/PropertyAccessVisitor.ts +69 -4
  719. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +232 -13
  720. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +8 -11
  721. package/src/plugins/analysis/ast/visitors/call-expression-helpers.ts +65 -0
  722. package/src/plugins/analysis/ast/visitors/call-expression-types.ts +179 -0
  723. package/src/plugins/analysis/react-internal/browser-api.ts +168 -0
  724. package/src/plugins/analysis/react-internal/hooks.ts +517 -0
  725. package/src/plugins/analysis/react-internal/jsx.ts +279 -0
  726. package/src/plugins/analysis/react-internal/types.ts +183 -0
  727. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +6 -14
  728. package/src/plugins/enrichment/AliasTracker.ts +3 -1
  729. package/src/plugins/enrichment/ArgumentParameterLinker.ts +3 -1
  730. package/src/plugins/enrichment/CallbackCallResolver.ts +398 -0
  731. package/src/plugins/enrichment/ClosureCaptureEnricher.ts +3 -1
  732. package/src/plugins/enrichment/ConfigRoutingMapBuilder.ts +67 -0
  733. package/src/plugins/enrichment/ExpressHandlerLinker.ts +3 -1
  734. package/src/plugins/enrichment/ExternalCallResolver.ts +5 -8
  735. package/src/plugins/enrichment/FunctionCallResolver.ts +6 -9
  736. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +3 -1
  737. package/src/plugins/enrichment/ImportExportLinker.ts +5 -3
  738. package/src/plugins/enrichment/InstanceOfResolver.ts +3 -1
  739. package/src/plugins/enrichment/MethodCallResolver.ts +48 -659
  740. package/src/plugins/enrichment/MountPointResolver.ts +9 -2
  741. package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +13 -18
  742. package/src/plugins/enrichment/PrefixEvaluator.ts +6 -2
  743. package/src/plugins/enrichment/RejectionPropagationEnricher.ts +3 -1
  744. package/src/plugins/enrichment/RustFFIEnricher.ts +3 -1
  745. package/src/plugins/enrichment/ServiceConnectionEnricher.ts +472 -0
  746. package/src/plugins/enrichment/SocketConnectionEnricher.ts +228 -0
  747. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +3 -1
  748. package/src/plugins/enrichment/method-call/MethodCallData.ts +299 -0
  749. package/src/plugins/enrichment/method-call/MethodCallDetectors.ts +70 -0
  750. package/src/plugins/enrichment/method-call/MethodCallErrorAnalysis.ts +131 -0
  751. package/src/plugins/enrichment/method-call/MethodCallIndexers.ts +83 -0
  752. package/src/plugins/enrichment/method-call/MethodCallResolution.ts +181 -0
  753. package/src/plugins/indexing/IncrementalModuleIndexer.ts +5 -10
  754. package/src/plugins/indexing/JSModuleIndexer.ts +17 -21
  755. package/src/plugins/indexing/RustModuleIndexer.ts +14 -13
  756. package/src/plugins/validation/AwaitInLoopValidator.ts +91 -0
  757. package/src/plugins/validation/PackageCoverageValidator.ts +181 -0
  758. package/src/plugins/validation/UnconnectedRouteValidator.ts +93 -0
  759. package/src/queries/NodeContext.ts +277 -0
  760. package/src/queries/findCallsInFunction.ts +11 -2
  761. package/src/queries/findContainingFunction.ts +14 -3
  762. package/src/queries/index.ts +13 -0
  763. package/src/resources/InfraResourceMapImpl.ts +119 -0
  764. package/src/resources/RoutingMapImpl.ts +133 -0
  765. package/src/storage/backends/RFDBServerBackend.ts +106 -77
  766. package/src/utils/findRfdbBinary.ts +22 -7
  767. package/src/utils/moduleResolution.ts +28 -1
  768. package/src/utils/resolveNodeFile.ts +18 -0
  769. 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":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAsCtE,MAAM,OAAO,WAAW;IAGF;IAFZ,uBAAuB,GAAG,CAAC,CAAC;IAEpC,YAAoB,IAAqB;QAArB,SAAI,GAAJ,IAAI,CAAiB;IAAG,CAAC;IAE7C,0BAA0B;QACxB,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACtC,CAAC;IAED,4BAA4B;QAC1B,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,kBAAkB,CAC9B,MAAc,EACd,aAA4B,EAC5B,SAAiB;QAEjB,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;QAElC,6CAA6C;QAC7C,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACnD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC/C,uEAAuE;QACvE,MAAM,QAAQ,GAAI,aAAkD,CAAC,QAAQ,CAAC;QAC9E,IAAI,QAAQ,EAAE,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE7C,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,kBAAkB,CACxB,WAAuE,EACvE,SAAiB,EACjB,MAAc;QAEd,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAE/G,MAAM,aAAa,GAAkB;YACnC,GAAG,WAAW;YACd,UAAU,EAAE,UAAoD;YAChE,aAAa,EAAE,aAAa;YAC5B,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,UAAU,EAAE,iCAAiC;YACzD,2DAA2D;YAC3D,UAAU,EAAG,WAAuC,CAAC,UAAU;YAC/D,iEAAiE;YACjE,SAAS,EAAE,gBAAgB;SAC5B,CAAC;QAEF,gFAAgF;QAChF,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAC1B,aAAa,CAAC,MAAM,GAAG;gBACrB,WAAW,EAAG,WAAuD,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE;gBACjG,QAAQ,EAAE,cAAc;gBACxB,OAAO,EAAE,OAAO;aACjB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,kDAAkD;YAClD,MAAM,GAAG,GAAG,aAAa,CAAC,MAA4C,CAAC;YACvE,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC5B,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;YACxB,CAAC;YACD,IAAI,cAAc,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACpC,GAAG,CAAC,QAAQ,GAAG,cAAc,CAAC;YAChC,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;YAC/B,aAAa,CAAC,WAAW,GAAG,KAAK,EAAE,KAAgB,EAAmB,EAAE;gBACtE,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAClC,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAyB,EAC/B,KAAK,CAAC,OAAO,EACb,MAAM,CAAC,QAAQ,CAAC,IAAI,EACpB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,MAAM,IAAI,CAAC,EACjB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAC3B,CAAC;gBACF,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;oBACvB,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;wBAC9B,GAAG,EAAE,IAAI,CAAC,EAAE;wBACZ,GAAG,EAAE,KAAK,CAAC,YAAY;wBACvB,IAAI,EAAE,SAAS;qBAChB,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACK,kBAAkB,CACxB,MAAc,EACd,gBAA6B;QAE7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;QACvC,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,aAAa,CACzB,MAAc,EACd,OAAmE,EACnE,SAAiB;QAEjB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAE1E,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;YAE1F,kBAAkB;YAClB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CACV,IAAI,UAAU,aAAa,KAAK,CAAC,UAAU,YAAY,KAAK,CAAC,UAAU,UAAU;oBACjF,IAAI,KAAK,CAAC,YAAY,YAAY,KAAK,CAAC,YAAY,QAAQ,CAC7D,CAAC;YACJ,CAAC;YAED,kCAAkC;YAClC,mBAAmB,CAAC,mBAAmB,CACrC,SAAwB,EACxB,UAAU,EACV,MAAM,CACP,CAAC;YAEF,qEAAqE;YACrE,IAAI,SAAS,KAAK,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClD,MAAM,UAAU,GAAI,MAAM,CAAC,QAAoC,CAAC,kBAAkB,CAAC;gBACnF,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;oBACnC,IAAI,CAAC,uBAAuB,IAAI,UAAU,CAAC;gBAC7C,CAAC;YACH,CAAC;YAED,wDAAwD;YACxD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,yBAAyB,UAAU,mBAAmB,EAAE;oBACnE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;oBAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;iBACjC,CAAC,CAAC;YACL,CAAC;YAED,4CAA4C;YAC5C,wEAAwE;YACxE,sEAAsE;YACtE,IAAI,mBAAmB,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACnC,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC;gBACpD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;gBAElE,yEAAyE;gBACzE,oDAAoD;gBACpD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;gBACxE,IAAI,CAAC,CAAC,UAAU,IAAI,SAAS,KAAK,YAAY,IAAI,eAAe,CAAC,EAAE,CAAC;oBACnE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,KAAK,KAAK,EAAE,OAAO,IAAI,qBAAqB,EAAE,CAAC,CAAC;gBAC9F,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,uDAAuD;YACvD,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5D,0DAA0D;YAC1D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACpC,mBAAmB,CAAC,GAAG,CAAC;oBACtB,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,SAAwB;oBAC/B,MAAM,EAAE,UAAU;iBACnB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,KAAK,CAAC,CAAC,4BAA4B;QAC3C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,OAAmE;QACnG,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAElD,gCAAgC;QAChC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAC3C,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CACpC,CAAC;QAEF,oDAAoD;QACpD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvE,8EAA8E;QAC9E,8CAA8C;QAC9C,IAAI,aAAa,GAAoC,IAAI,CAAC;QAC1D,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE;YACtB,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;gBACnD,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;gBACtC,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,QAAQ,CACb,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrB,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;gBACnB,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE;aAC5C,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;QAEL,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,MAAM;gBAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,qDAAqD;QACrD,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEhF,wEAAwE;QACxE,IAAI,SAAS,KAAK,YAAY,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;YACjE,MAAM,IAAI,CAAC,4BAA4B,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YACpG,OAAO,IAAI,GAAG,EAAU,CAAC;QAC3B,CAAC;QAED,mFAAmF;QACnF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE3C,6EAA6E;QAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAE/B,0EAA0E;YAC1E,IAAI,SAAS,KAAK,YAAY,IAAI,aAAa,EAAE,CAAC;gBAChD,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC;oBACtD,MAAM,CAAC,KAAK,CACV,UAAU,MAAM,CAAC,QAAQ,CAAC,IAAI,oCAAoC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjH,CAAC;oBACF,SAAS;gBACX,CAAC;YACH,CAAC;YAED,UAAU,CAAC;gBACT,KAAK,EAAE,SAAS,CAAC,WAAW,EAAE;gBAC9B,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;gBACnC,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;aACnF,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAEnE,+DAA+D;YAC/D,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB;oBAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB;oBAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,kCAAkC;YAClC,UAAU,CAAC;gBACT,KAAK,EAAE,SAAS,CAAC,WAAW,EAAE;gBAC9B,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;gBACnC,OAAO,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW;aAC9C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,4BAA4B,CACxC,YAAsB,EACtB,SAA8B,EAC9B,SAAmB,EACnB,aAAuC,EACvC,OAAmE;QAEnE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAEzC,cAAc;QACd,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAEpC,wDAAwD;QACxD,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;YAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,YAAY;gBAAE,MAAM;YAEzB,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;gBAAE,SAAS;YAE1C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,UAAU,CAAC;gBACT,KAAK,EAAE,YAAY;gBACnB,aAAa,EAAE,YAAY;gBAC3B,OAAO,EAAE,oBAAoB,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,YAAY,EAAE;aAC1F,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;YACtE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAE5B,6DAA6D;YAC7D,mEAAmE;YACnE,uEAAuE;YACvE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,gBAAgB,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAC5E,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;oBACvC,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACjD,IAAI,CAAC,SAAS;wBAAE,SAAS;oBACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;wBACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC7B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBACxB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,UAAU,CAAC;gBACT,KAAK,EAAE,YAAY;gBACnB,aAAa,EAAE,YAAY;gBAC3B,OAAO,EAAE,KAAK,YAAY,WAAW;aACtC,CAAC,CAAC;QACL,CAAC;QAED,mFAAmF;QACnF,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAChD,MAAM,CAAC,KAAK,CACV,UAAU,MAAM,CAAC,QAAQ,CAAC,IAAI,oCAAoC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACzF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,OAAoB,EAAE,SAAmB;QACnE,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -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;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;IAE9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;;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,aAuC5B,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,CA0Ef;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA8D7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA+D/E;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
+ {"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
- 'HTTPConnectionEnricher',
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
  };