@grafema/core 0.2.4-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 (557) 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 -10
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +19 -7
  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 +25 -1
  448. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  449. package/dist/storage/backends/RFDBServerBackend.js +100 -22
  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.js +1 -0
  455. package/dist/utils/findRfdbBinary.js.map +1 -0
  456. package/dist/utils/moduleResolution.d.ts +134 -0
  457. package/dist/utils/moduleResolution.d.ts.map +1 -0
  458. package/dist/utils/moduleResolution.js +164 -0
  459. package/dist/utils/moduleResolution.js.map +1 -0
  460. package/dist/validation/PathValidator.d.ts.map +1 -1
  461. package/dist/validation/PathValidator.js +1 -0
  462. package/dist/validation/PathValidator.js.map +1 -0
  463. package/package.json +4 -3
  464. package/src/Orchestrator.ts +371 -41
  465. package/src/api/GraphAPI.ts +4 -2
  466. package/src/api/GuaranteeAPI.ts +3 -2
  467. package/src/config/ConfigLoader.ts +121 -3
  468. package/src/config/index.ts +7 -1
  469. package/src/core/ASTWorker.ts +8 -20
  470. package/src/core/ASTWorkerPool.ts +1 -1
  471. package/src/core/CoverageAnalyzer.ts +2 -2
  472. package/src/core/FileNodeManager.ts +3 -2
  473. package/src/core/GuaranteeManager.ts +1 -1
  474. package/src/core/IncrementalReanalyzer.ts +6 -3
  475. package/src/core/NodeFactory.ts +34 -1
  476. package/src/core/WorkerPool.ts +2 -1
  477. package/src/core/nodes/NodeKind.ts +11 -0
  478. package/src/core/nodes/PluginNode.ts +144 -0
  479. package/src/core/nodes/TypeNode.ts +1 -1
  480. package/src/core/nodes/index.ts +4 -0
  481. package/src/core/toposort.ts +160 -0
  482. package/src/diagnostics/DiagnosticCollector.ts +8 -1
  483. package/src/diagnostics/DiagnosticReporter.ts +87 -16
  484. package/src/diagnostics/categories.ts +104 -0
  485. package/src/diagnostics/index.ts +14 -0
  486. package/src/errors/GrafemaError.ts +58 -0
  487. package/src/index.ts +53 -9
  488. package/src/instructions/index.ts +21 -0
  489. package/src/instructions/onboarding.md +121 -0
  490. package/src/logging/Logger.ts +155 -4
  491. package/src/plugins/analysis/DatabaseAnalyzer.ts +22 -15
  492. package/src/plugins/analysis/ExpressAnalyzer.ts +30 -18
  493. package/src/plugins/analysis/ExpressResponseAnalyzer.ts +72 -88
  494. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +54 -39
  495. package/src/plugins/analysis/FetchAnalyzer.ts +165 -113
  496. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +6 -7
  497. package/src/plugins/analysis/JSASTAnalyzer.ts +1122 -487
  498. package/src/plugins/analysis/ReactAnalyzer.ts +27 -20
  499. package/src/plugins/analysis/RustAnalyzer.ts +41 -27
  500. package/src/plugins/analysis/SQLiteAnalyzer.ts +18 -8
  501. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +38 -34
  502. package/src/plugins/analysis/SocketIOAnalyzer.ts +30 -15
  503. package/src/plugins/analysis/SystemDbAnalyzer.ts +24 -13
  504. package/src/plugins/analysis/ast/ExpressionEvaluator.ts +1 -3
  505. package/src/plugins/analysis/ast/GraphBuilder.ts +532 -66
  506. package/src/plugins/analysis/ast/types.ts +200 -2
  507. package/src/plugins/analysis/ast/utils/babelTraverse.ts +74 -0
  508. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +1 -1
  509. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +7 -2
  510. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +163 -15
  511. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +249 -3
  512. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +9 -4
  513. package/src/plugins/analysis/ast/visitors/PropertyAccessVisitor.ts +342 -0
  514. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +2 -3
  515. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +1 -27
  516. package/src/plugins/analysis/ast/visitors/index.ts +2 -0
  517. package/src/plugins/discovery/DiscoveryPlugin.ts +42 -11
  518. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +2 -2
  519. package/src/plugins/discovery/SimpleProjectDiscovery.ts +2 -2
  520. package/src/plugins/discovery/WorkspaceDiscovery.ts +2 -2
  521. package/src/plugins/discovery/workspaces/globResolver.ts +1 -1
  522. package/src/plugins/enrichment/AliasTracker.ts +2 -2
  523. package/src/plugins/enrichment/ArgumentParameterLinker.ts +0 -1
  524. package/src/plugins/enrichment/ClosureCaptureEnricher.ts +0 -1
  525. package/src/plugins/enrichment/ExpressHandlerLinker.ts +178 -0
  526. package/src/plugins/enrichment/ExternalCallResolver.ts +0 -1
  527. package/src/plugins/enrichment/FunctionCallResolver.ts +10 -15
  528. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +65 -14
  529. package/src/plugins/enrichment/ImportExportLinker.ts +0 -1
  530. package/src/plugins/enrichment/InstanceOfResolver.ts +2 -2
  531. package/src/plugins/enrichment/MethodCallResolver.ts +526 -12
  532. package/src/plugins/enrichment/MountPointResolver.ts +6 -24
  533. package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +1 -2
  534. package/src/plugins/enrichment/PrefixEvaluator.ts +4 -4
  535. package/src/plugins/enrichment/RejectionPropagationEnricher.ts +253 -0
  536. package/src/plugins/enrichment/RustFFIEnricher.ts +0 -1
  537. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +3 -3
  538. package/src/plugins/indexing/IncrementalModuleIndexer.ts +24 -30
  539. package/src/plugins/indexing/JSModuleIndexer.ts +21 -22
  540. package/src/plugins/indexing/RustModuleIndexer.ts +10 -5
  541. package/src/plugins/validation/BrokenImportValidator.ts +2 -3
  542. package/src/plugins/validation/CallResolverValidator.ts +2 -3
  543. package/src/plugins/validation/DataFlowValidator.ts +1 -1
  544. package/src/plugins/validation/EvalBanValidator.ts +1 -1
  545. package/src/plugins/validation/GraphConnectivityValidator.ts +1 -9
  546. package/src/plugins/validation/SQLInjectionValidator.ts +3 -2
  547. package/src/plugins/validation/ShadowingDetector.ts +1 -1
  548. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +2 -3
  549. package/src/plugins/vcs/GitPlugin.ts +12 -6
  550. package/src/queries/findCallsInFunction.ts +4 -4
  551. package/src/queries/findContainingFunction.ts +1 -1
  552. package/src/queries/traceValues.ts +0 -1
  553. package/src/storage/backends/RFDBServerBackend.ts +115 -25
  554. package/src/storage/backends/typeValidation.ts +2 -0
  555. package/src/utils/moduleResolution.ts +244 -0
  556. package/src/validation/PathValidator.ts +0 -8
  557. package/src/plugins/validation/NodeCreationValidator.ts +0 -554
