@grafema/core 0.1.0-alpha.5 → 0.1.1-alpha

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