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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/README.md +0 -1
  2. package/dist/Orchestrator.d.ts +24 -2
  3. package/dist/Orchestrator.d.ts.map +1 -1
  4. package/dist/Orchestrator.js +197 -24
  5. package/dist/config/ConfigLoader.d.ts +72 -0
  6. package/dist/config/ConfigLoader.d.ts.map +1 -0
  7. package/dist/config/ConfigLoader.js +187 -0
  8. package/dist/config/index.d.ts +6 -0
  9. package/dist/config/index.d.ts.map +1 -0
  10. package/dist/config/index.js +4 -0
  11. package/dist/core/ASTWorker.d.ts +11 -36
  12. package/dist/core/ASTWorker.d.ts.map +1 -1
  13. package/dist/core/ASTWorker.js +93 -99
  14. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  15. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  16. package/dist/core/CoverageAnalyzer.js +198 -0
  17. package/dist/core/FileNodeManager.d.ts +40 -0
  18. package/dist/core/FileNodeManager.d.ts.map +1 -0
  19. package/dist/core/FileNodeManager.js +84 -0
  20. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  21. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  22. package/dist/core/GraphFreshnessChecker.js +101 -0
  23. package/dist/core/HashUtils.d.ts +24 -0
  24. package/dist/core/HashUtils.d.ts.map +1 -0
  25. package/dist/core/HashUtils.js +45 -0
  26. package/dist/core/IncrementalReanalyzer.d.ts +36 -0
  27. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  28. package/dist/core/IncrementalReanalyzer.js +132 -0
  29. package/dist/core/NodeFactory.d.ts +225 -17
  30. package/dist/core/NodeFactory.d.ts.map +1 -1
  31. package/dist/core/NodeFactory.js +208 -18
  32. package/dist/core/ScopeTracker.d.ts +84 -0
  33. package/dist/core/ScopeTracker.d.ts.map +1 -0
  34. package/dist/core/ScopeTracker.js +116 -0
  35. package/dist/core/SemanticId.d.ts +90 -0
  36. package/dist/core/SemanticId.d.ts.map +1 -0
  37. package/dist/core/SemanticId.js +115 -0
  38. package/dist/core/VersionManager.d.ts.map +1 -1
  39. package/dist/core/VersionManager.js +3 -2
  40. package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
  41. package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
  42. package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
  43. package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
  44. package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
  45. package/dist/core/nodes/ArrayLiteralNode.js +41 -0
  46. package/dist/core/nodes/CallSiteNode.d.ts +28 -0
  47. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
  48. package/dist/core/nodes/CallSiteNode.js +46 -0
  49. package/dist/core/nodes/ClassNode.d.ts +33 -1
  50. package/dist/core/nodes/ClassNode.d.ts.map +1 -1
  51. package/dist/core/nodes/ClassNode.js +46 -2
  52. package/dist/core/nodes/DecoratorNode.d.ts +42 -0
  53. package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
  54. package/dist/core/nodes/DecoratorNode.js +62 -0
  55. package/dist/core/nodes/EnumNode.d.ts +42 -0
  56. package/dist/core/nodes/EnumNode.d.ts.map +1 -0
  57. package/dist/core/nodes/EnumNode.js +54 -0
  58. package/dist/core/nodes/ExportNode.d.ts +37 -1
  59. package/dist/core/nodes/ExportNode.d.ts.map +1 -1
  60. package/dist/core/nodes/ExportNode.js +48 -2
  61. package/dist/core/nodes/ExpressionNode.d.ts +97 -0
  62. package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
  63. package/dist/core/nodes/ExpressionNode.js +178 -0
  64. package/dist/core/nodes/ExternalModuleNode.d.ts +28 -0
  65. package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
  66. package/dist/core/nodes/ExternalModuleNode.js +41 -0
  67. package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
  68. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
  69. package/dist/core/nodes/ExternalStdioNode.js +15 -8
  70. package/dist/core/nodes/FunctionNode.d.ts +36 -0
  71. package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
  72. package/dist/core/nodes/FunctionNode.js +80 -1
  73. package/dist/core/nodes/ImportNode.d.ts +19 -5
  74. package/dist/core/nodes/ImportNode.d.ts.map +1 -1
  75. package/dist/core/nodes/ImportNode.js +23 -5
  76. package/dist/core/nodes/InterfaceNode.d.ts +46 -0
  77. package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
  78. package/dist/core/nodes/InterfaceNode.js +55 -0
  79. package/dist/core/nodes/IssueNode.d.ts +73 -0
  80. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  81. package/dist/core/nodes/IssueNode.js +129 -0
  82. package/dist/core/nodes/MethodCallNode.d.ts +30 -0
  83. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
  84. package/dist/core/nodes/MethodCallNode.js +49 -0
  85. package/dist/core/nodes/MethodNode.d.ts +32 -0
  86. package/dist/core/nodes/MethodNode.d.ts.map +1 -1
  87. package/dist/core/nodes/MethodNode.js +48 -0
  88. package/dist/core/nodes/ModuleNode.d.ts +31 -0
  89. package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
  90. package/dist/core/nodes/ModuleNode.js +37 -0
  91. package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
  92. package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
  93. package/dist/core/nodes/NetworkRequestNode.js +65 -0
  94. package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
  95. package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
  96. package/dist/core/nodes/ObjectLiteralNode.js +41 -0
  97. package/dist/core/nodes/ScopeNode.d.ts +31 -0
  98. package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
  99. package/dist/core/nodes/ScopeNode.js +49 -0
  100. package/dist/core/nodes/TypeNode.d.ts +36 -0
  101. package/dist/core/nodes/TypeNode.d.ts.map +1 -0
  102. package/dist/core/nodes/TypeNode.js +53 -0
  103. package/dist/core/nodes/VariableDeclarationNode.d.ts +27 -0
  104. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
  105. package/dist/core/nodes/VariableDeclarationNode.js +40 -0
  106. package/dist/core/nodes/index.d.ts +12 -1
  107. package/dist/core/nodes/index.d.ts.map +1 -1
  108. package/dist/core/nodes/index.js +14 -0
  109. package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
  110. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  111. package/dist/diagnostics/DiagnosticCollector.js +129 -0
  112. package/dist/diagnostics/DiagnosticReporter.d.ts +77 -0
  113. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  114. package/dist/diagnostics/DiagnosticReporter.js +159 -0
  115. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  116. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  117. package/dist/diagnostics/DiagnosticWriter.js +43 -0
  118. package/dist/diagnostics/index.d.ts +14 -0
  119. package/dist/diagnostics/index.d.ts.map +1 -0
  120. package/dist/diagnostics/index.js +11 -0
  121. package/dist/errors/GrafemaError.d.ts +118 -0
  122. package/dist/errors/GrafemaError.d.ts.map +1 -0
  123. package/dist/errors/GrafemaError.js +131 -0
  124. package/dist/index.d.ts +57 -1
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +54 -1
  127. package/dist/logging/Logger.d.ts +48 -0
  128. package/dist/logging/Logger.d.ts.map +1 -0
  129. package/dist/logging/Logger.js +134 -0
  130. package/dist/plugins/Plugin.d.ts +5 -1
  131. package/dist/plugins/Plugin.d.ts.map +1 -1
  132. package/dist/plugins/Plugin.js +33 -0
  133. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  134. package/dist/plugins/analysis/DatabaseAnalyzer.js +13 -6
  135. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  136. package/dist/plugins/analysis/ExpressAnalyzer.js +27 -19
  137. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  138. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +21 -14
  139. package/dist/plugins/analysis/FetchAnalyzer.d.ts +1 -0
  140. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  141. package/dist/plugins/analysis/FetchAnalyzer.js +34 -14
  142. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
  143. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  144. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
  145. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +180 -17
  146. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  147. package/dist/plugins/analysis/JSASTAnalyzer.js +1171 -471
  148. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  149. package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
  150. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  151. package/dist/plugins/analysis/RustAnalyzer.js +15 -10
  152. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  153. package/dist/plugins/analysis/SQLiteAnalyzer.js +9 -7
  154. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  155. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
  156. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  157. package/dist/plugins/analysis/SocketIOAnalyzer.js +27 -15
  158. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  159. package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
  160. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +34 -4
  161. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  162. package/dist/plugins/analysis/ast/GraphBuilder.js +318 -298
  163. package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
  164. package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
  165. package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
  166. package/dist/plugins/analysis/ast/types.d.ts +176 -5
  167. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  168. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
  169. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
  170. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
  171. package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
  172. package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
  173. package/dist/plugins/analysis/ast/utils/index.js +5 -0
  174. package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
  175. package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
  176. package/dist/plugins/analysis/ast/utils/location.js +78 -0
  177. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +9 -4
  178. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  179. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
  180. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +99 -9
  181. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  182. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +663 -125
  183. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
  184. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  185. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
  186. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +4 -1
  187. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  188. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +128 -63
  189. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
  190. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +11 -8
  191. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
  192. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  193. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
  194. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +4 -1
  195. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  196. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +17 -13
  197. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  198. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
  199. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
  200. package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
  201. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
  202. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
  203. package/dist/plugins/discovery/WorkspaceDiscovery.js +136 -0
  204. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
  205. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
  206. package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
  207. package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
  208. package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
  209. package/dist/plugins/discovery/workspaces/detector.js +49 -0
  210. package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
  211. package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
  212. package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
  213. package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
  214. package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
  215. package/dist/plugins/discovery/workspaces/index.js +8 -0
  216. package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
  217. package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
  218. package/dist/plugins/discovery/workspaces/parsers.js +80 -0
  219. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  220. package/dist/plugins/enrichment/AliasTracker.js +14 -8
  221. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  222. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +14 -7
  223. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  224. package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
  225. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  226. package/dist/plugins/enrichment/MethodCallResolver.js +18 -12
  227. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  228. package/dist/plugins/enrichment/MountPointResolver.js +8 -3
  229. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  230. package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
  231. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  232. package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
  233. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +17 -0
  234. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  235. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +129 -10
  236. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  237. package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
  238. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  239. package/dist/plugins/indexing/JSModuleIndexer.js +63 -31
  240. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  241. package/dist/plugins/indexing/RustModuleIndexer.js +5 -4
  242. package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
  243. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
  244. package/dist/plugins/indexing/ServiceDetector.js +28 -15
  245. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  246. package/dist/plugins/validation/CallResolverValidator.js +8 -7
  247. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
  248. package/dist/plugins/validation/DataFlowValidator.js +17 -12
  249. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
  250. package/dist/plugins/validation/EvalBanValidator.js +17 -16
  251. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  252. package/dist/plugins/validation/GraphConnectivityValidator.js +19 -23
  253. package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
  254. package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
  255. package/dist/plugins/validation/NodeCreationValidator.js +415 -0
  256. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  257. package/dist/plugins/validation/SQLInjectionValidator.js +59 -16
  258. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
  259. package/dist/plugins/validation/ShadowingDetector.js +6 -5
  260. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
  261. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
  262. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
  263. package/dist/plugins/vcs/GitPlugin.js +10 -12
  264. package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
  265. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
  266. package/dist/plugins/vcs/VCSPlugin.js +5 -5
  267. package/dist/storage/backends/RFDBServerBackend.d.ts +10 -17
  268. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  269. package/dist/storage/backends/RFDBServerBackend.js +31 -10
  270. package/dist/validation/PathValidator.d.ts +1 -2
  271. package/dist/validation/PathValidator.d.ts.map +1 -1
  272. package/package.json +3 -3
  273. package/src/Orchestrator.ts +237 -24
  274. package/src/config/ConfigLoader.ts +263 -0
  275. package/src/config/index.ts +5 -0
  276. package/src/core/ASTWorker.ts +143 -139
  277. package/src/core/CoverageAnalyzer.ts +243 -0
  278. package/src/core/FileNodeManager.ts +100 -0
  279. package/src/core/GraphFreshnessChecker.ts +143 -0
  280. package/src/core/HashUtils.ts +48 -0
  281. package/src/core/IncrementalReanalyzer.ts +192 -0
  282. package/src/core/NodeFactory.ts +401 -18
  283. package/src/core/ScopeTracker.ts +154 -0
  284. package/src/core/SemanticId.ts +192 -0
  285. package/src/core/VersionManager.ts +3 -2
  286. package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
  287. package/src/core/nodes/ArrayLiteralNode.ts +65 -0
  288. package/src/core/nodes/CallSiteNode.ts +58 -0
  289. package/src/core/nodes/ClassNode.ts +63 -2
  290. package/src/core/nodes/DecoratorNode.ts +91 -0
  291. package/src/core/nodes/EnumNode.ts +86 -0
  292. package/src/core/nodes/ExportNode.ts +70 -2
  293. package/src/core/nodes/ExpressionNode.ts +231 -0
  294. package/src/core/nodes/ExternalModuleNode.ts +56 -0
  295. package/src/core/nodes/ExternalStdioNode.ts +17 -9
  296. package/src/core/nodes/FunctionNode.ts +101 -1
  297. package/src/core/nodes/ImportNode.ts +32 -10
  298. package/src/core/nodes/InterfaceNode.ts +91 -0
  299. package/src/core/nodes/IssueNode.ts +177 -0
  300. package/src/core/nodes/MethodCallNode.ts +64 -0
  301. package/src/core/nodes/MethodNode.ts +63 -0
  302. package/src/core/nodes/ModuleNode.ts +50 -0
  303. package/src/core/nodes/NetworkRequestNode.ts +77 -0
  304. package/src/core/nodes/ObjectLiteralNode.ts +65 -0
  305. package/src/core/nodes/ScopeNode.ts +65 -0
  306. package/src/core/nodes/TypeNode.ts +78 -0
  307. package/src/core/nodes/VariableDeclarationNode.ts +52 -0
  308. package/src/core/nodes/index.ts +18 -1
  309. package/src/diagnostics/DiagnosticCollector.ts +163 -0
  310. package/src/diagnostics/DiagnosticReporter.ts +204 -0
  311. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  312. package/src/diagnostics/index.ts +16 -0
  313. package/src/errors/GrafemaError.ts +174 -0
  314. package/src/index.ts +148 -1
  315. package/src/logging/Logger.ts +152 -0
  316. package/src/plugins/Plugin.ts +42 -0
  317. package/src/plugins/analysis/DatabaseAnalyzer.ts +14 -8
  318. package/src/plugins/analysis/ExpressAnalyzer.ts +29 -19
  319. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +22 -21
  320. package/src/plugins/analysis/FetchAnalyzer.ts +39 -16
  321. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
  322. package/src/plugins/analysis/JSASTAnalyzer.ts +1483 -503
  323. package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
  324. package/src/plugins/analysis/RustAnalyzer.ts +15 -10
  325. package/src/plugins/analysis/SQLiteAnalyzer.ts +10 -7
  326. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
  327. package/src/plugins/analysis/SocketIOAnalyzer.ts +31 -22
  328. package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
  329. package/src/plugins/analysis/ast/GraphBuilder.ts +439 -327
  330. package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
  331. package/src/plugins/analysis/ast/types.ts +209 -6
  332. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
  333. package/src/plugins/analysis/ast/utils/index.ts +12 -0
  334. package/src/plugins/analysis/ast/utils/location.ts +103 -0
  335. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +11 -8
  336. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +909 -83
  337. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
  338. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +159 -93
  339. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +12 -8
  340. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
  341. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +37 -17
  342. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
  343. package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
  344. package/src/plugins/discovery/WorkspaceDiscovery.ts +177 -0
  345. package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
  346. package/src/plugins/discovery/workspaces/detector.ts +63 -0
  347. package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
  348. package/src/plugins/discovery/workspaces/index.ts +23 -0
  349. package/src/plugins/discovery/workspaces/parsers.ts +99 -0
  350. package/src/plugins/enrichment/AliasTracker.ts +14 -8
  351. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +14 -7
  352. package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
  353. package/src/plugins/enrichment/MethodCallResolver.ts +18 -12
  354. package/src/plugins/enrichment/MountPointResolver.ts +8 -3
  355. package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
  356. package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
  357. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +149 -12
  358. package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
  359. package/src/plugins/indexing/JSModuleIndexer.ts +74 -34
  360. package/src/plugins/indexing/RustModuleIndexer.ts +5 -4
  361. package/src/plugins/validation/CallResolverValidator.ts +8 -7
  362. package/src/plugins/validation/DataFlowValidator.ts +16 -12
  363. package/src/plugins/validation/EvalBanValidator.ts +17 -16
  364. package/src/plugins/validation/GraphConnectivityValidator.ts +19 -23
  365. package/src/plugins/validation/NodeCreationValidator.ts +554 -0
  366. package/src/plugins/validation/SQLInjectionValidator.ts +61 -15
  367. package/src/plugins/validation/ShadowingDetector.ts +6 -5
  368. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
  369. package/src/plugins/vcs/GitPlugin.ts +40 -12
  370. package/src/plugins/vcs/VCSPlugin.ts +7 -5
  371. package/src/storage/backends/RFDBServerBackend.ts +43 -29
  372. package/src/validation/PathValidator.ts +1 -1
  373. package/dist/core/AnalysisWorker.d.ts +0 -14
  374. package/dist/core/AnalysisWorker.d.ts.map +0 -1
  375. package/dist/core/AnalysisWorker.js +0 -307
  376. package/dist/core/ParallelAnalyzer.d.ts +0 -120
  377. package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
  378. package/dist/core/ParallelAnalyzer.js +0 -331
  379. package/dist/core/QueueWorker.d.ts +0 -12
  380. package/dist/core/QueueWorker.d.ts.map +0 -1
  381. package/dist/core/QueueWorker.js +0 -567
  382. package/dist/core/RFDBClient.d.ts +0 -179
  383. package/dist/core/RFDBClient.d.ts.map +0 -1
  384. package/dist/core/RFDBClient.js +0 -429
  385. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
  386. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
  387. package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
  388. package/src/core/AnalysisWorker.ts +0 -410
  389. package/src/core/ParallelAnalyzer.ts +0 -476
  390. package/src/core/QueueWorker.ts +0 -780
  391. package/src/plugins/indexing/ServiceDetector.ts +0 -230
