@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,204 +0,0 @@
1
- /**
2
- * ZonServiceDiscovery - плагин для поиска сервисов в zon1 монорепозитории
3
- *
4
- * Точная реализация логики из file2host.js:
5
- * 1. Читает servers.js - база данных серверов
6
- * 2. Использует zserver_conf.prepare_conf() для получения конфигурации каждого сервера
7
- * 3. Читает k8s/deploy/configs/apps.json - kubernetes приложения
8
- * 4. Извлекает entrypoint'ы для каждого сервиса
9
- */
10
- import { DiscoveryPlugin } from './DiscoveryPlugin.js';
11
- import { createSuccessResult, createErrorResult } from '../Plugin.js';
12
- import { existsSync, readFileSync } from 'fs';
13
- import { join } from 'path';
14
- import { createRequire } from 'module';
15
- export class ZonServiceDiscovery extends DiscoveryPlugin {
16
- constructor(config = {}) {
17
- super(config);
18
- }
19
- // Debug: show which file was loaded at runtime
20
- static __loaded = (() => {
21
- try {
22
- console.log('[ZonServiceDiscovery] module loaded from', import.meta.url);
23
- }
24
- catch {
25
- // Ignore
26
- }
27
- return true;
28
- })();
29
- get metadata() {
30
- return {
31
- name: 'ZonServiceDiscovery',
32
- phase: 'DISCOVERY',
33
- priority: 100,
34
- creates: {
35
- nodes: ['SERVICE'],
36
- edges: []
37
- },
38
- dependencies: []
39
- };
40
- }
41
- hostname_base(hostname) {
42
- return hostname.replace(/(-ec2)?\d*$/, '$1');
43
- }
44
- async execute(context) {
45
- const { projectPath, graph } = context;
46
- console.log(`[ZonServiceDiscovery] Scanning ${projectPath}`);
47
- try {
48
- // Set environment variable to avoid BUILD error
49
- process.env.ZON_CONFIG_FALLBACK = '1';
50
- const services = [];
51
- const require = createRequire(import.meta.url);
52
- // Paths
53
- const serversDbPath = join(projectPath, 'pkg/system/db/servers.js');
54
- const zserverConfPath = join(projectPath, 'pkg/system/agent/zserver_conf.js');
55
- const appsJsonPath = join(projectPath, 'pkg/k8s/deploy/configs/apps.json');
56
- // Check if this is zon1 repository
57
- if (!existsSync(serversDbPath)) {
58
- console.log(`[ZonServiceDiscovery] servers.js not found - not a zon1 repository`);
59
- return createErrorResult(new Error(`Not a zon1 repository - servers.js not found`));
60
- }
61
- console.log(`[ZonServiceDiscovery] Loading servers.js...`);
62
- // Load modules
63
- let servers_js;
64
- let zserver_conf;
65
- let k8s_apps = {};
66
- try {
67
- // Clear require cache to get fresh modules
68
- delete require.cache[require.resolve(serversDbPath)];
69
- delete require.cache[require.resolve(zserverConfPath)];
70
- servers_js = require(serversDbPath);
71
- console.log(`[ZonServiceDiscovery] Loaded servers.js`);
72
- }
73
- catch (err) {
74
- console.log(`[ZonServiceDiscovery] Failed to load servers.js:`, err.message);
75
- return createErrorResult(err);
76
- }
77
- try {
78
- zserver_conf = require(zserverConfPath);
79
- console.log(`[ZonServiceDiscovery] Loaded zserver_conf.js`);
80
- }
81
- catch (err) {
82
- console.log(`[ZonServiceDiscovery] Failed to load zserver_conf.js:`, err.message);
83
- return createErrorResult(err);
84
- }
85
- // Load k8s apps (optional)
86
- if (existsSync(appsJsonPath)) {
87
- try {
88
- const appsContent = readFileSync(appsJsonPath, 'utf-8');
89
- k8s_apps = JSON.parse(appsContent);
90
- console.log(`[ZonServiceDiscovery] Loaded k8s apps.json`);
91
- }
92
- catch (err) {
93
- console.log(`[ZonServiceDiscovery] Warning: Failed to load apps.json:`, err.message);
94
- }
95
- }
96
- // Build service tree - exact logic from file2host.js
97
- const allServers = Object.entries(servers_js.servers);
98
- // Note: file2host uses v.file2host filter, but we'll use entrypoint presence
99
- const k8sEntries = Object.entries(k8s_apps).filter(([, v]) => v.entrypoint);
100
- console.log(`[ZonServiceDiscovery] Processing ${allServers.length} servers and ${k8sEntries.length} k8s apps...`);
101
- const processedGroups = new Set();
102
- const serviceMap = new Map(); // entrypoint -> {hosts: [...]}
103
- // Process traditional servers - exact logic from file2host.js
104
- for (const [hostname, serverConfig] of allServers) {
105
- const is_zagent = servers_js.lib.re.zagent.test(hostname);
106
- // Skip LPM zagents (util files are transcoded during build)
107
- if (is_zagent && serverConfig.type === 'lpm') {
108
- continue;
109
- }
110
- const hostGroup = is_zagent
111
- ? `${serverConfig.type} zagents`
112
- : this.hostname_base(hostname);
113
- if (processedGroups.has(hostGroup)) {
114
- continue;
115
- }
116
- processedGroups.add(hostGroup);
117
- try {
118
- // Get configuration - exact call from file2host.js
119
- const conf = zserver_conf.prepare_conf(hostname)
120
- .filter(c => (c.conf || c.init) && c.file)
121
- .map(({ init, file }) => {
122
- if (!init) {
123
- return file.split('.conf')[0];
124
- }
125
- return init.upstart.xvfs.split(' ')[0];
126
- });
127
- for (const service of conf) {
128
- if (!serviceMap.has(service)) {
129
- serviceMap.set(service, { hosts: [] });
130
- }
131
- serviceMap.get(service).hosts.push({
132
- hostGroup,
133
- hostname,
134
- type: 'traditional'
135
- });
136
- }
137
- }
138
- catch (err) {
139
- console.log(`[ZonServiceDiscovery] Error processing ${hostname}:`, err.message);
140
- }
141
- }
142
- // Process k8s applications - exact logic from file2host.js
143
- for (const [name, config] of k8sEntries) {
144
- if (config.entrypoint) {
145
- const entrypoint = config.entrypoint.replace('pkg/', '');
146
- if (!serviceMap.has(entrypoint)) {
147
- serviceMap.set(entrypoint, { hosts: [] });
148
- }
149
- serviceMap.get(entrypoint).hosts.push({
150
- hostGroup: name,
151
- hostname: name,
152
- type: 'k8s'
153
- });
154
- }
155
- }
156
- console.log(`[ZonServiceDiscovery] Found ${serviceMap.size} unique services`);
157
- // Show first 20 services as preview
158
- const serviceList = Array.from(serviceMap.keys()).sort();
159
- console.log(`[ZonServiceDiscovery] Services (showing first 20 of ${serviceList.length}):`);
160
- serviceList.slice(0, 20).forEach(s => {
161
- const hosts = serviceMap.get(s).hosts;
162
- console.log(` - ${s} (${hosts.length} host${hosts.length > 1 ? 's' : ''})`);
163
- });
164
- if (serviceList.length > 20) {
165
- console.log(` ... and ${serviceList.length - 20} more`);
166
- }
167
- // Create SERVICE nodes
168
- for (const [entrypoint, data] of serviceMap) {
169
- // Use format matching VersionManager.generateStableId()
170
- const serviceId = `SERVICE:${entrypoint}`;
171
- const servicePath = join(projectPath, 'pkg', entrypoint);
172
- // Cast through unknown since we're creating a dynamic service node
173
- const metadata = {
174
- discoveryMethod: 'zon',
175
- entrypoint,
176
- hosts: data.hosts,
177
- hostCount: data.hosts.length
178
- };
179
- const serviceNode = {
180
- id: serviceId,
181
- type: 'SERVICE',
182
- name: entrypoint,
183
- path: servicePath,
184
- metadata
185
- };
186
- await graph.addNode(serviceNode);
187
- services.push({
188
- id: serviceId,
189
- name: entrypoint,
190
- path: servicePath,
191
- type: 'zon-service',
192
- metadata
193
- });
194
- }
195
- console.log(`[ZonServiceDiscovery] Created ${services.length} SERVICE nodes`);
196
- return createSuccessResult({ nodes: services.length, edges: 0 }, { services });
197
- }
198
- catch (error) {
199
- console.error(`[ZonServiceDiscovery] Fatal error:`, error);
200
- console.error(error.stack);
201
- return createErrorResult(error);
202
- }
203
- }
204
- }
@@ -1,410 +0,0 @@
1
- /**
2
- * AnalysisWorker - worker thread for parallel AST analysis
3
- *
4
- * Each worker:
5
- * 1. Connects to RFDB server
6
- * 2. Receives file paths to analyze
7
- * 3. Parses AST and writes nodes/edges directly to RFDB
8
- *
9
- * Communication:
10
- * Main -> Worker: { type: 'analyze', file, moduleId, moduleName }
11
- * Worker -> Main: { type: 'done', file, stats } | { type: 'error', file, error }
12
- */
13
-
14
- import { parentPort, workerData } from 'worker_threads';
15
- import { readFileSync } from 'fs';
16
- import { parse, ParserPlugin } from '@babel/parser';
17
- import traverseModule from '@babel/traverse';
18
- import type { ImportDeclaration, FunctionDeclaration, ArrowFunctionExpression, ClassDeclaration, CallExpression, Identifier } from '@babel/types';
19
- import type { NodePath } from '@babel/traverse';
20
-
21
- import { RFDBClient } from '@grafema/rfdb-client';
22
-
23
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
- const traverse = (traverseModule as any).default || traverseModule;
25
-
26
- /**
27
- * Worker data from main thread
28
- */
29
- interface WorkerDataInput {
30
- workerId?: number;
31
- socketPath?: string;
32
- autoConnect?: boolean;
33
- }
34
-
35
- /**
36
- * Message types from main thread
37
- */
38
- interface ConnectMessage {
39
- type: 'connect';
40
- socketPath?: string;
41
- }
42
-
43
- interface AnalyzeMessage {
44
- type: 'analyze';
45
- file: string;
46
- moduleId: string;
47
- moduleName: string;
48
- }
49
-
50
- interface DisconnectMessage {
51
- type: 'disconnect';
52
- }
53
-
54
- interface ExitMessage {
55
- type: 'exit';
56
- }
57
-
58
- type WorkerMessage = ConnectMessage | AnalyzeMessage | DisconnectMessage | ExitMessage;
59
-
60
- /**
61
- * Analysis stats
62
- */
63
- interface AnalysisStats {
64
- nodes: number;
65
- edges: number;
66
- functions: number;
67
- calls: number;
68
- }
69
-
70
- /**
71
- * Wire node for RFDB
72
- */
73
- interface WireNode {
74
- id: string;
75
- type: string;
76
- name: string;
77
- file: string;
78
- metadata?: string;
79
- }
80
-
81
- /**
82
- * Wire edge for RFDB
83
- */
84
- interface WireEdge {
85
- src: string;
86
- dst: string;
87
- type: string;
88
- }
89
-
90
- // Worker state
91
- let client: RFDBClient | null = null;
92
- const workerId = (workerData as WorkerDataInput)?.workerId || 0;
93
- let socketPath = (workerData as WorkerDataInput)?.socketPath || '/tmp/rfdb.sock';
94
- let connected = false;
95
-
96
- /**
97
- * Connect to RFDB server
98
- */
99
- async function connect(): Promise<void> {
100
- if (connected) return;
101
-
102
- client = new RFDBClient(socketPath);
103
- await client.connect();
104
- connected = true;
105
-
106
- parentPort?.postMessage({ type: 'ready', workerId });
107
- }
108
-
109
- /**
110
- * Parse a file and write results directly to RFDB
111
- */
112
- async function analyzeFile(filePath: string, moduleId: string, moduleName: string): Promise<AnalysisStats> {
113
- const stats: AnalysisStats = { nodes: 0, edges: 0, functions: 0, calls: 0 };
114
-
115
- try {
116
- const code = readFileSync(filePath, 'utf-8');
117
-
118
- const ast = parse(code, {
119
- sourceType: 'module',
120
- plugins: ['jsx', 'typescript'] as ParserPlugin[],
121
- errorRecovery: true
122
- });
123
-
124
- // Collections to batch write
125
- const nodes: WireNode[] = [];
126
- const edges: WireEdge[] = [];
127
-
128
- // Counters for unique IDs
129
- let callCounter = 0;
130
-
131
- // Add module node
132
- nodes.push({
133
- id: moduleId,
134
- type: 'MODULE',
135
- name: moduleName,
136
- file: filePath
137
- });
138
-
139
- // Extract imports
140
- traverse(ast, {
141
- ImportDeclaration(path: NodePath<ImportDeclaration>) {
142
- const node = path.node;
143
- const source = node.source.value;
144
-
145
- node.specifiers.forEach(spec => {
146
- let importedName: string;
147
- let localName: string;
148
-
149
- if (spec.type === 'ImportDefaultSpecifier') {
150
- importedName = 'default';
151
- localName = spec.local.name;
152
- } else if (spec.type === 'ImportNamespaceSpecifier') {
153
- importedName = '*';
154
- localName = spec.local.name;
155
- } else {
156
- importedName = (spec.imported as Identifier)?.name || spec.local.name;
157
- localName = spec.local.name;
158
- }
159
-
160
- const importId = `IMPORT#${localName}#${filePath}#${node.loc!.start.line}`;
161
- nodes.push({
162
- id: importId,
163
- type: 'IMPORT',
164
- name: localName,
165
- file: filePath,
166
- metadata: JSON.stringify({ importedName, source, line: node.loc!.start.line })
167
- });
168
-
169
- edges.push({ src: moduleId, dst: importId, type: 'CONTAINS' });
170
- });
171
- }
172
- });
173
-
174
- // Extract functions
175
- traverse(ast, {
176
- FunctionDeclaration(path: NodePath<FunctionDeclaration>) {
177
- if (path.getFunctionParent()) return;
178
-
179
- const node = path.node;
180
- if (!node.id) return;
181
-
182
- const funcName = node.id.name;
183
- const functionId = `FUNCTION#${funcName}#${filePath}#${node.loc!.start.line}`;
184
-
185
- nodes.push({
186
- id: functionId,
187
- type: 'FUNCTION',
188
- name: funcName,
189
- file: filePath,
190
- metadata: JSON.stringify({
191
- line: node.loc!.start.line,
192
- async: node.async || false,
193
- generator: node.generator || false,
194
- exported: path.parent?.type?.includes('Export') || false
195
- })
196
- });
197
-
198
- edges.push({ src: moduleId, dst: functionId, type: 'CONTAINS' });
199
- stats.functions++;
200
-
201
- // Extract parameters
202
- node.params.forEach((param, index) => {
203
- if (param.type === 'Identifier') {
204
- const paramId = `PARAMETER#${param.name}#${functionId}#${index}`;
205
- nodes.push({
206
- id: paramId,
207
- type: 'PARAMETER',
208
- name: param.name,
209
- file: filePath,
210
- metadata: JSON.stringify({ index, functionId })
211
- });
212
- edges.push({ src: functionId, dst: paramId, type: 'CONTAINS' });
213
- }
214
- });
215
- },
216
-
217
- ArrowFunctionExpression(path: NodePath<ArrowFunctionExpression>) {
218
- // Only process top-level arrow functions assigned to variables
219
- if (path.getFunctionParent()) return;
220
-
221
- const parent = path.parent;
222
- if (parent.type !== 'VariableDeclarator') return;
223
- if (!('id' in parent) || !parent.id || parent.id.type !== 'Identifier') return;
224
-
225
- const funcName = parent.id.name;
226
- const functionId = `FUNCTION#${funcName}#${filePath}#${path.node.loc!.start.line}`;
227
-
228
- nodes.push({
229
- id: functionId,
230
- type: 'FUNCTION',
231
- name: funcName,
232
- file: filePath,
233
- metadata: JSON.stringify({
234
- line: path.node.loc!.start.line,
235
- async: path.node.async || false,
236
- arrowFunction: true
237
- })
238
- });
239
-
240
- edges.push({ src: moduleId, dst: functionId, type: 'CONTAINS' });
241
- stats.functions++;
242
- }
243
- });
244
-
245
- // Extract classes
246
- traverse(ast, {
247
- ClassDeclaration(path: NodePath<ClassDeclaration>) {
248
- if (path.getFunctionParent()) return;
249
-
250
- const node = path.node;
251
- if (!node.id) return;
252
-
253
- const className = node.id.name;
254
- const classId = `CLASS#${className}#${filePath}#${node.loc!.start.line}`;
255
-
256
- nodes.push({
257
- id: classId,
258
- type: 'CLASS',
259
- name: className,
260
- file: filePath,
261
- metadata: JSON.stringify({
262
- line: node.loc!.start.line,
263
- superClass: (node.superClass as Identifier)?.name || null
264
- })
265
- });
266
-
267
- edges.push({ src: moduleId, dst: classId, type: 'CONTAINS' });
268
-
269
- // Extract methods
270
- node.body.body.forEach(member => {
271
- if (member.type === 'ClassMethod' && member.key.type === 'Identifier') {
272
- const methodName = member.key.name;
273
- const methodId = `METHOD#${className}.${methodName}#${filePath}#${member.loc!.start.line}`;
274
-
275
- nodes.push({
276
- id: methodId,
277
- type: 'METHOD',
278
- name: methodName,
279
- file: filePath,
280
- metadata: JSON.stringify({
281
- className,
282
- line: member.loc!.start.line,
283
- async: member.async || false,
284
- static: member.static || false,
285
- isConstructor: member.kind === 'constructor'
286
- })
287
- });
288
-
289
- edges.push({ src: classId, dst: methodId, type: 'CONTAINS' });
290
- stats.functions++;
291
- }
292
- });
293
- }
294
- });
295
-
296
- // Extract call expressions (simplified)
297
- traverse(ast, {
298
- CallExpression(path: NodePath<CallExpression>) {
299
- const node = path.node;
300
-
301
- if (node.callee.type === 'Identifier') {
302
- const callId = `CALL#${node.callee.name}#${filePath}#${node.loc!.start.line}:${callCounter++}`;
303
-
304
- nodes.push({
305
- id: callId,
306
- type: 'CALL',
307
- name: node.callee.name,
308
- file: filePath,
309
- metadata: JSON.stringify({
310
- line: node.loc!.start.line,
311
- argsCount: node.arguments.length
312
- })
313
- });
314
-
315
- // Find parent function to connect
316
- const parentFunc = path.getFunctionParent();
317
- if (parentFunc) {
318
- const parentName =
319
- (parentFunc.node as { id?: Identifier }).id?.name ||
320
- ((parentFunc.parent as { id?: Identifier })?.id?.name) ||
321
- 'anonymous';
322
- edges.push({
323
- src: `FUNCTION#${parentName}#${filePath}#${parentFunc.node.loc!.start.line}`,
324
- dst: callId,
325
- type: 'CONTAINS'
326
- });
327
- } else {
328
- edges.push({ src: moduleId, dst: callId, type: 'CONTAINS' });
329
- }
330
-
331
- stats.calls++;
332
- }
333
- }
334
- });
335
-
336
- // Batch write to RFDB
337
- if (nodes.length > 0 && client) {
338
- await client.addNodes(nodes);
339
- stats.nodes = nodes.length;
340
- }
341
-
342
- if (edges.length > 0 && client) {
343
- await client.addEdges(edges, true); // skipValidation for speed
344
- stats.edges = edges.length;
345
- }
346
-
347
- return stats;
348
- } catch (err) {
349
- throw new Error(`Failed to analyze ${filePath}: ${(err as Error).message}`);
350
- }
351
- }
352
-
353
- /**
354
- * Handle messages from main thread
355
- */
356
- if (parentPort) {
357
- parentPort.on('message', async (msg: WorkerMessage) => {
358
- switch (msg.type) {
359
- case 'connect':
360
- try {
361
- socketPath = msg.socketPath || socketPath;
362
- await connect();
363
- } catch (err) {
364
- parentPort!.postMessage({ type: 'error', error: (err as Error).message });
365
- }
366
- break;
367
-
368
- case 'analyze':
369
- try {
370
- const stats = await analyzeFile(msg.file, msg.moduleId, msg.moduleName);
371
- parentPort!.postMessage({
372
- type: 'done',
373
- file: msg.file,
374
- stats,
375
- workerId
376
- });
377
- } catch (err) {
378
- parentPort!.postMessage({
379
- type: 'error',
380
- file: msg.file,
381
- error: (err as Error).message,
382
- workerId
383
- });
384
- }
385
- break;
386
-
387
- case 'disconnect':
388
- if (client) {
389
- await client.close();
390
- connected = false;
391
- }
392
- parentPort!.postMessage({ type: 'disconnected', workerId });
393
- break;
394
-
395
- case 'exit':
396
- if (client) {
397
- await client.close();
398
- }
399
- process.exit(0);
400
- break;
401
- }
402
- });
403
-
404
- // Auto-connect on start if socketPath provided
405
- if ((workerData as WorkerDataInput)?.autoConnect) {
406
- connect().catch(err => {
407
- parentPort!.postMessage({ type: 'error', error: (err as Error).message });
408
- });
409
- }
410
- }