@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,230 @@
1
+ /**
2
+ * GuaranteeManager - управление гарантиями/инвариантами кода
3
+ *
4
+ * GUARANTEE ноды хранят Datalog правила, которые код должен соблюдать.
5
+ * GOVERNS edges связывают гарантии с модулями, к которым они применяются.
6
+ *
7
+ * Workflow:
8
+ * 1. Создать гарантию (create) → GUARANTEE нода + GOVERNS edges
9
+ * 2. Проверить (check) → выполнить Datalog rule, найти нарушения
10
+ * 3. Экспортировать (export) → сохранить в YAML для version control
11
+ * 4. Импортировать (import) → загрузить из YAML в граф
12
+ * 5. Drift detection → сравнить граф с файлом
13
+ */
14
+ /**
15
+ * Severity level for guarantees
16
+ */
17
+ export type GuaranteeSeverity = 'error' | 'warning' | 'info';
18
+ /**
19
+ * Guarantee definition
20
+ */
21
+ export interface GuaranteeDefinition {
22
+ id: string;
23
+ name?: string;
24
+ rule: string;
25
+ severity?: GuaranteeSeverity;
26
+ governs?: string[];
27
+ }
28
+ /**
29
+ * Guarantee node structure
30
+ */
31
+ export interface GuaranteeNode {
32
+ id: string;
33
+ type: 'GUARANTEE';
34
+ name: string;
35
+ rule: string;
36
+ severity: GuaranteeSeverity;
37
+ governs: string[];
38
+ version: 'meta';
39
+ createdAt: number;
40
+ governedModules?: string[];
41
+ }
42
+ /**
43
+ * Edge structure
44
+ */
45
+ export interface GraphEdge {
46
+ type: string;
47
+ src: string;
48
+ dst: string;
49
+ }
50
+ /**
51
+ * Module node
52
+ */
53
+ export interface ModuleNode {
54
+ id: string;
55
+ type: string;
56
+ file?: string;
57
+ }
58
+ /**
59
+ * Violation binding
60
+ */
61
+ export interface ViolationBinding {
62
+ name: string;
63
+ value: string;
64
+ }
65
+ /**
66
+ * Violation result from Datalog
67
+ */
68
+ export interface ViolationResult {
69
+ bindings?: ViolationBinding[];
70
+ }
71
+ /**
72
+ * Enriched violation info
73
+ */
74
+ export interface EnrichedViolation {
75
+ nodeId: string;
76
+ type: string;
77
+ name?: string;
78
+ file?: string;
79
+ line?: number;
80
+ }
81
+ /**
82
+ * Check result for a single guarantee
83
+ */
84
+ export interface GuaranteeCheckResult {
85
+ guaranteeId: string;
86
+ name: string;
87
+ severity: GuaranteeSeverity;
88
+ passed: boolean;
89
+ violationCount: number;
90
+ violations: EnrichedViolation[];
91
+ error: string | null;
92
+ checkDurationMs: number;
93
+ }
94
+ /**
95
+ * Check all result
96
+ */
97
+ export interface CheckAllResult {
98
+ total: number;
99
+ passed: number;
100
+ failed: number;
101
+ errors: number;
102
+ results: GuaranteeCheckResult[];
103
+ }
104
+ /**
105
+ * Import options
106
+ */
107
+ export interface ImportOptions {
108
+ clearExisting?: boolean;
109
+ }
110
+ /**
111
+ * Import result
112
+ */
113
+ export interface ImportResult {
114
+ imported: number;
115
+ skipped: number;
116
+ importedIds: string[];
117
+ skippedIds: string[];
118
+ }
119
+ /**
120
+ * Modified guarantee in drift
121
+ */
122
+ export interface ModifiedGuarantee {
123
+ id: string;
124
+ changes: string[];
125
+ }
126
+ /**
127
+ * Drift summary
128
+ */
129
+ export interface DriftSummary {
130
+ onlyInGraph: number;
131
+ onlyInFile: number;
132
+ modified: number;
133
+ unchanged: number;
134
+ }
135
+ /**
136
+ * Drift result
137
+ */
138
+ export interface DriftResult {
139
+ hasDrift: boolean;
140
+ summary: DriftSummary;
141
+ onlyInGraph: string[];
142
+ onlyInFile: string[];
143
+ modified: ModifiedGuarantee[];
144
+ unchanged: string[];
145
+ }
146
+ /**
147
+ * Export data format
148
+ */
149
+ export interface ExportData {
150
+ version: number;
151
+ exportedAt: string;
152
+ guarantees: Array<{
153
+ id: string;
154
+ name: string;
155
+ rule: string;
156
+ severity: GuaranteeSeverity;
157
+ governs: string[];
158
+ }>;
159
+ }
160
+ /**
161
+ * Graph interface for GuaranteeManager
162
+ */
163
+ export interface GuaranteeGraph {
164
+ addNode(node: GuaranteeNode): Promise<void>;
165
+ getNode(id: string): Promise<GuaranteeNode | ModuleNode | null>;
166
+ deleteNode(id: string): Promise<void>;
167
+ queryNodes(filter: {
168
+ type: string;
169
+ }): AsyncIterable<GuaranteeNode | ModuleNode>;
170
+ addEdge(edge: GraphEdge): Promise<void>;
171
+ deleteEdge(src: string, dst: string, type: string): Promise<void>;
172
+ getOutgoingEdges(nodeId: string, types: string[]): Promise<GraphEdge[]>;
173
+ getIncomingEdges(nodeId: string, types: string[]): Promise<GraphEdge[]>;
174
+ checkGuarantee(rule: string): Promise<ViolationResult[]>;
175
+ }
176
+ export declare class GuaranteeManager {
177
+ private graph;
178
+ private projectPath;
179
+ private guaranteesFile;
180
+ constructor(graph: GuaranteeGraph, projectPath: string);
181
+ /**
182
+ * Создать новую гарантию
183
+ */
184
+ create(guarantee: GuaranteeDefinition): Promise<GuaranteeNode>;
185
+ /**
186
+ * Получить все гарантии из графа
187
+ */
188
+ list(): Promise<GuaranteeNode[]>;
189
+ /**
190
+ * Проверить гарантию
191
+ */
192
+ check(guaranteeId: string): Promise<GuaranteeCheckResult>;
193
+ /**
194
+ * Проверить все гарантии
195
+ */
196
+ checkAll(): Promise<CheckAllResult>;
197
+ /**
198
+ * Удалить гарантию
199
+ */
200
+ delete(guaranteeId: string): Promise<void>;
201
+ /**
202
+ * Экспортировать гарантии в YAML файл
203
+ */
204
+ export(filePath?: string): Promise<string>;
205
+ /**
206
+ * Импортировать гарантии из YAML файла
207
+ */
208
+ import(filePath?: string, options?: ImportOptions): Promise<ImportResult>;
209
+ /**
210
+ * Показать drift между графом и файлом
211
+ */
212
+ drift(filePath?: string): Promise<DriftResult>;
213
+ /**
214
+ * Найти гарантии затронутые изменением ноды
215
+ */
216
+ findAffectedGuarantees(nodeId: string): Promise<string[]>;
217
+ /**
218
+ * Создать GOVERNS edges к модулям по glob patterns
219
+ */
220
+ private _createGovernsEdges;
221
+ /**
222
+ * Проверить есть ли изменения между версиями гарантии
223
+ */
224
+ private _hasChanges;
225
+ /**
226
+ * Описать изменения между версиями
227
+ */
228
+ private _describeChanges;
229
+ }
230
+ //# sourceMappingURL=GuaranteeManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuaranteeManager.d.ts","sourceRoot":"","sources":["../../src/core/GuaranteeManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,352 @@
1
+ /**
2
+ * GuaranteeManager - управление гарантиями/инвариантами кода
3
+ *
4
+ * GUARANTEE ноды хранят Datalog правила, которые код должен соблюдать.
5
+ * GOVERNS edges связывают гарантии с модулями, к которым они применяются.
6
+ *
7
+ * Workflow:
8
+ * 1. Создать гарантию (create) → GUARANTEE нода + GOVERNS edges
9
+ * 2. Проверить (check) → выполнить Datalog rule, найти нарушения
10
+ * 3. Экспортировать (export) → сохранить в YAML для version control
11
+ * 4. Импортировать (import) → загрузить из YAML в граф
12
+ * 5. Drift detection → сравнить граф с файлом
13
+ */
14
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
15
+ import { join } from 'path';
16
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
17
+ import { minimatch } from 'minimatch';
18
+ export class GuaranteeManager {
19
+ graph;
20
+ projectPath;
21
+ guaranteesFile;
22
+ constructor(graph, projectPath) {
23
+ this.graph = graph;
24
+ this.projectPath = projectPath;
25
+ this.guaranteesFile = join(projectPath, '.grafema', 'guarantees.yaml');
26
+ }
27
+ /**
28
+ * Создать новую гарантию
29
+ */
30
+ async create(guarantee) {
31
+ const { id, name, rule, severity = 'warning', governs = ['**/*.js'] } = guarantee;
32
+ if (!id || !rule) {
33
+ throw new Error('Guarantee must have id and rule');
34
+ }
35
+ // Создаём GUARANTEE ноду
36
+ const guaranteeNode = {
37
+ id: `GUARANTEE:${id}`,
38
+ type: 'GUARANTEE',
39
+ name: name || id,
40
+ rule: rule,
41
+ severity: severity,
42
+ governs: governs, // Сохраняем patterns для export
43
+ version: 'meta', // Гарантии в отдельном слое
44
+ createdAt: Date.now()
45
+ };
46
+ await this.graph.addNode(guaranteeNode);
47
+ // Создаём GOVERNS edges к matching модулям
48
+ await this._createGovernsEdges(guaranteeNode.id, governs);
49
+ return guaranteeNode;
50
+ }
51
+ /**
52
+ * Получить все гарантии из графа
53
+ */
54
+ async list() {
55
+ const guarantees = [];
56
+ for await (const node of this.graph.queryNodes({ type: 'GUARANTEE' })) {
57
+ const guaranteeNode = node;
58
+ // Получаем GOVERNS edges для этой гарантии
59
+ const governsEdges = await this.graph.getOutgoingEdges(guaranteeNode.id, ['GOVERNS']);
60
+ const governedModules = [];
61
+ for (const edge of governsEdges) {
62
+ const targetNode = await this.graph.getNode(edge.dst);
63
+ if (targetNode) {
64
+ governedModules.push(targetNode.file || targetNode.id);
65
+ }
66
+ }
67
+ guarantees.push({
68
+ ...guaranteeNode,
69
+ governedModules
70
+ });
71
+ }
72
+ return guarantees;
73
+ }
74
+ /**
75
+ * Проверить гарантию
76
+ */
77
+ async check(guaranteeId) {
78
+ const fullId = guaranteeId.startsWith('GUARANTEE:') ? guaranteeId : `GUARANTEE:${guaranteeId}`;
79
+ const node = (await this.graph.getNode(fullId));
80
+ if (!node) {
81
+ throw new Error(`Guarantee not found: ${guaranteeId}`);
82
+ }
83
+ const startTime = Date.now();
84
+ let violations = [];
85
+ let error = null;
86
+ try {
87
+ violations = await this.graph.checkGuarantee(node.rule);
88
+ }
89
+ catch (e) {
90
+ error = e.message;
91
+ }
92
+ // Обогащаем violations информацией о нодах
93
+ const enrichedViolations = [];
94
+ for (const v of violations) {
95
+ const nodeId = v.bindings?.find(b => b.name === 'X')?.value;
96
+ if (nodeId) {
97
+ const violatingNode = await this.graph.getNode(nodeId);
98
+ if (violatingNode) {
99
+ enrichedViolations.push({
100
+ nodeId,
101
+ type: violatingNode.type,
102
+ name: violatingNode.name,
103
+ file: violatingNode.file,
104
+ line: violatingNode.line
105
+ });
106
+ }
107
+ }
108
+ }
109
+ return {
110
+ guaranteeId: guaranteeId,
111
+ name: node.name,
112
+ severity: node.severity,
113
+ passed: violations.length === 0 && !error,
114
+ violationCount: violations.length,
115
+ violations: enrichedViolations,
116
+ error,
117
+ checkDurationMs: Date.now() - startTime
118
+ };
119
+ }
120
+ /**
121
+ * Проверить все гарантии
122
+ */
123
+ async checkAll() {
124
+ const guarantees = await this.list();
125
+ const results = [];
126
+ let passedCount = 0;
127
+ let failedCount = 0;
128
+ let errorCount = 0;
129
+ for (const g of guarantees) {
130
+ const result = await this.check(g.id);
131
+ results.push(result);
132
+ if (result.error) {
133
+ errorCount++;
134
+ }
135
+ else if (result.passed) {
136
+ passedCount++;
137
+ }
138
+ else {
139
+ failedCount++;
140
+ }
141
+ }
142
+ return {
143
+ total: guarantees.length,
144
+ passed: passedCount,
145
+ failed: failedCount,
146
+ errors: errorCount,
147
+ results
148
+ };
149
+ }
150
+ /**
151
+ * Удалить гарантию
152
+ */
153
+ async delete(guaranteeId) {
154
+ const fullId = guaranteeId.startsWith('GUARANTEE:') ? guaranteeId : `GUARANTEE:${guaranteeId}`;
155
+ // Удаляем GOVERNS edges
156
+ const edges = await this.graph.getOutgoingEdges(fullId, ['GOVERNS']);
157
+ for (const edge of edges) {
158
+ await this.graph.deleteEdge(edge.src, edge.dst, 'GOVERNS');
159
+ }
160
+ // Удаляем ноду
161
+ await this.graph.deleteNode(fullId);
162
+ }
163
+ /**
164
+ * Экспортировать гарантии в YAML файл
165
+ */
166
+ async export(filePath = this.guaranteesFile) {
167
+ const guarantees = await this.list();
168
+ const exportData = {
169
+ version: 1,
170
+ exportedAt: new Date().toISOString(),
171
+ guarantees: guarantees.map(g => ({
172
+ id: g.id.replace('GUARANTEE:', ''),
173
+ name: g.name,
174
+ rule: g.rule,
175
+ severity: g.severity,
176
+ governs: g.governs || ['**/*.js']
177
+ }))
178
+ };
179
+ const yaml = stringifyYaml(exportData, { lineWidth: 0 });
180
+ writeFileSync(filePath, yaml, 'utf-8');
181
+ return filePath;
182
+ }
183
+ /**
184
+ * Импортировать гарантии из YAML файла
185
+ */
186
+ async import(filePath = this.guaranteesFile, options = {}) {
187
+ const { clearExisting = false } = options;
188
+ if (!existsSync(filePath)) {
189
+ throw new Error(`Guarantees file not found: ${filePath}`);
190
+ }
191
+ const content = readFileSync(filePath, 'utf-8');
192
+ const data = parseYaml(content);
193
+ if (!data.guarantees || !Array.isArray(data.guarantees)) {
194
+ throw new Error('Invalid guarantees file format');
195
+ }
196
+ // Удаляем существующие если нужно
197
+ if (clearExisting) {
198
+ const existing = await this.list();
199
+ for (const g of existing) {
200
+ await this.delete(g.id);
201
+ }
202
+ }
203
+ // Импортируем
204
+ const imported = [];
205
+ const skipped = [];
206
+ for (const g of data.guarantees) {
207
+ const fullId = `GUARANTEE:${g.id}`;
208
+ const existing = await this.graph.getNode(fullId);
209
+ if (existing && !clearExisting) {
210
+ skipped.push(g.id);
211
+ continue;
212
+ }
213
+ await this.create(g);
214
+ imported.push(g.id);
215
+ }
216
+ return {
217
+ imported: imported.length,
218
+ skipped: skipped.length,
219
+ importedIds: imported,
220
+ skippedIds: skipped
221
+ };
222
+ }
223
+ /**
224
+ * Показать drift между графом и файлом
225
+ */
226
+ async drift(filePath = this.guaranteesFile) {
227
+ const graphGuarantees = await this.list();
228
+ const graphMap = new Map(graphGuarantees.map(g => [g.id.replace('GUARANTEE:', ''), g]));
229
+ let fileGuarantees = [];
230
+ if (existsSync(filePath)) {
231
+ const content = readFileSync(filePath, 'utf-8');
232
+ const data = parseYaml(content);
233
+ fileGuarantees = data.guarantees || [];
234
+ }
235
+ const fileMap = new Map(fileGuarantees.map(g => [g.id, g]));
236
+ const onlyInGraph = [];
237
+ const onlyInFile = [];
238
+ const modified = [];
239
+ const unchanged = [];
240
+ // Проверяем гарантии в графе
241
+ for (const [id, graphG] of graphMap) {
242
+ const fileG = fileMap.get(id);
243
+ if (!fileG) {
244
+ onlyInGraph.push(id);
245
+ }
246
+ else if (this._hasChanges(graphG, fileG)) {
247
+ modified.push({
248
+ id,
249
+ changes: this._describeChanges(graphG, fileG)
250
+ });
251
+ }
252
+ else {
253
+ unchanged.push(id);
254
+ }
255
+ }
256
+ // Проверяем гарантии только в файле
257
+ for (const [id] of fileMap) {
258
+ if (!graphMap.has(id)) {
259
+ onlyInFile.push(id);
260
+ }
261
+ }
262
+ return {
263
+ hasDrift: onlyInGraph.length > 0 || onlyInFile.length > 0 || modified.length > 0,
264
+ summary: {
265
+ onlyInGraph: onlyInGraph.length,
266
+ onlyInFile: onlyInFile.length,
267
+ modified: modified.length,
268
+ unchanged: unchanged.length
269
+ },
270
+ onlyInGraph,
271
+ onlyInFile,
272
+ modified,
273
+ unchanged
274
+ };
275
+ }
276
+ /**
277
+ * Найти гарантии затронутые изменением ноды
278
+ */
279
+ async findAffectedGuarantees(nodeId) {
280
+ const node = await this.graph.getNode(nodeId);
281
+ if (!node)
282
+ return [];
283
+ // Поднимаемся до MODULE
284
+ let moduleId = null;
285
+ if (node.type === 'MODULE') {
286
+ moduleId = node.id;
287
+ }
288
+ else if (node.file) {
289
+ // Ищем MODULE по file
290
+ for await (const m of this.graph.queryNodes({ type: 'MODULE' })) {
291
+ if (m.file === node.file) {
292
+ moduleId = m.id;
293
+ break;
294
+ }
295
+ }
296
+ }
297
+ if (!moduleId)
298
+ return [];
299
+ // Находим GOVERNS edges к этому модулю
300
+ const incomingEdges = await this.graph.getIncomingEdges(moduleId, ['GOVERNS']);
301
+ return incomingEdges.map(e => e.src);
302
+ }
303
+ // ============ Private methods ============
304
+ /**
305
+ * Создать GOVERNS edges к модулям по glob patterns
306
+ */
307
+ async _createGovernsEdges(guaranteeId, patterns) {
308
+ // Получаем все MODULE ноды
309
+ const modules = [];
310
+ for await (const node of this.graph.queryNodes({ type: 'MODULE' })) {
311
+ modules.push(node);
312
+ }
313
+ // Матчим patterns
314
+ for (const module of modules) {
315
+ const relativePath = module.file?.replace(this.projectPath, '').replace(/^\//, '') || '';
316
+ for (const pattern of patterns) {
317
+ if (minimatch(relativePath, pattern) || minimatch(module.file || '', pattern)) {
318
+ await this.graph.addEdge({
319
+ type: 'GOVERNS',
320
+ src: guaranteeId,
321
+ dst: module.id
322
+ });
323
+ break; // Один edge на модуль
324
+ }
325
+ }
326
+ }
327
+ }
328
+ /**
329
+ * Проверить есть ли изменения между версиями гарантии
330
+ */
331
+ _hasChanges(graphG, fileG) {
332
+ return (graphG.rule !== fileG.rule ||
333
+ graphG.severity !== fileG.severity ||
334
+ graphG.name !== fileG.name ||
335
+ JSON.stringify(graphG.governs) !== JSON.stringify(fileG.governs));
336
+ }
337
+ /**
338
+ * Описать изменения между версиями
339
+ */
340
+ _describeChanges(graphG, fileG) {
341
+ const changes = [];
342
+ if (graphG.rule !== fileG.rule)
343
+ changes.push('rule');
344
+ if (graphG.severity !== fileG.severity)
345
+ changes.push('severity');
346
+ if (graphG.name !== fileG.name)
347
+ changes.push('name');
348
+ if (JSON.stringify(graphG.governs) !== JSON.stringify(fileG.governs))
349
+ changes.push('governs');
350
+ return changes;
351
+ }
352
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * ManifestStore - simple persistent processing state storage
3
+ *
4
+ * Format: StableID|Phase|Status|Timestamp
5
+ * Operations: grep for search, sed for update
6
+ */
7
+ /**
8
+ * Processing status type
9
+ */
10
+ export type ProcessingStatus = 'done' | 'in_progress' | 'pending' | 'crashed';
11
+ /**
12
+ * Phase statistics
13
+ */
14
+ export interface PhaseStats {
15
+ done: number;
16
+ in_progress: number;
17
+ pending: number;
18
+ crashed?: number;
19
+ }
20
+ /**
21
+ * All phases statistics
22
+ */
23
+ export interface ManifestStats {
24
+ [phase: string]: PhaseStats;
25
+ }
26
+ export declare class ManifestStore {
27
+ private filePath;
28
+ constructor(filePath: string);
29
+ /**
30
+ * Check if file is processed in phase
31
+ * @param key - Full key like "PHASE|Plugin|Hash" or stableId
32
+ * @param phase - For backward compat, ignored if key contains |
33
+ */
34
+ isDone(key: string, phase?: string): boolean;
35
+ /**
36
+ * Mark file as processed in phase
37
+ * @param key - Full key like "PHASE|Plugin|Hash" or stableId
38
+ * @param phase - For backward compat, ignored if key contains |
39
+ */
40
+ markDone(key: string, phase?: string): void;
41
+ /**
42
+ * Mark file as in progress
43
+ * @param key - Full key like "PHASE|Plugin|Hash" or stableId
44
+ * @param phase - For backward compat, ignored if key contains |
45
+ */
46
+ markInProgress(key: string, phase?: string): void;
47
+ /**
48
+ * Get status of file in phase
49
+ * @param key - Full key like "PHASE|Plugin|Hash" or stableId
50
+ * @param phase - For backward compat, ignored if key contains |
51
+ */
52
+ getStatus(key: string, phase?: string): ProcessingStatus;
53
+ /**
54
+ * Get all files for phase with specific status
55
+ */
56
+ getByStatus(phase: string, status: ProcessingStatus): string[];
57
+ /**
58
+ * Get statistics by phases
59
+ */
60
+ getStats(): ManifestStats;
61
+ /**
62
+ * Clean up stale in_progress (crashed processes)
63
+ * @param olderThanSeconds - older than N seconds considered dead
64
+ */
65
+ cleanupStaleProgress(olderThanSeconds?: number): void;
66
+ /**
67
+ * Clear entire manifest (for testing)
68
+ */
69
+ clear(): void;
70
+ }
71
+ //# sourceMappingURL=ManifestStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManifestStore.d.ts","sourceRoot":"","sources":["../../src/core/ManifestStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;CAC7B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAS5B;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAY5C;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAS3C;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQjD;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAoBxD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAc9D;;OAEG;IACH,QAAQ,IAAI,aAAa;IAyBzB;;;OAGG;IACH,oBAAoB,CAAC,gBAAgB,GAAE,MAAY,GAAG,IAAI;IA2B1D;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}