@@ -1,567 +0,0 @@
1
- /**
2
- * QueueWorker - Worker thread for queue-based analysis
3
- *
4
- * Runs in a worker_thread, receives file tasks, runs applicable plugins,
5
- * writes results directly to RFDB.
6
- *
7
- * Protocol:
8
- * Main -> Worker: { type: 'process', taskId, file, moduleId, moduleName, plugins }
9
- * Worker -> Main: { type: 'done', taskId, stats } | { type: 'error', taskId, error }
10
- */
11
- import { parentPort, workerData } from 'worker_threads';
12
- import { readFileSync } from 'fs';
13
- import { parse } from '@babel/parser';
14
- import traverseModule from '@babel/traverse';
15
- import { RFDBClient } from '@grafema/rfdb-client';
16
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
- const traverse = traverseModule.default || traverseModule;
18
- // Worker state
19
- let client = null;
20
- const workerId = workerData?.workerId || 0;
21
- const socketPath = workerData?.socketPath || '/tmp/rfdb.sock';
22
- let connected = false;
23
- // Plugin registry - maps plugin names to analyzer functions
24
- const pluginAnalyzers = new Map();
25
- /**
26
- * Register built-in analysis plugins
27
- */
28
- function registerBuiltinPlugins() {
29
- pluginAnalyzers.set('JSASTAnalyzer', analyzeJSAST);
30
- pluginAnalyzers.set('ExpressRouteAnalyzer', analyzeExpressRoutes);
31
- pluginAnalyzers.set('SocketIOAnalyzer', analyzeSocketIO);
32
- pluginAnalyzers.set('DatabaseAnalyzer', analyzeDatabase);
33
- pluginAnalyzers.set('FetchAnalyzer', analyzeFetch);
34
- pluginAnalyzers.set('ReactAnalyzer', analyzeReact);
35
- }
36
- /**
37
- * Connect to RFDB server
38
- */
39
- async function connect() {
40
- if (connected)
41
- return;
42
- client = new RFDBClient(socketPath);
43
- await client.connect();
44
- connected = true;
45
- registerBuiltinPlugins();
46
- parentPort?.postMessage({ type: 'ready', workerId });
47
- }
48
- /**
49
- * Process a file with specified plugins
50
- */
51
- async function processFile(taskId, filePath, moduleId, moduleName, pluginNames) {
52
- const stats = {
53
- nodes: 0,
54
- edges: 0,
55
- plugins: {},
56
- };
57
- try {
58
- const code = readFileSync(filePath, 'utf-8');
59
- const ast = parse(code, {
60
- sourceType: 'module',
61
- plugins: ['jsx', 'typescript'],
62
- errorRecovery: true,
63
- });
64
- for (const pluginName of pluginNames) {
65
- const analyzer = pluginAnalyzers.get(pluginName);
66
- if (!analyzer) {
67
- console.warn(`[Worker ${workerId}] Unknown plugin: ${pluginName}`);
68
- continue;
69
- }
70
- try {
71
- const pluginStats = await analyzer(filePath, moduleId, moduleName, ast, client);
72
- stats.nodes += pluginStats.nodes || 0;
73
- stats.edges += pluginStats.edges || 0;
74
- stats.plugins[pluginName] = pluginStats;
75
- }
76
- catch (err) {
77
- console.error(`[Worker ${workerId}] Plugin ${pluginName} error on ${filePath}:`, err.message);
78
- stats.plugins[pluginName] = { error: err.message };
79
- }
80
- }
81
- return stats;
82
- }
83
- catch (err) {
84
- throw new Error(`Failed to process ${filePath}: ${err.message}`);
85
- }
86
- }
87
- // =============================================================================
88
- // Plugin Implementations
89
- // =============================================================================
90
- /**
91
- * JSASTAnalyzer - Base AST analysis
92
- */
93
- async function analyzeJSAST(filePath, moduleId, moduleName, ast, client) {
94
- const nodes = [];
95
- const edges = [];
96
- let callCounter = 0;
97
- nodes.push({
98
- id: moduleId,
99
- type: 'MODULE',
100
- name: moduleName,
101
- file: filePath,
102
- });
103
- // Extract imports
104
- traverse(ast, {
105
- ImportDeclaration(path) {
106
- const node = path.node;
107
- const source = node.source.value;
108
- node.specifiers.forEach((spec) => {
109
- let importedName;
110
- let localName;
111
- if (spec.type === 'ImportDefaultSpecifier') {
112
- importedName = 'default';
113
- localName = spec.local.name;
114
- }
115
- else if (spec.type === 'ImportNamespaceSpecifier') {
116
- importedName = '*';
117
- localName = spec.local.name;
118
- }
119
- else {
120
- const imported = spec.imported;
121
- importedName = imported.type === 'Identifier' ? imported.name : imported.value;
122
- localName = spec.local.name;
123
- }
124
- const importId = `IMPORT#${localName}#${filePath}#${node.loc?.start.line || 0}`;
125
- nodes.push({
126
- id: importId,
127
- type: 'IMPORT',
128
- name: localName,
129
- file: filePath,
130
- line: node.loc?.start.line || 0,
131
- importedName,
132
- source,
133
- });
134
- edges.push({ src: moduleId, dst: importId, type: 'CONTAINS' });
135
- });
136
- },
137
- });
138
- // Extract functions
139
- traverse(ast, {
140
- FunctionDeclaration(path) {
141
- if (path.getFunctionParent())
142
- return;
143
- const node = path.node;
144
- if (!node.id)
145
- return;
146
- const funcName = node.id.name;
147
- const line = node.loc?.start.line || 0;
148
- const functionId = `FUNCTION#${funcName}#${filePath}#${line}`;
149
- nodes.push({
150
- id: functionId,
151
- type: 'FUNCTION',
152
- name: funcName,
153
- file: filePath,
154
- line,
155
- async: node.async || false,
156
- generator: node.generator || false,
157
- exported: path.parent?.type?.includes('Export') || false,
158
- });
159
- edges.push({ src: moduleId, dst: functionId, type: 'CONTAINS' });
160
- // Extract parameters
161
- node.params.forEach((param, index) => {
162
- if (param.type === 'Identifier') {
163
- const paramId = `PARAMETER#${param.name}#${functionId}#${index}`;
164
- nodes.push({
165
- id: paramId,
166
- type: 'PARAMETER',
167
- name: param.name,
168
- file: filePath,
169
- index,
170
- });
171
- edges.push({ src: functionId, dst: paramId, type: 'HAS_PARAMETER' });
172
- }
173
- });
174
- },
175
- ArrowFunctionExpression(path) {
176
- if (path.getFunctionParent())
177
- return;
178
- const parent = path.parent;
179
- if (parent.type !== 'VariableDeclarator')
180
- return;
181
- const varDecl = parent;
182
- if (!varDecl.id || varDecl.id.type !== 'Identifier')
183
- return;
184
- const funcName = varDecl.id.name;
185
- const line = path.node.loc?.start.line || 0;
186
- const functionId = `FUNCTION#${funcName}#${filePath}#${line}`;
187
- nodes.push({
188
- id: functionId,
189
- type: 'FUNCTION',
190
- name: funcName,
191
- file: filePath,
192
- line,
193
- async: path.node.async || false,
194
- arrowFunction: true,
195
- });
196
- edges.push({ src: moduleId, dst: functionId, type: 'CONTAINS' });
197
- },
198
- });
199
- // Extract classes
200
- traverse(ast, {
201
- ClassDeclaration(path) {
202
- if (path.getFunctionParent())
203
- return;
204
- const node = path.node;
205
- if (!node.id)
206
- return;
207
- const className = node.id.name;
208
- const line = node.loc?.start.line || 0;
209
- const classId = `CLASS#${className}#${filePath}#${line}`;
210
- nodes.push({
211
- id: classId,
212
- type: 'CLASS',
213
- name: className,
214
- file: filePath,
215
- line,
216
- superClass: node.superClass && node.superClass.type === 'Identifier' ? node.superClass.name : null,
217
- });
218
- edges.push({ src: moduleId, dst: classId, type: 'CONTAINS' });
219
- // Extract methods
220
- node.body.body.forEach((member) => {
221
- if (member.type === 'ClassMethod' && member.key.type === 'Identifier') {
222
- const methodName = member.key.name;
223
- const methodLine = member.loc?.start.line || 0;
224
- const methodId = `METHOD#${className}.${methodName}#${filePath}#${methodLine}`;
225
- nodes.push({
226
- id: methodId,
227
- type: 'METHOD',
228
- name: methodName,
229
- file: filePath,
230
- line: methodLine,
231
- className,
232
- async: member.async || false,
233
- static: member.static || false,
234
- isConstructor: member.kind === 'constructor',
235
- });
236
- edges.push({ src: classId, dst: methodId, type: 'CONTAINS' });
237
- }
238
- });
239
- },
240
- });
241
- // Extract call expressions
242
- traverse(ast, {
243
- CallExpression(path) {
244
- const node = path.node;
245
- if (node.callee.type === 'Identifier') {
246
- const line = node.loc?.start.line || 0;
247
- const callId = `CALL#${node.callee.name}#${filePath}#${line}:${callCounter++}`;
248
- nodes.push({
249
- id: callId,
250
- type: 'CALL',
251
- name: node.callee.name,
252
- file: filePath,
253
- line,
254
- argsCount: node.arguments.length,
255
- });
256
- const parentFunc = path.getFunctionParent();
257
- if (parentFunc) {
258
- const parentNode = parentFunc.node;
259
- const parentName = parentNode.id?.name ||
260
- parentFunc.parent?.id?.name ||
261
- 'anonymous';
262
- const parentLine = parentNode.loc?.start.line || 0;
263
- edges.push({
264
- src: `FUNCTION#${parentName}#${filePath}#${parentLine}`,
265
- dst: callId,
266
- type: 'CONTAINS'
267
- });
268
- }
269
- else {
270
- edges.push({ src: moduleId, dst: callId, type: 'CONTAINS' });
271
- }
272
- }
273
- },
274
- });
275
- if (nodes.length > 0) {
276
- await client.addNodes(nodes);
277
- }
278
- if (edges.length > 0) {
279
- await client.addEdges(edges, true);
280
- }
281
- return { nodes: nodes.length, edges: edges.length };
282
- }
283
- /**
284
- * ExpressRouteAnalyzer - HTTP routes
285
- */
286
- async function analyzeExpressRoutes(filePath, moduleId, _moduleName, ast, client) {
287
- const nodes = [];
288
- const edges = [];
289
- const HTTP_METHODS = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head', 'all'];
290
- traverse(ast, {
291
- CallExpression(path) {
292
- const node = path.node;
293
- if (node.callee.type === 'MemberExpression' &&
294
- node.callee.property?.type === 'Identifier' &&
295
- HTTP_METHODS.includes(node.callee.property.name)) {
296
- const method = node.callee.property.name.toUpperCase();
297
- const pathArg = node.arguments[0];
298
- if (pathArg?.type === 'StringLiteral') {
299
- const routePath = pathArg.value;
300
- const line = node.loc?.start.line || 0;
301
- const routeId = `http:route#${method}#${routePath}#${filePath}#${line}`;
302
- nodes.push({
303
- id: routeId,
304
- type: 'http:route',
305
- name: `${method} ${routePath}`,
306
- method,
307
- path: routePath,
308
- file: filePath,
309
- line,
310
- });
311
- edges.push({ src: moduleId, dst: routeId, type: 'CONTAINS' });
312
- }
313
- }
314
- },
315
- });
316
- if (nodes.length > 0) {
317
- await client.addNodes(nodes);
318
- }
319
- if (edges.length > 0) {
320
- await client.addEdges(edges, true);
321
- }
322
- return { nodes: nodes.length, edges: edges.length, routes: nodes.length };
323
- }
324
- /**
325
- * SocketIOAnalyzer - Socket.IO events
326
- */
327
- async function analyzeSocketIO(filePath, moduleId, _moduleName, ast, client) {
328
- const nodes = [];
329
- const edges = [];
330
- traverse(ast, {
331
- CallExpression(path) {
332
- const node = path.node;
333
- if (node.callee.type === 'MemberExpression' &&
334
- node.callee.property?.type === 'Identifier') {
335
- const method = node.callee.property.name;
336
- const line = node.loc?.start.line || 0;
337
- if (method === 'on' && node.arguments[0]?.type === 'StringLiteral') {
338
- const eventName = node.arguments[0].value;
339
- const eventId = `socketio:on#${eventName}#${filePath}#${line}`;
340
- nodes.push({
341
- id: eventId,
342
- type: 'socketio:on',
343
- name: eventName,
344
- file: filePath,
345
- line,
346
- });
347
- edges.push({ src: moduleId, dst: eventId, type: 'CONTAINS' });
348
- }
349
- if (method === 'emit' && node.arguments[0]?.type === 'StringLiteral') {
350
- const eventName = node.arguments[0].value;
351
- const eventId = `socketio:emit#${eventName}#${filePath}#${line}`;
352
- nodes.push({
353
- id: eventId,
354
- type: 'socketio:emit',
355
- name: eventName,
356
- file: filePath,
357
- line,
358
- });
359
- edges.push({ src: moduleId, dst: eventId, type: 'CONTAINS' });
360
- }
361
- }
362
- },
363
- });
364
- if (nodes.length > 0) {
365
- await client.addNodes(nodes);
366
- }
367
- if (edges.length > 0) {
368
- await client.addEdges(edges, true);
369
- }
370
- return { nodes: nodes.length, edges: edges.length };
371
- }
372
- /**
373
- * DatabaseAnalyzer - SQL queries
374
- */
375
- async function analyzeDatabase(filePath, moduleId, _moduleName, ast, client) {
376
- const nodes = [];
377
- const edges = [];
378
- traverse(ast, {
379
- CallExpression(path) {
380
- const node = path.node;
381
- if (node.callee.type === 'MemberExpression' &&
382
- node.callee.property?.type === 'Identifier') {
383
- const method = node.callee.property.name;
384
- if (method === 'query' && node.arguments[0]?.type === 'StringLiteral') {
385
- const sql = node.arguments[0].value;
386
- const line = node.loc?.start.line || 0;
387
- const queryId = `db:query#${filePath}#${line}`;
388
- nodes.push({
389
- id: queryId,
390
- type: 'db:query',
391
- name: sql.slice(0, 50) + (sql.length > 50 ? '...' : ''),
392
- sql,
393
- file: filePath,
394
- line,
395
- });
396
- edges.push({ src: moduleId, dst: queryId, type: 'CONTAINS' });
397
- }
398
- }
399
- },
400
- });
401
- if (nodes.length > 0) {
402
- await client.addNodes(nodes);
403
- }
404
- if (edges.length > 0) {
405
- await client.addEdges(edges, true);
406
- }
407
- return { nodes: nodes.length, edges: edges.length };
408
- }
409
- /**
410
- * FetchAnalyzer - HTTP requests
411
- */
412
- async function analyzeFetch(filePath, moduleId, _moduleName, ast, client) {
413
- const nodes = [];
414
- const edges = [];
415
- traverse(ast, {
416
- CallExpression(path) {
417
- const node = path.node;
418
- const line = node.loc?.start.line || 0;
419
- if (node.callee.type === 'Identifier' && node.callee.name === 'fetch') {
420
- const urlArg = node.arguments[0];
421
- const url = urlArg?.type === 'StringLiteral' ? urlArg.value : '<dynamic>';
422
- const requestId = `http:request#${filePath}#${line}`;
423
- nodes.push({
424
- id: requestId,
425
- type: 'http:request',
426
- name: `fetch ${url.slice(0, 40)}`,
427
- url,
428
- file: filePath,
429
- line,
430
- });
431
- edges.push({ src: moduleId, dst: requestId, type: 'CONTAINS' });
432
- }
433
- if (node.callee.type === 'MemberExpression' &&
434
- node.callee.object?.type === 'Identifier' &&
435
- node.callee.object.name === 'axios') {
436
- const prop = node.callee.property;
437
- const method = (prop?.type === 'Identifier' ? prop.name : 'request').toUpperCase();
438
- const urlArg = node.arguments[0];
439
- const url = urlArg?.type === 'StringLiteral' ? urlArg.value : '<dynamic>';
440
- const requestId = `http:request#${filePath}#${line}`;
441
- nodes.push({
442
- id: requestId,
443
- type: 'http:request',
444
- name: `${method} ${url.slice(0, 40)}`,
445
- url,
446
- method,
447
- file: filePath,
448
- line,
449
- });
450
- edges.push({ src: moduleId, dst: requestId, type: 'CONTAINS' });
451
- }
452
- },
453
- });
454
- if (nodes.length > 0) {
455
- await client.addNodes(nodes);
456
- }
457
- if (edges.length > 0) {
458
- await client.addEdges(edges, true);
459
- }
460
- return { nodes: nodes.length, edges: edges.length };
461
- }
462
- /**
463
- * ReactAnalyzer - React components
464
- */
465
- async function analyzeReact(filePath, moduleId, _moduleName, ast, client) {
466
- const nodes = [];
467
- const edges = [];
468
- traverse(ast, {
469
- FunctionDeclaration(path) {
470
- const node = path.node;
471
- if (!node.id)
472
- return;
473
- const name = node.id.name;
474
- if (name[0] === name[0].toUpperCase()) {
475
- let returnsJSX = false;
476
- path.traverse({
477
- ReturnStatement(retPath) {
478
- if (retPath.node.argument?.type === 'JSXElement' ||
479
- retPath.node.argument?.type === 'JSXFragment') {
480
- returnsJSX = true;
481
- }
482
- },
483
- });
484
- if (returnsJSX) {
485
- const line = node.loc?.start.line || 0;
486
- const componentId = `react:component#${name}#${filePath}#${line}`;
487
- nodes.push({
488
- id: componentId,
489
- type: 'react:component',
490
- name,
491
- file: filePath,
492
- line,
493
- });
494
- edges.push({ src: moduleId, dst: componentId, type: 'CONTAINS' });
495
- }
496
- }
497
- },
498
- CallExpression(path) {
499
- const node = path.node;
500
- if (node.callee.type === 'Identifier' && node.callee.name.startsWith('use')) {
501
- const hookName = node.callee.name;
502
- const line = node.loc?.start.line || 0;
503
- const hookId = `react:hook#${hookName}#${filePath}#${line}`;
504
- let hookType = 'react:hook';
505
- if (hookName === 'useState')
506
- hookType = 'react:state';
507
- if (hookName === 'useEffect' || hookName === 'useLayoutEffect')
508
- hookType = 'react:effect';
509
- if (hookName === 'useRef')
510
- hookType = 'react:ref';
511
- nodes.push({
512
- id: hookId,
513
- type: hookType,
514
- name: hookName,
515
- file: filePath,
516
- line,
517
- });
518
- edges.push({ src: moduleId, dst: hookId, type: 'CONTAINS' });
519
- }
520
- },
521
- });
522
- if (nodes.length > 0) {
523
- await client.addNodes(nodes);
524
- }
525
- if (edges.length > 0) {
526
- await client.addEdges(edges, true);
527
- }
528
- return { nodes: nodes.length, edges: edges.length };
529
- }
530
- // =============================================================================
531
- // Message Handler
532
- // =============================================================================
533
- parentPort?.on('message', async (msg) => {
534
- switch (msg.type) {
535
- case 'process':
536
- try {
537
- const stats = await processFile(msg.taskId, msg.file, msg.moduleId, msg.moduleName, msg.plugins);
538
- parentPort?.postMessage({
539
- type: 'done',
540
- taskId: msg.taskId,
541
- file: msg.file,
542
- stats,
543
- workerId,
544
- });
545
- }
546
- catch (err) {
547
- parentPort?.postMessage({
548
- type: 'error',
549
- taskId: msg.taskId,
550
- file: msg.file,
551
- error: err.message,
552
- workerId,
553
- });
554
- }
555
- break;
556
- case 'exit':
557
- if (client) {
558
- await client.close();
559
- }
560
- process.exit(0);
561
- break;
562
- }
563
- });
564
- // Auto-connect on start
565
- connect().catch((err) => {
566
- parentPort?.postMessage({ type: 'error', error: err.message });
567
- });