@grafema/core 0.2.3-beta → 0.2.5-beta

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 (560) hide show
  1. package/dist/Orchestrator.d.ts +37 -0
  2. package/dist/Orchestrator.d.ts.map +1 -1
  3. package/dist/Orchestrator.js +322 -35
  4. package/dist/Orchestrator.js.map +1 -0
  5. package/dist/api/GraphAPI.d.ts +1 -1
  6. package/dist/api/GraphAPI.d.ts.map +1 -1
  7. package/dist/api/GraphAPI.js +3 -1
  8. package/dist/api/GraphAPI.js.map +1 -0
  9. package/dist/api/GuaranteeAPI.d.ts.map +1 -1
  10. package/dist/api/GuaranteeAPI.js +4 -2
  11. package/dist/api/GuaranteeAPI.js.map +1 -0
  12. package/dist/config/ConfigLoader.d.ts +66 -0
  13. package/dist/config/ConfigLoader.d.ts.map +1 -1
  14. package/dist/config/ConfigLoader.js +77 -3
  15. package/dist/config/ConfigLoader.js.map +1 -0
  16. package/dist/config/index.d.ts +1 -1
  17. package/dist/config/index.d.ts.map +1 -1
  18. package/dist/config/index.js +2 -1
  19. package/dist/config/index.js.map +1 -0
  20. package/dist/core/ASTWorker.d.ts.map +1 -1
  21. package/dist/core/ASTWorker.js +6 -4
  22. package/dist/core/ASTWorker.js.map +1 -0
  23. package/dist/core/ASTWorkerPool.js +2 -1
  24. package/dist/core/ASTWorkerPool.js.map +1 -0
  25. package/dist/core/AnalysisQueue.js +1 -0
  26. package/dist/core/AnalysisQueue.js.map +1 -0
  27. package/dist/core/CoverageAnalyzer.d.ts.map +1 -1
  28. package/dist/core/CoverageAnalyzer.js +1 -0
  29. package/dist/core/CoverageAnalyzer.js.map +1 -0
  30. package/dist/core/FileExplainer.js +1 -0
  31. package/dist/core/FileExplainer.js.map +1 -0
  32. package/dist/core/FileNodeManager.d.ts.map +1 -1
  33. package/dist/core/FileNodeManager.js +4 -2
  34. package/dist/core/FileNodeManager.js.map +1 -0
  35. package/dist/core/GraphBackend.js +1 -0
  36. package/dist/core/GraphBackend.js.map +1 -0
  37. package/dist/core/GraphFreshnessChecker.js +1 -0
  38. package/dist/core/GraphFreshnessChecker.js.map +1 -0
  39. package/dist/core/GuaranteeManager.js +2 -1
  40. package/dist/core/GuaranteeManager.js.map +1 -0
  41. package/dist/core/HashUtils.js +1 -0
  42. package/dist/core/HashUtils.js.map +1 -0
  43. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -1
  44. package/dist/core/IncrementalReanalyzer.js +7 -3
  45. package/dist/core/IncrementalReanalyzer.js.map +1 -0
  46. package/dist/core/ManifestStore.js +1 -0
  47. package/dist/core/ManifestStore.js.map +1 -0
  48. package/dist/core/NodeFactory.d.ts +54 -34
  49. package/dist/core/NodeFactory.d.ts.map +1 -1
  50. package/dist/core/NodeFactory.js +20 -1
  51. package/dist/core/NodeFactory.js.map +1 -0
  52. package/dist/core/NodeId.js +1 -0
  53. package/dist/core/NodeId.js.map +1 -0
  54. package/dist/core/PriorityQueue.js +1 -0
  55. package/dist/core/PriorityQueue.js.map +1 -0
  56. package/dist/core/Profiler.js +1 -0
  57. package/dist/core/Profiler.js.map +1 -0
  58. package/dist/core/ScopeTracker.js +1 -0
  59. package/dist/core/ScopeTracker.js.map +1 -0
  60. package/dist/core/SemanticId.js +1 -0
  61. package/dist/core/SemanticId.js.map +1 -0
  62. package/dist/core/Task.js +1 -0
  63. package/dist/core/Task.js.map +1 -0
  64. package/dist/core/TaskTypes.js +1 -0
  65. package/dist/core/TaskTypes.js.map +1 -0
  66. package/dist/core/VersionManager.js +1 -0
  67. package/dist/core/VersionManager.js.map +1 -0
  68. package/dist/core/WorkerPool.d.ts.map +1 -1
  69. package/dist/core/WorkerPool.js +3 -1
  70. package/dist/core/WorkerPool.js.map +1 -0
  71. package/dist/core/nodes/ArgumentExpressionNode.js +1 -0
  72. package/dist/core/nodes/ArgumentExpressionNode.js.map +1 -0
  73. package/dist/core/nodes/ArrayLiteralNode.js +1 -0
  74. package/dist/core/nodes/ArrayLiteralNode.js.map +1 -0
  75. package/dist/core/nodes/BranchNode.js +1 -0
  76. package/dist/core/nodes/BranchNode.js.map +1 -0
  77. package/dist/core/nodes/CallSiteNode.js +1 -0
  78. package/dist/core/nodes/CallSiteNode.js.map +1 -0
  79. package/dist/core/nodes/CaseNode.js +1 -0
  80. package/dist/core/nodes/CaseNode.js.map +1 -0
  81. package/dist/core/nodes/ClassNode.js +1 -0
  82. package/dist/core/nodes/ClassNode.js.map +1 -0
  83. package/dist/core/nodes/ConstantNode.js +1 -0
  84. package/dist/core/nodes/ConstantNode.js.map +1 -0
  85. package/dist/core/nodes/ConstructorCallNode.js +1 -0
  86. package/dist/core/nodes/ConstructorCallNode.js.map +1 -0
  87. package/dist/core/nodes/DatabaseQueryNode.js +1 -0
  88. package/dist/core/nodes/DatabaseQueryNode.js.map +1 -0
  89. package/dist/core/nodes/DecoratorNode.js +1 -0
  90. package/dist/core/nodes/DecoratorNode.js.map +1 -0
  91. package/dist/core/nodes/EntrypointNode.js +1 -0
  92. package/dist/core/nodes/EntrypointNode.js.map +1 -0
  93. package/dist/core/nodes/EnumNode.js +1 -0
  94. package/dist/core/nodes/EnumNode.js.map +1 -0
  95. package/dist/core/nodes/EventListenerNode.js +1 -0
  96. package/dist/core/nodes/EventListenerNode.js.map +1 -0
  97. package/dist/core/nodes/ExportNode.js +1 -0
  98. package/dist/core/nodes/ExportNode.js.map +1 -0
  99. package/dist/core/nodes/ExpressionNode.js +1 -0
  100. package/dist/core/nodes/ExpressionNode.js.map +1 -0
  101. package/dist/core/nodes/ExternalModuleNode.js +1 -0
  102. package/dist/core/nodes/ExternalModuleNode.js.map +1 -0
  103. package/dist/core/nodes/ExternalStdioNode.js +1 -0
  104. package/dist/core/nodes/ExternalStdioNode.js.map +1 -0
  105. package/dist/core/nodes/FunctionNode.js +1 -0
  106. package/dist/core/nodes/FunctionNode.js.map +1 -0
  107. package/dist/core/nodes/GuaranteeNode.js +1 -0
  108. package/dist/core/nodes/GuaranteeNode.js.map +1 -0
  109. package/dist/core/nodes/HttpRequestNode.js +1 -0
  110. package/dist/core/nodes/HttpRequestNode.js.map +1 -0
  111. package/dist/core/nodes/ImportNode.js +1 -0
  112. package/dist/core/nodes/ImportNode.js.map +1 -0
  113. package/dist/core/nodes/InterfaceNode.js +1 -0
  114. package/dist/core/nodes/InterfaceNode.js.map +1 -0
  115. package/dist/core/nodes/IssueNode.js +1 -0
  116. package/dist/core/nodes/IssueNode.js.map +1 -0
  117. package/dist/core/nodes/LiteralNode.js +1 -0
  118. package/dist/core/nodes/LiteralNode.js.map +1 -0
  119. package/dist/core/nodes/MethodCallNode.js +1 -0
  120. package/dist/core/nodes/MethodCallNode.js.map +1 -0
  121. package/dist/core/nodes/MethodNode.js +1 -0
  122. package/dist/core/nodes/MethodNode.js.map +1 -0
  123. package/dist/core/nodes/ModuleNode.js +1 -0
  124. package/dist/core/nodes/ModuleNode.js.map +1 -0
  125. package/dist/core/nodes/NetworkRequestNode.js +1 -0
  126. package/dist/core/nodes/NetworkRequestNode.js.map +1 -0
  127. package/dist/core/nodes/NodeKind.d.ts +5 -0
  128. package/dist/core/nodes/NodeKind.d.ts.map +1 -1
  129. package/dist/core/nodes/NodeKind.js +11 -0
  130. package/dist/core/nodes/NodeKind.js.map +1 -0
  131. package/dist/core/nodes/ObjectLiteralNode.js +1 -0
  132. package/dist/core/nodes/ObjectLiteralNode.js.map +1 -0
  133. package/dist/core/nodes/ParameterNode.js +1 -0
  134. package/dist/core/nodes/ParameterNode.js.map +1 -0
  135. package/dist/core/nodes/PluginNode.d.ts +69 -0
  136. package/dist/core/nodes/PluginNode.d.ts.map +1 -0
  137. package/dist/core/nodes/PluginNode.js +106 -0
  138. package/dist/core/nodes/PluginNode.js.map +1 -0
  139. package/dist/core/nodes/ScopeNode.js +1 -0
  140. package/dist/core/nodes/ScopeNode.js.map +1 -0
  141. package/dist/core/nodes/ServiceNode.js +1 -0
  142. package/dist/core/nodes/ServiceNode.js.map +1 -0
  143. package/dist/core/nodes/TypeNode.js +2 -1
  144. package/dist/core/nodes/TypeNode.js.map +1 -0
  145. package/dist/core/nodes/VariableDeclarationNode.js +1 -0
  146. package/dist/core/nodes/VariableDeclarationNode.js.map +1 -0
  147. package/dist/core/nodes/index.d.ts +2 -1
  148. package/dist/core/nodes/index.d.ts.map +1 -1
  149. package/dist/core/nodes/index.js +4 -1
  150. package/dist/core/nodes/index.js.map +1 -0
  151. package/dist/core/toposort.d.ts +38 -0
  152. package/dist/core/toposort.d.ts.map +1 -0
  153. package/dist/core/toposort.js +129 -0
  154. package/dist/core/toposort.js.map +1 -0
  155. package/dist/data/builtins/BuiltinRegistry.js +1 -0
  156. package/dist/data/builtins/BuiltinRegistry.js.map +1 -0
  157. package/dist/data/builtins/definitions.js +1 -0
  158. package/dist/data/builtins/definitions.js.map +1 -0
  159. package/dist/data/builtins/index.js +1 -0
  160. package/dist/data/builtins/index.js.map +1 -0
  161. package/dist/data/builtins/jsGlobals.js +1 -0
  162. package/dist/data/builtins/jsGlobals.js.map +1 -0
  163. package/dist/data/builtins/types.js +1 -0
  164. package/dist/data/builtins/types.js.map +1 -0
  165. package/dist/data/globals/definitions.js +1 -0
  166. package/dist/data/globals/definitions.js.map +1 -0
  167. package/dist/data/globals/index.js +1 -0
  168. package/dist/data/globals/index.js.map +1 -0
  169. package/dist/diagnostics/DiagnosticCollector.d.ts +5 -0
  170. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -1
  171. package/dist/diagnostics/DiagnosticCollector.js +4 -0
  172. package/dist/diagnostics/DiagnosticCollector.js.map +1 -0
  173. package/dist/diagnostics/DiagnosticReporter.d.ts +23 -1
  174. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -1
  175. package/dist/diagnostics/DiagnosticReporter.js +68 -15
  176. package/dist/diagnostics/DiagnosticReporter.js.map +1 -0
  177. package/dist/diagnostics/DiagnosticWriter.js +1 -0
  178. package/dist/diagnostics/DiagnosticWriter.js.map +1 -0
  179. package/dist/diagnostics/categories.d.ts +57 -0
  180. package/dist/diagnostics/categories.d.ts.map +1 -0
  181. package/dist/diagnostics/categories.js +71 -0
  182. package/dist/diagnostics/categories.js.map +1 -0
  183. package/dist/diagnostics/index.d.ts +3 -0
  184. package/dist/diagnostics/index.d.ts.map +1 -1
  185. package/dist/diagnostics/index.js +4 -0
  186. package/dist/diagnostics/index.js.map +1 -0
  187. package/dist/errors/GrafemaError.d.ts +39 -0
  188. package/dist/errors/GrafemaError.d.ts.map +1 -1
  189. package/dist/errors/GrafemaError.js +28 -0
  190. package/dist/errors/GrafemaError.js.map +1 -0
  191. package/dist/index.d.ts +21 -8
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +19 -6
  194. package/dist/index.js.map +1 -0
  195. package/dist/instructions/index.d.ts +8 -0
  196. package/dist/instructions/index.d.ts.map +1 -0
  197. package/dist/instructions/index.js +20 -0
  198. package/dist/instructions/index.js.map +1 -0
  199. package/dist/instructions/onboarding.md +121 -0
  200. package/dist/logging/Logger.d.ts +53 -3
  201. package/dist/logging/Logger.d.ts.map +1 -1
  202. package/dist/logging/Logger.js +144 -4
  203. package/dist/logging/Logger.js.map +1 -0
  204. package/dist/plugins/Plugin.js +1 -0
  205. package/dist/plugins/Plugin.js.map +1 -0
  206. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  207. package/dist/plugins/analysis/DatabaseAnalyzer.js +20 -14
  208. package/dist/plugins/analysis/DatabaseAnalyzer.js.map +1 -0
  209. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  210. package/dist/plugins/analysis/ExpressAnalyzer.js +23 -16
  211. package/dist/plugins/analysis/ExpressAnalyzer.js.map +1 -0
  212. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +2 -1
  213. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -1
  214. package/dist/plugins/analysis/ExpressResponseAnalyzer.js +53 -76
  215. package/dist/plugins/analysis/ExpressResponseAnalyzer.js.map +1 -0
  216. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  217. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +47 -37
  218. package/dist/plugins/analysis/ExpressRouteAnalyzer.js.map +1 -0
  219. package/dist/plugins/analysis/FetchAnalyzer.d.ts +8 -14
  220. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  221. package/dist/plugins/analysis/FetchAnalyzer.js +144 -97
  222. package/dist/plugins/analysis/FetchAnalyzer.js.map +1 -0
  223. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  224. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +3 -5
  225. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js.map +1 -0
  226. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +59 -2
  227. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  228. package/dist/plugins/analysis/JSASTAnalyzer.js +926 -422
  229. package/dist/plugins/analysis/JSASTAnalyzer.js.map +1 -0
  230. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  231. package/dist/plugins/analysis/ReactAnalyzer.js +24 -19
  232. package/dist/plugins/analysis/ReactAnalyzer.js.map +1 -0
  233. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  234. package/dist/plugins/analysis/RustAnalyzer.js +39 -26
  235. package/dist/plugins/analysis/RustAnalyzer.js.map +1 -0
  236. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  237. package/dist/plugins/analysis/SQLiteAnalyzer.js +14 -7
  238. package/dist/plugins/analysis/SQLiteAnalyzer.js.map +1 -0
  239. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  240. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +33 -28
  241. package/dist/plugins/analysis/ServiceLayerAnalyzer.js.map +1 -0
  242. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  243. package/dist/plugins/analysis/SocketIOAnalyzer.js +24 -14
  244. package/dist/plugins/analysis/SocketIOAnalyzer.js.map +1 -0
  245. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  246. package/dist/plugins/analysis/SystemDbAnalyzer.js +19 -11
  247. package/dist/plugins/analysis/SystemDbAnalyzer.js.map +1 -0
  248. package/dist/plugins/analysis/ast/ConditionParser.js +1 -0
  249. package/dist/plugins/analysis/ast/ConditionParser.js.map +1 -0
  250. package/dist/plugins/analysis/ast/ExpressionEvaluator.d.ts.map +1 -1
  251. package/dist/plugins/analysis/ast/ExpressionEvaluator.js +1 -0
  252. package/dist/plugins/analysis/ast/ExpressionEvaluator.js.map +1 -0
  253. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +58 -6
  254. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  255. package/dist/plugins/analysis/ast/GraphBuilder.js +440 -56
  256. package/dist/plugins/analysis/ast/GraphBuilder.js.map +1 -0
  257. package/dist/plugins/analysis/ast/IdGenerator.js +1 -0
  258. package/dist/plugins/analysis/ast/IdGenerator.js.map +1 -0
  259. package/dist/plugins/analysis/ast/OxcAdapter.js +1 -0
  260. package/dist/plugins/analysis/ast/OxcAdapter.js.map +1 -0
  261. package/dist/plugins/analysis/ast/types.d.ts +152 -1
  262. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  263. package/dist/plugins/analysis/ast/types.js +1 -0
  264. package/dist/plugins/analysis/ast/types.js.map +1 -0
  265. package/dist/plugins/analysis/ast/utils/babelTraverse.d.ts +27 -0
  266. package/dist/plugins/analysis/ast/utils/babelTraverse.d.ts.map +1 -0
  267. package/dist/plugins/analysis/ast/utils/babelTraverse.js +45 -0
  268. package/dist/plugins/analysis/ast/utils/babelTraverse.js.map +1 -0
  269. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +1 -1
  270. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -1
  271. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +1 -0
  272. package/dist/plugins/analysis/ast/utils/createParameterNodes.js.map +1 -0
  273. package/dist/plugins/analysis/ast/utils/index.js +1 -0
  274. package/dist/plugins/analysis/ast/utils/index.js.map +1 -0
  275. package/dist/plugins/analysis/ast/utils/location.js +1 -0
  276. package/dist/plugins/analysis/ast/utils/location.js.map +1 -0
  277. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +3 -1
  278. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  279. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +1 -0
  280. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js.map +1 -0
  281. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +9 -2
  282. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  283. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +145 -14
  284. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js.map +1 -0
  285. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +1 -1
  286. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  287. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +198 -0
  288. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js.map +1 -0
  289. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +4 -3
  290. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  291. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +5 -2
  292. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js.map +1 -0
  293. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +1 -0
  294. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js.map +1 -0
  295. package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts +83 -0
  296. package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts.map +1 -0
  297. package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js +258 -0
  298. package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js.map +1 -0
  299. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +1 -1
  300. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  301. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +1 -0
  302. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js.map +1 -0
  303. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +1 -1
  304. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  305. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +1 -0
  306. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js.map +1 -0
  307. package/dist/plugins/analysis/ast/visitors/index.d.ts +1 -0
  308. package/dist/plugins/analysis/ast/visitors/index.d.ts.map +1 -1
  309. package/dist/plugins/analysis/ast/visitors/index.js +2 -0
  310. package/dist/plugins/analysis/ast/visitors/index.js.map +1 -0
  311. package/dist/plugins/discovery/DiscoveryPlugin.d.ts +42 -10
  312. package/dist/plugins/discovery/DiscoveryPlugin.d.ts.map +1 -1
  313. package/dist/plugins/discovery/DiscoveryPlugin.js +17 -1
  314. package/dist/plugins/discovery/DiscoveryPlugin.js.map +1 -0
  315. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  316. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
  317. package/dist/plugins/discovery/MonorepoServiceDiscovery.js.map +1 -0
  318. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
  319. package/dist/plugins/discovery/SimpleProjectDiscovery.js +3 -2
  320. package/dist/plugins/discovery/SimpleProjectDiscovery.js.map +1 -0
  321. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -1
  322. package/dist/plugins/discovery/WorkspaceDiscovery.js +3 -2
  323. package/dist/plugins/discovery/WorkspaceDiscovery.js.map +1 -0
  324. package/dist/plugins/discovery/resolveSourceEntrypoint.js +1 -0
  325. package/dist/plugins/discovery/resolveSourceEntrypoint.js.map +1 -0
  326. package/dist/plugins/discovery/workspaces/detector.js +1 -0
  327. package/dist/plugins/discovery/workspaces/detector.js.map +1 -0
  328. package/dist/plugins/discovery/workspaces/globResolver.js +1 -0
  329. package/dist/plugins/discovery/workspaces/globResolver.js.map +1 -0
  330. package/dist/plugins/discovery/workspaces/index.js +1 -0
  331. package/dist/plugins/discovery/workspaces/index.js.map +1 -0
  332. package/dist/plugins/discovery/workspaces/parsers.js +1 -0
  333. package/dist/plugins/discovery/workspaces/parsers.js.map +1 -0
  334. package/dist/plugins/enrichment/AliasTracker.js +3 -2
  335. package/dist/plugins/enrichment/AliasTracker.js.map +1 -0
  336. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -1
  337. package/dist/plugins/enrichment/ArgumentParameterLinker.js +1 -1
  338. package/dist/plugins/enrichment/ArgumentParameterLinker.js.map +1 -0
  339. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -1
  340. package/dist/plugins/enrichment/ClosureCaptureEnricher.js +1 -1
  341. package/dist/plugins/enrichment/ClosureCaptureEnricher.js.map +1 -0
  342. package/dist/plugins/enrichment/ExpressHandlerLinker.d.ts +21 -0
  343. package/dist/plugins/enrichment/ExpressHandlerLinker.d.ts.map +1 -0
  344. package/dist/plugins/enrichment/ExpressHandlerLinker.js +137 -0
  345. package/dist/plugins/enrichment/ExpressHandlerLinker.js.map +1 -0
  346. package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -1
  347. package/dist/plugins/enrichment/ExternalCallResolver.js +1 -1
  348. package/dist/plugins/enrichment/ExternalCallResolver.js.map +1 -0
  349. package/dist/plugins/enrichment/FunctionCallResolver.d.ts +5 -0
  350. package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -1
  351. package/dist/plugins/enrichment/FunctionCallResolver.js +11 -9
  352. package/dist/plugins/enrichment/FunctionCallResolver.js.map +1 -0
  353. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +2 -0
  354. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  355. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +51 -13
  356. package/dist/plugins/enrichment/HTTPConnectionEnricher.js.map +1 -0
  357. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  358. package/dist/plugins/enrichment/ImportExportLinker.js +1 -1
  359. package/dist/plugins/enrichment/ImportExportLinker.js.map +1 -0
  360. package/dist/plugins/enrichment/InstanceOfResolver.js +3 -2
  361. package/dist/plugins/enrichment/InstanceOfResolver.js.map +1 -0
  362. package/dist/plugins/enrichment/MethodCallResolver.d.ts +39 -1
  363. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  364. package/dist/plugins/enrichment/MethodCallResolver.js +422 -11
  365. package/dist/plugins/enrichment/MethodCallResolver.js.map +1 -0
  366. package/dist/plugins/enrichment/MountPointResolver.d.ts +1 -1
  367. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  368. package/dist/plugins/enrichment/MountPointResolver.js +7 -23
  369. package/dist/plugins/enrichment/MountPointResolver.js.map +1 -0
  370. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -1
  371. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +2 -2
  372. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js.map +1 -0
  373. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  374. package/dist/plugins/enrichment/PrefixEvaluator.js +5 -4
  375. package/dist/plugins/enrichment/PrefixEvaluator.js.map +1 -0
  376. package/dist/plugins/enrichment/RejectionPropagationEnricher.d.ts +30 -0
  377. package/dist/plugins/enrichment/RejectionPropagationEnricher.d.ts.map +1 -0
  378. package/dist/plugins/enrichment/RejectionPropagationEnricher.js +190 -0
  379. package/dist/plugins/enrichment/RejectionPropagationEnricher.js.map +1 -0
  380. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  381. package/dist/plugins/enrichment/RustFFIEnricher.js +1 -1
  382. package/dist/plugins/enrichment/RustFFIEnricher.js.map +1 -0
  383. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +1 -1
  384. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  385. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +4 -3
  386. package/dist/plugins/enrichment/ValueDomainAnalyzer.js.map +1 -0
  387. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts +3 -1
  388. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  389. package/dist/plugins/indexing/IncrementalModuleIndexer.js +22 -29
  390. package/dist/plugins/indexing/IncrementalModuleIndexer.js.map +1 -0
  391. package/dist/plugins/indexing/JSModuleIndexer.d.ts +3 -1
  392. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  393. package/dist/plugins/indexing/JSModuleIndexer.js +22 -31
  394. package/dist/plugins/indexing/JSModuleIndexer.js.map +1 -0
  395. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  396. package/dist/plugins/indexing/RustModuleIndexer.js +11 -5
  397. package/dist/plugins/indexing/RustModuleIndexer.js.map +1 -0
  398. package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -1
  399. package/dist/plugins/validation/BrokenImportValidator.js +3 -3
  400. package/dist/plugins/validation/BrokenImportValidator.js.map +1 -0
  401. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  402. package/dist/plugins/validation/CallResolverValidator.js +3 -3
  403. package/dist/plugins/validation/CallResolverValidator.js.map +1 -0
  404. package/dist/plugins/validation/DataFlowValidator.js +2 -1
  405. package/dist/plugins/validation/DataFlowValidator.js.map +1 -0
  406. package/dist/plugins/validation/EvalBanValidator.js +2 -1
  407. package/dist/plugins/validation/EvalBanValidator.js.map +1 -0
  408. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  409. package/dist/plugins/validation/GraphConnectivityValidator.js +2 -1
  410. package/dist/plugins/validation/GraphConnectivityValidator.js.map +1 -0
  411. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  412. package/dist/plugins/validation/SQLInjectionValidator.js +4 -2
  413. package/dist/plugins/validation/SQLInjectionValidator.js.map +1 -0
  414. package/dist/plugins/validation/ShadowingDetector.js +2 -1
  415. package/dist/plugins/validation/ShadowingDetector.js.map +1 -0
  416. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
  417. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +3 -3
  418. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js.map +1 -0
  419. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
  420. package/dist/plugins/vcs/GitPlugin.js +13 -6
  421. package/dist/plugins/vcs/GitPlugin.js.map +1 -0
  422. package/dist/plugins/vcs/VCSPlugin.js +1 -0
  423. package/dist/plugins/vcs/VCSPlugin.js.map +1 -0
  424. package/dist/plugins/vcs/index.js +1 -0
  425. package/dist/plugins/vcs/index.js.map +1 -0
  426. package/dist/queries/findCallsInFunction.d.ts +1 -1
  427. package/dist/queries/findCallsInFunction.d.ts.map +1 -1
  428. package/dist/queries/findCallsInFunction.js +3 -2
  429. package/dist/queries/findCallsInFunction.js.map +1 -0
  430. package/dist/queries/findContainingFunction.d.ts +1 -1
  431. package/dist/queries/findContainingFunction.d.ts.map +1 -1
  432. package/dist/queries/findContainingFunction.js +1 -0
  433. package/dist/queries/findContainingFunction.js.map +1 -0
  434. package/dist/queries/index.js +1 -0
  435. package/dist/queries/index.js.map +1 -0
  436. package/dist/queries/traceValues.d.ts.map +1 -1
  437. package/dist/queries/traceValues.js +1 -0
  438. package/dist/queries/traceValues.js.map +1 -0
  439. package/dist/queries/types.js +1 -0
  440. package/dist/queries/types.js.map +1 -0
  441. package/dist/schema/GraphSchemaExtractor.js +1 -0
  442. package/dist/schema/GraphSchemaExtractor.js.map +1 -0
  443. package/dist/schema/InterfaceSchemaExtractor.js +1 -0
  444. package/dist/schema/InterfaceSchemaExtractor.js.map +1 -0
  445. package/dist/schema/index.js +1 -0
  446. package/dist/schema/index.js.map +1 -0
  447. package/dist/storage/backends/RFDBServerBackend.d.ts +20 -0
  448. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  449. package/dist/storage/backends/RFDBServerBackend.js +47 -19
  450. package/dist/storage/backends/RFDBServerBackend.js.map +1 -0
  451. package/dist/storage/backends/typeValidation.d.ts.map +1 -1
  452. package/dist/storage/backends/typeValidation.js +3 -0
  453. package/dist/storage/backends/typeValidation.js.map +1 -0
  454. package/dist/utils/findRfdbBinary.d.ts +39 -0
  455. package/dist/utils/findRfdbBinary.d.ts.map +1 -0
  456. package/dist/utils/findRfdbBinary.js +141 -0
  457. package/dist/utils/findRfdbBinary.js.map +1 -0
  458. package/dist/utils/moduleResolution.d.ts +134 -0
  459. package/dist/utils/moduleResolution.d.ts.map +1 -0
  460. package/dist/utils/moduleResolution.js +164 -0
  461. package/dist/utils/moduleResolution.js.map +1 -0
  462. package/dist/validation/PathValidator.d.ts.map +1 -1
  463. package/dist/validation/PathValidator.js +1 -0
  464. package/dist/validation/PathValidator.js.map +1 -0
  465. package/package.json +4 -3
  466. package/src/Orchestrator.ts +371 -41
  467. package/src/api/GraphAPI.ts +4 -2
  468. package/src/api/GuaranteeAPI.ts +3 -2
  469. package/src/config/ConfigLoader.ts +121 -3
  470. package/src/config/index.ts +7 -1
  471. package/src/core/ASTWorker.ts +8 -20
  472. package/src/core/ASTWorkerPool.ts +1 -1
  473. package/src/core/CoverageAnalyzer.ts +2 -2
  474. package/src/core/FileNodeManager.ts +3 -2
  475. package/src/core/GuaranteeManager.ts +1 -1
  476. package/src/core/IncrementalReanalyzer.ts +6 -3
  477. package/src/core/NodeFactory.ts +34 -1
  478. package/src/core/WorkerPool.ts +2 -1
  479. package/src/core/nodes/NodeKind.ts +11 -0
  480. package/src/core/nodes/PluginNode.ts +144 -0
  481. package/src/core/nodes/TypeNode.ts +1 -1
  482. package/src/core/nodes/index.ts +4 -0
  483. package/src/core/toposort.ts +160 -0
  484. package/src/diagnostics/DiagnosticCollector.ts +8 -1
  485. package/src/diagnostics/DiagnosticReporter.ts +87 -16
  486. package/src/diagnostics/categories.ts +104 -0
  487. package/src/diagnostics/index.ts +14 -0
  488. package/src/errors/GrafemaError.ts +58 -0
  489. package/src/index.ts +53 -7
  490. package/src/instructions/index.ts +21 -0
  491. package/src/instructions/onboarding.md +121 -0
  492. package/src/logging/Logger.ts +155 -4
  493. package/src/plugins/analysis/DatabaseAnalyzer.ts +22 -15
  494. package/src/plugins/analysis/ExpressAnalyzer.ts +30 -18
  495. package/src/plugins/analysis/ExpressResponseAnalyzer.ts +72 -88
  496. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +54 -39
  497. package/src/plugins/analysis/FetchAnalyzer.ts +165 -113
  498. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +6 -7
  499. package/src/plugins/analysis/JSASTAnalyzer.ts +1122 -487
  500. package/src/plugins/analysis/ReactAnalyzer.ts +27 -20
  501. package/src/plugins/analysis/RustAnalyzer.ts +41 -27
  502. package/src/plugins/analysis/SQLiteAnalyzer.ts +18 -8
  503. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +38 -34
  504. package/src/plugins/analysis/SocketIOAnalyzer.ts +30 -15
  505. package/src/plugins/analysis/SystemDbAnalyzer.ts +24 -13
  506. package/src/plugins/analysis/ast/ExpressionEvaluator.ts +1 -3
  507. package/src/plugins/analysis/ast/GraphBuilder.ts +532 -66
  508. package/src/plugins/analysis/ast/types.ts +200 -2
  509. package/src/plugins/analysis/ast/utils/babelTraverse.ts +74 -0
  510. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +1 -1
  511. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +7 -2
  512. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +163 -15
  513. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +249 -3
  514. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +9 -4
  515. package/src/plugins/analysis/ast/visitors/PropertyAccessVisitor.ts +342 -0
  516. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +2 -3
  517. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +1 -27
  518. package/src/plugins/analysis/ast/visitors/index.ts +2 -0
  519. package/src/plugins/discovery/DiscoveryPlugin.ts +42 -11
  520. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +2 -2
  521. package/src/plugins/discovery/SimpleProjectDiscovery.ts +2 -2
  522. package/src/plugins/discovery/WorkspaceDiscovery.ts +2 -2
  523. package/src/plugins/discovery/workspaces/globResolver.ts +1 -1
  524. package/src/plugins/enrichment/AliasTracker.ts +2 -2
  525. package/src/plugins/enrichment/ArgumentParameterLinker.ts +0 -1
  526. package/src/plugins/enrichment/ClosureCaptureEnricher.ts +0 -1
  527. package/src/plugins/enrichment/ExpressHandlerLinker.ts +178 -0
  528. package/src/plugins/enrichment/ExternalCallResolver.ts +0 -1
  529. package/src/plugins/enrichment/FunctionCallResolver.ts +10 -15
  530. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +65 -14
  531. package/src/plugins/enrichment/ImportExportLinker.ts +0 -1
  532. package/src/plugins/enrichment/InstanceOfResolver.ts +2 -2
  533. package/src/plugins/enrichment/MethodCallResolver.ts +526 -12
  534. package/src/plugins/enrichment/MountPointResolver.ts +6 -24
  535. package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +1 -2
  536. package/src/plugins/enrichment/PrefixEvaluator.ts +4 -4
  537. package/src/plugins/enrichment/RejectionPropagationEnricher.ts +253 -0
  538. package/src/plugins/enrichment/RustFFIEnricher.ts +0 -1
  539. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +3 -3
  540. package/src/plugins/indexing/IncrementalModuleIndexer.ts +24 -30
  541. package/src/plugins/indexing/JSModuleIndexer.ts +21 -22
  542. package/src/plugins/indexing/RustModuleIndexer.ts +10 -5
  543. package/src/plugins/validation/BrokenImportValidator.ts +2 -3
  544. package/src/plugins/validation/CallResolverValidator.ts +2 -3
  545. package/src/plugins/validation/DataFlowValidator.ts +1 -1
  546. package/src/plugins/validation/EvalBanValidator.ts +1 -1
  547. package/src/plugins/validation/GraphConnectivityValidator.ts +1 -9
  548. package/src/plugins/validation/SQLInjectionValidator.ts +3 -2
  549. package/src/plugins/validation/ShadowingDetector.ts +1 -1
  550. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +2 -3
  551. package/src/plugins/vcs/GitPlugin.ts +12 -6
  552. package/src/queries/findCallsInFunction.ts +4 -4
  553. package/src/queries/findContainingFunction.ts +1 -1
  554. package/src/queries/traceValues.ts +0 -1
  555. package/src/storage/backends/RFDBServerBackend.ts +56 -22
  556. package/src/storage/backends/typeValidation.ts +2 -0
  557. package/src/utils/findRfdbBinary.ts +160 -0
  558. package/src/utils/moduleResolution.ts +244 -0
  559. package/src/validation/PathValidator.ts +0 -8
  560. package/src/plugins/validation/NodeCreationValidator.ts +0 -554
