@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,268 @@
1
+ /**
2
+ * VariableVisitor - handles module-level variable declarations
3
+ *
4
+ * Handles:
5
+ * - VariableDeclaration (const, let, var at module level)
6
+ * - NewExpression tracking for class instantiation
7
+ * - Destructuring patterns
8
+ */
9
+
10
+ import type {
11
+ VariableDeclaration,
12
+ VariableDeclarator,
13
+ NewExpression,
14
+ Identifier,
15
+ Node
16
+ } from '@babel/types';
17
+ import type { NodePath } from '@babel/traverse';
18
+ import { ASTVisitor, type VisitorModule, type VisitorCollections, type VisitorHandlers, type CounterRef } from './ASTVisitor.js';
19
+ import { ExpressionEvaluator } from '../ExpressionEvaluator.js';
20
+
21
+ /**
22
+ * Variable info extracted from pattern
23
+ */
24
+ export interface VariableInfo {
25
+ name: string;
26
+ loc: { start: { line: number; column: number } };
27
+ propertyPath?: string[];
28
+ arrayIndex?: number;
29
+ }
30
+
31
+ /**
32
+ * Callback type for extracting variable names from patterns
33
+ */
34
+ export type ExtractVariableNamesCallback = (pattern: Node) => VariableInfo[];
35
+
36
+ /**
37
+ * Callback type for tracking variable assignments
38
+ */
39
+ export type TrackVariableAssignmentCallback = (
40
+ initNode: Node,
41
+ variableId: string,
42
+ variableName: string,
43
+ module: VisitorModule,
44
+ line: number,
45
+ literals: unknown[],
46
+ variableAssignments: unknown[],
47
+ literalCounterRef: CounterRef
48
+ ) => void;
49
+
50
+ /**
51
+ * Variable declaration info
52
+ */
53
+ interface VariableDeclarationInfo {
54
+ id: string;
55
+ type: 'VARIABLE' | 'CONSTANT';
56
+ name: string;
57
+ file: string;
58
+ line: number;
59
+ parentScopeId: string;
60
+ value?: unknown;
61
+ }
62
+
63
+ /**
64
+ * Class instantiation info
65
+ */
66
+ interface ClassInstantiationInfo {
67
+ variableId: string;
68
+ variableName: string;
69
+ className: string;
70
+ line: number;
71
+ parentScopeId: string;
72
+ }
73
+
74
+ /**
75
+ * Literal/expression info for data flow
76
+ */
77
+ interface LiteralExpressionInfo {
78
+ id: string;
79
+ type: 'EXPRESSION';
80
+ expressionType: string;
81
+ path: string;
82
+ baseName: string;
83
+ propertyPath: string[] | null;
84
+ arrayIndex?: number;
85
+ file: string;
86
+ line: number;
87
+ }
88
+
89
+ /**
90
+ * Variable assignment info for data flow
91
+ */
92
+ interface VariableAssignmentInfo {
93
+ variableId: string;
94
+ sourceId: string | null;
95
+ sourceName?: string;
96
+ sourceType: string;
97
+ file?: string;
98
+ }
99
+
100
+ export class VariableVisitor extends ASTVisitor {
101
+ private extractVariableNamesFromPattern: ExtractVariableNamesCallback;
102
+ private trackVariableAssignment: TrackVariableAssignmentCallback;
103
+
104
+ /**
105
+ * @param module - Current module being analyzed
106
+ * @param collections - Must contain arrays and counter refs
107
+ * @param extractVariableNamesFromPattern - Helper for destructuring
108
+ * @param trackVariableAssignment - Helper for data flow tracking
109
+ */
110
+ constructor(
111
+ module: VisitorModule,
112
+ collections: VisitorCollections,
113
+ extractVariableNamesFromPattern: ExtractVariableNamesCallback,
114
+ trackVariableAssignment: TrackVariableAssignmentCallback
115
+ ) {
116
+ super(module, collections);
117
+ this.extractVariableNamesFromPattern = extractVariableNamesFromPattern;
118
+ this.trackVariableAssignment = trackVariableAssignment;
119
+ }
120
+
121
+ getHandlers(): VisitorHandlers {
122
+ const { module } = this;
123
+ const variableDeclarations = this.collections.variableDeclarations ?? [];
124
+ const classInstantiations = this.collections.classInstantiations ?? [];
125
+ const literals = (this.collections.literals ?? []) as unknown[];
126
+ const variableAssignments = this.collections.variableAssignments ?? [];
127
+ const varDeclCounterRef = (this.collections.varDeclCounterRef ?? { value: 0 }) as CounterRef;
128
+ const literalCounterRef = (this.collections.literalCounterRef ?? { value: 0 }) as CounterRef;
129
+
130
+ const extractVariableNamesFromPattern = this.extractVariableNamesFromPattern;
131
+ const trackVariableAssignment = this.trackVariableAssignment;
132
+
133
+ return {
134
+ VariableDeclaration: (path: NodePath) => {
135
+ // Only module-level variables
136
+ const functionParent = path.getFunctionParent();
137
+ if (!functionParent) {
138
+ const varNode = path.node as VariableDeclaration;
139
+ const isConst = varNode.kind === 'const';
140
+
141
+ varNode.declarations.forEach((declarator: VariableDeclarator) => {
142
+ // Extract all variable names from the pattern (handles destructuring)
143
+ const variables = extractVariableNamesFromPattern(declarator.id);
144
+
145
+ variables.forEach((varInfo: VariableInfo) => {
146
+ const literalValue = ExpressionEvaluator.extractLiteralValue(declarator.init);
147
+ const isLiteral = literalValue !== null;
148
+ const isNewExpression = declarator.init && declarator.init.type === 'NewExpression';
149
+
150
+ // For const with literal or NewExpression create CONSTANT
151
+ // For everything else - VARIABLE
152
+ const shouldBeConstant = isConst && (isLiteral || isNewExpression);
153
+
154
+ const varId = shouldBeConstant
155
+ ? `CONSTANT#${varInfo.name}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}:${(varDeclCounterRef as CounterRef).value++}`
156
+ : `VARIABLE#${varInfo.name}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}:${(varDeclCounterRef as CounterRef).value++}`;
157
+
158
+ if (shouldBeConstant) {
159
+ // CONSTANT node
160
+ const constantData: VariableDeclarationInfo = {
161
+ id: varId,
162
+ type: 'CONSTANT',
163
+ name: varInfo.name,
164
+ file: module.file,
165
+ line: varInfo.loc.start.line,
166
+ parentScopeId: module.id
167
+ };
168
+
169
+ if (isLiteral) {
170
+ constantData.value = literalValue;
171
+ }
172
+
173
+ (variableDeclarations as VariableDeclarationInfo[]).push(constantData);
174
+
175
+ // If NewExpression, track for CLASS and INSTANCE_OF
176
+ if (isNewExpression) {
177
+ const newExpr = declarator.init as NewExpression;
178
+ if (newExpr.callee.type === 'Identifier') {
179
+ const className = (newExpr.callee as Identifier).name;
180
+ (classInstantiations as ClassInstantiationInfo[]).push({
181
+ variableId: varId,
182
+ variableName: varInfo.name,
183
+ className: className,
184
+ line: varInfo.loc.start.line,
185
+ parentScopeId: module.id
186
+ });
187
+ }
188
+ }
189
+ } else {
190
+ (variableDeclarations as VariableDeclarationInfo[]).push({
191
+ id: varId,
192
+ type: 'VARIABLE',
193
+ name: varInfo.name,
194
+ file: module.file,
195
+ line: varInfo.loc.start.line,
196
+ parentScopeId: module.id
197
+ });
198
+ }
199
+
200
+ // Track assignment for data flow analysis
201
+ if (declarator.init) {
202
+ // Handle destructuring - create EXPRESSION for property path
203
+ if (varInfo.propertyPath || varInfo.arrayIndex !== undefined) {
204
+ // Create EXPRESSION node for the property access
205
+ const initName = declarator.init.type === 'Identifier'
206
+ ? (declarator.init as Identifier).name
207
+ : 'expr';
208
+ let expressionPath = initName;
209
+
210
+ if (varInfo.propertyPath) {
211
+ expressionPath = `${initName}.${varInfo.propertyPath.join('.')}`;
212
+ } else if (varInfo.arrayIndex !== undefined) {
213
+ expressionPath = `${initName}[${varInfo.arrayIndex}]`;
214
+ }
215
+
216
+ const expressionId = `EXPRESSION#${expressionPath}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}`;
217
+
218
+ // Create EXPRESSION node representing the property access
219
+ (literals as LiteralExpressionInfo[]).push({
220
+ id: expressionId,
221
+ type: 'EXPRESSION',
222
+ expressionType: varInfo.propertyPath ? 'MemberExpression' : 'ArrayAccess',
223
+ path: expressionPath,
224
+ baseName: initName,
225
+ propertyPath: varInfo.propertyPath || null,
226
+ arrayIndex: varInfo.arrayIndex,
227
+ file: module.file,
228
+ line: varInfo.loc.start.line
229
+ });
230
+
231
+ // Create ASSIGNED_FROM edge: VARIABLE -> EXPRESSION
232
+ (variableAssignments as VariableAssignmentInfo[]).push({
233
+ variableId: varId,
234
+ sourceId: expressionId,
235
+ sourceType: 'EXPRESSION'
236
+ });
237
+
238
+ // Also create DERIVES_FROM edge: EXPRESSION -> base variable (if identifier)
239
+ if (declarator.init.type === 'Identifier') {
240
+ (variableAssignments as VariableAssignmentInfo[]).push({
241
+ variableId: expressionId,
242
+ sourceId: null, // Will be resolved by name
243
+ sourceName: (declarator.init as Identifier).name,
244
+ sourceType: 'DERIVES_FROM_VARIABLE',
245
+ file: module.file
246
+ });
247
+ }
248
+ } else {
249
+ // Normal assignment tracking
250
+ trackVariableAssignment(
251
+ declarator.init,
252
+ varId,
253
+ varInfo.name,
254
+ module,
255
+ varInfo.loc.start.line,
256
+ literals,
257
+ variableAssignments,
258
+ literalCounterRef as CounterRef
259
+ );
260
+ }
261
+ }
262
+ });
263
+ });
264
+ }
265
+ }
266
+ };
267
+ }
268
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * AST Visitors for JSASTAnalyzer
3
+ *
4
+ * Each visitor handles specific AST node types and extracts relevant data
5
+ * into shared collections.
6
+ */
7
+
8
+ export { ASTVisitor } from './ASTVisitor.js';
9
+ export type {
10
+ VisitorModule,
11
+ VisitorCollections,
12
+ VisitorHandlers,
13
+ VisitorHandler,
14
+ CounterRef,
15
+ ProcessedNodes,
16
+ VariableAssignment,
17
+ LocationInfo
18
+ } from './ASTVisitor.js';
19
+
20
+ export { ImportExportVisitor } from './ImportExportVisitor.js';
21
+
22
+ export { VariableVisitor } from './VariableVisitor.js';
23
+ export type {
24
+ VariableInfo,
25
+ ExtractVariableNamesCallback,
26
+ TrackVariableAssignmentCallback
27
+ } from './VariableVisitor.js';
28
+
29
+ export { FunctionVisitor } from './FunctionVisitor.js';
30
+ export type { AnalyzeFunctionBodyCallback } from './FunctionVisitor.js';
31
+
32
+ export { ClassVisitor } from './ClassVisitor.js';
33
+
34
+ export { CallExpressionVisitor } from './CallExpressionVisitor.js';
35
+
36
+ export { TypeScriptVisitor } from './TypeScriptVisitor.js';
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Базовый класс для плагинов DISCOVERY фазы
3
+ *
4
+ * DISCOVERY фаза отвечает за:
5
+ * 1. Поиск сервисов/компонентов в проекте
6
+ * 2. Создание SERVICE нод
7
+ * 3. Возврат манифеста для последующих фаз
8
+ */
9
+
10
+ import { Plugin } from '../Plugin.js';
11
+ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
12
+
13
+ export abstract class DiscoveryPlugin extends Plugin {
14
+ constructor(config: Record<string, unknown> = {}) {
15
+ super(config);
16
+ }
17
+
18
+ get metadata(): PluginMetadata {
19
+ return {
20
+ name: this.constructor.name,
21
+ phase: 'DISCOVERY',
22
+ priority: 100,
23
+ creates: {
24
+ nodes: ['SERVICE'],
25
+ edges: []
26
+ },
27
+ dependencies: []
28
+ };
29
+ }
30
+
31
+ /**
32
+ * Выполнить discovery
33
+ *
34
+ * @param context - PluginContext
35
+ * context.projectPath - корневая директория проекта
36
+ *
37
+ * @returns Promise<PluginResult>
38
+ * result.metadata.services - массив найденных сервисов
39
+ * [
40
+ * {
41
+ * id: string,
42
+ * name: string,
43
+ * path: string,
44
+ * type: string,
45
+ * metadata: Object
46
+ * }
47
+ * ]
48
+ */
49
+ abstract execute(context: PluginContext): Promise<PluginResult>;
50
+ }
@@ -0,0 +1,117 @@
1
+ /**
2
+ * MonorepoServiceDiscovery - плагин для поиска сервисов в монорепозитории
3
+ *
4
+ * Стратегия discovery:
5
+ * 1. Ищет директорию pkg/ в корне проекта
6
+ * 2. Каждая поддиректория в pkg/ считается сервисом
7
+ * 3. Создаёт SERVICE ноды для каждого найденного сервиса
8
+ */
9
+
10
+ import { DiscoveryPlugin } from './DiscoveryPlugin.js';
11
+ import { createSuccessResult, createErrorResult } from '../Plugin.js';
12
+ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
13
+ import type { NodeRecord } from '@grafema/types';
14
+ import { readdirSync, statSync, existsSync } from 'fs';
15
+ import { join } from 'path';
16
+
17
+ /**
18
+ * Service info returned in metadata
19
+ */
20
+ interface ServiceInfo {
21
+ id: string;
22
+ name: string;
23
+ path: string;
24
+ type: string;
25
+ }
26
+
27
+ /**
28
+ * Configuration options
29
+ */
30
+ interface MonorepoConfig extends Record<string, unknown> {
31
+ servicesDir?: string;
32
+ excludeDirs?: string[];
33
+ }
34
+
35
+ export class MonorepoServiceDiscovery extends DiscoveryPlugin {
36
+ private servicesDir: string;
37
+ private excludeDirs: string[];
38
+
39
+ constructor(config: MonorepoConfig = {}) {
40
+ super(config);
41
+ // Настройки по умолчанию
42
+ this.servicesDir = config.servicesDir || 'pkg';
43
+ this.excludeDirs = config.excludeDirs || ['.git', 'node_modules', 'build', 'dist'];
44
+ }
45
+
46
+ get metadata(): PluginMetadata {
47
+ return {
48
+ name: 'MonorepoServiceDiscovery',
49
+ phase: 'DISCOVERY',
50
+ priority: 100,
51
+ creates: {
52
+ nodes: ['SERVICE'],
53
+ edges: []
54
+ },
55
+ dependencies: []
56
+ };
57
+ }
58
+
59
+ async execute(context: PluginContext): Promise<PluginResult> {
60
+ const { projectPath, graph } = context;
61
+ const servicesPath = join(projectPath!, this.servicesDir);
62
+
63
+ console.log(`[MonorepoServiceDiscovery] Looking for services in: ${servicesPath}`);
64
+
65
+ if (!existsSync(servicesPath)) {
66
+ return createErrorResult(
67
+ new Error(`Services directory not found: ${servicesPath}`)
68
+ );
69
+ }
70
+
71
+ try {
72
+ const services: ServiceInfo[] = [];
73
+ const entries = readdirSync(servicesPath);
74
+ console.log(`[MonorepoServiceDiscovery] Found ${entries.length} entries`);
75
+
76
+ for (const entry of entries) {
77
+ const fullPath = join(servicesPath, entry);
78
+ const stat = statSync(fullPath);
79
+
80
+ // Пропускаем файлы и исключённые директории
81
+ if (!stat.isDirectory() || this.excludeDirs.includes(entry)) {
82
+ continue;
83
+ }
84
+
85
+ // Создаём SERVICE ноду
86
+ const serviceId = `service:${entry}`;
87
+ // Cast through unknown since we're creating a dynamic service node
88
+ const serviceNode = {
89
+ id: serviceId,
90
+ type: 'SERVICE',
91
+ name: entry,
92
+ path: fullPath,
93
+ metadata: {
94
+ discoveryMethod: 'monorepo',
95
+ servicePath: fullPath
96
+ }
97
+ } as unknown as NodeRecord;
98
+
99
+ await graph.addNode(serviceNode);
100
+
101
+ services.push({
102
+ id: serviceId,
103
+ name: entry,
104
+ path: fullPath,
105
+ type: 'monorepo-service'
106
+ });
107
+ }
108
+
109
+ return createSuccessResult(
110
+ { nodes: services.length, edges: 0 },
111
+ { services }
112
+ );
113
+ } catch (error) {
114
+ return createErrorResult(error as Error);
115
+ }
116
+ }
117
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * SimpleProjectDiscovery - универсальный discovery плагин
3
+ *
4
+ * Находит сервис по package.json в корне проекта.
5
+ * Работает для любого JS/TS проекта.
6
+ * Используется как дефолтный discovery когда нет специфичных плагинов.
7
+ */
8
+
9
+ import { existsSync, readFileSync } from 'fs';
10
+ import { join } from 'path';
11
+ import { NodeFactory } from '../../core/NodeFactory.js';
12
+ import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
13
+ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
14
+
15
+ /**
16
+ * Service info returned in metadata
17
+ */
18
+ interface ServiceInfo {
19
+ id: string;
20
+ name: string;
21
+ path: string;
22
+ type: string;
23
+ metadata: {
24
+ entrypoint: string;
25
+ packageJson: PackageJson;
26
+ };
27
+ }
28
+
29
+ /**
30
+ * Package.json structure (relevant fields)
31
+ */
32
+ interface PackageJson {
33
+ name?: string;
34
+ version?: string;
35
+ main?: string;
36
+ description?: string;
37
+ dependencies?: Record<string, string>;
38
+ }
39
+
40
+ export class SimpleProjectDiscovery extends Plugin {
41
+
42
+ get metadata(): PluginMetadata {
43
+ return {
44
+ name: 'SimpleProjectDiscovery',
45
+ phase: 'DISCOVERY',
46
+ priority: 50, // Lower priority than specialized discovery plugins
47
+ creates: {
48
+ nodes: ['SERVICE'],
49
+ edges: []
50
+ },
51
+ dependencies: []
52
+ };
53
+ }
54
+
55
+ async execute(context: PluginContext): Promise<PluginResult> {
56
+ const { graph } = context;
57
+ // projectPath can be at top level (DISCOVERY phase) or in manifest/config
58
+ const projectPath = context.projectPath || (context.manifest as { projectPath?: string })?.projectPath || context.config?.projectPath;
59
+
60
+ if (!projectPath) {
61
+ return createErrorResult(new Error('projectPath not found in context'));
62
+ }
63
+
64
+ const packageJsonPath = join(projectPath, 'package.json');
65
+
66
+ if (!existsSync(packageJsonPath)) {
67
+ return createErrorResult(new Error(`package.json not found: ${packageJsonPath}`));
68
+ }
69
+
70
+ try {
71
+ const packageJson: PackageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
72
+ const serviceName = packageJson.name || 'unnamed-service';
73
+ const entrypoint = packageJson.main || 'index.js';
74
+
75
+ // Используем NodeFactory для создания SERVICE ноды
76
+ const serviceNode = NodeFactory.createService(serviceName, projectPath, {
77
+ discoveryMethod: 'simple',
78
+ entrypoint,
79
+ version: packageJson.version,
80
+ description: packageJson.description,
81
+ dependencies: Object.keys(packageJson.dependencies || {})
82
+ });
83
+
84
+ await graph.addNode(serviceNode);
85
+
86
+ const service: ServiceInfo = {
87
+ id: serviceNode.id,
88
+ name: serviceName,
89
+ path: join(projectPath, entrypoint),
90
+ type: 'simple-project',
91
+ metadata: {
92
+ entrypoint: join(projectPath, entrypoint),
93
+ packageJson
94
+ }
95
+ };
96
+
97
+ return createSuccessResult({ nodes: 1, edges: 0 }, { services: [service] });
98
+ } catch (error) {
99
+ return createErrorResult(error as Error);
100
+ }
101
+ }
102
+ }