@@ -11,7 +11,8 @@
11
11
  */
12
12
 
13
13
  import { readFileSync } from 'fs';
14
- import { parse, ParserPlugin } from '@babel/parser';
14
+ import type { ParserPlugin } from '@babel/parser';
15
+ import { parse } from '@babel/parser';
15
16
  import traverseModule from '@babel/traverse';
16
17
  import type { NodePath } from '@babel/traverse';
17
18
  import type { Node, CallExpression, JSXElement, JSXAttribute, VariableDeclarator, FunctionDeclaration } from '@babel/types';
@@ -20,7 +21,6 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
20
21
  import type { NodeRecord } from '@grafema/types';
21
22
  import { getLine, getColumn } from './ast/utils/location.js';
22
23
 
23
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
24
  const traverse = (traverseModule as any).default || traverseModule;
25
25
 
26
26
  // React event handlers mapping
@@ -203,7 +203,6 @@ export class ReactAnalyzer extends Plugin {
203
203
  return {
204
204
  name: 'ReactAnalyzer',
205
205
  phase: 'ANALYSIS',
206
- priority: 70, // After JSASTAnalyzer and ExpressAnalyzer
207
206
  creates: {
208
207
  nodes: [
209
208
  'react:component', 'react:state', 'react:effect', 'react:callback',
@@ -254,7 +253,7 @@ export class ReactAnalyzer extends Plugin {
254
253
  stats.browserAPIs += result.browserAPIs;
255
254
  stats.issues += result.issues;
256
255
  stats.edges += result.edges;
257
- } catch (err) {
256
+ } catch {
258
257
  // Silent - per-module errors shouldn't spam logs
259
258
  }
260
259
  }
@@ -275,7 +274,8 @@ export class ReactAnalyzer extends Plugin {
275
274
  );
276
275
  } catch (error) {
277
276
  logger.error('Analysis failed', { error });
278
- return createErrorResult(error as Error);
277
+ const err = error instanceof Error ? error : new Error(String(error));
278
+ return createErrorResult(err);
279
279
  }
280
280
  }
281
281
 
@@ -731,7 +731,7 @@ export class ReactAnalyzer extends Plugin {
731
731
  const callbackParams = new Set<string>(); // Track parameters of nested callback functions
732
732
 
733
733
  // Simple recursive AST walker to collect identifiers
734
- const collectIdentifiers = (node: Node | null, parentType: string | null = null, isPropertyKey = false): void => {
734
+ const collectIdentifiers = (node: Node | null, _parentType: string | null = null, isPropertyKey = false): void => {
735
735
  if (!node) return;
736
736
 
737
737
  if (node.type === 'Identifier') {
@@ -879,7 +879,7 @@ export class ReactAnalyzer extends Plugin {
879
879
  const hasCleanup = hookData.hasCleanup as boolean;
880
880
 
881
881
  // Simple recursive AST walker
882
- const checkNode = (node: Node | null, parent: Node | null = null): void => {
882
+ const checkNode = (node: Node | null, _parent: Node | null = null): void => {
883
883
  if (!node || typeof node !== 'object') return;
884
884
 
885
885
  if (node.type === 'CallExpression') {
@@ -1324,11 +1324,14 @@ export class ReactAnalyzer extends Plugin {
1324
1324
  graph: PluginContext['graph'],
1325
1325
  moduleId: string | null
1326
1326
  ): Promise<void> {
1327
- // Add component nodes
1327
+ const nodes: NodeRecord[] = [];
1328
+ const edges: Array<{ type: string; src: string; dst: string; [key: string]: unknown }> = [];
1329
+
1330
+ // Collect component nodes and DEFINES edges
1328
1331
  for (const component of analysis.components) {
1329
- await graph.addNode(component as unknown as NodeRecord);
1332
+ nodes.push(component as unknown as NodeRecord);
1330
1333
  if (moduleId) {
1331
- await graph.addEdge({
1334
+ edges.push({
1332
1335
  type: 'DEFINES',
1333
1336
  src: moduleId,
1334
1337
  dst: component.id
@@ -1336,33 +1339,37 @@ export class ReactAnalyzer extends Plugin {
1336
1339
  }
1337
1340
  }
1338
1341
 
1339
- // Add hook nodes
1342
+ // Collect hook nodes
1340
1343
  for (const hook of analysis.hooks) {
1341
- await graph.addNode(hook as unknown as NodeRecord);
1344
+ nodes.push(hook as unknown as NodeRecord);
1342
1345
  }
1343
1346
 
1344
- // Add event nodes
1347
+ // Collect event nodes
1345
1348
  for (const event of analysis.events) {
1346
- await graph.addNode(event as unknown as NodeRecord);
1349
+ nodes.push(event as unknown as NodeRecord);
1347
1350
  }
1348
1351
 
1349
- // Add browser API nodes
1352
+ // Collect browser API nodes
1350
1353
  for (const api of analysis.browserAPIs) {
1351
- await graph.addNode(api as unknown as NodeRecord);
1354
+ nodes.push(api as unknown as NodeRecord);
1352
1355
  }
1353
1356
 
1354
- // Add issue nodes
1357
+ // Collect issue nodes
1355
1358
  for (const issue of analysis.issues) {
1356
- await graph.addNode(issue as unknown as NodeRecord);
1359
+ nodes.push(issue as unknown as NodeRecord);
1357
1360
  }
1358
1361
 
1359
- // Add edges
1362
+ // Collect edges from analysis
1360
1363
  for (const edge of analysis.edges) {
1361
1364
  const { edgeType, ...rest } = edge;
1362
- await graph.addEdge({
1365
+ edges.push({
1363
1366
  type: edgeType,
1364
1367
  ...rest
1365
1368
  });
1366
1369
  }
1370
+
1371
+ // Batch write to graph
1372
+ await graph.addNodes(nodes);
1373
+ await graph.addEdges(edges);
1367
1374
  }
1368
1375
  }
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import { readFileSync } from 'fs';
8
- import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
8
+ import { Plugin, createSuccessResult } from '../Plugin.js';
9
9
  import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
10
10
  import type { NodeRecord } from '@grafema/types';
11
11
 
@@ -137,16 +137,27 @@ interface EdgeToAdd {
137
137
  }
138
138
 
139
139
  // NAPI binding - will be exported from packages/rfdb-server after build
140
+ // Loaded lazily on first execute() call to avoid top-level await (CJS compatibility)
140
141
  let parseRustFile: ((code: string) => RustParseResult) | undefined;
142
+ let bindingLoaded = false;
143
+
144
+ /**
145
+ * Load the native binding lazily on first use.
146
+ * This avoids top-level await which breaks esbuild CJS bundling.
147
+ */
148
+ async function loadNativeBinding(): Promise<void> {
149
+ if (bindingLoaded) return;
150
+ bindingLoaded = true;
151
+
152
+ // Path: from dist/plugins/analysis/ go up 5 levels to reach project root, then packages/rfdb-server/
153
+ try {
154
+ const nativeBinding = await import('../../../../../packages/rfdb-server/grafema-graph-engine.node' as any);
155
+ parseRustFile = nativeBinding.parseRustFile;
156
+ return;
157
+ } catch {
158
+ // Dynamic import failed, try require fallback
159
+ }
141
160
 
142
- // Try to load the native binding
143
- // Path: from dist/plugins/analysis/ go up 5 levels to reach project root, then packages/rfdb-server/
144
- try {
145
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
146
- const nativeBinding = await import('../../../../../packages/rfdb-server/grafema-graph-engine.node' as any);
147
- parseRustFile = nativeBinding.parseRustFile;
148
- } catch {
149
- // Fallback: try require
150
161
  try {
151
162
  const { createRequire } = await import('module');
152
163
  const require = createRequire(import.meta.url);
@@ -162,7 +173,6 @@ export class RustAnalyzer extends Plugin {
162
173
  return {
163
174
  name: 'RustAnalyzer',
164
175
  phase: 'ANALYSIS',
165
- priority: 75, // Lower than JSASTAnalyzer (80)
166
176
  creates: {
167
177
  nodes: [
168
178
  'RUST_FUNCTION',
@@ -182,6 +192,9 @@ export class RustAnalyzer extends Plugin {
182
192
  const { graph, onProgress } = context;
183
193
  const logger = this.log(context);
184
194
 
195
+ // Load native binding lazily on first use
196
+ await loadNativeBinding();
197
+
185
198
  if (!parseRustFile) {
186
199
  logger.info('Skipping - native binding not available');
187
200
  return createSuccessResult(
@@ -239,10 +252,11 @@ export class RustAnalyzer extends Plugin {
239
252
  });
240
253
  }
241
254
  } catch (err) {
242
- errors.push({ file: module.file!, error: (err as Error).message });
255
+ const message = err instanceof Error ? err.message : String(err);
256
+ errors.push({ file: module.file!, error: message });
243
257
  logger.warn('Error parsing module', {
244
258
  file: module.file,
245
- error: (err as Error).message
259
+ error: message
246
260
  });
247
261
  }
248
262
  }
@@ -263,20 +277,21 @@ export class RustAnalyzer extends Plugin {
263
277
  module: NodeRecord,
264
278
  graph: PluginContext['graph']
265
279
  ): Promise<AnalysisStats> {
280
+ const nodes: NodeRecord[] = [];
266
281
  const edges: EdgeToAdd[] = [];
267
282
  let methodCount = 0;
268
283
  let callCount = 0;
269
284
 
270
- // Helper to process calls within a function/method
271
- const processCalls = async (
285
+ // Helper to collect calls within a function/method
286
+ const processCalls = (
272
287
  calls: RustCall[] | undefined,
273
288
  parentId: string,
274
289
  parentName: string
275
- ): Promise<void> => {
290
+ ): void => {
276
291
  for (const call of calls || []) {
277
292
  const callId = `RUST_CALL#${parentName}#${call.line}#${call.column}#${module.file}`;
278
293
 
279
- await graph.addNode({
294
+ nodes.push({
280
295
  id: callId,
281
296
  type: 'RUST_CALL',
282
297
  file: module.file,
@@ -299,7 +314,7 @@ export class RustAnalyzer extends Plugin {
299
314
  for (const fn of parseResult.functions) {
300
315
  const nodeId = `RUST_FUNCTION#${fn.name}#${module.file}#${fn.line}`;
301
316
 
302
- await graph.addNode({
317
+ nodes.push({
303
318
  id: nodeId,
304
319
  type: 'RUST_FUNCTION',
305
320
  name: fn.name,
@@ -323,14 +338,14 @@ export class RustAnalyzer extends Plugin {
323
338
  edges.push({ src: module.id, dst: nodeId, type: 'CONTAINS' });
324
339
 
325
340
  // Process calls within this function
326
- await processCalls(fn.calls, nodeId, fn.name);
341
+ processCalls(fn.calls, nodeId, fn.name);
327
342
  }
328
343
 
329
344
  // 2. Process structs
330
345
  for (const s of parseResult.structs) {
331
346
  const nodeId = `RUST_STRUCT#${s.name}#${module.file}#${s.line}`;
332
347
 
333
- await graph.addNode({
348
+ nodes.push({
334
349
  id: nodeId,
335
350
  type: 'RUST_STRUCT',
336
351
  name: s.name,
@@ -348,7 +363,7 @@ export class RustAnalyzer extends Plugin {
348
363
  for (const impl of parseResult.impls) {
349
364
  const implId = `RUST_IMPL#${impl.targetType}${impl.traitName ? ':' + impl.traitName : ''}#${module.file}#${impl.line}`;
350
365
 
351
- await graph.addNode({
366
+ nodes.push({
352
367
  id: implId,
353
368
  type: 'RUST_IMPL',
354
369
  name: impl.targetType,
@@ -372,7 +387,7 @@ export class RustAnalyzer extends Plugin {
372
387
  for (const method of impl.methods) {
373
388
  const methodId = `RUST_METHOD#${method.name}#${module.file}#${method.line}`;
374
389
 
375
- await graph.addNode({
390
+ nodes.push({
376
391
  id: methodId,
377
392
  type: 'RUST_METHOD',
378
393
  name: method.name,
@@ -400,7 +415,7 @@ export class RustAnalyzer extends Plugin {
400
415
  methodCount++;
401
416
 
402
417
  // Process calls within this method
403
- await processCalls(method.calls, methodId, `${impl.targetType}::${method.name}`);
418
+ processCalls(method.calls, methodId, `${impl.targetType}::${method.name}`);
404
419
  }
405
420
  }
406
421
 
@@ -408,7 +423,7 @@ export class RustAnalyzer extends Plugin {
408
423
  for (const t of parseResult.traits) {
409
424
  const nodeId = `RUST_TRAIT#${t.name}#${module.file}#${t.line}`;
410
425
 
411
- await graph.addNode({
426
+ nodes.push({
412
427
  id: nodeId,
413
428
  type: 'RUST_TRAIT',
414
429
  name: t.name,
@@ -425,10 +440,9 @@ export class RustAnalyzer extends Plugin {
425
440
  edges.push({ src: module.id, dst: nodeId, type: 'CONTAINS' });
426
441
  }
427
442
 
428
- // 5. Write all edges
429
- for (const edge of edges) {
430
- await graph.addEdge(edge);
431
- }
443
+ // 5. Write all nodes and edges in batch
444
+ await graph.addNodes(nodes);
445
+ await graph.addEdges(edges);
432
446
 
433
447
  return {
434
448
  functions: parseResult.functions.length,
@@ -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
  /**
@@ -54,7 +54,6 @@ export class SQLiteAnalyzer extends Plugin {
54
54
  return {
55
55
  name: 'SQLiteAnalyzer',
56
56
  phase: 'ANALYSIS',
57
- priority: 75, // После JSASTAnalyzer (80)
58
57
  creates: {
59
58
  nodes: ['db:query'],
60
59
  edges: ['CONTAINS', 'EXECUTES_QUERY']
@@ -270,22 +269,30 @@ export class SQLiteAnalyzer extends Plugin {
270
269
  });
271
270
 
272
271
  // Создаём DATABASE_QUERY ноды
272
+ const nodes: NodeRecord[] = [];
273
+ const edges: Array<{ type: string; src: string; dst: string }> = [];
274
+
273
275
  for (const query of queries) {
274
276
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
275
277
  const { promiseWrapped, ...queryData } = query;
276
278
 
277
- await graph.addNode(queryData as unknown as NodeRecord);
279
+ nodes.push(queryData as unknown as NodeRecord);
278
280
  queriesCreated++;
279
281
 
280
282
  // MODULE -> CONTAINS -> DATABASE_QUERY
281
- await graph.addEdge({
283
+ edges.push({
282
284
  type: 'CONTAINS',
283
285
  src: module.id,
284
286
  dst: query.id
285
287
  });
286
288
  edgesCreated++;
289
+ }
287
290
 
288
- // Ищем FUNCTION ноду которая содержит этот query
291
+ // Flush nodes first so queryNodes can find them
292
+ await graph.addNodes(nodes);
293
+
294
+ // Find containing functions (reads FUNCTION nodes from JSASTAnalyzer)
295
+ for (const query of queries) {
289
296
  const containingFunctions: NodeRecord[] = [];
290
297
  for await (const n of graph.queryNodes({ type: 'FUNCTION' })) {
291
298
  if (
@@ -304,7 +311,7 @@ export class SQLiteAnalyzer extends Plugin {
304
311
  );
305
312
 
306
313
  // FUNCTION -> EXECUTES_QUERY -> DATABASE_QUERY
307
- await graph.addEdge({
314
+ edges.push({
308
315
  type: 'EXECUTES_QUERY',
309
316
  src: closestFunction.id,
310
317
  dst: query.id
@@ -312,7 +319,10 @@ export class SQLiteAnalyzer extends Plugin {
312
319
  edgesCreated++;
313
320
  }
314
321
  }
315
- } catch (error) {
322
+
323
+ // Flush all edges
324
+ await graph.addEdges(edges);
325
+ } catch {
316
326
  // Silent - per-module errors shouldn't spam logs
317
327
  }
318
328
 
@@ -10,7 +10,8 @@
10
10
  */
11
11
 
12
12
  import { readFileSync } from 'fs';
13
- import { parse, ParserPlugin } from '@babel/parser';
13
+ import type { ParserPlugin } from '@babel/parser';
14
+ import { parse } from '@babel/parser';
14
15
  import traverseModule from '@babel/traverse';
15
16
  import type {
16
17
  CallExpression,
@@ -26,7 +27,6 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
26
27
  import type { NodeRecord } from '@grafema/types';
27
28
  import { getLine } from './ast/utils/location.js';
28
29
 
29
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
30
  const traverse = (traverseModule as any).default || traverseModule;
31
31
 
32
32
  /**
@@ -90,7 +90,6 @@ export class ServiceLayerAnalyzer extends Plugin {
90
90
  return {
91
91
  name: 'ServiceLayerAnalyzer',
92
92
  phase: 'ANALYSIS',
93
- priority: 75, // После JSASTAnalyzer (80)
94
93
  creates: {
95
94
  nodes: ['SERVICE_CLASS', 'SERVICE_INSTANCE', 'SERVICE_REGISTRATION', 'SERVICE_USAGE'],
96
95
  edges: ['CONTAINS', 'INSTANTIATES', 'REGISTERS', 'USES_SERVICE']
@@ -157,7 +156,8 @@ export class ServiceLayerAnalyzer extends Plugin {
157
156
  );
158
157
  } catch (error) {
159
158
  logger.error('Analysis failed', { error });
160
- return createErrorResult(error as Error);
159
+ const err = error instanceof Error ? error : new Error(String(error));
160
+ return createErrorResult(err);
161
161
  }
162
162
  }
163
163
 
@@ -303,12 +303,14 @@ export class ServiceLayerAnalyzer extends Plugin {
303
303
  }
304
304
  });
305
305
 
306
- // Создаём ноды в графе
307
- for (const serviceClass of serviceClasses) {
308
- await graph.addNode(serviceClass as unknown as NodeRecord);
306
+ // Batch nodes and edges for IPC optimization
307
+ const nodes: Array<unknown> = [];
308
+ const edges: Array<{ type: string; src: string; dst: string }> = [];
309
309
 
310
- // Создаём ребро от модуля к service class
311
- await graph.addEdge({
310
+ // Collect all nodes
311
+ for (const serviceClass of serviceClasses) {
312
+ nodes.push(serviceClass as unknown as NodeRecord);
313
+ edges.push({
312
314
  type: 'CONTAINS',
313
315
  src: module.id,
314
316
  dst: serviceClass.id
@@ -316,33 +318,17 @@ export class ServiceLayerAnalyzer extends Plugin {
316
318
  }
317
319
 
318
320
  for (const instance of serviceInstances) {
319
- await graph.addNode(instance as unknown as NodeRecord);
320
-
321
- // Создаём ребро от модуля к instance
322
- await graph.addEdge({
321
+ nodes.push(instance as unknown as NodeRecord);
322
+ edges.push({
323
323
  type: 'CONTAINS',
324
324
  src: module.id,
325
325
  dst: instance.id
326
326
  });
327
-
328
- // Ищем SERVICE_CLASS ноду и создаём ребро INSTANTIATES
329
- for await (const n of graph.queryNodes({ type: 'SERVICE_CLASS' })) {
330
- if (n.name === instance.serviceClass) {
331
- await graph.addEdge({
332
- type: 'INSTANTIATES',
333
- src: instance.id,
334
- dst: n.id
335
- });
336
- break;
337
- }
338
- }
339
327
  }
340
328
 
341
329
  for (const registration of serviceRegistrations) {
342
- await graph.addNode(registration as unknown as NodeRecord);
343
-
344
- // Создаём ребро от модуля к registration
345
- await graph.addEdge({
330
+ nodes.push(registration as unknown as NodeRecord);
331
+ edges.push({
346
332
  type: 'CONTAINS',
347
333
  src: module.id,
348
334
  dst: registration.id
@@ -350,23 +336,41 @@ export class ServiceLayerAnalyzer extends Plugin {
350
336
  }
351
337
 
352
338
  for (const usage of serviceUsages) {
353
- await graph.addNode(usage as unknown as NodeRecord);
354
-
355
- // Создаём ребро от модуля к usage
356
- await graph.addEdge({
339
+ nodes.push(usage as unknown as NodeRecord);
340
+ edges.push({
357
341
  type: 'CONTAINS',
358
342
  src: module.id,
359
343
  dst: usage.id
360
344
  });
361
345
  }
362
346
 
347
+ // First flush: add all nodes to graph
348
+ await graph.addNodes(nodes as NodeRecord[]);
349
+
350
+ // Create INSTANTIATES edges (requires querying graph)
351
+ for (const instance of serviceInstances) {
352
+ for await (const n of graph.queryNodes({ type: 'SERVICE_CLASS' })) {
353
+ if (n.name === instance.serviceClass) {
354
+ edges.push({
355
+ type: 'INSTANTIATES',
356
+ src: instance.id,
357
+ dst: n.id
358
+ });
359
+ break;
360
+ }
361
+ }
362
+ }
363
+
364
+ // Second flush: add all edges to graph
365
+ await graph.addEdges(edges);
366
+
363
367
  return {
364
368
  classes: serviceClasses.length,
365
369
  instances: serviceInstances.length,
366
370
  registrations: serviceRegistrations.length,
367
371
  usages: serviceUsages.length
368
372
  };
369
- } catch (error) {
373
+ } catch {
370
374
  // Silent - per-module errors shouldn't spam logs
371
375
  return { classes: 0, instances: 0, registrations: 0, usages: 0 };
372
376
  }
@@ -16,7 +16,8 @@
16
16
  */
17
17
 
18
18
  import { readFileSync } from 'fs';
19
- import { parse, ParserPlugin } from '@babel/parser';
19
+ import type { ParserPlugin } from '@babel/parser';
20
+ import { parse } from '@babel/parser';
20
21
  import traverseModule from '@babel/traverse';
21
22
  import type { CallExpression, Identifier, MemberExpression, Node } from '@babel/types';
22
23
  import type { NodePath } from '@babel/traverse';
@@ -25,7 +26,7 @@ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
25
26
  import type { NodeRecord } from '@grafema/types';
26
27
  import { getLine, getColumn } from './ast/utils/location.js';
27
28
 
28
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+
29
30
  const traverse = (traverseModule as any).default || traverseModule;
30
31
 
31
32
  /**
@@ -98,7 +99,6 @@ export class SocketIOAnalyzer extends Plugin {
98
99
  return {
99
100
  name: 'SocketIOAnalyzer',
100
101
  phase: 'ANALYSIS',
101
- priority: 75, // После JSASTAnalyzer (80)
102
102
  creates: {
103
103
  nodes: ['socketio:emit', 'socketio:on', 'socketio:room', 'socketio:event'],
104
104
  edges: ['CONTAINS', 'EMITS_EVENT', 'LISTENS_TO', 'JOINS_ROOM', 'LISTENED_BY']
@@ -162,7 +162,8 @@ export class SocketIOAnalyzer extends Plugin {
162
162
  );
163
163
  } catch (error) {
164
164
  logger.error('Analysis failed', { error });
165
- return createErrorResult(error as Error);
165
+ const err = error instanceof Error ? error : new Error(String(error));
166
+ return createErrorResult(err);
166
167
  }
167
168
  }
168
169
 
@@ -206,7 +207,10 @@ export class SocketIOAnalyzer extends Plugin {
206
207
  logger.debug('Unique events found', { count: eventNames.size });
207
208
 
208
209
  // Step 3: Create event channel node for each unique event
210
+ const nodes: NodeRecord[] = [];
211
+ const edges: Array<{ type: string; src: string; dst: string }> = [];
209
212
  let createdCount = 0;
213
+
210
214
  for (const eventName of eventNames) {
211
215
  const eventNodeId = `socketio:event#${eventName}`;
212
216
 
@@ -218,13 +222,13 @@ export class SocketIOAnalyzer extends Plugin {
218
222
  event: eventName
219
223
  };
220
224
 
221
- await graph.addNode(eventNode as unknown as NodeRecord);
225
+ nodes.push(eventNode as unknown as NodeRecord);
222
226
  createdCount++;
223
227
 
224
228
  // Step 4: Connect all emits of this event to the channel
225
229
  const matchingEmits = allEmits.filter(e => e.event === eventName);
226
230
  for (const emit of matchingEmits) {
227
- await graph.addEdge({
231
+ edges.push({
228
232
  type: 'EMITS_EVENT',
229
233
  src: emit.id,
230
234
  dst: eventNodeId
@@ -234,7 +238,7 @@ export class SocketIOAnalyzer extends Plugin {
234
238
  // Step 5: Connect event channel to all listeners of this event
235
239
  const matchingListeners = allListeners.filter(l => l.event === eventName);
236
240
  for (const listener of matchingListeners) {
237
- await graph.addEdge({
241
+ edges.push({
238
242
  type: 'LISTENED_BY',
239
243
  src: eventNodeId,
240
244
  dst: listener.id
@@ -248,6 +252,10 @@ export class SocketIOAnalyzer extends Plugin {
248
252
  });
249
253
  }
250
254
 
255
+ // Flush all nodes and edges
256
+ await graph.addNodes(nodes);
257
+ await graph.addEdges(edges);
258
+
251
259
  return createdCount;
252
260
  } catch (error) {
253
261
  logger.error('Failed to create event channels', { error });
@@ -405,11 +413,14 @@ export class SocketIOAnalyzer extends Plugin {
405
413
  });
406
414
 
407
415
  // Создаём ноды в графе
416
+ const nodes: NodeRecord[] = [];
417
+ const edges: Array<{ type: string; src: string; dst: string }> = [];
418
+
408
419
  for (const emit of emits) {
409
- await graph.addNode(emit as unknown as NodeRecord);
420
+ nodes.push(emit as unknown as NodeRecord);
410
421
 
411
422
  // Создаём ребро от модуля к event
412
- await graph.addEdge({
423
+ edges.push({
413
424
  type: 'CONTAINS',
414
425
  src: module.id,
415
426
  dst: emit.id
@@ -417,10 +428,10 @@ export class SocketIOAnalyzer extends Plugin {
417
428
  }
418
429
 
419
430
  for (const listener of listeners) {
420
- await graph.addNode(listener as unknown as NodeRecord);
431
+ nodes.push(listener as unknown as NodeRecord);
421
432
 
422
433
  // Создаём ребро от модуля к listener
423
- await graph.addEdge({
434
+ edges.push({
424
435
  type: 'CONTAINS',
425
436
  src: module.id,
426
437
  dst: listener.id
@@ -439,7 +450,7 @@ export class SocketIOAnalyzer extends Plugin {
439
450
  );
440
451
 
441
452
  if (handlerFunction) {
442
- await graph.addEdge({
453
+ edges.push({
443
454
  type: 'LISTENS_TO',
444
455
  src: listener.id,
445
456
  dst: handlerFunction.id
@@ -448,22 +459,26 @@ export class SocketIOAnalyzer extends Plugin {
448
459
  }
449
460
 
450
461
  for (const room of rooms) {
451
- await graph.addNode(room as unknown as NodeRecord);
462
+ nodes.push(room as unknown as NodeRecord);
452
463
 
453
464
  // Создаём ребро от модуля к room
454
- await graph.addEdge({
465
+ edges.push({
455
466
  type: 'CONTAINS',
456
467
  src: module.id,
457
468
  dst: room.id
458
469
  });
459
470
  }
460
471
 
472
+ // Flush all nodes and edges
473
+ await graph.addNodes(nodes);
474
+ await graph.addEdges(edges);
475
+
461
476
  return {
462
477
  emits: emits.length,
463
478
  listeners: listeners.length,
464
479
  rooms: rooms.length
465
480
  };
466
- } catch (error) {
481
+ } catch {
467
482
  // Silent - per-module errors shouldn't spam logs
468
483
  return { emits: 0, listeners: 0, rooms: 0 };
469
484
  }