@@ -13,16 +13,17 @@
13
13
  */
14
14
 
15
15
  import { readFileSync } from 'fs';
16
- import { parse, ParserPlugin } from '@babel/parser';
16
+ import type { ParserPlugin } from '@babel/parser';
17
+ import { parse } from '@babel/parser';
17
18
  import traverseModule from '@babel/traverse';
18
19
  import type { CallExpression, Identifier, MemberExpression, Node, ArrowFunctionExpression, FunctionExpression } from '@babel/types';
19
20
  import type { NodePath } from '@babel/traverse';
20
21
  import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
21
22
  import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
22
23
  import type { NodeRecord } from '@grafema/types';
24
+ import { NodeFactory } from '../../core/NodeFactory.js';
23
25
  import { getLine } from './ast/utils/location.js';
24
26
 
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
27
  const traverse = (traverseModule as any).default || traverseModule;
27
28
 
28
29
  const RESPONSE_METHODS = ['json', 'send'];
@@ -46,7 +47,6 @@ export class ExpressResponseAnalyzer extends Plugin {
46
47
  return {
47
48
  name: 'ExpressResponseAnalyzer',
48
49
  phase: 'ANALYSIS',
49
- priority: 74, // After ExpressRouteAnalyzer (75)
50
50
  creates: {
51
51
  nodes: [],
52
52
  edges: ['RESPONDS_WITH']
@@ -70,21 +70,30 @@ export class ExpressResponseAnalyzer extends Plugin {
70
70
  logger.info('Processing routes', { count: routes.length });
71
71
 
72
72
  let edgesCreated = 0;
73
+ let nodesCreated = 0;
74
+ const allNodes: NodeRecord[] = [];
75
+ const allEdges: Array<{ type: string; src: string; dst: string; metadata?: unknown }> = [];
73
76
 
74
77
  for (const route of routes) {
75
- const result = await this.analyzeRouteResponses(route, graph);
76
- edgesCreated += result;
78
+ const result = await this.analyzeRouteResponses(route, graph, allNodes, allEdges);
79
+ edgesCreated += result.edges;
80
+ nodesCreated += result.nodes;
77
81
  }
78
82
 
79
- logger.info('Analysis complete', { edgesCreated });
83
+ // Flush all nodes and edges
84
+ await graph.addNodes(allNodes);
85
+ await graph.addEdges(allEdges);
86
+
87
+ logger.info('Analysis complete', { nodesCreated, edgesCreated });
80
88
 
81
89
  return createSuccessResult(
82
- { nodes: 0, edges: edgesCreated },
90
+ { nodes: nodesCreated, edges: edgesCreated },
83
91
  { routesAnalyzed: routes.length }
84
92
  );
85
93
  } catch (error) {
86
94
  logger.error('Analysis failed', { error });
87
- return createErrorResult(error as Error);
95
+ const err = error instanceof Error ? error : new Error(String(error));
96
+ return createErrorResult(err);
88
97
  }
89
98
  }
90
99
 
@@ -93,16 +102,19 @@ export class ExpressResponseAnalyzer extends Plugin {
93
102
  */
94
103
  private async analyzeRouteResponses(
95
104
  route: NodeRecord,
96
- graph: PluginContext['graph']
97
- ): Promise<number> {
105
+ graph: PluginContext['graph'],
106
+ nodes: NodeRecord[],
107
+ edges: Array<{ type: string; src: string; dst: string; metadata?: unknown }>
108
+ ): Promise<{ nodes: number; edges: number }> {
98
109
  let edgesCreated = 0;
110
+ let nodesCreated = 0;
99
111
 
100
112
  try {
101
113
  // Get HANDLED_BY edges to find handler function
102
114
  const handledByEdges = await graph.getOutgoingEdges(route.id, ['HANDLED_BY']);
103
115
 
104
116
  if (handledByEdges.length === 0) {
105
- return 0;
117
+ return { nodes: 0, edges: 0 };
106
118
  }
107
119
 
108
120
  // Get handler function node
@@ -110,7 +122,7 @@ export class ExpressResponseAnalyzer extends Plugin {
110
122
  const handlerNode = await graph.getNode(handlerEdge.dst);
111
123
 
112
124
  if (!handlerNode || !handlerNode.file) {
113
- return 0;
125
+ return { nodes: 0, edges: 0 };
114
126
  }
115
127
 
116
128
  // Parse the file and find response calls in handler
@@ -130,18 +142,21 @@ export class ExpressResponseAnalyzer extends Plugin {
130
142
  // Create RESPONDS_WITH edges
131
143
  for (const call of responseCalls) {
132
144
  // Try to resolve to existing variable, or create a unique response node
133
- const dstNodeId = await this.resolveOrCreateResponseNode(
145
+ const result = await this.resolveOrCreateResponseNode(
134
146
  graph,
135
147
  handlerNode.file,
136
148
  call,
137
149
  route.id,
138
- handlerNode.id // Handler's semantic ID for scope resolution
150
+ handlerNode.id, // Handler's semantic ID for scope resolution
151
+ nodes
139
152
  );
140
153
 
141
- await graph.addEdge({
154
+ nodesCreated += result.nodesCreated;
155
+
156
+ edges.push({
142
157
  type: 'RESPONDS_WITH',
143
158
  src: route.id,
144
- dst: dstNodeId,
159
+ dst: result.nodeId,
145
160
  metadata: {
146
161
  responseMethod: call.method
147
162
  }
@@ -152,7 +167,7 @@ export class ExpressResponseAnalyzer extends Plugin {
152
167
  // Silent - per-route errors shouldn't spam logs
153
168
  }
154
169
 
155
- return edgesCreated;
170
+ return { nodes: nodesCreated, edges: edgesCreated };
156
171
  }
157
172
 
158
173
  /**
@@ -327,15 +342,17 @@ export class ExpressResponseAnalyzer extends Plugin {
327
342
  * @param call - Response call info (includes identifierName)
328
343
  * @param routeId - Route ID (for metadata)
329
344
  * @param handlerSemanticId - Handler function's semantic ID (for scope matching)
330
- * @returns Node ID (existing or newly created)
345
+ * @param nodes - Array to collect nodes for batch insertion
346
+ * @returns Object with nodeId and nodesCreated count
331
347
  */
332
348
  private async resolveOrCreateResponseNode(
333
349
  graph: PluginContext['graph'],
334
350
  file: string,
335
351
  call: ResponseCallInfo,
336
352
  routeId: string,
337
- handlerSemanticId: string
338
- ): Promise<string> {
353
+ handlerSemanticId: string,
354
+ nodes: NodeRecord[]
355
+ ): Promise<{ nodeId: string; nodesCreated: number }> {
339
356
  const { argLine, argColumn, argType, identifierName } = call;
340
357
 
341
358
  // For Identifier arguments, try to find existing variable/parameter
@@ -349,20 +366,21 @@ export class ExpressResponseAnalyzer extends Plugin {
349
366
  );
350
367
 
351
368
  if (existingNodeId) {
352
- return existingNodeId; // Use existing node, no stub needed
369
+ return { nodeId: existingNodeId, nodesCreated: 0 }; // Use existing node, no stub needed
353
370
  }
354
371
  // Fall through to create stub if not found (external/global variables)
355
372
  }
356
373
 
357
374
  // For non-Identifier or not-found, create stub node (existing logic)
358
- return this.createResponseArgumentNode(
359
- graph,
375
+ const nodeId = this.createResponseArgumentNode(
360
376
  file,
361
377
  argLine,
362
378
  argColumn,
363
379
  argType,
364
- routeId
380
+ routeId,
381
+ nodes
365
382
  );
383
+ return { nodeId, nodesCreated: 1 };
366
384
  }
367
385
 
368
386
  /**
@@ -552,84 +570,50 @@ export class ExpressResponseAnalyzer extends Plugin {
552
570
  /**
553
571
  * Create a node for the response argument
554
572
  */
555
- private async createResponseArgumentNode(
556
- graph: PluginContext['graph'],
573
+ private createResponseArgumentNode(
557
574
  file: string,
558
575
  line: number,
559
576
  column: number,
560
577
  astType: string,
561
- routeId: string
562
- ): Promise<string> {
563
- // Map AST type to node type and create appropriate node
578
+ _routeId: string,
579
+ nodes: NodeRecord[]
580
+ ): string {
581
+ const counter = this.responseNodeCounter++;
582
+
583
+ // Map AST type to node type and create appropriate node via NodeFactory
564
584
  switch (astType) {
565
585
  case 'ObjectExpression': {
566
- // Include counter to make the node unique even for same location
567
- const counter = this.responseNodeCounter++;
568
- const id = `OBJECT_LITERAL#response:${counter}#${file}#${line}:${column}`;
569
- await graph.addNode({
570
- id,
571
- type: 'OBJECT_LITERAL',
572
- name: '<response>',
573
- file,
574
- line,
575
- column,
576
- parentRouteId: routeId
577
- } as NodeRecord);
578
- return id;
586
+ const node = NodeFactory.createObjectLiteral(file, line, column, {
587
+ argIndex: counter
588
+ });
589
+ nodes.push(node as NodeRecord);
590
+ return node.id;
579
591
  }
580
592
  case 'Identifier': {
581
- // For identifiers, we link to the variable that's being returned
582
- const counter = this.responseNodeCounter++;
583
- const id = `VARIABLE#response:${counter}#${file}#${line}:${column}`;
584
- await graph.addNode({
585
- id,
586
- type: 'VARIABLE',
587
- name: '<response>',
588
- file,
589
- line,
590
- column
591
- } as NodeRecord);
592
- return id;
593
+ const node = NodeFactory.createVariableDeclaration('<response>', file, line, column, {
594
+ counter
595
+ });
596
+ nodes.push(node as NodeRecord);
597
+ return node.id;
593
598
  }
594
599
  case 'CallExpression': {
595
- const counter = this.responseNodeCounter++;
596
- const id = `CALL#response:${counter}#${file}#${line}:${column}`;
597
- await graph.addNode({
598
- id,
599
- type: 'CALL',
600
- name: '<response>',
601
- file,
602
- line,
603
- column
604
- } as NodeRecord);
605
- return id;
600
+ const node = NodeFactory.createCallSite('<response>', file, line, column, {
601
+ counter
602
+ });
603
+ nodes.push(node as NodeRecord);
604
+ return node.id;
606
605
  }
607
606
  case 'ArrayExpression': {
608
- const counter = this.responseNodeCounter++;
609
- const id = `ARRAY_LITERAL#response:${counter}#${file}#${line}:${column}`;
610
- await graph.addNode({
611
- id,
612
- type: 'ARRAY_LITERAL',
613
- name: '<response>',
614
- file,
615
- line,
616
- column
617
- } as NodeRecord);
618
- return id;
607
+ const node = NodeFactory.createArrayLiteral(file, line, column, {
608
+ argIndex: counter
609
+ });
610
+ nodes.push(node as NodeRecord);
611
+ return node.id;
619
612
  }
620
613
  default: {
621
- // Generic expression node
622
- const counter = this.responseNodeCounter++;
623
- const id = `EXPRESSION#response:${counter}#${file}#${line}:${column}`;
624
- await graph.addNode({
625
- id,
626
- type: 'EXPRESSION',
627
- name: '<response>',
628
- file,
629
- line,
630
- column
631
- } as NodeRecord);
632
- return id;
614
+ const node = NodeFactory.createExpression(astType, file, line, column);
615
+ nodes.push(node as NodeRecord);
616
+ return node.id;
633
617
  }
634
618
  }
635
619
  }
@@ -9,7 +9,8 @@
9
9
  */
10
10
 
11
11
  import { readFileSync } from 'fs';
12
- import { parse, ParserPlugin } from '@babel/parser';
12
+ import type { ParserPlugin } from '@babel/parser';
13
+ import { parse } from '@babel/parser';
13
14
  import traverseModule from '@babel/traverse';
14
15
  import type { CallExpression, Identifier, MemberExpression, Node } from '@babel/types';
15
16
  import type { NodePath } from '@babel/traverse';
@@ -18,7 +19,6 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
18
19
  import type { NodeRecord } from '@grafema/types';
19
20
  import { getLine, getColumn } from './ast/utils/location.js';
20
21
 
21
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
22
  const traverse = (traverseModule as any).default || traverseModule;
23
23
 
24
24
  /**
@@ -35,6 +35,8 @@ interface EndpointNode {
35
35
  routerName: string;
36
36
  handlerLine: number;
37
37
  handlerColumn: number;
38
+ handlerStart?: number; // Byte offset for inline handlers
39
+ handlerName?: string; // Function name for named handler references
38
40
  }
39
41
 
40
42
  /**
@@ -69,7 +71,6 @@ export class ExpressRouteAnalyzer extends Plugin {
69
71
  return {
70
72
  name: 'ExpressRouteAnalyzer',
71
73
  phase: 'ANALYSIS',
72
- priority: 75, // После JSASTAnalyzer (80) - меньший приоритет = позже
73
74
  creates: {
74
75
  nodes: ['http:route', 'express:middleware'],
75
76
  edges: ['CONTAINS', 'USES_MIDDLEWARE', 'HANDLED_BY']
@@ -252,6 +253,18 @@ export class ExpressRouteAnalyzer extends Plugin {
252
253
  // Создаём http:route
253
254
  const endpointId = `http:route#${method.toUpperCase()}:${routePath}#${module.file}#${getLine(node)}`;
254
255
 
256
+ // Determine handler identification for HANDLED_BY linking:
257
+ // - Inline functions (arrow/function expressions): use byte offset (start)
258
+ // - Named references (Identifier): use function name
259
+ let handlerStart: number | undefined;
260
+ let handlerName: string | undefined;
261
+ if (actualHandler.type === 'ArrowFunctionExpression' ||
262
+ actualHandler.type === 'FunctionExpression') {
263
+ handlerStart = (actualHandler as { start?: number }).start;
264
+ } else if (actualHandler.type === 'Identifier') {
265
+ handlerName = (actualHandler as Identifier).name;
266
+ }
267
+
255
268
  endpoints.push({
256
269
  id: endpointId,
257
270
  type: 'http:route',
@@ -266,7 +279,9 @@ export class ExpressRouteAnalyzer extends Plugin {
266
279
  : getLine(node),
267
280
  handlerColumn: actualHandler.loc
268
281
  ? getColumn(actualHandler)
269
- : getColumn(node)
282
+ : getColumn(node),
283
+ handlerStart,
284
+ handlerName
270
285
  });
271
286
 
272
287
  // Обрабатываем middleware
@@ -356,56 +371,47 @@ export class ExpressRouteAnalyzer extends Plugin {
356
371
  }
357
372
  });
358
373
 
359
- // Создаём ENDPOINT ноды
374
+ // Collect all nodes and edges for batch operations
375
+ const nodes: NodeRecord[] = [];
376
+ const edges: Array<{ type: string; src: string; dst: string }> = [];
377
+
378
+ // Prepare ENDPOINT nodes
360
379
  for (const endpoint of endpoints) {
361
- // Сохраняем handler location ПЕРЕД destructuring
362
- const handlerLine = endpoint.handlerLine;
363
- const handlerColumn = endpoint.handlerColumn;
364
380
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
365
- const { handlerLine: _hl, handlerColumn: _hc, routerName, ...endpointData } = endpoint;
366
-
367
- await graph.addNode(endpointData as unknown as NodeRecord);
381
+ const { handlerLine: _hl, handlerColumn: _hc, handlerStart, handlerName, routerName, ...endpointData } = endpoint;
382
+
383
+ // Store handler identification in metadata for ExpressHandlerLinker enricher
384
+ const nodeData = {
385
+ ...endpointData,
386
+ metadata: {
387
+ ...(handlerStart !== undefined && { handlerStart }),
388
+ ...(handlerName !== undefined && { handlerName })
389
+ }
390
+ };
391
+ nodes.push(nodeData as unknown as NodeRecord);
368
392
  endpointsCreated++;
369
393
 
370
394
  // MODULE -> CONTAINS -> ENDPOINT
371
- await graph.addEdge({
395
+ edges.push({
372
396
  type: 'CONTAINS',
373
397
  src: module.id,
374
398
  dst: endpoint.id
375
399
  });
376
400
  edgesCreated++;
377
401
 
378
- // Ищем FUNCTION ноду для handler по line+column
379
- // NOTE: queryNodes не поддерживает line/column фильтрацию, поэтому фильтруем вручную
380
- if (handlerLine) {
381
- for await (const fn of graph.queryNodes({
382
- type: 'FUNCTION',
383
- file: module.file
384
- })) {
385
- // Проверяем точное совпадение line и column
386
- if (fn.line === handlerLine && fn.column === handlerColumn) {
387
- // ENDPOINT -> HANDLED_BY -> FUNCTION
388
- await graph.addEdge({
389
- type: 'HANDLED_BY',
390
- src: endpoint.id,
391
- dst: fn.id
392
- });
393
- edgesCreated++;
394
- break;
395
- }
396
- }
397
- }
402
+ // NOTE: HANDLED_BY edges are created by ExpressHandlerLinker enricher
403
+ // using handlerStart (byte offset) or handlerName stored in node metadata
398
404
  }
399
405
 
400
- // Создаём MIDDLEWARE ноды и связи
406
+ // Prepare MIDDLEWARE nodes
401
407
  for (const middleware of middlewares) {
402
- const { endpointId, order, ...middlewareData } = middleware;
408
+ const { endpointId, order: _order, ...middlewareData } = middleware;
403
409
 
404
- await graph.addNode(middlewareData as unknown as NodeRecord);
410
+ nodes.push(middlewareData as unknown as NodeRecord);
405
411
  middlewareCreated++;
406
412
 
407
413
  // MODULE -> CONTAINS -> MIDDLEWARE
408
- await graph.addEdge({
414
+ edges.push({
409
415
  type: 'CONTAINS',
410
416
  src: module.id,
411
417
  dst: middleware.id
@@ -415,14 +421,20 @@ export class ExpressRouteAnalyzer extends Plugin {
415
421
  // Если есть связанный endpoint
416
422
  if (endpointId) {
417
423
  // ENDPOINT -> USES_MIDDLEWARE -> MIDDLEWARE
418
- await graph.addEdge({
424
+ edges.push({
419
425
  type: 'USES_MIDDLEWARE',
420
426
  src: endpointId,
421
427
  dst: middleware.id
422
428
  });
423
429
  edgesCreated++;
424
430
  }
431
+ }
425
432
 
433
+ // Flush nodes first so they exist for edge queries
434
+ await graph.addNodes(nodes);
435
+
436
+ // Query for HANDLED_BY edges (needs nodes to exist first)
437
+ for (const middleware of middlewares) {
426
438
  // Ищем FUNCTION ноду для middleware (если это именованная функция)
427
439
  if (!middleware.name.startsWith('inline:')) {
428
440
  for await (const fn of graph.queryNodes({
@@ -431,7 +443,7 @@ export class ExpressRouteAnalyzer extends Plugin {
431
443
  name: middleware.name
432
444
  })) {
433
445
  // MIDDLEWARE -> HANDLED_BY -> FUNCTION
434
- await graph.addEdge({
446
+ edges.push({
435
447
  type: 'HANDLED_BY',
436
448
  src: middleware.id,
437
449
  dst: fn.id
@@ -441,7 +453,10 @@ export class ExpressRouteAnalyzer extends Plugin {
441
453
  }
442
454
  }
443
455
  }
444
- } catch (error) {
456
+
457
+ // Flush all edges
458
+ await graph.addEdges(edges);
459
+ } catch {
445
460
  // Silent - per-module errors shouldn't spam logs
446
461
  }
447
462