@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,565 @@
1
+ /**
2
+ * RFDBServerBackend - Graph backend using RFDB server via Unix socket
3
+ *
4
+ * Replaces ReginaFlowBackend's direct NAPI binding with socket-based
5
+ * communication to a shared RFDB server. This allows multiple processes
6
+ * (MCP server, analysis workers) to share the same graph database.
7
+ *
8
+ * Socket path defaults to `{dbPath}/../rfdb.sock` (e.g., .grafema/rfdb.sock),
9
+ * ensuring each project has its own socket and avoiding conflicts when
10
+ * multiple MCP instances run simultaneously.
11
+ *
12
+ * Usage:
13
+ * const backend = new RFDBServerBackend({
14
+ * dbPath: '/project/.grafema/graph.rfdb' // socket will be /project/.grafema/rfdb.sock
15
+ * });
16
+ * await backend.connect();
17
+ * await backend.addNodes([...]);
18
+ * await backend.flush();
19
+ */
20
+ import { RFDBClient } from '@grafema/rfdb-client';
21
+ import { existsSync, unlinkSync } from 'fs';
22
+ import { spawn } from 'child_process';
23
+ import { join, dirname } from 'path';
24
+ import { fileURLToPath } from 'url';
25
+ import { setTimeout as sleep } from 'timers/promises';
26
+ const __filename = fileURLToPath(import.meta.url);
27
+ const __dirname = dirname(__filename);
28
+ export class RFDBServerBackend {
29
+ socketPath;
30
+ dbPath;
31
+ client;
32
+ serverProcess;
33
+ connected; // Public for compatibility
34
+ edgeTypes;
35
+ _cachedNodeCounts;
36
+ _cachedEdgeCounts;
37
+ constructor(options = {}) {
38
+ this.dbPath = options.dbPath;
39
+ // Default socket path: next to the database in .grafema folder
40
+ // This ensures each project has its own socket, avoiding conflicts
41
+ if (options.socketPath) {
42
+ this.socketPath = options.socketPath;
43
+ }
44
+ else if (this.dbPath) {
45
+ this.socketPath = join(dirname(this.dbPath), 'rfdb.sock');
46
+ }
47
+ else {
48
+ this.socketPath = '/tmp/rfdb.sock'; // fallback, not recommended
49
+ }
50
+ this.client = null;
51
+ this.serverProcess = null;
52
+ this.connected = false;
53
+ this.edgeTypes = new Set();
54
+ }
55
+ /**
56
+ * Connect to RFDB server, starting it if necessary
57
+ */
58
+ async connect() {
59
+ if (this.connected)
60
+ return;
61
+ // Try to connect first
62
+ this.client = new RFDBClient(this.socketPath);
63
+ try {
64
+ await this.client.connect();
65
+ // Verify server is responsive
66
+ await this.client.ping();
67
+ this.connected = true;
68
+ console.log(`[RFDBServerBackend] Connected to existing RFDB server at ${this.socketPath}`);
69
+ return;
70
+ }
71
+ catch {
72
+ // Server not running, need to start it
73
+ console.log(`[RFDBServerBackend] RFDB server not running, starting...`);
74
+ }
75
+ // Start the server
76
+ await this._startServer();
77
+ // Connect again
78
+ this.client = new RFDBClient(this.socketPath);
79
+ await this.client.connect();
80
+ await this.client.ping();
81
+ this.connected = true;
82
+ console.log(`[RFDBServerBackend] Connected to RFDB server at ${this.socketPath}`);
83
+ }
84
+ /**
85
+ * Alias for connect()
86
+ */
87
+ async initialize() {
88
+ return this.connect();
89
+ }
90
+ /**
91
+ * Start RFDB server process
92
+ */
93
+ async _startServer() {
94
+ if (!this.dbPath) {
95
+ throw new Error('dbPath required to start RFDB server');
96
+ }
97
+ // Find server binary
98
+ const projectRoot = join(__dirname, '../../../../..');
99
+ const releaseBinary = join(projectRoot, 'rust-engine/target/release/rfdb-server');
100
+ const debugBinary = join(projectRoot, 'rust-engine/target/debug/rfdb-server');
101
+ let binaryPath = existsSync(releaseBinary) ? releaseBinary : debugBinary;
102
+ if (!existsSync(binaryPath)) {
103
+ console.log(`[RFDBServerBackend] Server binary not found, building...`);
104
+ const { execSync } = await import('child_process');
105
+ execSync('cargo build --bin rfdb-server', {
106
+ cwd: join(projectRoot, 'rust-engine'),
107
+ stdio: 'inherit',
108
+ });
109
+ binaryPath = debugBinary;
110
+ }
111
+ // Remove stale socket
112
+ if (existsSync(this.socketPath)) {
113
+ unlinkSync(this.socketPath);
114
+ }
115
+ console.log(`[RFDBServerBackend] Starting: ${binaryPath} ${this.dbPath} --socket ${this.socketPath}`);
116
+ this.serverProcess = spawn(binaryPath, [this.dbPath, '--socket', this.socketPath], {
117
+ stdio: ['ignore', 'pipe', 'pipe'],
118
+ detached: true, // Allow server to outlive this process
119
+ });
120
+ // Don't let server process prevent parent from exiting
121
+ this.serverProcess.unref();
122
+ this.serverProcess.stderr?.on('data', (data) => {
123
+ const msg = data.toString().trim();
124
+ if (!msg.includes('FLUSH') && !msg.includes('WRITER')) {
125
+ console.log(`[rfdb-server] ${msg}`);
126
+ }
127
+ });
128
+ this.serverProcess.on('error', (err) => {
129
+ console.error(`[RFDBServerBackend] Server process error:`, err);
130
+ });
131
+ // Wait for socket to appear
132
+ let attempts = 0;
133
+ while (!existsSync(this.socketPath) && attempts < 50) {
134
+ await sleep(100);
135
+ attempts++;
136
+ }
137
+ if (!existsSync(this.socketPath)) {
138
+ throw new Error(`RFDB server failed to start (socket not created after ${attempts * 100}ms)`);
139
+ }
140
+ console.log(`[RFDBServerBackend] Server started on ${this.socketPath}`);
141
+ }
142
+ /**
143
+ * Close connection and stop server if we started it
144
+ */
145
+ async close() {
146
+ if (this.client) {
147
+ await this.client.close();
148
+ this.client = null;
149
+ }
150
+ this.connected = false;
151
+ // Kill server process if we started it
152
+ if (this.serverProcess) {
153
+ this.serverProcess.kill('SIGTERM');
154
+ this.serverProcess = null;
155
+ }
156
+ }
157
+ /**
158
+ * Clear the database
159
+ */
160
+ async clear() {
161
+ if (!this.client)
162
+ throw new Error('Not connected');
163
+ await this.client.clear();
164
+ }
165
+ /**
166
+ * Flush data to disk
167
+ */
168
+ async flush() {
169
+ if (!this.client)
170
+ throw new Error('Not connected');
171
+ await this.client.flush();
172
+ }
173
+ // ===========================================================================
174
+ // Node Operations
175
+ // ===========================================================================
176
+ /**
177
+ * Add a single node
178
+ */
179
+ async addNode(node) {
180
+ return this.addNodes([node]);
181
+ }
182
+ /**
183
+ * Add multiple nodes
184
+ */
185
+ async addNodes(nodes) {
186
+ if (!this.client)
187
+ throw new Error('Not connected');
188
+ if (!nodes.length)
189
+ return;
190
+ const wireNodes = nodes.map(n => {
191
+ // Extract metadata from node
192
+ const { id, type, nodeType, node_type, name, file, exported, ...rest } = n;
193
+ return {
194
+ id: String(id),
195
+ nodeType: (nodeType || node_type || type || 'UNKNOWN'),
196
+ name: name || '',
197
+ file: file || '',
198
+ exported: exported || false,
199
+ metadata: JSON.stringify({ originalId: String(id), ...rest }),
200
+ };
201
+ });
202
+ await this.client.addNodes(wireNodes);
203
+ }
204
+ /**
205
+ * Add a single edge
206
+ */
207
+ async addEdge(edge) {
208
+ return this.addEdges([edge]);
209
+ }
210
+ /**
211
+ * Add multiple edges
212
+ */
213
+ async addEdges(edges, skipValidation = false) {
214
+ if (!this.client)
215
+ throw new Error('Not connected');
216
+ if (!edges.length)
217
+ return;
218
+ // Track edge types
219
+ for (const e of edges) {
220
+ const edgeType = e.edgeType || e.edge_type || e.etype || e.type;
221
+ if (typeof edgeType === 'string')
222
+ this.edgeTypes.add(edgeType);
223
+ }
224
+ const wireEdges = edges.map(e => {
225
+ const { src, dst, type, edgeType, edge_type, etype, ...rest } = e;
226
+ return {
227
+ src: String(src),
228
+ dst: String(dst),
229
+ edgeType: (edgeType || edge_type || etype || type || 'UNKNOWN'),
230
+ // Store original string IDs in metadata for retrieval
231
+ metadata: JSON.stringify({ _origSrc: String(src), _origDst: String(dst), ...rest }),
232
+ };
233
+ });
234
+ await this.client.addEdges(wireEdges, skipValidation);
235
+ }
236
+ /**
237
+ * Get a node by ID
238
+ */
239
+ async getNode(id) {
240
+ if (!this.client)
241
+ throw new Error('Not connected');
242
+ const node = await this.client.getNode(String(id));
243
+ if (!node)
244
+ return null;
245
+ return this._parseNode(node);
246
+ }
247
+ /**
248
+ * Check if node exists
249
+ */
250
+ async nodeExists(id) {
251
+ if (!this.client)
252
+ throw new Error('Not connected');
253
+ return this.client.nodeExists(id);
254
+ }
255
+ /**
256
+ * Delete a node
257
+ */
258
+ async deleteNode(id) {
259
+ if (!this.client)
260
+ throw new Error('Not connected');
261
+ await this.client.deleteNode(id);
262
+ }
263
+ /**
264
+ * Find nodes by attributes
265
+ */
266
+ async findByAttr(query) {
267
+ if (!this.client)
268
+ throw new Error('Not connected');
269
+ return this.client.findByAttr(query);
270
+ }
271
+ /**
272
+ * Parse a node from wire format to JS format
273
+ */
274
+ _parseNode(wireNode) {
275
+ const metadata = wireNode.metadata ? JSON.parse(wireNode.metadata) : {};
276
+ // Parse nested JSON strings
277
+ for (const [key, value] of Object.entries(metadata)) {
278
+ if (typeof value === 'string' && (value.startsWith('[') || value.startsWith('{'))) {
279
+ try {
280
+ metadata[key] = JSON.parse(value);
281
+ }
282
+ catch {
283
+ // Not JSON, keep as string
284
+ }
285
+ }
286
+ }
287
+ const humanId = metadata.originalId || wireNode.id;
288
+ return {
289
+ id: humanId,
290
+ nodeType: wireNode.nodeType,
291
+ type: wireNode.nodeType,
292
+ name: wireNode.name,
293
+ file: wireNode.file,
294
+ exported: wireNode.exported,
295
+ ...metadata,
296
+ };
297
+ }
298
+ /**
299
+ * Async generator for querying nodes
300
+ */
301
+ async *queryNodes(query) {
302
+ if (!this.client)
303
+ throw new Error('Not connected');
304
+ // Build query for server
305
+ const serverQuery = {};
306
+ if (query.nodeType)
307
+ serverQuery.nodeType = query.nodeType;
308
+ if (query.type)
309
+ serverQuery.nodeType = query.type;
310
+ if (query.name)
311
+ serverQuery.name = query.name;
312
+ if (query.file)
313
+ serverQuery.file = query.file;
314
+ // Use findByType if only nodeType specified
315
+ if (serverQuery.nodeType && Object.keys(serverQuery).length === 1) {
316
+ const ids = await this.client.findByType(serverQuery.nodeType);
317
+ for (const id of ids) {
318
+ const node = await this.getNode(id);
319
+ if (node)
320
+ yield node;
321
+ }
322
+ return;
323
+ }
324
+ // Otherwise use client's queryNodes
325
+ for await (const wireNode of this.client.queryNodes(serverQuery)) {
326
+ yield this._parseNode(wireNode);
327
+ }
328
+ }
329
+ /**
330
+ * Get ALL nodes matching query (collects from queryNodes into array)
331
+ */
332
+ async getAllNodes(query = {}) {
333
+ const nodes = [];
334
+ for await (const node of this.queryNodes(query)) {
335
+ nodes.push(node);
336
+ }
337
+ return nodes;
338
+ }
339
+ // ===========================================================================
340
+ // Edge Operations
341
+ // ===========================================================================
342
+ /**
343
+ * Delete an edge
344
+ */
345
+ async deleteEdge(src, dst, type) {
346
+ if (!this.client)
347
+ throw new Error('Not connected');
348
+ await this.client.deleteEdge(src, dst, type);
349
+ }
350
+ /**
351
+ * Get all edges
352
+ */
353
+ async getAllEdges() {
354
+ return this.getAllEdgesAsync();
355
+ }
356
+ /**
357
+ * Get all edges (async version)
358
+ */
359
+ async getAllEdgesAsync() {
360
+ if (!this.client)
361
+ throw new Error('Not connected');
362
+ const edges = await this.client.getAllEdges();
363
+ return edges.map(e => {
364
+ const meta = JSON.parse(e.metadata || '{}');
365
+ // Use original string IDs if stored, otherwise use numeric IDs
366
+ const { _origSrc, _origDst, ...rest } = meta;
367
+ return {
368
+ src: _origSrc || e.src,
369
+ dst: _origDst || e.dst,
370
+ type: e.edgeType,
371
+ edgeType: e.edgeType,
372
+ ...rest,
373
+ };
374
+ });
375
+ }
376
+ /**
377
+ * Get outgoing edges from a node
378
+ */
379
+ async getOutgoingEdges(nodeId, edgeTypes = null) {
380
+ if (!this.client)
381
+ throw new Error('Not connected');
382
+ const edges = await this.client.getOutgoingEdges(nodeId, edgeTypes || undefined);
383
+ return edges.map(e => {
384
+ const meta = JSON.parse(e.metadata || '{}');
385
+ const { _origSrc, _origDst, ...rest } = meta;
386
+ return {
387
+ src: _origSrc || e.src,
388
+ dst: _origDst || e.dst,
389
+ type: e.edgeType,
390
+ edgeType: e.edgeType,
391
+ ...rest,
392
+ };
393
+ });
394
+ }
395
+ /**
396
+ * Get incoming edges to a node
397
+ */
398
+ async getIncomingEdges(nodeId, edgeTypes = null) {
399
+ if (!this.client)
400
+ throw new Error('Not connected');
401
+ const edges = await this.client.getIncomingEdges(nodeId, edgeTypes || undefined);
402
+ return edges.map(e => {
403
+ const meta = JSON.parse(e.metadata || '{}');
404
+ const { _origSrc, _origDst, ...rest } = meta;
405
+ return {
406
+ src: _origSrc || e.src,
407
+ dst: _origDst || e.dst,
408
+ type: e.edgeType,
409
+ edgeType: e.edgeType,
410
+ ...rest,
411
+ };
412
+ });
413
+ }
414
+ // ===========================================================================
415
+ // Graph Traversal
416
+ // ===========================================================================
417
+ /**
418
+ * BFS traversal
419
+ */
420
+ async bfs(startIds, maxDepth, edgeTypes) {
421
+ if (!this.client)
422
+ throw new Error('Not connected');
423
+ return this.client.bfs(startIds, maxDepth, edgeTypes);
424
+ }
425
+ /**
426
+ * DFS traversal
427
+ */
428
+ async dfs(startIds, maxDepth, edgeTypes = []) {
429
+ if (!this.client)
430
+ throw new Error('Not connected');
431
+ return this.client.dfs(startIds, maxDepth, edgeTypes);
432
+ }
433
+ // ===========================================================================
434
+ // Statistics
435
+ // ===========================================================================
436
+ /**
437
+ * Get node count
438
+ */
439
+ async nodeCount() {
440
+ if (!this.client)
441
+ throw new Error('Not connected');
442
+ return this.client.nodeCount();
443
+ }
444
+ /**
445
+ * Get edge count
446
+ */
447
+ async edgeCount() {
448
+ if (!this.client)
449
+ throw new Error('Not connected');
450
+ return this.client.edgeCount();
451
+ }
452
+ /**
453
+ * Get statistics
454
+ */
455
+ async getStats() {
456
+ if (!this.client)
457
+ throw new Error('Not connected');
458
+ const nodeCount = await this.client.nodeCount();
459
+ const edgeCount = await this.client.edgeCount();
460
+ const nodeCounts = await this.client.countNodesByType();
461
+ const edgeCounts = await this.client.countEdgesByType();
462
+ return {
463
+ nodeCount,
464
+ edgeCount,
465
+ nodesByType: nodeCounts,
466
+ edgesByType: edgeCounts,
467
+ };
468
+ }
469
+ /**
470
+ * Count nodes by type (sync, returns cached value)
471
+ */
472
+ async countNodesByType(_types = null) {
473
+ if (!this.client)
474
+ throw new Error('Not connected');
475
+ return this.client.countNodesByType();
476
+ }
477
+ /**
478
+ * Count edges by type
479
+ */
480
+ async countEdgesByType(_edgeTypes = null) {
481
+ if (!this.client)
482
+ throw new Error('Not connected');
483
+ return this.client.countEdgesByType();
484
+ }
485
+ /**
486
+ * Refresh cached counts (call after analysis)
487
+ */
488
+ async refreshCounts() {
489
+ if (!this.client)
490
+ throw new Error('Not connected');
491
+ this._cachedNodeCounts = await this.client.countNodesByType();
492
+ this._cachedEdgeCounts = await this.client.countEdgesByType();
493
+ }
494
+ // ===========================================================================
495
+ // Datalog Queries
496
+ // ===========================================================================
497
+ /**
498
+ * Check a guarantee (Datalog rule) and return violations
499
+ */
500
+ async checkGuarantee(ruleSource) {
501
+ if (!this.client)
502
+ throw new Error('Not connected');
503
+ const violations = await this.client.checkGuarantee(ruleSource);
504
+ // Convert bindings from {X: "value"} to [{name: "X", value: "value"}]
505
+ return violations.map(v => ({
506
+ bindings: Object.entries(v.bindings).map(([name, value]) => ({ name, value }))
507
+ }));
508
+ }
509
+ /**
510
+ * Load Datalog rules
511
+ */
512
+ async datalogLoadRules(source) {
513
+ if (!this.client)
514
+ throw new Error('Not connected');
515
+ return await this.client.datalogLoadRules(source);
516
+ }
517
+ /**
518
+ * Clear Datalog rules
519
+ */
520
+ async datalogClearRules() {
521
+ if (!this.client)
522
+ throw new Error('Not connected');
523
+ await this.client.datalogClearRules();
524
+ }
525
+ /**
526
+ * Run a Datalog query
527
+ */
528
+ async datalogQuery(query) {
529
+ if (!this.client)
530
+ throw new Error('Not connected');
531
+ const results = await this.client.datalogQuery(query);
532
+ // Convert bindings from {X: "value"} to [{name: "X", value: "value"}]
533
+ return results.map(r => ({
534
+ bindings: Object.entries(r.bindings).map(([name, value]) => ({ name, value }))
535
+ }));
536
+ }
537
+ // ===========================================================================
538
+ // Export/Import
539
+ // ===========================================================================
540
+ /**
541
+ * Export graph (for tests)
542
+ */
543
+ async export() {
544
+ const nodes = await this.getAllNodes();
545
+ const edges = await this.getAllEdgesAsync();
546
+ return {
547
+ nodes: nodes,
548
+ edges: edges,
549
+ };
550
+ }
551
+ /**
552
+ * Find nodes by predicate (for compatibility)
553
+ */
554
+ async findNodes(predicate) {
555
+ const allNodes = await this.getAllNodes();
556
+ return allNodes.filter(predicate);
557
+ }
558
+ // ===========================================================================
559
+ // Graph property (for compatibility)
560
+ // ===========================================================================
561
+ get graph() {
562
+ return this;
563
+ }
564
+ }
565
+ export default RFDBServerBackend;
@@ -0,0 +1,47 @@
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
+ export interface TypoCheckResult {
8
+ isTooSimilar: boolean;
9
+ similarTo: string | null;
10
+ }
11
+ /**
12
+ * Levenshtein distance for typo detection
13
+ */
14
+ export declare function levenshtein(a: string, b: string): number;
15
+ /**
16
+ * Check if a type is too similar to any existing known type (possible typo)
17
+ */
18
+ export declare function checkTypoAgainstKnownTypes(newType: string): TypoCheckResult;
19
+ /**
20
+ * Reset KNOWN_NODE_TYPES to initial state (for testing)
21
+ */
22
+ export declare function resetKnownNodeTypes(): void;
23
+ /**
24
+ * Get current known node types (for testing/debugging)
25
+ */
26
+ export declare function getKnownNodeTypes(): Set<string>;
27
+ /**
28
+ * Check if an edge type is too similar to any existing known edge type (possible typo)
29
+ */
30
+ export declare function checkTypoAgainstKnownEdgeTypes(newType: string): TypoCheckResult;
31
+ /**
32
+ * Reset KNOWN_EDGE_TYPES to initial state (for testing)
33
+ */
34
+ export declare function resetKnownEdgeTypes(): void;
35
+ /**
36
+ * Get current known edge types (for testing/debugging)
37
+ */
38
+ export declare function getKnownEdgeTypes(): Set<string>;
39
+ /**
40
+ * Add a new node type to the known types set
41
+ */
42
+ export declare function addKnownNodeType(nodeType: string): void;
43
+ /**
44
+ * Add a new edge type to the known types set
45
+ */
46
+ export declare function addKnownEdgeType(edgeType: string): void;
47
+ //# sourceMappingURL=typeValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeValidation.d.ts","sourceRoot":"","sources":["../../../src/storage/backends/typeValidation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+CH,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAcxD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAS3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAAC,MAAM,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAS/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAAC,MAAM,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEvD"}