@grafema/core 0.1.0-alpha.5 → 0.2.0-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 (530) hide show
  1. package/README.md +0 -1
  2. package/dist/Orchestrator.d.ts +31 -2
  3. package/dist/Orchestrator.d.ts.map +1 -1
  4. package/dist/Orchestrator.js +222 -27
  5. package/dist/config/ConfigLoader.d.ts +90 -0
  6. package/dist/config/ConfigLoader.d.ts.map +1 -0
  7. package/dist/config/ConfigLoader.js +249 -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/FileExplainer.d.ts +101 -0
  18. package/dist/core/FileExplainer.d.ts.map +1 -0
  19. package/dist/core/FileExplainer.js +139 -0
  20. package/dist/core/FileNodeManager.d.ts +40 -0
  21. package/dist/core/FileNodeManager.d.ts.map +1 -0
  22. package/dist/core/FileNodeManager.js +84 -0
  23. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  24. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  25. package/dist/core/GraphFreshnessChecker.js +101 -0
  26. package/dist/core/HashUtils.d.ts +24 -0
  27. package/dist/core/HashUtils.d.ts.map +1 -0
  28. package/dist/core/HashUtils.js +45 -0
  29. package/dist/core/IncrementalReanalyzer.d.ts +36 -0
  30. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  31. package/dist/core/IncrementalReanalyzer.js +132 -0
  32. package/dist/core/NodeFactory.d.ts +266 -19
  33. package/dist/core/NodeFactory.d.ts.map +1 -1
  34. package/dist/core/NodeFactory.js +256 -21
  35. package/dist/core/ScopeTracker.d.ts +84 -0
  36. package/dist/core/ScopeTracker.d.ts.map +1 -0
  37. package/dist/core/ScopeTracker.js +116 -0
  38. package/dist/core/SemanticId.d.ts +90 -0
  39. package/dist/core/SemanticId.d.ts.map +1 -0
  40. package/dist/core/SemanticId.js +115 -0
  41. package/dist/core/VersionManager.d.ts.map +1 -1
  42. package/dist/core/VersionManager.js +3 -2
  43. package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
  44. package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
  45. package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
  46. package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
  47. package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
  48. package/dist/core/nodes/ArrayLiteralNode.js +43 -0
  49. package/dist/core/nodes/BranchNode.d.ts +41 -0
  50. package/dist/core/nodes/BranchNode.d.ts.map +1 -0
  51. package/dist/core/nodes/BranchNode.js +82 -0
  52. package/dist/core/nodes/CallSiteNode.d.ts +30 -2
  53. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
  54. package/dist/core/nodes/CallSiteNode.js +54 -4
  55. package/dist/core/nodes/CaseNode.d.ts +43 -0
  56. package/dist/core/nodes/CaseNode.d.ts.map +1 -0
  57. package/dist/core/nodes/CaseNode.js +81 -0
  58. package/dist/core/nodes/ClassNode.d.ts +34 -2
  59. package/dist/core/nodes/ClassNode.d.ts.map +1 -1
  60. package/dist/core/nodes/ClassNode.js +52 -4
  61. package/dist/core/nodes/ConstantNode.d.ts +2 -2
  62. package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
  63. package/dist/core/nodes/ConstantNode.js +6 -4
  64. package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
  65. package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
  66. package/dist/core/nodes/ConstructorCallNode.js +171 -0
  67. package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
  68. package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
  69. package/dist/core/nodes/DatabaseQueryNode.js +5 -2
  70. package/dist/core/nodes/DecoratorNode.d.ts +42 -0
  71. package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
  72. package/dist/core/nodes/DecoratorNode.js +64 -0
  73. package/dist/core/nodes/EnumNode.d.ts +42 -0
  74. package/dist/core/nodes/EnumNode.d.ts.map +1 -0
  75. package/dist/core/nodes/EnumNode.js +56 -0
  76. package/dist/core/nodes/EventListenerNode.d.ts +4 -4
  77. package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
  78. package/dist/core/nodes/EventListenerNode.js +7 -4
  79. package/dist/core/nodes/ExportNode.d.ts +38 -2
  80. package/dist/core/nodes/ExportNode.d.ts.map +1 -1
  81. package/dist/core/nodes/ExportNode.js +54 -4
  82. package/dist/core/nodes/ExpressionNode.d.ts +97 -0
  83. package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
  84. package/dist/core/nodes/ExpressionNode.js +180 -0
  85. package/dist/core/nodes/ExternalModuleNode.d.ts +32 -0
  86. package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
  87. package/dist/core/nodes/ExternalModuleNode.js +49 -0
  88. package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
  89. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
  90. package/dist/core/nodes/ExternalStdioNode.js +15 -8
  91. package/dist/core/nodes/FunctionNode.d.ts +36 -0
  92. package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
  93. package/dist/core/nodes/FunctionNode.js +80 -1
  94. package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
  95. package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
  96. package/dist/core/nodes/HttpRequestNode.js +7 -4
  97. package/dist/core/nodes/ImportNode.d.ts +28 -6
  98. package/dist/core/nodes/ImportNode.d.ts.map +1 -1
  99. package/dist/core/nodes/ImportNode.js +43 -8
  100. package/dist/core/nodes/InterfaceNode.d.ts +46 -0
  101. package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
  102. package/dist/core/nodes/InterfaceNode.js +57 -0
  103. package/dist/core/nodes/IssueNode.d.ts +73 -0
  104. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  105. package/dist/core/nodes/IssueNode.js +129 -0
  106. package/dist/core/nodes/LiteralNode.d.ts +2 -2
  107. package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
  108. package/dist/core/nodes/LiteralNode.js +6 -4
  109. package/dist/core/nodes/MethodCallNode.d.ts +32 -2
  110. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
  111. package/dist/core/nodes/MethodCallNode.js +57 -4
  112. package/dist/core/nodes/MethodNode.d.ts +34 -2
  113. package/dist/core/nodes/MethodNode.d.ts.map +1 -1
  114. package/dist/core/nodes/MethodNode.js +55 -3
  115. package/dist/core/nodes/ModuleNode.d.ts +31 -0
  116. package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
  117. package/dist/core/nodes/ModuleNode.js +37 -0
  118. package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
  119. package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
  120. package/dist/core/nodes/NetworkRequestNode.js +65 -0
  121. package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
  122. package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
  123. package/dist/core/nodes/ObjectLiteralNode.js +43 -0
  124. package/dist/core/nodes/ParameterNode.d.ts +2 -2
  125. package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
  126. package/dist/core/nodes/ParameterNode.js +5 -3
  127. package/dist/core/nodes/ScopeNode.d.ts +31 -0
  128. package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
  129. package/dist/core/nodes/ScopeNode.js +49 -0
  130. package/dist/core/nodes/TypeNode.d.ts +36 -0
  131. package/dist/core/nodes/TypeNode.d.ts.map +1 -0
  132. package/dist/core/nodes/TypeNode.js +55 -0
  133. package/dist/core/nodes/VariableDeclarationNode.d.ts +29 -2
  134. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
  135. package/dist/core/nodes/VariableDeclarationNode.js +48 -4
  136. package/dist/core/nodes/index.d.ts +15 -1
  137. package/dist/core/nodes/index.d.ts.map +1 -1
  138. package/dist/core/nodes/index.js +17 -0
  139. package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
  140. package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
  141. package/dist/data/builtins/BuiltinRegistry.js +110 -0
  142. package/dist/data/builtins/definitions.d.ts +28 -0
  143. package/dist/data/builtins/definitions.d.ts.map +1 -0
  144. package/dist/data/builtins/definitions.js +250 -0
  145. package/dist/data/builtins/index.d.ts +10 -0
  146. package/dist/data/builtins/index.d.ts.map +1 -0
  147. package/dist/data/builtins/index.js +8 -0
  148. package/dist/data/builtins/jsGlobals.d.ts +18 -0
  149. package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
  150. package/dist/data/builtins/jsGlobals.js +26 -0
  151. package/dist/data/builtins/types.d.ts +34 -0
  152. package/dist/data/builtins/types.d.ts.map +1 -0
  153. package/dist/data/builtins/types.js +7 -0
  154. package/dist/data/globals/definitions.d.ts +27 -0
  155. package/dist/data/globals/definitions.d.ts.map +1 -0
  156. package/dist/data/globals/definitions.js +117 -0
  157. package/dist/data/globals/index.d.ts +36 -0
  158. package/dist/data/globals/index.d.ts.map +1 -0
  159. package/dist/data/globals/index.js +52 -0
  160. package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
  161. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  162. package/dist/diagnostics/DiagnosticCollector.js +129 -0
  163. package/dist/diagnostics/DiagnosticReporter.d.ts +100 -0
  164. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  165. package/dist/diagnostics/DiagnosticReporter.js +247 -0
  166. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  167. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  168. package/dist/diagnostics/DiagnosticWriter.js +43 -0
  169. package/dist/diagnostics/index.d.ts +14 -0
  170. package/dist/diagnostics/index.d.ts.map +1 -0
  171. package/dist/diagnostics/index.js +11 -0
  172. package/dist/errors/GrafemaError.d.ts +161 -0
  173. package/dist/errors/GrafemaError.d.ts.map +1 -0
  174. package/dist/errors/GrafemaError.js +181 -0
  175. package/dist/index.d.ts +73 -1
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +70 -1
  178. package/dist/logging/Logger.d.ts +48 -0
  179. package/dist/logging/Logger.d.ts.map +1 -0
  180. package/dist/logging/Logger.js +134 -0
  181. package/dist/plugins/Plugin.d.ts +5 -1
  182. package/dist/plugins/Plugin.d.ts.map +1 -1
  183. package/dist/plugins/Plugin.js +33 -0
  184. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  185. package/dist/plugins/analysis/DatabaseAnalyzer.js +14 -6
  186. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  187. package/dist/plugins/analysis/ExpressAnalyzer.js +29 -19
  188. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
  189. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
  190. package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
  191. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  192. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +71 -29
  193. package/dist/plugins/analysis/FetchAnalyzer.d.ts +41 -0
  194. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  195. package/dist/plugins/analysis/FetchAnalyzer.js +187 -19
  196. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
  197. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  198. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
  199. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +313 -19
  200. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  201. package/dist/plugins/analysis/JSASTAnalyzer.js +3430 -503
  202. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  203. package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
  204. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  205. package/dist/plugins/analysis/RustAnalyzer.js +16 -11
  206. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  207. package/dist/plugins/analysis/SQLiteAnalyzer.js +11 -7
  208. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  209. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
  210. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
  211. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  212. package/dist/plugins/analysis/SocketIOAnalyzer.js +117 -21
  213. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  214. package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
  215. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +207 -4
  216. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  217. package/dist/plugins/analysis/ast/GraphBuilder.js +1527 -316
  218. package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
  219. package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
  220. package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
  221. package/dist/plugins/analysis/ast/types.d.ts +470 -5
  222. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  223. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
  224. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
  225. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
  226. package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
  227. package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
  228. package/dist/plugins/analysis/ast/utils/index.js +5 -0
  229. package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
  230. package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
  231. package/dist/plugins/analysis/ast/utils/location.js +78 -0
  232. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +14 -5
  233. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  234. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
  235. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +100 -9
  236. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  237. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +674 -125
  238. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
  239. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  240. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
  241. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +14 -1
  242. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  243. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +190 -63
  244. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
  245. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
  246. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +112 -8
  247. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
  248. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  249. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
  250. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +20 -2
  251. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  252. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +243 -45
  253. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  254. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
  255. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
  256. package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
  257. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
  258. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
  259. package/dist/plugins/discovery/WorkspaceDiscovery.js +141 -0
  260. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
  261. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
  262. package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
  263. package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
  264. package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
  265. package/dist/plugins/discovery/workspaces/detector.js +49 -0
  266. package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
  267. package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
  268. package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
  269. package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
  270. package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
  271. package/dist/plugins/discovery/workspaces/index.js +8 -0
  272. package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
  273. package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
  274. package/dist/plugins/discovery/workspaces/parsers.js +80 -0
  275. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  276. package/dist/plugins/enrichment/AliasTracker.js +29 -8
  277. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
  278. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
  279. package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
  280. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
  281. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
  282. package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
  283. package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
  284. package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
  285. package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
  286. package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
  287. package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
  288. package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
  289. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
  290. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  291. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +78 -27
  292. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  293. package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
  294. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  295. package/dist/plugins/enrichment/MethodCallResolver.js +33 -13
  296. package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
  297. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  298. package/dist/plugins/enrichment/MountPointResolver.js +173 -147
  299. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
  300. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
  301. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
  302. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  303. package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
  304. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  305. package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
  306. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +22 -27
  307. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  308. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +185 -143
  309. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  310. package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
  311. package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
  312. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  313. package/dist/plugins/indexing/JSModuleIndexer.js +121 -31
  314. package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
  315. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  316. package/dist/plugins/indexing/RustModuleIndexer.js +8 -7
  317. package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
  318. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
  319. package/dist/plugins/indexing/ServiceDetector.js +28 -15
  320. package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
  321. package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
  322. package/dist/plugins/validation/BrokenImportValidator.js +249 -0
  323. package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
  324. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  325. package/dist/plugins/validation/CallResolverValidator.js +103 -77
  326. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
  327. package/dist/plugins/validation/DataFlowValidator.js +62 -49
  328. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
  329. package/dist/plugins/validation/EvalBanValidator.js +17 -16
  330. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  331. package/dist/plugins/validation/GraphConnectivityValidator.js +44 -24
  332. package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
  333. package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
  334. package/dist/plugins/validation/NodeCreationValidator.js +415 -0
  335. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  336. package/dist/plugins/validation/SQLInjectionValidator.js +61 -19
  337. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
  338. package/dist/plugins/validation/ShadowingDetector.js +6 -5
  339. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
  340. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
  341. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
  342. package/dist/plugins/vcs/GitPlugin.js +10 -12
  343. package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
  344. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
  345. package/dist/plugins/vcs/VCSPlugin.js +5 -5
  346. package/dist/queries/findCallsInFunction.d.ts +52 -0
  347. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  348. package/dist/queries/findCallsInFunction.js +135 -0
  349. package/dist/queries/findContainingFunction.d.ts +45 -0
  350. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  351. package/dist/queries/findContainingFunction.js +54 -0
  352. package/dist/queries/index.d.ts +14 -0
  353. package/dist/queries/index.d.ts.map +1 -0
  354. package/dist/queries/index.js +11 -0
  355. package/dist/queries/traceValues.d.ts +70 -0
  356. package/dist/queries/traceValues.d.ts.map +1 -0
  357. package/dist/queries/traceValues.js +299 -0
  358. package/dist/queries/types.d.ts +163 -0
  359. package/dist/queries/types.d.ts.map +1 -0
  360. package/dist/queries/types.js +9 -0
  361. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  362. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  363. package/dist/schema/GraphSchemaExtractor.js +124 -0
  364. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  365. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  366. package/dist/schema/InterfaceSchemaExtractor.js +112 -0
  367. package/dist/schema/index.d.ts +5 -0
  368. package/dist/schema/index.d.ts.map +1 -0
  369. package/dist/schema/index.js +2 -0
  370. package/dist/storage/backends/RFDBServerBackend.d.ts +21 -34
  371. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  372. package/dist/storage/backends/RFDBServerBackend.js +72 -62
  373. package/dist/storage/backends/typeValidation.d.ts.map +1 -1
  374. package/dist/storage/backends/typeValidation.js +1 -0
  375. package/dist/validation/PathValidator.d.ts +1 -2
  376. package/dist/validation/PathValidator.d.ts.map +1 -1
  377. package/package.json +3 -3
  378. package/src/Orchestrator.ts +272 -27
  379. package/src/config/ConfigLoader.ts +354 -0
  380. package/src/config/index.ts +5 -0
  381. package/src/core/ASTWorker.ts +143 -139
  382. package/src/core/CoverageAnalyzer.ts +243 -0
  383. package/src/core/FileExplainer.ts +179 -0
  384. package/src/core/FileNodeManager.ts +100 -0
  385. package/src/core/GraphFreshnessChecker.ts +143 -0
  386. package/src/core/HashUtils.ts +48 -0
  387. package/src/core/IncrementalReanalyzer.ts +192 -0
  388. package/src/core/NodeFactory.ts +470 -23
  389. package/src/core/ScopeTracker.ts +154 -0
  390. package/src/core/SemanticId.ts +192 -0
  391. package/src/core/VersionManager.ts +3 -2
  392. package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
  393. package/src/core/nodes/ArrayLiteralNode.ts +66 -0
  394. package/src/core/nodes/BranchNode.ts +113 -0
  395. package/src/core/nodes/CallSiteNode.ts +64 -4
  396. package/src/core/nodes/CaseNode.ts +123 -0
  397. package/src/core/nodes/ClassNode.ts +67 -4
  398. package/src/core/nodes/ConstantNode.ts +5 -4
  399. package/src/core/nodes/ConstructorCallNode.ts +217 -0
  400. package/src/core/nodes/DatabaseQueryNode.ts +5 -1
  401. package/src/core/nodes/DecoratorNode.ts +92 -0
  402. package/src/core/nodes/EnumNode.ts +87 -0
  403. package/src/core/nodes/EventListenerNode.ts +7 -4
  404. package/src/core/nodes/ExportNode.ts +74 -4
  405. package/src/core/nodes/ExpressionNode.ts +232 -0
  406. package/src/core/nodes/ExternalModuleNode.ts +65 -0
  407. package/src/core/nodes/ExternalStdioNode.ts +17 -9
  408. package/src/core/nodes/FunctionNode.ts +101 -1
  409. package/src/core/nodes/HttpRequestNode.ts +7 -4
  410. package/src/core/nodes/ImportNode.ts +62 -13
  411. package/src/core/nodes/InterfaceNode.ts +92 -0
  412. package/src/core/nodes/IssueNode.ts +177 -0
  413. package/src/core/nodes/LiteralNode.ts +5 -4
  414. package/src/core/nodes/MethodCallNode.ts +70 -4
  415. package/src/core/nodes/MethodNode.ts +68 -3
  416. package/src/core/nodes/ModuleNode.ts +50 -0
  417. package/src/core/nodes/NetworkRequestNode.ts +77 -0
  418. package/src/core/nodes/ObjectLiteralNode.ts +66 -0
  419. package/src/core/nodes/ParameterNode.ts +4 -3
  420. package/src/core/nodes/ScopeNode.ts +65 -0
  421. package/src/core/nodes/TypeNode.ts +79 -0
  422. package/src/core/nodes/VariableDeclarationNode.ts +58 -4
  423. package/src/core/nodes/index.ts +21 -1
  424. package/src/data/builtins/BuiltinRegistry.ts +124 -0
  425. package/src/data/builtins/definitions.ts +267 -0
  426. package/src/data/builtins/index.ts +10 -0
  427. package/src/data/builtins/jsGlobals.ts +28 -0
  428. package/src/data/builtins/types.ts +36 -0
  429. package/src/data/globals/definitions.ts +156 -0
  430. package/src/data/globals/index.ts +66 -0
  431. package/src/diagnostics/DiagnosticCollector.ts +163 -0
  432. package/src/diagnostics/DiagnosticReporter.ts +324 -0
  433. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  434. package/src/diagnostics/index.ts +16 -0
  435. package/src/errors/GrafemaError.ts +239 -0
  436. package/src/index.ts +193 -1
  437. package/src/logging/Logger.ts +152 -0
  438. package/src/plugins/Plugin.ts +42 -0
  439. package/src/plugins/analysis/DatabaseAnalyzer.ts +16 -8
  440. package/src/plugins/analysis/ExpressAnalyzer.ts +33 -19
  441. package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
  442. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +76 -36
  443. package/src/plugins/analysis/FetchAnalyzer.ts +232 -21
  444. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
  445. package/src/plugins/analysis/JSASTAnalyzer.ts +4265 -587
  446. package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
  447. package/src/plugins/analysis/RustAnalyzer.ts +16 -11
  448. package/src/plugins/analysis/SQLiteAnalyzer.ts +13 -7
  449. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
  450. package/src/plugins/analysis/SocketIOAnalyzer.ts +151 -28
  451. package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
  452. package/src/plugins/analysis/ast/GraphBuilder.ts +1947 -327
  453. package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
  454. package/src/plugins/analysis/ast/types.ts +596 -6
  455. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
  456. package/src/plugins/analysis/ast/utils/index.ts +12 -0
  457. package/src/plugins/analysis/ast/utils/location.ts +103 -0
  458. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +19 -8
  459. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +924 -83
  460. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
  461. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +234 -93
  462. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +124 -9
  463. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
  464. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +294 -49
  465. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
  466. package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
  467. package/src/plugins/discovery/WorkspaceDiscovery.ts +184 -0
  468. package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
  469. package/src/plugins/discovery/workspaces/detector.ts +63 -0
  470. package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
  471. package/src/plugins/discovery/workspaces/index.ts +23 -0
  472. package/src/plugins/discovery/workspaces/parsers.ts +99 -0
  473. package/src/plugins/enrichment/AliasTracker.ts +35 -8
  474. package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
  475. package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
  476. package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
  477. package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
  478. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +84 -27
  479. package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
  480. package/src/plugins/enrichment/MethodCallResolver.ts +39 -13
  481. package/src/plugins/enrichment/MountPointResolver.ts +208 -195
  482. package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
  483. package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
  484. package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
  485. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +209 -189
  486. package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
  487. package/src/plugins/indexing/JSModuleIndexer.ts +140 -34
  488. package/src/plugins/indexing/RustModuleIndexer.ts +8 -7
  489. package/src/plugins/validation/BrokenImportValidator.ts +325 -0
  490. package/src/plugins/validation/CallResolverValidator.ts +131 -110
  491. package/src/plugins/validation/DataFlowValidator.ts +88 -67
  492. package/src/plugins/validation/EvalBanValidator.ts +17 -16
  493. package/src/plugins/validation/GraphConnectivityValidator.ts +58 -24
  494. package/src/plugins/validation/NodeCreationValidator.ts +554 -0
  495. package/src/plugins/validation/SQLInjectionValidator.ts +63 -20
  496. package/src/plugins/validation/ShadowingDetector.ts +6 -5
  497. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
  498. package/src/plugins/vcs/GitPlugin.ts +40 -12
  499. package/src/plugins/vcs/VCSPlugin.ts +7 -5
  500. package/src/queries/README.md +46 -0
  501. package/src/queries/findCallsInFunction.ts +206 -0
  502. package/src/queries/findContainingFunction.ts +83 -0
  503. package/src/queries/index.ts +23 -0
  504. package/src/queries/traceValues.ts +398 -0
  505. package/src/queries/types.ts +187 -0
  506. package/src/schema/GraphSchemaExtractor.ts +177 -0
  507. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  508. package/src/schema/index.ts +5 -0
  509. package/src/storage/backends/RFDBServerBackend.ts +100 -98
  510. package/src/storage/backends/typeValidation.ts +1 -0
  511. package/src/validation/PathValidator.ts +1 -1
  512. package/dist/core/AnalysisWorker.d.ts +0 -14
  513. package/dist/core/AnalysisWorker.d.ts.map +0 -1
  514. package/dist/core/AnalysisWorker.js +0 -307
  515. package/dist/core/ParallelAnalyzer.d.ts +0 -120
  516. package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
  517. package/dist/core/ParallelAnalyzer.js +0 -331
  518. package/dist/core/QueueWorker.d.ts +0 -12
  519. package/dist/core/QueueWorker.d.ts.map +0 -1
  520. package/dist/core/QueueWorker.js +0 -567
  521. package/dist/core/RFDBClient.d.ts +0 -179
  522. package/dist/core/RFDBClient.d.ts.map +0 -1
  523. package/dist/core/RFDBClient.js +0 -429
  524. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
  525. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
  526. package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
  527. package/src/core/AnalysisWorker.ts +0 -410
  528. package/src/core/ParallelAnalyzer.ts +0 -476
  529. package/src/core/QueueWorker.ts +0 -780
  530. 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
- }