@grafema/core 0.1.0-alpha.1

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 (402) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +76 -0
  3. package/dist/Orchestrator.d.ts +142 -0
  4. package/dist/Orchestrator.d.ts.map +1 -0
  5. package/dist/Orchestrator.js +481 -0
  6. package/dist/api/GraphAPI.d.ts +87 -0
  7. package/dist/api/GraphAPI.d.ts.map +1 -0
  8. package/dist/api/GraphAPI.js +210 -0
  9. package/dist/api/GuaranteeAPI.d.ts +147 -0
  10. package/dist/api/GuaranteeAPI.d.ts.map +1 -0
  11. package/dist/api/GuaranteeAPI.js +288 -0
  12. package/dist/core/ASTWorker.d.ts +133 -0
  13. package/dist/core/ASTWorker.d.ts.map +1 -0
  14. package/dist/core/ASTWorker.js +352 -0
  15. package/dist/core/ASTWorkerPool.d.ts +85 -0
  16. package/dist/core/ASTWorkerPool.d.ts.map +1 -0
  17. package/dist/core/ASTWorkerPool.js +207 -0
  18. package/dist/core/AnalysisQueue.d.ts +104 -0
  19. package/dist/core/AnalysisQueue.d.ts.map +1 -0
  20. package/dist/core/AnalysisQueue.js +299 -0
  21. package/dist/core/AnalysisWorker.d.ts +14 -0
  22. package/dist/core/AnalysisWorker.d.ts.map +1 -0
  23. package/dist/core/AnalysisWorker.js +307 -0
  24. package/dist/core/GraphBackend.d.ts +156 -0
  25. package/dist/core/GraphBackend.d.ts.map +1 -0
  26. package/dist/core/GraphBackend.js +85 -0
  27. package/dist/core/GuaranteeManager.d.ts +230 -0
  28. package/dist/core/GuaranteeManager.d.ts.map +1 -0
  29. package/dist/core/GuaranteeManager.js +352 -0
  30. package/dist/core/ManifestStore.d.ts +71 -0
  31. package/dist/core/ManifestStore.d.ts.map +1 -0
  32. package/dist/core/ManifestStore.js +146 -0
  33. package/dist/core/NodeFactory.d.ts +160 -0
  34. package/dist/core/NodeFactory.d.ts.map +1 -0
  35. package/dist/core/NodeFactory.js +137 -0
  36. package/dist/core/NodeId.d.ts +88 -0
  37. package/dist/core/NodeId.d.ts.map +1 -0
  38. package/dist/core/NodeId.js +170 -0
  39. package/dist/core/ParallelAnalyzer.d.ts +120 -0
  40. package/dist/core/ParallelAnalyzer.d.ts.map +1 -0
  41. package/dist/core/ParallelAnalyzer.js +331 -0
  42. package/dist/core/PriorityQueue.d.ts +106 -0
  43. package/dist/core/PriorityQueue.d.ts.map +1 -0
  44. package/dist/core/PriorityQueue.js +168 -0
  45. package/dist/core/Profiler.d.ts +75 -0
  46. package/dist/core/Profiler.d.ts.map +1 -0
  47. package/dist/core/Profiler.js +149 -0
  48. package/dist/core/QueueWorker.d.ts +12 -0
  49. package/dist/core/QueueWorker.d.ts.map +1 -0
  50. package/dist/core/QueueWorker.js +567 -0
  51. package/dist/core/RFDBClient.d.ts +179 -0
  52. package/dist/core/RFDBClient.d.ts.map +1 -0
  53. package/dist/core/RFDBClient.js +429 -0
  54. package/dist/core/Task.d.ts +56 -0
  55. package/dist/core/Task.d.ts.map +1 -0
  56. package/dist/core/Task.js +85 -0
  57. package/dist/core/TaskTypes.d.ts +20 -0
  58. package/dist/core/TaskTypes.d.ts.map +1 -0
  59. package/dist/core/TaskTypes.js +10 -0
  60. package/dist/core/VersionManager.d.ts +166 -0
  61. package/dist/core/VersionManager.d.ts.map +1 -0
  62. package/dist/core/VersionManager.js +237 -0
  63. package/dist/core/WorkerPool.d.ts +82 -0
  64. package/dist/core/WorkerPool.d.ts.map +1 -0
  65. package/dist/core/WorkerPool.js +109 -0
  66. package/dist/core/nodes/CallSiteNode.d.ts +26 -0
  67. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -0
  68. package/dist/core/nodes/CallSiteNode.js +44 -0
  69. package/dist/core/nodes/ClassNode.d.ts +25 -0
  70. package/dist/core/nodes/ClassNode.d.ts.map +1 -0
  71. package/dist/core/nodes/ClassNode.js +40 -0
  72. package/dist/core/nodes/ConstantNode.d.ts +24 -0
  73. package/dist/core/nodes/ConstantNode.d.ts.map +1 -0
  74. package/dist/core/nodes/ConstantNode.js +39 -0
  75. package/dist/core/nodes/DatabaseQueryNode.d.ts +22 -0
  76. package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -0
  77. package/dist/core/nodes/DatabaseQueryNode.js +37 -0
  78. package/dist/core/nodes/EntrypointNode.d.ts +102 -0
  79. package/dist/core/nodes/EntrypointNode.d.ts.map +1 -0
  80. package/dist/core/nodes/EntrypointNode.js +119 -0
  81. package/dist/core/nodes/EventListenerNode.d.ts +25 -0
  82. package/dist/core/nodes/EventListenerNode.d.ts.map +1 -0
  83. package/dist/core/nodes/EventListenerNode.js +39 -0
  84. package/dist/core/nodes/ExportNode.d.ts +26 -0
  85. package/dist/core/nodes/ExportNode.d.ts.map +1 -0
  86. package/dist/core/nodes/ExportNode.js +40 -0
  87. package/dist/core/nodes/ExternalStdioNode.d.ts +17 -0
  88. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -0
  89. package/dist/core/nodes/ExternalStdioNode.js +26 -0
  90. package/dist/core/nodes/FunctionNode.d.ts +27 -0
  91. package/dist/core/nodes/FunctionNode.d.ts.map +1 -0
  92. package/dist/core/nodes/FunctionNode.js +53 -0
  93. package/dist/core/nodes/GuaranteeNode.d.ts +76 -0
  94. package/dist/core/nodes/GuaranteeNode.d.ts.map +1 -0
  95. package/dist/core/nodes/GuaranteeNode.js +117 -0
  96. package/dist/core/nodes/HttpRequestNode.d.ts +24 -0
  97. package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -0
  98. package/dist/core/nodes/HttpRequestNode.js +38 -0
  99. package/dist/core/nodes/ImportNode.d.ts +27 -0
  100. package/dist/core/nodes/ImportNode.d.ts.map +1 -0
  101. package/dist/core/nodes/ImportNode.js +43 -0
  102. package/dist/core/nodes/LiteralNode.d.ts +26 -0
  103. package/dist/core/nodes/LiteralNode.d.ts.map +1 -0
  104. package/dist/core/nodes/LiteralNode.js +40 -0
  105. package/dist/core/nodes/MethodCallNode.d.ts +29 -0
  106. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -0
  107. package/dist/core/nodes/MethodCallNode.js +47 -0
  108. package/dist/core/nodes/MethodNode.d.ts +29 -0
  109. package/dist/core/nodes/MethodNode.d.ts.map +1 -0
  110. package/dist/core/nodes/MethodNode.js +44 -0
  111. package/dist/core/nodes/ModuleNode.d.ts +29 -0
  112. package/dist/core/nodes/ModuleNode.d.ts.map +1 -0
  113. package/dist/core/nodes/ModuleNode.js +49 -0
  114. package/dist/core/nodes/NodeKind.d.ts +91 -0
  115. package/dist/core/nodes/NodeKind.d.ts.map +1 -0
  116. package/dist/core/nodes/NodeKind.js +146 -0
  117. package/dist/core/nodes/ParameterNode.d.ts +26 -0
  118. package/dist/core/nodes/ParameterNode.d.ts.map +1 -0
  119. package/dist/core/nodes/ParameterNode.js +43 -0
  120. package/dist/core/nodes/ScopeNode.d.ts +32 -0
  121. package/dist/core/nodes/ScopeNode.d.ts.map +1 -0
  122. package/dist/core/nodes/ScopeNode.js +47 -0
  123. package/dist/core/nodes/ServiceNode.d.ts +44 -0
  124. package/dist/core/nodes/ServiceNode.d.ts.map +1 -0
  125. package/dist/core/nodes/ServiceNode.js +49 -0
  126. package/dist/core/nodes/VariableDeclarationNode.d.ts +22 -0
  127. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -0
  128. package/dist/core/nodes/VariableDeclarationNode.js +38 -0
  129. package/dist/core/nodes/index.d.ts +25 -0
  130. package/dist/core/nodes/index.d.ts.map +1 -0
  131. package/dist/core/nodes/index.js +30 -0
  132. package/dist/index.d.ts +57 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +63 -0
  135. package/dist/plugins/Plugin.d.ts +44 -0
  136. package/dist/plugins/Plugin.d.ts.map +1 -0
  137. package/dist/plugins/Plugin.js +46 -0
  138. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts +23 -0
  139. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -0
  140. package/dist/plugins/analysis/DatabaseAnalyzer.js +260 -0
  141. package/dist/plugins/analysis/ExpressAnalyzer.d.ts +19 -0
  142. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -0
  143. package/dist/plugins/analysis/ExpressAnalyzer.js +306 -0
  144. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts +17 -0
  145. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -0
  146. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +308 -0
  147. package/dist/plugins/analysis/FetchAnalyzer.d.ts +38 -0
  148. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -0
  149. package/dist/plugins/analysis/FetchAnalyzer.js +344 -0
  150. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +65 -0
  151. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -0
  152. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +472 -0
  153. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +84 -0
  154. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -0
  155. package/dist/plugins/analysis/JSASTAnalyzer.js +1378 -0
  156. package/dist/plugins/analysis/ReactAnalyzer.d.ts +90 -0
  157. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -0
  158. package/dist/plugins/analysis/ReactAnalyzer.js +1153 -0
  159. package/dist/plugins/analysis/RustAnalyzer.d.ts +13 -0
  160. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -0
  161. package/dist/plugins/analysis/RustAnalyzer.js +259 -0
  162. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts +21 -0
  163. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -0
  164. package/dist/plugins/analysis/SQLiteAnalyzer.js +317 -0
  165. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts +35 -0
  166. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -0
  167. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +303 -0
  168. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +33 -0
  169. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -0
  170. package/dist/plugins/analysis/SocketIOAnalyzer.js +283 -0
  171. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts +27 -0
  172. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -0
  173. package/dist/plugins/analysis/SystemDbAnalyzer.js +211 -0
  174. package/dist/plugins/analysis/ast/ConditionParser.d.ts +85 -0
  175. package/dist/plugins/analysis/ast/ConditionParser.d.ts.map +1 -0
  176. package/dist/plugins/analysis/ast/ConditionParser.js +277 -0
  177. package/dist/plugins/analysis/ast/ExpressionEvaluator.d.ts +15 -0
  178. package/dist/plugins/analysis/ast/ExpressionEvaluator.d.ts.map +1 -0
  179. package/dist/plugins/analysis/ast/ExpressionEvaluator.js +91 -0
  180. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +77 -0
  181. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -0
  182. package/dist/plugins/analysis/ast/GraphBuilder.js +1077 -0
  183. package/dist/plugins/analysis/ast/OxcAdapter.d.ts +41 -0
  184. package/dist/plugins/analysis/ast/OxcAdapter.d.ts.map +1 -0
  185. package/dist/plugins/analysis/ast/OxcAdapter.js +40 -0
  186. package/dist/plugins/analysis/ast/types.d.ts +346 -0
  187. package/dist/plugins/analysis/ast/types.d.ts.map +1 -0
  188. package/dist/plugins/analysis/ast/types.js +4 -0
  189. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +93 -0
  190. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -0
  191. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +24 -0
  192. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +77 -0
  193. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -0
  194. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +377 -0
  195. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +27 -0
  196. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -0
  197. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +232 -0
  198. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +25 -0
  199. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -0
  200. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +172 -0
  201. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +29 -0
  202. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -0
  203. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +180 -0
  204. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +14 -0
  205. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -0
  206. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +200 -0
  207. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +45 -0
  208. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -0
  209. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +150 -0
  210. package/dist/plugins/analysis/ast/visitors/index.d.ts +17 -0
  211. package/dist/plugins/analysis/ast/visitors/index.d.ts.map +1 -0
  212. package/dist/plugins/analysis/ast/visitors/index.js +13 -0
  213. package/dist/plugins/discovery/DiscoveryPlugin.d.ts +34 -0
  214. package/dist/plugins/discovery/DiscoveryPlugin.d.ts.map +1 -0
  215. package/dist/plugins/discovery/DiscoveryPlugin.js +26 -0
  216. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts +26 -0
  217. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -0
  218. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +79 -0
  219. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts +14 -0
  220. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -0
  221. package/dist/plugins/discovery/SimpleProjectDiscovery.js +65 -0
  222. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +19 -0
  223. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +1 -0
  224. package/dist/plugins/discovery/ZonServiceDiscovery.js +204 -0
  225. package/dist/plugins/enrichment/AliasTracker.d.ts +40 -0
  226. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -0
  227. package/dist/plugins/enrichment/AliasTracker.js +290 -0
  228. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +30 -0
  229. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -0
  230. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +135 -0
  231. package/dist/plugins/enrichment/ImportExportLinker.d.ts +30 -0
  232. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -0
  233. package/dist/plugins/enrichment/ImportExportLinker.js +176 -0
  234. package/dist/plugins/enrichment/InstanceOfResolver.d.ts +21 -0
  235. package/dist/plugins/enrichment/InstanceOfResolver.d.ts.map +1 -0
  236. package/dist/plugins/enrichment/InstanceOfResolver.js +117 -0
  237. package/dist/plugins/enrichment/MethodCallResolver.d.ts +41 -0
  238. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -0
  239. package/dist/plugins/enrichment/MethodCallResolver.js +252 -0
  240. package/dist/plugins/enrichment/MountPointResolver.d.ts +26 -0
  241. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -0
  242. package/dist/plugins/enrichment/MountPointResolver.js +189 -0
  243. package/dist/plugins/enrichment/PrefixEvaluator.d.ts +89 -0
  244. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -0
  245. package/dist/plugins/enrichment/PrefixEvaluator.js +415 -0
  246. package/dist/plugins/enrichment/RustFFIEnricher.d.ts +25 -0
  247. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -0
  248. package/dist/plugins/enrichment/RustFFIEnricher.js +170 -0
  249. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +114 -0
  250. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -0
  251. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +464 -0
  252. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts +27 -0
  253. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -0
  254. package/dist/plugins/indexing/IncrementalModuleIndexer.js +238 -0
  255. package/dist/plugins/indexing/JSModuleIndexer.d.ts +33 -0
  256. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -0
  257. package/dist/plugins/indexing/JSModuleIndexer.js +299 -0
  258. package/dist/plugins/indexing/RustModuleIndexer.d.ts +28 -0
  259. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -0
  260. package/dist/plugins/indexing/RustModuleIndexer.js +140 -0
  261. package/dist/plugins/indexing/ServiceDetector.d.ts +46 -0
  262. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -0
  263. package/dist/plugins/indexing/ServiceDetector.js +164 -0
  264. package/dist/plugins/validation/CallResolverValidator.d.ts +23 -0
  265. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -0
  266. package/dist/plugins/validation/CallResolverValidator.js +108 -0
  267. package/dist/plugins/validation/DataFlowValidator.d.ts +24 -0
  268. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -0
  269. package/dist/plugins/validation/DataFlowValidator.js +148 -0
  270. package/dist/plugins/validation/EvalBanValidator.d.ts +25 -0
  271. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -0
  272. package/dist/plugins/validation/EvalBanValidator.js +123 -0
  273. package/dist/plugins/validation/GraphConnectivityValidator.d.ts +11 -0
  274. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -0
  275. package/dist/plugins/validation/GraphConnectivityValidator.js +135 -0
  276. package/dist/plugins/validation/SQLInjectionValidator.d.ts +43 -0
  277. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -0
  278. package/dist/plugins/validation/SQLInjectionValidator.js +251 -0
  279. package/dist/plugins/validation/ShadowingDetector.d.ts +26 -0
  280. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -0
  281. package/dist/plugins/validation/ShadowingDetector.js +119 -0
  282. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts +21 -0
  283. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -0
  284. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +151 -0
  285. package/dist/plugins/vcs/GitPlugin.d.ts +84 -0
  286. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -0
  287. package/dist/plugins/vcs/GitPlugin.js +295 -0
  288. package/dist/plugins/vcs/VCSPlugin.d.ts +133 -0
  289. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -0
  290. package/dist/plugins/vcs/VCSPlugin.js +82 -0
  291. package/dist/plugins/vcs/index.d.ts +10 -0
  292. package/dist/plugins/vcs/index.d.ts.map +1 -0
  293. package/dist/plugins/vcs/index.js +18 -0
  294. package/dist/storage/backends/RFDBServerBackend.d.ts +258 -0
  295. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -0
  296. package/dist/storage/backends/RFDBServerBackend.js +565 -0
  297. package/dist/storage/backends/typeValidation.d.ts +47 -0
  298. package/dist/storage/backends/typeValidation.d.ts.map +1 -0
  299. package/dist/storage/backends/typeValidation.js +137 -0
  300. package/dist/validation/PathValidator.d.ts +81 -0
  301. package/dist/validation/PathValidator.d.ts.map +1 -0
  302. package/dist/validation/PathValidator.js +251 -0
  303. package/package.json +57 -0
  304. package/src/.rfguard/current-session.txt +1 -0
  305. package/src/Orchestrator.ts +673 -0
  306. package/src/api/GraphAPI.ts +305 -0
  307. package/src/api/GuaranteeAPI.ts +401 -0
  308. package/src/core/ASTWorker.ts +567 -0
  309. package/src/core/ASTWorkerPool.ts +299 -0
  310. package/src/core/AnalysisQueue.ts +447 -0
  311. package/src/core/AnalysisWorker.ts +410 -0
  312. package/src/core/GraphBackend.ts +265 -0
  313. package/src/core/GuaranteeManager.ts +581 -0
  314. package/src/core/ManifestStore.ts +196 -0
  315. package/src/core/NodeFactory.ts +274 -0
  316. package/src/core/NodeId.ts +257 -0
  317. package/src/core/ParallelAnalyzer.ts +476 -0
  318. package/src/core/PriorityQueue.ts +227 -0
  319. package/src/core/Profiler.ts +188 -0
  320. package/src/core/QueueWorker.ts +780 -0
  321. package/src/core/Task.ts +107 -0
  322. package/src/core/TaskTypes.ts +40 -0
  323. package/src/core/VersionManager.ts +404 -0
  324. package/src/core/WorkerPool.ts +180 -0
  325. package/src/core/nodes/CallSiteNode.ts +72 -0
  326. package/src/core/nodes/ClassNode.ts +69 -0
  327. package/src/core/nodes/ConstantNode.ts +63 -0
  328. package/src/core/nodes/DatabaseQueryNode.ts +60 -0
  329. package/src/core/nodes/EntrypointNode.ts +164 -0
  330. package/src/core/nodes/EventListenerNode.ts +64 -0
  331. package/src/core/nodes/ExportNode.ts +71 -0
  332. package/src/core/nodes/ExternalStdioNode.ts +36 -0
  333. package/src/core/nodes/FunctionNode.ts +78 -0
  334. package/src/core/nodes/GuaranteeNode.ts +162 -0
  335. package/src/core/nodes/HttpRequestNode.ts +63 -0
  336. package/src/core/nodes/ImportNode.ts +75 -0
  337. package/src/core/nodes/LiteralNode.ts +67 -0
  338. package/src/core/nodes/MethodCallNode.ts +79 -0
  339. package/src/core/nodes/MethodNode.ts +78 -0
  340. package/src/core/nodes/ModuleNode.ts +74 -0
  341. package/src/core/nodes/NodeKind.ts +171 -0
  342. package/src/core/nodes/ParameterNode.ts +73 -0
  343. package/src/core/nodes/ScopeNode.ts +80 -0
  344. package/src/core/nodes/ServiceNode.ts +86 -0
  345. package/src/core/nodes/VariableDeclarationNode.ts +60 -0
  346. package/src/core/nodes/index.ts +49 -0
  347. package/src/index.ts +93 -0
  348. package/src/plugins/Plugin.ts +74 -0
  349. package/src/plugins/analysis/DatabaseAnalyzer.ts +322 -0
  350. package/src/plugins/analysis/ExpressAnalyzer.ts +401 -0
  351. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +414 -0
  352. package/src/plugins/analysis/FetchAnalyzer.ts +441 -0
  353. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +686 -0
  354. package/src/plugins/analysis/JSASTAnalyzer.ts +1680 -0
  355. package/src/plugins/analysis/ReactAnalyzer.ts +1368 -0
  356. package/src/plugins/analysis/RustAnalyzer.ts +438 -0
  357. package/src/plugins/analysis/SQLiteAnalyzer.ts +388 -0
  358. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +429 -0
  359. package/src/plugins/analysis/SocketIOAnalyzer.ts +395 -0
  360. package/src/plugins/analysis/SystemDbAnalyzer.ts +284 -0
  361. package/src/plugins/analysis/ast/ConditionParser.ts +333 -0
  362. package/src/plugins/analysis/ast/ExpressionEvaluator.ts +117 -0
  363. package/src/plugins/analysis/ast/GraphBuilder.ts +1371 -0
  364. package/src/plugins/analysis/ast/OxcAdapter.ts +63 -0
  365. package/src/plugins/analysis/ast/types.ts +400 -0
  366. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +137 -0
  367. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +528 -0
  368. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +339 -0
  369. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +273 -0
  370. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +259 -0
  371. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +235 -0
  372. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +268 -0
  373. package/src/plugins/analysis/ast/visitors/index.ts +36 -0
  374. package/src/plugins/discovery/DiscoveryPlugin.ts +50 -0
  375. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +117 -0
  376. package/src/plugins/discovery/SimpleProjectDiscovery.ts +102 -0
  377. package/src/plugins/enrichment/AliasTracker.ts +399 -0
  378. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +192 -0
  379. package/src/plugins/enrichment/ImportExportLinker.ts +221 -0
  380. package/src/plugins/enrichment/InstanceOfResolver.ts +165 -0
  381. package/src/plugins/enrichment/MethodCallResolver.ts +333 -0
  382. package/src/plugins/enrichment/MountPointResolver.ts +264 -0
  383. package/src/plugins/enrichment/PrefixEvaluator.ts +527 -0
  384. package/src/plugins/enrichment/RustFFIEnricher.ts +218 -0
  385. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +682 -0
  386. package/src/plugins/indexing/IncrementalModuleIndexer.ts +287 -0
  387. package/src/plugins/indexing/JSModuleIndexer.ts +374 -0
  388. package/src/plugins/indexing/RustModuleIndexer.ts +160 -0
  389. package/src/plugins/indexing/ServiceDetector.ts +230 -0
  390. package/src/plugins/validation/CallResolverValidator.ts +170 -0
  391. package/src/plugins/validation/DataFlowValidator.ts +233 -0
  392. package/src/plugins/validation/EvalBanValidator.ts +175 -0
  393. package/src/plugins/validation/GraphConnectivityValidator.ts +201 -0
  394. package/src/plugins/validation/SQLInjectionValidator.ts +363 -0
  395. package/src/plugins/validation/ShadowingDetector.ts +173 -0
  396. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +203 -0
  397. package/src/plugins/vcs/GitPlugin.ts +344 -0
  398. package/src/plugins/vcs/VCSPlugin.ts +190 -0
  399. package/src/plugins/vcs/index.ts +32 -0
  400. package/src/storage/backends/RFDBServerBackend.ts +687 -0
  401. package/src/storage/backends/typeValidation.ts +151 -0
  402. package/src/validation/PathValidator.ts +342 -0
