@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,78 @@
1
+ /**
2
+ * MethodNode - contract for METHOD node (class method)
3
+ */
4
+
5
+ import type { BaseNodeRecord } from '@grafema/types';
6
+
7
+ type MethodKind = 'method' | 'get' | 'set' | 'constructor';
8
+
9
+ interface MethodNodeRecord extends BaseNodeRecord {
10
+ type: 'METHOD';
11
+ column: number;
12
+ className: string;
13
+ async: boolean;
14
+ generator: boolean;
15
+ static: boolean;
16
+ kind: MethodKind;
17
+ }
18
+
19
+ interface MethodNodeOptions {
20
+ async?: boolean;
21
+ generator?: boolean;
22
+ static?: boolean;
23
+ kind?: MethodKind;
24
+ }
25
+
26
+ export class MethodNode {
27
+ static readonly TYPE = 'METHOD' as const;
28
+
29
+ static readonly REQUIRED = ['name', 'file', 'line', 'className'] as const;
30
+ static readonly OPTIONAL = ['column', 'async', 'generator', 'static', 'kind'] as const;
31
+
32
+ static create(
33
+ name: string,
34
+ file: string,
35
+ line: number,
36
+ column: number,
37
+ className: string,
38
+ options: MethodNodeOptions = {}
39
+ ): MethodNodeRecord {
40
+ if (!name) throw new Error('MethodNode.create: name is required');
41
+ if (!file) throw new Error('MethodNode.create: file is required');
42
+ if (!line) throw new Error('MethodNode.create: line is required');
43
+ if (!className) throw new Error('MethodNode.create: className is required');
44
+
45
+ return {
46
+ id: `${file}:METHOD:${className}.${name}:${line}`,
47
+ type: this.TYPE,
48
+ name,
49
+ file,
50
+ line,
51
+ column: column || 0,
52
+ className,
53
+ async: options.async || false,
54
+ generator: options.generator || false,
55
+ static: options.static || false,
56
+ kind: options.kind || 'method'
57
+ };
58
+ }
59
+
60
+ static validate(node: MethodNodeRecord): string[] {
61
+ const errors: string[] = [];
62
+
63
+ if (node.type !== this.TYPE) {
64
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
65
+ }
66
+
67
+ const nodeRecord = node as unknown as Record<string, unknown>;
68
+ for (const field of this.REQUIRED) {
69
+ if (!nodeRecord[field]) {
70
+ errors.push(`Missing required field: ${field}`);
71
+ }
72
+ }
73
+
74
+ return errors;
75
+ }
76
+ }
77
+
78
+ export type { MethodNodeRecord, MethodKind };
@@ -0,0 +1,74 @@
1
+ /**
2
+ * ModuleNode - contract for MODULE node
3
+ */
4
+
5
+ import { createHash } from 'crypto';
6
+ import type { BaseNodeRecord } from '@grafema/types';
7
+
8
+ interface ModuleNodeRecord extends BaseNodeRecord {
9
+ type: 'MODULE';
10
+ contentHash: string;
11
+ isTest: boolean;
12
+ }
13
+
14
+ interface ModuleNodeOptions {
15
+ isTest?: boolean;
16
+ }
17
+
18
+ export class ModuleNode {
19
+ static readonly TYPE = 'MODULE' as const;
20
+
21
+ static readonly REQUIRED = ['name', 'file', 'contentHash'] as const;
22
+ static readonly OPTIONAL = ['isTest'] as const;
23
+
24
+ /**
25
+ * Create MODULE node
26
+ * @param filePath - Full file path
27
+ * @param relativePath - Relative path (module name)
28
+ * @param contentHash - Content hash
29
+ * @param options - Additional options (isTest, etc.)
30
+ */
31
+ static create(
32
+ filePath: string,
33
+ relativePath: string,
34
+ contentHash: string,
35
+ options: ModuleNodeOptions = {}
36
+ ): ModuleNodeRecord {
37
+ if (!filePath) throw new Error('ModuleNode.create: filePath is required');
38
+ if (!relativePath) throw new Error('ModuleNode.create: relativePath is required');
39
+ if (!contentHash) throw new Error('ModuleNode.create: contentHash is required');
40
+
41
+ return {
42
+ id: `MODULE:${contentHash}`,
43
+ type: this.TYPE,
44
+ name: relativePath,
45
+ file: filePath,
46
+ line: 0,
47
+ contentHash,
48
+ isTest: options.isTest || false
49
+ };
50
+ }
51
+
52
+ static _hashPath(path: string): string {
53
+ return createHash('md5').update(path).digest('hex').substring(0, 12);
54
+ }
55
+
56
+ static validate(node: ModuleNodeRecord): string[] {
57
+ const errors: string[] = [];
58
+
59
+ if (node.type !== this.TYPE) {
60
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
61
+ }
62
+
63
+ const nodeRecord = node as unknown as Record<string, unknown>;
64
+ for (const field of this.REQUIRED) {
65
+ if (!nodeRecord[field]) {
66
+ errors.push(`Missing required field: ${field}`);
67
+ }
68
+ }
69
+
70
+ return errors;
71
+ }
72
+ }
73
+
74
+ export type { ModuleNodeRecord };
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Node Types - string type system for nodes
3
+ *
4
+ * Base types: FUNCTION, CLASS, METHOD, etc.
5
+ * Namespaced types: http:route, socketio:emit, express:router, etc.
6
+ *
7
+ * Namespace convention:
8
+ * - http:* - HTTP endpoints and requests
9
+ * - express:* - Express.js specifics
10
+ * - socketio:* - Socket.IO
11
+ * - db:* - Database queries
12
+ * - fs:* - Filesystem operations
13
+ */
14
+
15
+ // === BASE TYPES ===
16
+ // Abstract types, not tied to language or framework
17
+
18
+ export const NODE_TYPE = {
19
+ // Core code entities
20
+ FUNCTION: 'FUNCTION',
21
+ CLASS: 'CLASS',
22
+ METHOD: 'METHOD',
23
+ VARIABLE: 'VARIABLE',
24
+ PARAMETER: 'PARAMETER',
25
+ CONSTANT: 'CONSTANT',
26
+ LITERAL: 'LITERAL',
27
+ EXPRESSION: 'EXPRESSION', // Generic expression node for data flow tracking
28
+
29
+ // Module system
30
+ MODULE: 'MODULE',
31
+ IMPORT: 'IMPORT',
32
+ EXPORT: 'EXPORT',
33
+
34
+ // Call graph
35
+ CALL: 'CALL', // unified METHOD_CALL + CALL_SITE
36
+
37
+ // Project structure
38
+ PROJECT: 'PROJECT',
39
+ SERVICE: 'SERVICE',
40
+ FILE: 'FILE',
41
+ SCOPE: 'SCOPE',
42
+
43
+ // External dependencies
44
+ EXTERNAL: 'EXTERNAL',
45
+ EXTERNAL_MODULE: 'EXTERNAL_MODULE',
46
+
47
+ // Generic side effects
48
+ SIDE_EFFECT: 'SIDE_EFFECT',
49
+ } as const;
50
+
51
+ export type BaseNodeType = typeof NODE_TYPE[keyof typeof NODE_TYPE];
52
+
53
+ // === NAMESPACED TYPES ===
54
+ // Types specific to frameworks and libraries
55
+
56
+ export const NAMESPACED_TYPE = {
57
+ // HTTP (generic)
58
+ HTTP_ROUTE: 'http:route',
59
+ HTTP_REQUEST: 'http:request',
60
+
61
+ // Express.js
62
+ EXPRESS_ROUTER: 'express:router',
63
+ EXPRESS_MIDDLEWARE: 'express:middleware',
64
+ EXPRESS_MOUNT: 'express:mount',
65
+
66
+ // Socket.IO
67
+ SOCKETIO_EMIT: 'socketio:emit',
68
+ SOCKETIO_ON: 'socketio:on',
69
+ SOCKETIO_NAMESPACE: 'socketio:namespace',
70
+
71
+ // Database
72
+ DB_QUERY: 'db:query',
73
+ DB_CONNECTION: 'db:connection',
74
+
75
+ // Filesystem
76
+ FS_READ: 'fs:read',
77
+ FS_WRITE: 'fs:write',
78
+ FS_OPERATION: 'fs:operation',
79
+
80
+ // Network
81
+ NET_REQUEST: 'net:request',
82
+ NET_STDIO: 'net:stdio',
83
+
84
+ // Events
85
+ EVENT_LISTENER: 'event:listener',
86
+ EVENT_EMIT: 'event:emit',
87
+
88
+ // Guarantees (contract-based)
89
+ GUARANTEE_QUEUE: 'guarantee:queue',
90
+ GUARANTEE_API: 'guarantee:api',
91
+ GUARANTEE_PERMISSION: 'guarantee:permission',
92
+ } as const;
93
+
94
+ export type NamespacedNodeType = typeof NAMESPACED_TYPE[keyof typeof NAMESPACED_TYPE];
95
+
96
+ // Combined node type
97
+ export type NodeType = BaseNodeType | NamespacedNodeType | string;
98
+
99
+ // === HELPERS ===
100
+
101
+ /**
102
+ * Check if type is namespaced (contains :)
103
+ */
104
+ export function isNamespacedType(nodeType: string): boolean {
105
+ return nodeType !== undefined && nodeType !== null && nodeType.includes(':');
106
+ }
107
+
108
+ /**
109
+ * Get namespace from type
110
+ * @returns namespace or null for base types
111
+ */
112
+ export function getNamespace(nodeType: string): string | null {
113
+ if (!nodeType || !nodeType.includes(':')) return null;
114
+ return nodeType.split(':')[0];
115
+ }
116
+
117
+ /**
118
+ * Get base name from namespaced type
119
+ */
120
+ export function getBaseName(nodeType: string): string {
121
+ if (!nodeType) return '';
122
+ if (!nodeType.includes(':')) return nodeType;
123
+ return nodeType.split(':').slice(1).join(':');
124
+ }
125
+
126
+ /**
127
+ * Check if type is an endpoint (HTTP route, WebSocket handler, etc.)
128
+ */
129
+ export function isEndpointType(nodeType: string): boolean {
130
+ if (!nodeType) return false;
131
+ const ns = getNamespace(nodeType);
132
+ return ns === 'http' || ns === 'express' || ns === 'socketio';
133
+ }
134
+
135
+ /**
136
+ * Check if type is a side effect (DB, FS, Network)
137
+ */
138
+ export function isSideEffectType(nodeType: string): boolean {
139
+ if (!nodeType) return false;
140
+ if (nodeType === NODE_TYPE.SIDE_EFFECT) return true;
141
+ const ns = getNamespace(nodeType);
142
+ return ns === 'db' || ns === 'fs' || ns === 'net';
143
+ }
144
+
145
+ /**
146
+ * Check if type matches a pattern with wildcard
147
+ * @param nodeType - node type
148
+ * @param pattern - pattern (e.g., "http:*", "FUNCTION")
149
+ */
150
+ export function matchesTypePattern(nodeType: string, pattern: string): boolean {
151
+ if (!nodeType || !pattern) return false;
152
+
153
+ // Exact match
154
+ if (nodeType === pattern) return true;
155
+
156
+ // Wildcard match (e.g., "http:*" matches "http:route")
157
+ if (pattern.endsWith(':*')) {
158
+ const patternNs = pattern.slice(0, -2);
159
+ return getNamespace(nodeType) === patternNs;
160
+ }
161
+
162
+ return false;
163
+ }
164
+
165
+ /**
166
+ * Check if type is a guarantee type (guarantee:queue, guarantee:api, etc.)
167
+ */
168
+ export function isGuaranteeType(nodeType: string): boolean {
169
+ if (!nodeType) return false;
170
+ return getNamespace(nodeType) === 'guarantee';
171
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * ParameterNode - contract for PARAMETER node
3
+ */
4
+
5
+ import type { BaseNodeRecord } from '@grafema/types';
6
+
7
+ interface ParameterNodeRecord extends BaseNodeRecord {
8
+ type: 'PARAMETER';
9
+ column: number;
10
+ functionId: string;
11
+ index: number;
12
+ defaultValue?: unknown;
13
+ rest: boolean;
14
+ }
15
+
16
+ interface ParameterNodeOptions {
17
+ index?: number;
18
+ defaultValue?: unknown;
19
+ rest?: boolean;
20
+ }
21
+
22
+ export class ParameterNode {
23
+ static readonly TYPE = 'PARAMETER' as const;
24
+
25
+ static readonly REQUIRED = ['name', 'file', 'line', 'functionId'] as const;
26
+ static readonly OPTIONAL = ['column', 'index', 'defaultValue', 'rest'] as const;
27
+
28
+ static create(
29
+ name: string,
30
+ file: string,
31
+ line: number,
32
+ column: number,
33
+ functionId: string,
34
+ options: ParameterNodeOptions = {}
35
+ ): ParameterNodeRecord {
36
+ if (!name) throw new Error('ParameterNode.create: name is required');
37
+ if (!file) throw new Error('ParameterNode.create: file is required');
38
+ if (!line) throw new Error('ParameterNode.create: line is required');
39
+ if (!functionId) throw new Error('ParameterNode.create: functionId is required');
40
+
41
+ return {
42
+ id: `${file}:PARAMETER:${name}:${line}:${options.index || 0}`,
43
+ type: this.TYPE,
44
+ name,
45
+ file,
46
+ line,
47
+ column: column || 0,
48
+ functionId,
49
+ index: options.index || 0,
50
+ defaultValue: options.defaultValue,
51
+ rest: options.rest || false
52
+ };
53
+ }
54
+
55
+ static validate(node: ParameterNodeRecord): string[] {
56
+ const errors: string[] = [];
57
+
58
+ if (node.type !== this.TYPE) {
59
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
60
+ }
61
+
62
+ const nodeRecord = node as unknown as Record<string, unknown>;
63
+ for (const field of this.REQUIRED) {
64
+ if (!nodeRecord[field]) {
65
+ errors.push(`Missing required field: ${field}`);
66
+ }
67
+ }
68
+
69
+ return errors;
70
+ }
71
+ }
72
+
73
+ export type { ParameterNodeRecord };
@@ -0,0 +1,80 @@
1
+ /**
2
+ * ScopeNode - contract for SCOPE node
3
+ */
4
+
5
+ import type { BaseNodeRecord } from '@grafema/types';
6
+
7
+ interface ScopeNodeRecord extends BaseNodeRecord {
8
+ type: 'SCOPE';
9
+ scopeType: string;
10
+ conditional: boolean;
11
+ parentScopeId?: string;
12
+ parentFunctionId?: string;
13
+ capturesFrom?: string[];
14
+ }
15
+
16
+ interface ScopeNodeOptions {
17
+ name?: string;
18
+ conditional?: boolean;
19
+ parentScopeId?: string;
20
+ parentFunctionId?: string;
21
+ capturesFrom?: string[];
22
+ counter?: number;
23
+ }
24
+
25
+ export class ScopeNode {
26
+ static readonly TYPE = 'SCOPE' as const;
27
+
28
+ static readonly REQUIRED = ['scopeType', 'file', 'line'] as const;
29
+ static readonly OPTIONAL = ['name', 'conditional', 'parentScopeId', 'parentFunctionId', 'capturesFrom'] as const;
30
+
31
+ /**
32
+ * Create SCOPE node
33
+ */
34
+ static create(
35
+ scopeType: string,
36
+ file: string,
37
+ line: number,
38
+ options: ScopeNodeOptions = {}
39
+ ): ScopeNodeRecord {
40
+ if (!scopeType) throw new Error('ScopeNode.create: scopeType is required');
41
+ if (!file) throw new Error('ScopeNode.create: file is required');
42
+ if (line === undefined) throw new Error('ScopeNode.create: line is required');
43
+
44
+ const name = options.name || scopeType;
45
+ const counter = options.counter !== undefined ? `:${options.counter}` : '';
46
+ const id = `${file}:SCOPE:${name}:${line}${counter}`;
47
+
48
+ return {
49
+ id,
50
+ type: this.TYPE,
51
+ scopeType,
52
+ name,
53
+ file,
54
+ line,
55
+ conditional: options.conditional || false,
56
+ parentScopeId: options.parentScopeId,
57
+ parentFunctionId: options.parentFunctionId,
58
+ capturesFrom: options.capturesFrom
59
+ };
60
+ }
61
+
62
+ static validate(node: ScopeNodeRecord): string[] {
63
+ const errors: string[] = [];
64
+
65
+ if (node.type !== this.TYPE) {
66
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
67
+ }
68
+
69
+ const nodeRecord = node as unknown as Record<string, unknown>;
70
+ for (const field of this.REQUIRED) {
71
+ if (nodeRecord[field] === undefined || nodeRecord[field] === null) {
72
+ errors.push(`Missing required field: ${field}`);
73
+ }
74
+ }
75
+
76
+ return errors;
77
+ }
78
+ }
79
+
80
+ export type { ScopeNodeRecord };
@@ -0,0 +1,86 @@
1
+ /**
2
+ * ServiceNode - contract for SERVICE node
3
+ */
4
+
5
+ import type { BaseNodeRecord } from '@grafema/types';
6
+
7
+ interface ServiceNodeRecord extends BaseNodeRecord {
8
+ type: 'SERVICE';
9
+ kind: 'SERVICE';
10
+ filePath: string;
11
+ version: string;
12
+ entrypoint: string;
13
+ discoveryMethod: string;
14
+ description?: string;
15
+ dependencies: string[];
16
+ serviceType?: string;
17
+ testFiles?: string[];
18
+ }
19
+
20
+ interface ServiceNodeOptions {
21
+ version?: string;
22
+ entrypoint?: string;
23
+ discoveryMethod?: string;
24
+ description?: string;
25
+ dependencies?: string[];
26
+ serviceType?: string;
27
+ testFiles?: string[];
28
+ metadata?: {
29
+ type?: string;
30
+ testFiles?: string[];
31
+ };
32
+ }
33
+
34
+ export class ServiceNode {
35
+ static readonly TYPE = 'SERVICE' as const;
36
+
37
+ static readonly REQUIRED = ['name', 'file'] as const;
38
+ static readonly OPTIONAL = ['version', 'entrypoint', 'discoveryMethod', 'description', 'dependencies', 'metadata', 'testFiles', 'serviceType'] as const;
39
+
40
+ /**
41
+ * Create SERVICE node
42
+ */
43
+ static create(name: string, projectPath: string, options: ServiceNodeOptions = {}): ServiceNodeRecord {
44
+ if (!name) throw new Error('ServiceNode.create: name is required');
45
+ if (!projectPath) throw new Error('ServiceNode.create: projectPath is required');
46
+
47
+ return {
48
+ id: `SERVICE:${name}`,
49
+ type: this.TYPE,
50
+ kind: this.TYPE,
51
+ name,
52
+ file: projectPath,
53
+ line: 0,
54
+ filePath: projectPath,
55
+ version: options.version || '0.0.0',
56
+ entrypoint: options.entrypoint || 'index.js',
57
+ discoveryMethod: options.discoveryMethod || 'unknown',
58
+ description: options.description,
59
+ dependencies: options.dependencies || [],
60
+ serviceType: options.metadata?.type || options.serviceType,
61
+ testFiles: options.metadata?.testFiles || options.testFiles
62
+ };
63
+ }
64
+
65
+ /**
66
+ * Validate SERVICE node
67
+ */
68
+ static validate(node: ServiceNodeRecord): string[] {
69
+ const errors: string[] = [];
70
+
71
+ if (node.type !== this.TYPE) {
72
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
73
+ }
74
+
75
+ const nodeRecord = node as unknown as Record<string, unknown>;
76
+ for (const field of this.REQUIRED) {
77
+ if (!nodeRecord[field]) {
78
+ errors.push(`Missing required field: ${field}`);
79
+ }
80
+ }
81
+
82
+ return errors;
83
+ }
84
+ }
85
+
86
+ export type { ServiceNodeRecord };
@@ -0,0 +1,60 @@
1
+ /**
2
+ * VariableDeclarationNode - contract for VARIABLE_DECLARATION node
3
+ */
4
+
5
+ import type { BaseNodeRecord } from '@grafema/types';
6
+
7
+ interface VariableDeclarationNodeRecord extends BaseNodeRecord {
8
+ type: 'VARIABLE_DECLARATION';
9
+ column: number;
10
+ parentScopeId?: string;
11
+ }
12
+
13
+ interface VariableDeclarationNodeOptions {
14
+ parentScopeId?: string;
15
+ counter?: number;
16
+ }
17
+
18
+ export class VariableDeclarationNode {
19
+ static readonly TYPE = 'VARIABLE_DECLARATION' as const;
20
+
21
+ static readonly REQUIRED = ['name', 'file', 'line'] as const;
22
+ static readonly OPTIONAL = ['column', 'parentScopeId'] as const;
23
+
24
+ static create(
25
+ name: string,
26
+ file: string,
27
+ line: number,
28
+ column: number,
29
+ options: VariableDeclarationNodeOptions = {}
30
+ ): VariableDeclarationNodeRecord {
31
+ if (!name) throw new Error('VariableDeclarationNode.create: name is required');
32
+ if (!file) throw new Error('VariableDeclarationNode.create: file is required');
33
+ if (line === undefined) throw new Error('VariableDeclarationNode.create: line is required');
34
+
35
+ const counter = options.counter !== undefined ? `:${options.counter}` : '';
36
+ const id = `${file}:VARIABLE_DECLARATION:${name}:${line}:${column || 0}${counter}`;
37
+
38
+ return {
39
+ id,
40
+ type: this.TYPE,
41
+ name,
42
+ file,
43
+ line,
44
+ column: column || 0,
45
+ parentScopeId: options.parentScopeId
46
+ };
47
+ }
48
+
49
+ static validate(node: VariableDeclarationNodeRecord): string[] {
50
+ const errors: string[] = [];
51
+ if (node.type !== this.TYPE) errors.push(`Expected type ${this.TYPE}`);
52
+ const nodeRecord = node as unknown as Record<string, unknown>;
53
+ for (const field of this.REQUIRED) {
54
+ if (nodeRecord[field] === undefined) errors.push(`Missing: ${field}`);
55
+ }
56
+ return errors;
57
+ }
58
+ }
59
+
60
+ export type { VariableDeclarationNodeRecord };
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Node Types - export all node types and their contracts
3
+ */
4
+
5
+ // Core nodes
6
+ export { ServiceNode, type ServiceNodeRecord } from './ServiceNode.js';
7
+ export { EntrypointNode, type EntrypointNodeRecord, type EntrypointType, type EntrypointTrigger, type EntrypointSource, ENTRYPOINT_TYPES, ENTRYPOINT_TRIGGERS, ENTRYPOINT_SOURCES } from './EntrypointNode.js';
8
+ export { ModuleNode, type ModuleNodeRecord } from './ModuleNode.js';
9
+ export { FunctionNode } from './FunctionNode.js';
10
+ export { ClassNode, type ClassNodeRecord } from './ClassNode.js';
11
+ export { MethodNode, type MethodNodeRecord, type MethodKind } from './MethodNode.js';
12
+ export { ParameterNode, type ParameterNodeRecord } from './ParameterNode.js';
13
+ export { ScopeNode, type ScopeNodeRecord } from './ScopeNode.js';
14
+
15
+ // Call/reference nodes
16
+ export { CallSiteNode, type CallSiteNodeRecord } from './CallSiteNode.js';
17
+ export { MethodCallNode, type MethodCallNodeRecord } from './MethodCallNode.js';
18
+ export { VariableDeclarationNode, type VariableDeclarationNodeRecord } from './VariableDeclarationNode.js';
19
+ export { ConstantNode, type ConstantNodeRecord } from './ConstantNode.js';
20
+ export { LiteralNode, type LiteralNodeRecord } from './LiteralNode.js';
21
+
22
+ // Import/Export nodes
23
+ export { ImportNode, type ImportNodeRecord, type ImportKind } from './ImportNode.js';
24
+ export { ExportNode, type ExportNodeRecord, type ExportKind } from './ExportNode.js';
25
+
26
+ // External/IO nodes
27
+ export { ExternalStdioNode, type ExternalStdioNodeRecord } from './ExternalStdioNode.js';
28
+ export { EventListenerNode, type EventListenerNodeRecord } from './EventListenerNode.js';
29
+ export { HttpRequestNode, type HttpRequestNodeRecord } from './HttpRequestNode.js';
30
+ export { DatabaseQueryNode, type DatabaseQueryNodeRecord } from './DatabaseQueryNode.js';
31
+
32
+ // Guarantee nodes (contract-based)
33
+ export { GuaranteeNode, type GuaranteeNodeRecord, type GuaranteePriority, type GuaranteeStatus, type GuaranteeType } from './GuaranteeNode.js';
34
+
35
+ // Node type constants and helpers
36
+ export {
37
+ NODE_TYPE,
38
+ NAMESPACED_TYPE,
39
+ isNamespacedType,
40
+ getNamespace,
41
+ getBaseName,
42
+ isEndpointType,
43
+ isSideEffectType,
44
+ matchesTypePattern,
45
+ isGuaranteeType,
46
+ type BaseNodeType,
47
+ type NamespacedNodeType,
48
+ type NodeType,
49
+ } from './NodeKind.js';