@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,151 @@
1
+ /**
2
+ * Type Validation Utilities
3
+ *
4
+ * Levenshtein distance and typo detection for node/edge types.
5
+ * Extracted from ReginaFlowBackend for use in multiple contexts.
6
+ */
7
+
8
+ // Known node types - source of truth for validation
9
+ // Initial set of types, dynamically expanded as new valid types are encountered
10
+ const KNOWN_NODE_TYPES = new Set<string>([
11
+ // Base types
12
+ 'FUNCTION', 'CLASS', 'METHOD', 'VARIABLE', 'PARAMETER', 'CONSTANT', 'LITERAL',
13
+ 'MODULE', 'IMPORT', 'EXPORT', 'CALL', 'PROJECT', 'SERVICE', 'FILE', 'SCOPE',
14
+ 'EXTERNAL', 'EXTERNAL_MODULE', 'SIDE_EFFECT',
15
+ // Namespaced types - HTTP/Express
16
+ 'http:route', 'http:request',
17
+ 'express:router', 'express:middleware', 'express:mount',
18
+ // Namespaced types - Socket.IO
19
+ 'socketio:emit', 'socketio:on', 'socketio:namespace', 'socketio:room',
20
+ // Namespaced types - Database
21
+ 'db:query', 'db:connection', 'db:table',
22
+ // Namespaced types - File System
23
+ 'fs:read', 'fs:write', 'fs:operation',
24
+ // Namespaced types - Network/IO
25
+ 'net:request', 'net:stdio',
26
+ // Namespaced types - Events
27
+ 'event:listener', 'event:emit',
28
+ // Service layer types (legacy, to be refactored)
29
+ 'SERVICE_CLASS', 'SERVICE_INSTANCE', 'SERVICE_REGISTRATION', 'SERVICE_USAGE',
30
+ // Guarantees/Invariants
31
+ 'GUARANTEE',
32
+ ]);
33
+
34
+ // Store initial types for reset
35
+ const INITIAL_NODE_TYPES = [...KNOWN_NODE_TYPES];
36
+
37
+ // Known edge types - source of truth for validation
38
+ const KNOWN_EDGE_TYPES = new Set<string>([
39
+ // Base edge types
40
+ 'UNKNOWN', 'CONTAINS', 'DEPENDS_ON', 'CALLS', 'EXTENDS', 'IMPLEMENTS',
41
+ 'USES', 'DEFINES', 'IMPORTS', 'EXPORTS', 'ROUTES_TO', 'HAS_SCOPE',
42
+ 'CAPTURES', 'MODIFIES', 'DECLARES', 'WRITES_TO', 'INSTANCE_OF',
43
+ 'HAS_CALLBACK', 'IMPORTS_FROM', 'HANDLED_BY', 'MAKES_REQUEST',
44
+ 'PASSES_ARGUMENT', 'ASSIGNED_FROM', 'EXPORTS_TO', 'MOUNTS', 'EXPOSES',
45
+ 'INTERACTS_WITH', 'CALLS_API', 'LISTENS_TO', 'JOINS_ROOM', 'EMITS_EVENT',
46
+ 'RETURNS', 'RECEIVES_ARGUMENT', 'READS_FROM', 'THROWS', 'REGISTERS_VIEW',
47
+ 'GOVERNS', 'VIOLATES', 'HAS_PARAMETER', 'DERIVES_FROM',
48
+ ]);
49
+
50
+ // Store initial edge types for reset
51
+ const INITIAL_EDGE_TYPES = [...KNOWN_EDGE_TYPES];
52
+
53
+ export interface TypoCheckResult {
54
+ isTooSimilar: boolean;
55
+ similarTo: string | null;
56
+ }
57
+
58
+ /**
59
+ * Levenshtein distance for typo detection
60
+ */
61
+ export function levenshtein(a: string, b: string): number {
62
+ if (a.length === 0) return b.length;
63
+ if (b.length === 0) return a.length;
64
+ const matrix: number[][] = [];
65
+ for (let i = 0; i <= b.length; i++) matrix[i] = [i];
66
+ for (let j = 0; j <= a.length; j++) matrix[0][j] = j;
67
+ for (let i = 1; i <= b.length; i++) {
68
+ for (let j = 1; j <= a.length; j++) {
69
+ matrix[i][j] = b[i - 1] === a[j - 1]
70
+ ? matrix[i - 1][j - 1]
71
+ : Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
72
+ }
73
+ }
74
+ return matrix[b.length][a.length];
75
+ }
76
+
77
+ /**
78
+ * Check if a type is too similar to any existing known type (possible typo)
79
+ */
80
+ export function checkTypoAgainstKnownTypes(newType: string): TypoCheckResult {
81
+ const newTypeLower = newType.toLowerCase();
82
+ for (const known of KNOWN_NODE_TYPES) {
83
+ const dist = levenshtein(newTypeLower, known.toLowerCase());
84
+ if (dist > 0 && dist <= 2) {
85
+ return { isTooSimilar: true, similarTo: known };
86
+ }
87
+ }
88
+ return { isTooSimilar: false, similarTo: null };
89
+ }
90
+
91
+ /**
92
+ * Reset KNOWN_NODE_TYPES to initial state (for testing)
93
+ */
94
+ export function resetKnownNodeTypes(): void {
95
+ KNOWN_NODE_TYPES.clear();
96
+ for (const t of INITIAL_NODE_TYPES) {
97
+ KNOWN_NODE_TYPES.add(t);
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Get current known node types (for testing/debugging)
103
+ */
104
+ export function getKnownNodeTypes(): Set<string> {
105
+ return new Set(KNOWN_NODE_TYPES);
106
+ }
107
+
108
+ /**
109
+ * Check if an edge type is too similar to any existing known edge type (possible typo)
110
+ */
111
+ export function checkTypoAgainstKnownEdgeTypes(newType: string): TypoCheckResult {
112
+ const newTypeLower = newType.toLowerCase();
113
+ for (const known of KNOWN_EDGE_TYPES) {
114
+ const dist = levenshtein(newTypeLower, known.toLowerCase());
115
+ if (dist > 0 && dist <= 2) {
116
+ return { isTooSimilar: true, similarTo: known };
117
+ }
118
+ }
119
+ return { isTooSimilar: false, similarTo: null };
120
+ }
121
+
122
+ /**
123
+ * Reset KNOWN_EDGE_TYPES to initial state (for testing)
124
+ */
125
+ export function resetKnownEdgeTypes(): void {
126
+ KNOWN_EDGE_TYPES.clear();
127
+ for (const t of INITIAL_EDGE_TYPES) {
128
+ KNOWN_EDGE_TYPES.add(t);
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Get current known edge types (for testing/debugging)
134
+ */
135
+ export function getKnownEdgeTypes(): Set<string> {
136
+ return new Set(KNOWN_EDGE_TYPES);
137
+ }
138
+
139
+ /**
140
+ * Add a new node type to the known types set
141
+ */
142
+ export function addKnownNodeType(nodeType: string): void {
143
+ KNOWN_NODE_TYPES.add(nodeType);
144
+ }
145
+
146
+ /**
147
+ * Add a new edge type to the known types set
148
+ */
149
+ export function addKnownEdgeType(edgeType: string): void {
150
+ KNOWN_EDGE_TYPES.add(edgeType);
151
+ }
@@ -0,0 +1,342 @@
1
+ /**
2
+ * PathValidator - проверяет безопасность рефакторинга через path equivalence
3
+ *
4
+ * КОНЦЕПЦИЯ:
5
+ * 1. Трассируем пути от main версии функции до endpoints (DATABASE, HTTP, EXTERNAL)
6
+ * 2. Трассируем пути от __local версии до тех же endpoints
7
+ * 3. Сравниваем: если все пути сохранились → safe, если нет → breaking change
8
+ *
9
+ * ENDPOINTS (критические точки):
10
+ * - DATABASE_QUERY: запросы к БД
11
+ * - HTTP_REQUEST: HTTP запросы
12
+ * - EXTERNAL: внешние сервисы
13
+ * - FILESYSTEM: операции с файлами
14
+ * - MODULE_BOUNDARY: exported functions
15
+ * - SIDE_EFFECTS: console.log, process.exit и т.д.
16
+ */
17
+
18
+ import type { GraphBackend } from '@grafema/types';
19
+ import type { BaseNodeRecord } from '@grafema/types';
20
+
21
+ /**
22
+ * Edge record from backend
23
+ */
24
+ interface EdgeRecord {
25
+ src: string;
26
+ dst: string | number;
27
+ type: string;
28
+ }
29
+
30
+ /**
31
+ * Node with optional version field for version tracking
32
+ */
33
+ interface VersionedNode extends BaseNodeRecord {
34
+ version?: string;
35
+ }
36
+
37
+ /**
38
+ * Validation result
39
+ */
40
+ export interface PathValidationResult {
41
+ safe: boolean;
42
+ severity: 'info' | 'warning' | 'error';
43
+ message: string;
44
+ deleted?: boolean;
45
+ missing?: EndpointDiff[];
46
+ added?: EndpointDiff[];
47
+ endpointsChecked: number;
48
+ }
49
+
50
+ /**
51
+ * Endpoint diff info
52
+ */
53
+ interface EndpointDiff {
54
+ type: string;
55
+ name: string;
56
+ reason: string;
57
+ }
58
+
59
+ /**
60
+ * Endpoint node from graph
61
+ */
62
+ interface EndpointNode extends VersionedNode {
63
+ query?: string;
64
+ service?: string;
65
+ exported?: boolean;
66
+ }
67
+
68
+ export class PathValidator {
69
+ private backend: GraphBackend;
70
+
71
+ constructor(backend: GraphBackend) {
72
+ this.backend = backend;
73
+ }
74
+
75
+ /**
76
+ * Проверить эквивалентность путей между main и __local версиями функции
77
+ *
78
+ * @param functionName - Имя функции
79
+ * @param file - Путь к файлу
80
+ * @returns Результат валидации
81
+ */
82
+ async checkPathEquivalence(functionName: string, file: string): Promise<PathValidationResult> {
83
+ // 1. Найти все версии функции (main и __local) по имени
84
+ const allVersions: VersionedNode[] = [];
85
+ for await (const node of this.backend.queryNodes({ type: 'FUNCTION', name: functionName })) {
86
+ // Дополнительно фильтруем по file если он указан
87
+ if (node.file === file || node.file === undefined) {
88
+ allVersions.push(node as VersionedNode);
89
+ }
90
+ }
91
+
92
+ const mainFunction = allVersions.find(n => n.version === 'main');
93
+ const localFunction = allVersions.find(n => n.version === '__local');
94
+
95
+ // 3. Обработать случаи: deleted, added, exists
96
+ if (!mainFunction && localFunction) {
97
+ // Новая функция
98
+ return {
99
+ safe: true,
100
+ severity: 'info',
101
+ message: `New function added: ${functionName}`,
102
+ endpointsChecked: 0
103
+ };
104
+ }
105
+
106
+ if (mainFunction && !localFunction) {
107
+ // Функция удалена
108
+ return {
109
+ safe: false,
110
+ severity: 'error',
111
+ deleted: true,
112
+ message: `Function deleted: ${functionName}`,
113
+ endpointsChecked: 0
114
+ };
115
+ }
116
+
117
+ if (!mainFunction && !localFunction) {
118
+ // Функция не найдена вообще
119
+ return {
120
+ safe: false,
121
+ severity: 'error',
122
+ message: `Function not found: ${functionName}`,
123
+ endpointsChecked: 0
124
+ };
125
+ }
126
+
127
+ // 4. Получить все endpoints для main версии
128
+ const mainEndpoints = await this._getReachableEndpoints(mainFunction!.id);
129
+
130
+ // 5. Получить все endpoints для local версии
131
+ const localEndpoints = await this._getReachableEndpoints(localFunction!.id);
132
+
133
+ // 6. Сравнить endpoints
134
+ const comparison = this._compareEndpoints(mainEndpoints, localEndpoints);
135
+
136
+ // 7. Определить результат
137
+ if (comparison.missing.length > 0) {
138
+ // Breaking change - критические endpoints удалены
139
+ return {
140
+ safe: false,
141
+ severity: 'error',
142
+ message: `Breaking change detected: ${comparison.missing.length} endpoint(s) no longer reachable`,
143
+ missing: comparison.missing,
144
+ endpointsChecked: mainEndpoints.length
145
+ };
146
+ }
147
+
148
+ if (comparison.added.length > 0) {
149
+ // Warning - новые endpoints добавлены
150
+ return {
151
+ safe: true,
152
+ severity: 'warning',
153
+ message: `New behavior added: ${comparison.added.length} new endpoint(s) reachable`,
154
+ added: comparison.added,
155
+ endpointsChecked: mainEndpoints.length
156
+ };
157
+ }
158
+
159
+ // Safe refactoring - все endpoints сохранены
160
+ return {
161
+ safe: true,
162
+ severity: 'info',
163
+ message: `Safe refactoring: all endpoints preserved`,
164
+ endpointsChecked: mainEndpoints.length
165
+ };
166
+ }
167
+
168
+ /**
169
+ * Получить все достижимые endpoints из данной ноды
170
+ *
171
+ * @param nodeId - ID начальной ноды
172
+ * @returns Массив endpoint нод
173
+ */
174
+ private async _getReachableEndpoints(nodeId: string): Promise<EndpointNode[]> {
175
+ // Трассируем пути через CALLS рёбра (BFS до глубины 10)
176
+ // Endpoints - это ноды типа: DATABASE_QUERY, HTTP_REQUEST, EXTERNAL, FILESYSTEM, SIDE_EFFECT
177
+ // Или exported FUNCTION (MODULE_BOUNDARY)
178
+
179
+ const CALLS_EDGE_TYPE = 'CALLS';
180
+ const MAX_DEPTH = 10;
181
+
182
+ // BFS для поиска всех достижимых нод
183
+ const visited = new Set<string>();
184
+ const queue: Array<{ id: string; depth: number }> = [{ id: nodeId, depth: 0 }];
185
+ const endpoints: EndpointNode[] = [];
186
+
187
+ while (queue.length > 0) {
188
+ const { id, depth } = queue.shift()!;
189
+
190
+ if (visited.has(id) || depth > MAX_DEPTH) {
191
+ continue;
192
+ }
193
+ visited.add(id);
194
+
195
+ // Получить ноду и проверить является ли она endpoint
196
+ const node = await this.backend.getNode(id);
197
+ if (node && id !== nodeId) {
198
+ // Check for endpoint types (new namespaced types + legacy names for backward compat)
199
+ const endpointTypes = [
200
+ 'db:query', 'DATABASE_QUERY',
201
+ 'http:request', 'HTTP_REQUEST',
202
+ 'EXTERNAL',
203
+ 'fs:operation', 'FILESYSTEM',
204
+ 'SIDE_EFFECT',
205
+ 'net:request', 'EXTERNAL_NETWORK',
206
+ 'net:stdio', 'EXTERNAL_STDIO'
207
+ ];
208
+ const isEndpoint =
209
+ endpointTypes.includes(node.type) ||
210
+ (node.type === 'FUNCTION' && (node as EndpointNode).exported === true);
211
+
212
+ if (isEndpoint) {
213
+ endpoints.push(node as EndpointNode);
214
+ }
215
+ }
216
+
217
+ // Получить исходящие CALLS рёбра
218
+ const outgoingEdges = await this.backend.getOutgoingEdges(id, [CALLS_EDGE_TYPE]);
219
+ for (const edge of outgoingEdges) {
220
+ const dstId = typeof edge.dst === 'string' ? edge.dst : String(edge.dst);
221
+ if (!visited.has(dstId)) {
222
+ queue.push({ id: dstId, depth: depth + 1 });
223
+ }
224
+ }
225
+ }
226
+
227
+ return endpoints;
228
+ }
229
+
230
+ /**
231
+ * Сравнить два набора endpoints
232
+ *
233
+ * @param mainEndpoints - Endpoints из main версии
234
+ * @param localEndpoints - Endpoints из __local версии
235
+ * @returns { missing: [], added: [] }
236
+ */
237
+ private _compareEndpoints(mainEndpoints: EndpointNode[], localEndpoints: EndpointNode[]): { missing: EndpointDiff[]; added: EndpointDiff[] } {
238
+ const missing: EndpointDiff[] = [];
239
+ const added: EndpointDiff[] = [];
240
+
241
+ // Создаём Map для быстрого поиска
242
+ const localMap = new Map<string, EndpointNode>();
243
+ localEndpoints.forEach(ep => {
244
+ const key = this._getEndpointKey(ep);
245
+ localMap.set(key, ep);
246
+ });
247
+
248
+ const mainMap = new Map<string, EndpointNode>();
249
+ mainEndpoints.forEach(ep => {
250
+ const key = this._getEndpointKey(ep);
251
+ mainMap.set(key, ep);
252
+ });
253
+
254
+ // Находим missing endpoints (есть в main, но нет в local)
255
+ for (const [key, endpoint] of mainMap.entries()) {
256
+ if (!localMap.has(key)) {
257
+ missing.push({
258
+ type: endpoint.type,
259
+ name: (endpoint.name as string) || endpoint.query || 'unknown',
260
+ reason: this._getMissingReason(endpoint)
261
+ });
262
+ }
263
+ }
264
+
265
+ // Находим added endpoints (есть в local, но нет в main)
266
+ for (const [key, endpoint] of localMap.entries()) {
267
+ if (!mainMap.has(key)) {
268
+ added.push({
269
+ type: endpoint.type,
270
+ name: (endpoint.name as string) || endpoint.query || 'unknown',
271
+ reason: this._getAddedReason(endpoint)
272
+ });
273
+ }
274
+ }
275
+
276
+ return { missing, added };
277
+ }
278
+
279
+ /**
280
+ * Получить уникальный ключ для endpoint
281
+ *
282
+ * @param endpoint - Endpoint нода
283
+ * @returns Уникальный ключ
284
+ */
285
+ private _getEndpointKey(endpoint: EndpointNode): string {
286
+ if (endpoint.type === 'DATABASE_QUERY' || endpoint.type === 'db:query') {
287
+ // Для DB query используем query text
288
+ return `db:query:${endpoint.query || endpoint.name}`;
289
+ }
290
+
291
+ if (endpoint.type === 'FUNCTION' && endpoint.exported) {
292
+ // Для exported functions используем stable ID
293
+ return `${endpoint.type}:${endpoint.name}:${endpoint.file}`;
294
+ }
295
+
296
+ if (endpoint.type === 'EXTERNAL') {
297
+ // Для external используем service + name
298
+ return `${endpoint.type}:${endpoint.service}:${endpoint.name}`;
299
+ }
300
+
301
+ // Для остальных используем type + name
302
+ return `${endpoint.type}:${endpoint.name}`;
303
+ }
304
+
305
+ /**
306
+ * Получить reason для missing endpoint
307
+ */
308
+ private _getMissingReason(endpoint: EndpointNode): string {
309
+ if (endpoint.type === 'DATABASE_QUERY') {
310
+ return `Database query no longer executed: ${endpoint.query}`;
311
+ }
312
+
313
+ if (endpoint.type === 'FUNCTION' && endpoint.exported) {
314
+ return `Exported function no longer called: ${endpoint.name}`;
315
+ }
316
+
317
+ if (endpoint.type === 'EXTERNAL') {
318
+ return `External service no longer called: ${endpoint.service}/${endpoint.name}`;
319
+ }
320
+
321
+ return `Endpoint no longer reachable: ${endpoint.name}`;
322
+ }
323
+
324
+ /**
325
+ * Получить reason для added endpoint
326
+ */
327
+ private _getAddedReason(endpoint: EndpointNode): string {
328
+ if (endpoint.type === 'DATABASE_QUERY') {
329
+ return `New database query added: ${endpoint.query}`;
330
+ }
331
+
332
+ if (endpoint.type === 'FUNCTION' && endpoint.exported) {
333
+ return `New call to exported function: ${endpoint.name}`;
334
+ }
335
+
336
+ if (endpoint.type === 'EXTERNAL') {
337
+ return `New external service call: ${endpoint.service}/${endpoint.name}`;
338
+ }
339
+
340
+ return `New endpoint reachable: ${endpoint.name}`;
341
+ }
342
+ }