@@ -0,0 +1,472 @@
1
+ /**
2
+ * IncrementalAnalysisPlugin - плагин для инкрементального анализа
3
+ *
4
+ * НАЗНАЧЕНИЕ:
5
+ * Обнаруживает изменённые файлы через VCS (Git) и создаёт __local версии
6
+ * только для изменённых нод, используя fine-grained merge
7
+ *
8
+ * АЛГОРИТМ:
9
+ * 1. Получить список изменённых файлов из VCS
10
+ * 2. Для каждого файла:
11
+ * - Парсить новый код
12
+ * - Получить main версию нод
13
+ * - Классифицировать: added/modified/deleted/unchanged
14
+ * - Создать __local версии только для added/modified
15
+ * 3. Переанализировать изменённые ноды для создания связей
16
+ *
17
+ * ВЕРСИИ:
18
+ * - "main" - committed код (git HEAD)
19
+ * - "__local" - uncommitted изменения
20
+ */
21
+ import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
22
+ import { versionManager } from '../../core/VersionManager.js';
23
+ import { VCSPluginFactory } from '../vcs/index.js';
24
+ import { parse } from '@babel/parser';
25
+ import traverseModule from '@babel/traverse';
26
+ import { readFile } from 'fs/promises';
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ const traverse = traverseModule.default || traverseModule;
29
+ export class IncrementalAnalysisPlugin extends Plugin {
30
+ vcsPlugin = null;
31
+ get metadata() {
32
+ return {
33
+ name: 'IncrementalAnalysisPlugin',
34
+ phase: 'ANALYSIS',
35
+ priority: 85, // Запускается после JSModuleIndexer (90) но перед JSASTAnalyzer (80)
36
+ creates: {
37
+ nodes: ['FUNCTION', 'CLASS', 'VARIABLE_DECLARATION'], // Создаёт __local версии
38
+ edges: ['REPLACES', 'CALLS', 'USES']
39
+ },
40
+ dependencies: ['JSModuleIndexer']
41
+ };
42
+ }
43
+ async initialize(context) {
44
+ // Инициализируем VCS плагин
45
+ const manifest = context.manifest;
46
+ this.vcsPlugin = await VCSPluginFactory.detect({
47
+ rootPath: manifest?.projectPath
48
+ });
49
+ if (!this.vcsPlugin) {
50
+ console.log('[IncrementalAnalysis] No VCS detected, skipping incremental analysis');
51
+ }
52
+ else {
53
+ console.log(`[IncrementalAnalysis] Using VCS: ${this.vcsPlugin.metadata.name}`);
54
+ }
55
+ }
56
+ async execute(context) {
57
+ try {
58
+ const { graph } = context;
59
+ const manifest = context.manifest;
60
+ const projectPath = manifest?.projectPath ?? '';
61
+ // Если нет VCS - пропускаем инкрементальный анализ
62
+ if (!this.vcsPlugin) {
63
+ return createSuccessResult({ nodes: 0, edges: 0 }, {
64
+ skipped: true,
65
+ reason: 'No VCS detected'
66
+ });
67
+ }
68
+ // Проверяем наличие uncommitted изменений
69
+ const hasChanges = await this.vcsPlugin.hasUncommittedChanges();
70
+ if (!hasChanges) {
71
+ console.log('[IncrementalAnalysis] No uncommitted changes detected');
72
+ return createSuccessResult({ nodes: 0, edges: 0 }, {
73
+ skipped: true,
74
+ reason: 'No uncommitted changes'
75
+ });
76
+ }
77
+ // Получаем список изменённых файлов
78
+ const changedFiles = (await this.vcsPlugin.getChangedFiles());
79
+ console.log(`[IncrementalAnalysis] All changed files:`, changedFiles.map(f => f.path));
80
+ const jsFiles = changedFiles.filter(file => file.path.endsWith('.js') || file.path.endsWith('.mjs') || file.path.endsWith('.cjs'));
81
+ if (jsFiles.length === 0) {
82
+ console.log('[IncrementalAnalysis] No JavaScript files changed');
83
+ return createSuccessResult({ nodes: 0, edges: 0 }, {
84
+ skipped: true,
85
+ reason: 'No JS files changed'
86
+ });
87
+ }
88
+ console.log(`[IncrementalAnalysis] Found ${jsFiles.length} changed JS files:`, jsFiles.map(f => f.path));
89
+ let totalNodesCreated = 0;
90
+ let totalEdgesCreated = 0;
91
+ // Обрабатываем каждый изменённый файл
92
+ for (const fileInfo of jsFiles) {
93
+ const result = await this.processChangedFile(fileInfo, projectPath, graph);
94
+ totalNodesCreated += result.nodesCreated;
95
+ totalEdgesCreated += result.edgesCreated;
96
+ }
97
+ console.log(`[IncrementalAnalysis] Created ${totalNodesCreated} __local nodes, ${totalEdgesCreated} edges`);
98
+ return createSuccessResult({ nodes: totalNodesCreated, edges: totalEdgesCreated }, {
99
+ filesProcessed: jsFiles.length,
100
+ changedFiles: jsFiles.map(f => ({ path: f.path, status: f.status }))
101
+ });
102
+ }
103
+ catch (error) {
104
+ console.error('[IncrementalAnalysis] Error:', error);
105
+ return createErrorResult(error);
106
+ }
107
+ }
108
+ /**
109
+ * Обработать один изменённый файл
110
+ */
111
+ async processChangedFile(fileInfo, projectPath, graph) {
112
+ const { path: relativePath, status } = fileInfo;
113
+ // relativePath может начинаться с / или быть относительным
114
+ const fullPath = relativePath.startsWith('/') ? relativePath : `${projectPath}/${relativePath}`;
115
+ console.log(`[IncrementalAnalysis] Processing ${relativePath} (${status})`);
116
+ // Если файл удалён - ничего не делаем (main версия остаётся, __local не создаём)
117
+ if (status === 'deleted') {
118
+ console.log(` → File deleted, keeping main version only`);
119
+ return { nodesCreated: 0, edgesCreated: 0 };
120
+ }
121
+ // Выполняем fine-grained merge
122
+ const result = await this.finegrainedMerge(fullPath, graph);
123
+ console.log(` → Added: ${result.added}, Modified: ${result.modified}, Unchanged: ${result.unchanged}, Deleted: ${result.deleted}`);
124
+ return {
125
+ nodesCreated: result.added + result.modified,
126
+ edgesCreated: result.edgesCreated || 0
127
+ };
128
+ }
129
+ /**
130
+ * Fine-grained merge - ключевая функция инкрементального анализа
131
+ */
132
+ async finegrainedMerge(filePath, graph) {
133
+ // 1. Парсим новое содержимое файла
134
+ const newContent = await readFile(filePath, 'utf-8');
135
+ const newNodes = await this.extractTopLevelNodes(newContent, filePath);
136
+ console.log(` → Parsed ${newNodes.length} nodes from new content`);
137
+ // 2. Получаем существующие main ноды для этого файла
138
+ const mainNodes = await graph.getNodesByVersion('main', {
139
+ file: filePath
140
+ });
141
+ const mainTopLevel = mainNodes.filter(node => ['FUNCTION', 'CLASS', 'VARIABLE_DECLARATION', 'MODULE'].includes(node.type));
142
+ console.log(` → Found ${mainTopLevel.length} existing main nodes`);
143
+ // 3. Классифицируем изменения
144
+ const changes = versionManager.classifyChanges(mainTopLevel, newNodes);
145
+ console.log(` → Classification: +${changes.added.length} ~${changes.modified.length} =${changes.unchanged.length} -${changes.deleted.length}`);
146
+ // 4. Создаём __local версии для added/modified нод
147
+ let edgesCreated = 0;
148
+ // 4a. ADDED nodes - просто создаём с версией __local
149
+ for (const node of changes.added) {
150
+ const enrichedNode = versionManager.enrichNodeWithVersion(node, '__local');
151
+ await graph.addNode(enrichedNode);
152
+ }
153
+ // 4b. MODIFIED nodes - создаём __local версию + REPLACES ребро
154
+ for (const { old: oldNode, new: newNode } of changes.modified) {
155
+ const mainNodeId = versionManager.generateVersionedId(oldNode, 'main');
156
+ const enrichedNode = versionManager.enrichNodeWithVersion(newNode, '__local', {
157
+ replacesId: mainNodeId
158
+ });
159
+ await graph.addNode(enrichedNode);
160
+ // Создаём REPLACES ребро
161
+ const replacesEdge = versionManager.createReplacesEdge(enrichedNode.id, mainNodeId);
162
+ console.log(` [REPLACES] ${newNode.name}: ${enrichedNode.id} → ${mainNodeId}`);
163
+ await graph.addEdge({
164
+ type: replacesEdge.type,
165
+ src: replacesEdge.fromId,
166
+ dst: replacesEdge.toId
167
+ });
168
+ edgesCreated++;
169
+ }
170
+ // 4c. UNCHANGED nodes - не создаём __local версию (используется main)
171
+ // 4d. DELETED nodes - не создаём __local версию (main остаётся, показывая что было удалено)
172
+ // 5. Переанализируем изменённые ноды для создания связей (CALLS, USES)
173
+ const nodesToReanalyze = [...changes.added, ...changes.modified.map(m => m.new)];
174
+ if (nodesToReanalyze.length > 0) {
175
+ const reanalyzeResult = await this.reanalyzeNodes(nodesToReanalyze, filePath, '__local', graph);
176
+ edgesCreated += reanalyzeResult.edgesCreated;
177
+ }
178
+ return {
179
+ added: changes.added.length,
180
+ modified: changes.modified.length,
181
+ unchanged: changes.unchanged.length,
182
+ deleted: changes.deleted.length,
183
+ edgesCreated
184
+ };
185
+ }
186
+ /**
187
+ * Извлечь top-level ноды из файла
188
+ */
189
+ async extractTopLevelNodes(content, filePath) {
190
+ const nodes = [];
191
+ try {
192
+ // Парсим с помощью Babel
193
+ const ast = parse(content, {
194
+ sourceType: 'module',
195
+ plugins: [
196
+ 'jsx',
197
+ 'typescript',
198
+ 'decorators-legacy',
199
+ 'classProperties',
200
+ 'objectRestSpread',
201
+ 'optionalChaining',
202
+ 'nullishCoalescingOperator'
203
+ ]
204
+ });
205
+ // Обходим AST и извлекаем top-level декларации
206
+ traverse(ast, {
207
+ // Function Declarations (включая export function)
208
+ FunctionDeclaration: (path) => {
209
+ // Только top-level функции (родитель - Program или ExportNamedDeclaration)
210
+ const parentType = path.parent.type;
211
+ if (parentType !== 'Program' &&
212
+ parentType !== 'ExportNamedDeclaration' &&
213
+ parentType !== 'ExportDefaultDeclaration') {
214
+ return;
215
+ }
216
+ const node = path.node;
217
+ nodes.push({
218
+ type: 'FUNCTION',
219
+ name: node.id?.name || 'anonymous',
220
+ file: filePath,
221
+ line: node.loc?.start.line || 0,
222
+ column: node.loc?.start.column || 0,
223
+ params: node.params.map(p => p.name || p.type),
224
+ async: node.async || false,
225
+ exported: this.isExported(path) ||
226
+ parentType === 'ExportNamedDeclaration' ||
227
+ parentType === 'ExportDefaultDeclaration',
228
+ bodyHash: versionManager.calculateBodyHash(content.substring(node.body.start, node.body.end)) ?? undefined
229
+ });
230
+ },
231
+ // Class Declarations
232
+ ClassDeclaration: (path) => {
233
+ const parentType = path.parent.type;
234
+ if (parentType !== 'Program' &&
235
+ parentType !== 'ExportNamedDeclaration' &&
236
+ parentType !== 'ExportDefaultDeclaration') {
237
+ return;
238
+ }
239
+ const node = path.node;
240
+ const methods = node.body.body
241
+ .filter(member => member.type === 'ClassMethod')
242
+ .map(method => method.key.name);
243
+ nodes.push({
244
+ type: 'CLASS',
245
+ name: node.id?.name || 'anonymous',
246
+ file: filePath,
247
+ line: node.loc?.start.line || 0,
248
+ column: node.loc?.start.column || 0,
249
+ methods: methods,
250
+ exported: this.isExported(path) ||
251
+ parentType === 'ExportNamedDeclaration' ||
252
+ parentType === 'ExportDefaultDeclaration',
253
+ extends: node.superClass?.name || undefined
254
+ });
255
+ },
256
+ // Variable Declarations (const, let, var)
257
+ VariableDeclaration: (path) => {
258
+ const parentType = path.parent.type;
259
+ if (parentType !== 'Program' && parentType !== 'ExportNamedDeclaration') {
260
+ return;
261
+ }
262
+ const node = path.node;
263
+ // Каждый declarator - отдельная нода
264
+ for (const declarator of node.declarations) {
265
+ if (declarator.id.type === 'Identifier') {
266
+ nodes.push({
267
+ type: 'VARIABLE_DECLARATION',
268
+ name: declarator.id.name,
269
+ file: filePath,
270
+ line: node.loc?.start.line || 0,
271
+ column: node.loc?.start.column || 0,
272
+ kind: node.kind // const, let, var
273
+ });
274
+ }
275
+ }
276
+ }
277
+ });
278
+ }
279
+ catch (error) {
280
+ console.error(` ✗ Failed to parse ${filePath}:`, error.message);
281
+ }
282
+ return nodes;
283
+ }
284
+ /**
285
+ * Проверить, экспортируется ли нода
286
+ */
287
+ isExported(path) {
288
+ // Проверяем родительский узел
289
+ const parent = path.parent;
290
+ if (parent.type === 'ExportNamedDeclaration' || parent.type === 'ExportDefaultDeclaration') {
291
+ return true;
292
+ }
293
+ // Проверяем наличие export в том же scope
294
+ // export { foo, bar }
295
+ const programPath = path.findParent(p => p.isProgram());
296
+ if (programPath) {
297
+ const nodeName = path.node.id?.name;
298
+ if (!nodeName)
299
+ return false;
300
+ let isExported = false;
301
+ programPath.traverse({
302
+ ExportNamedDeclaration: (exportPath) => {
303
+ const specifiers = exportPath.node.specifiers;
304
+ if (specifiers) {
305
+ for (const spec of specifiers) {
306
+ if (spec.exported?.name === nodeName || spec.local?.name === nodeName) {
307
+ isExported = true;
308
+ }
309
+ }
310
+ }
311
+ }
312
+ });
313
+ return isExported;
314
+ }
315
+ return false;
316
+ }
317
+ /**
318
+ * Переанализировать ноды для создания CALLS/USES edges
319
+ */
320
+ async reanalyzeNodes(nodes, filePath, version, graph) {
321
+ let edgesCreated = 0;
322
+ try {
323
+ // Читаем файл заново
324
+ const content = await readFile(filePath, 'utf-8');
325
+ // Парсим AST
326
+ const ast = parse(content, {
327
+ sourceType: 'module',
328
+ plugins: ['jsx', 'typescript', 'decorators-legacy']
329
+ });
330
+ // Для каждой ноды ищем её в AST и анализируем
331
+ for (const node of nodes) {
332
+ if (node.type === 'FUNCTION') {
333
+ const functionEdges = await this.analyzeFunctionCalls(node, ast, version, graph);
334
+ edgesCreated += functionEdges;
335
+ }
336
+ else if (node.type === 'CLASS') {
337
+ const classEdges = await this.analyzeClassMethods(node, ast, version, graph);
338
+ edgesCreated += classEdges;
339
+ }
340
+ }
341
+ console.log(` → Reanalyzed ${nodes.length} nodes, created ${edgesCreated} edges`);
342
+ return { edgesCreated };
343
+ }
344
+ catch (error) {
345
+ console.error(`[IncrementalAnalysis] Error reanalyzing nodes:`, error);
346
+ return { edgesCreated: 0 };
347
+ }
348
+ }
349
+ /**
350
+ * Анализировать вызовы функций внутри функции
351
+ */
352
+ async analyzeFunctionCalls(functionNode, ast, version, graph) {
353
+ let edgesCreated = 0;
354
+ let functionPath = null;
355
+ // Ищем функцию в AST по имени
356
+ traverse(ast, {
357
+ FunctionDeclaration: (path) => {
358
+ const node = path.node;
359
+ if (node.id?.name === functionNode.name) {
360
+ functionPath = path;
361
+ path.stop();
362
+ }
363
+ },
364
+ // Arrow functions и function expressions в VariableDeclaration
365
+ VariableDeclarator: (path) => {
366
+ const node = path.node;
367
+ if (node.id?.name === functionNode.name) {
368
+ if (node.init?.type === 'ArrowFunctionExpression' ||
369
+ node.init?.type === 'FunctionExpression') {
370
+ functionPath = path.get('init');
371
+ path.stop();
372
+ }
373
+ }
374
+ }
375
+ });
376
+ // Если нашли функцию, анализируем её тело
377
+ if (functionPath) {
378
+ edgesCreated = await this.traverseFunctionBody(functionPath, functionNode, version, graph);
379
+ }
380
+ return edgesCreated;
381
+ }
382
+ /**
383
+ * Traverse function body для поиска CALLS
384
+ */
385
+ async traverseFunctionBody(path, functionNode, version, graph) {
386
+ const callSites = [];
387
+ // Собираем все CallExpression внутри функции
388
+ path.traverse({
389
+ CallExpression: (callPath) => {
390
+ const node = callPath.node;
391
+ const callee = node.callee;
392
+ // Простые вызовы: foo()
393
+ if (callee.type === 'Identifier') {
394
+ callSites.push({
395
+ callee: callee.name,
396
+ type: 'FUNCTION_CALL'
397
+ });
398
+ }
399
+ // Method calls: obj.method()
400
+ else if (callee.type === 'MemberExpression') {
401
+ const objectName = callee.object?.name;
402
+ const methodName = callee.property?.name;
403
+ if (objectName && methodName) {
404
+ callSites.push({
405
+ callee: `${objectName}.${methodName}`,
406
+ object: objectName,
407
+ method: methodName,
408
+ type: 'METHOD_CALL'
409
+ });
410
+ }
411
+ }
412
+ }
413
+ });
414
+ // Создаём CALLS edges для каждого call site (последовательно)
415
+ let edgesCreated = 0;
416
+ for (const callSite of callSites) {
417
+ // Генерируем ID для caller (__local версия)
418
+ const callerId = versionManager.generateVersionedId(functionNode, version);
419
+ // Пытаемся найти callee в графе (сначала __local, потом main)
420
+ const calleeName = callSite.callee.split('.')[0]; // Для method calls берём объект
421
+ const calleeStableId = `FUNCTION:${calleeName}:${functionNode.file}`;
422
+ // Ищем callee в базе
423
+ try {
424
+ const created = await this.findCalleeAndCreateEdge(callerId, calleeStableId, version, graph);
425
+ if (created)
426
+ edgesCreated++;
427
+ }
428
+ catch (err) {
429
+ console.error(`[IncrementalAnalysis] Error creating CALLS edge:`, err);
430
+ }
431
+ }
432
+ return edgesCreated;
433
+ }
434
+ /**
435
+ * Найти callee и создать CALLS edge
436
+ */
437
+ async findCalleeAndCreateEdge(callerId, calleeStableId, version, graph) {
438
+ try {
439
+ // Ищем callee сначала в __local, потом в main
440
+ const calleeVersions = await graph.getNodesByStableId(calleeStableId);
441
+ if (calleeVersions.length === 0) {
442
+ // Callee не найден - возможно это external функция
443
+ return false;
444
+ }
445
+ // Предпочитаем __local версию, если есть
446
+ const calleeNode = calleeVersions.find(n => n.version === '__local') ||
447
+ calleeVersions.find(n => n.version === 'main');
448
+ if (!calleeNode) {
449
+ return false;
450
+ }
451
+ // Создаём CALLS edge
452
+ await graph.addEdge({
453
+ type: 'CALLS',
454
+ src: callerId,
455
+ dst: calleeNode.id
456
+ });
457
+ return true;
458
+ }
459
+ catch (error) {
460
+ console.error(`[IncrementalAnalysis] Error finding callee:`, error);
461
+ return false;
462
+ }
463
+ }
464
+ /**
465
+ * Анализировать методы класса
466
+ */
467
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
468
+ async analyzeClassMethods(_classNode, _ast, _version, _graph) {
469
+ // TODO: реализовать анализ методов класса
470
+ return 0;
471
+ }
472
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * JSASTAnalyzer - плагин для парсинга JavaScript AST
3
+ * Создаёт ноды: FUNCTION, CLASS, METHOD и т.д.
4
+ */
5
+ import type { NodePath } from '@babel/traverse';
6
+ import * as t from '@babel/types';
7
+ import { Plugin } from '../Plugin.js';
8
+ import { type VisitorModule, type VisitorCollections } from './ast/visitors/index.js';
9
+ import type { PluginContext, PluginResult, PluginMetadata, GraphBackend } from '@grafema/types';
10
+ import type { ModuleNode, LiteralInfo, VariableAssignmentInfo, CounterRef, ExtractedVariable } from './ast/types.js';
11
+ /**
12
+ * Context for tracking semantic IDs within a scope hierarchy.
13
+ * Used to generate stable, line-number-independent IDs for SCOPE nodes.
14
+ */
15
+ interface ScopeContext {
16
+ semanticPath: string;
17
+ siblingCounters: Map<string, number>;
18
+ }
19
+ interface AnalysisManifest {
20
+ projectPath: string;
21
+ [key: string]: unknown;
22
+ }
23
+ interface AnalyzeContext extends PluginContext {
24
+ manifest?: AnalysisManifest;
25
+ forceAnalysis?: boolean;
26
+ workerCount?: number;
27
+ onProgress?: (info: Record<string, unknown>) => void;
28
+ }
29
+ export declare class JSASTAnalyzer extends Plugin {
30
+ private graphBuilder;
31
+ private analyzedModules;
32
+ private profiler;
33
+ private _cacheCleared;
34
+ constructor();
35
+ get metadata(): PluginMetadata;
36
+ /**
37
+ * Вычисляет хеш содержимого файла
38
+ */
39
+ calculateFileHash(filePath: string): string | null;
40
+ /**
41
+ * Проверяет нужно ли анализировать модуль (сравнивает хеши)
42
+ */
43
+ shouldAnalyzeModule(module: ModuleNode, graph: GraphBackend, forceAnalysis: boolean): Promise<boolean>;
44
+ execute(context: AnalyzeContext): Promise<PluginResult>;
45
+ /**
46
+ * Extract variable names from destructuring patterns
47
+ * Uses t.isX() type guards to avoid casts
48
+ */
49
+ extractVariableNamesFromPattern(pattern: t.Node | null | undefined, variables?: ExtractedVariable[], propertyPath?: string[]): ExtractedVariable[];
50
+ /**
51
+ * Отслеживает присваивание переменной для data flow анализа
52
+ */
53
+ trackVariableAssignment(initNode: t.Expression | null | undefined, variableId: string, variableName: string, module: VisitorModule, line: number, literals: LiteralInfo[], variableAssignments: VariableAssignmentInfo[], literalCounterRef: CounterRef): void;
54
+ /**
55
+ * Получить все MODULE ноды из графа
56
+ */
57
+ private getModuleNodes;
58
+ /**
59
+ * Анализировать один модуль
60
+ */
61
+ analyzeModule(module: ModuleNode, graph: GraphBackend, projectPath: string): Promise<{
62
+ nodes: number;
63
+ edges: number;
64
+ }>;
65
+ /**
66
+ * Helper to generate semantic ID for a scope and update counters
67
+ */
68
+ private generateSemanticId;
69
+ /**
70
+ * Helper to create child scope context from a semantic ID
71
+ */
72
+ private createChildScopeContext;
73
+ /**
74
+ * Generate a unique anonymous function name within the current scope
75
+ * Uses scopeCtx.siblingCounters to ensure stability across JS/TS versions
76
+ */
77
+ private generateAnonymousName;
78
+ /**
79
+ * Анализирует тело функции и извлекает переменные, вызовы, условные блоки
80
+ */
81
+ analyzeFunctionBody(funcPath: NodePath<t.Function>, parentScopeId: string, module: VisitorModule, collections: VisitorCollections, scopeCtx?: ScopeContext): void;
82
+ }
83
+ export {};
84
+ //# sourceMappingURL=JSASTAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JSASTAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/plugins/analysis/JSASTAnalyzer.ts"],"names":[],"mappings":"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"}