@grafema/core 0.1.0-alpha.5 → 0.2.0-beta

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 (530) hide show
  1. package/README.md +0 -1
  2. package/dist/Orchestrator.d.ts +31 -2
  3. package/dist/Orchestrator.d.ts.map +1 -1
  4. package/dist/Orchestrator.js +222 -27
  5. package/dist/config/ConfigLoader.d.ts +90 -0
  6. package/dist/config/ConfigLoader.d.ts.map +1 -0
  7. package/dist/config/ConfigLoader.js +249 -0
  8. package/dist/config/index.d.ts +6 -0
  9. package/dist/config/index.d.ts.map +1 -0
  10. package/dist/config/index.js +4 -0
  11. package/dist/core/ASTWorker.d.ts +11 -36
  12. package/dist/core/ASTWorker.d.ts.map +1 -1
  13. package/dist/core/ASTWorker.js +93 -99
  14. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  15. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  16. package/dist/core/CoverageAnalyzer.js +198 -0
  17. package/dist/core/FileExplainer.d.ts +101 -0
  18. package/dist/core/FileExplainer.d.ts.map +1 -0
  19. package/dist/core/FileExplainer.js +139 -0
  20. package/dist/core/FileNodeManager.d.ts +40 -0
  21. package/dist/core/FileNodeManager.d.ts.map +1 -0
  22. package/dist/core/FileNodeManager.js +84 -0
  23. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  24. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  25. package/dist/core/GraphFreshnessChecker.js +101 -0
  26. package/dist/core/HashUtils.d.ts +24 -0
  27. package/dist/core/HashUtils.d.ts.map +1 -0
  28. package/dist/core/HashUtils.js +45 -0
  29. package/dist/core/IncrementalReanalyzer.d.ts +36 -0
  30. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  31. package/dist/core/IncrementalReanalyzer.js +132 -0
  32. package/dist/core/NodeFactory.d.ts +266 -19
  33. package/dist/core/NodeFactory.d.ts.map +1 -1
  34. package/dist/core/NodeFactory.js +256 -21
  35. package/dist/core/ScopeTracker.d.ts +84 -0
  36. package/dist/core/ScopeTracker.d.ts.map +1 -0
  37. package/dist/core/ScopeTracker.js +116 -0
  38. package/dist/core/SemanticId.d.ts +90 -0
  39. package/dist/core/SemanticId.d.ts.map +1 -0
  40. package/dist/core/SemanticId.js +115 -0
  41. package/dist/core/VersionManager.d.ts.map +1 -1
  42. package/dist/core/VersionManager.js +3 -2
  43. package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
  44. package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
  45. package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
  46. package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
  47. package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
  48. package/dist/core/nodes/ArrayLiteralNode.js +43 -0
  49. package/dist/core/nodes/BranchNode.d.ts +41 -0
  50. package/dist/core/nodes/BranchNode.d.ts.map +1 -0
  51. package/dist/core/nodes/BranchNode.js +82 -0
  52. package/dist/core/nodes/CallSiteNode.d.ts +30 -2
  53. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
  54. package/dist/core/nodes/CallSiteNode.js +54 -4
  55. package/dist/core/nodes/CaseNode.d.ts +43 -0
  56. package/dist/core/nodes/CaseNode.d.ts.map +1 -0
  57. package/dist/core/nodes/CaseNode.js +81 -0
  58. package/dist/core/nodes/ClassNode.d.ts +34 -2
  59. package/dist/core/nodes/ClassNode.d.ts.map +1 -1
  60. package/dist/core/nodes/ClassNode.js +52 -4
  61. package/dist/core/nodes/ConstantNode.d.ts +2 -2
  62. package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
  63. package/dist/core/nodes/ConstantNode.js +6 -4
  64. package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
  65. package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
  66. package/dist/core/nodes/ConstructorCallNode.js +171 -0
  67. package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
  68. package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
  69. package/dist/core/nodes/DatabaseQueryNode.js +5 -2
  70. package/dist/core/nodes/DecoratorNode.d.ts +42 -0
  71. package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
  72. package/dist/core/nodes/DecoratorNode.js +64 -0
  73. package/dist/core/nodes/EnumNode.d.ts +42 -0
  74. package/dist/core/nodes/EnumNode.d.ts.map +1 -0
  75. package/dist/core/nodes/EnumNode.js +56 -0
  76. package/dist/core/nodes/EventListenerNode.d.ts +4 -4
  77. package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
  78. package/dist/core/nodes/EventListenerNode.js +7 -4
  79. package/dist/core/nodes/ExportNode.d.ts +38 -2
  80. package/dist/core/nodes/ExportNode.d.ts.map +1 -1
  81. package/dist/core/nodes/ExportNode.js +54 -4
  82. package/dist/core/nodes/ExpressionNode.d.ts +97 -0
  83. package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
  84. package/dist/core/nodes/ExpressionNode.js +180 -0
  85. package/dist/core/nodes/ExternalModuleNode.d.ts +32 -0
  86. package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
  87. package/dist/core/nodes/ExternalModuleNode.js +49 -0
  88. package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
  89. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
  90. package/dist/core/nodes/ExternalStdioNode.js +15 -8
  91. package/dist/core/nodes/FunctionNode.d.ts +36 -0
  92. package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
  93. package/dist/core/nodes/FunctionNode.js +80 -1
  94. package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
  95. package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
  96. package/dist/core/nodes/HttpRequestNode.js +7 -4
  97. package/dist/core/nodes/ImportNode.d.ts +28 -6
  98. package/dist/core/nodes/ImportNode.d.ts.map +1 -1
  99. package/dist/core/nodes/ImportNode.js +43 -8
  100. package/dist/core/nodes/InterfaceNode.d.ts +46 -0
  101. package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
  102. package/dist/core/nodes/InterfaceNode.js +57 -0
  103. package/dist/core/nodes/IssueNode.d.ts +73 -0
  104. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  105. package/dist/core/nodes/IssueNode.js +129 -0
  106. package/dist/core/nodes/LiteralNode.d.ts +2 -2
  107. package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
  108. package/dist/core/nodes/LiteralNode.js +6 -4
  109. package/dist/core/nodes/MethodCallNode.d.ts +32 -2
  110. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
  111. package/dist/core/nodes/MethodCallNode.js +57 -4
  112. package/dist/core/nodes/MethodNode.d.ts +34 -2
  113. package/dist/core/nodes/MethodNode.d.ts.map +1 -1
  114. package/dist/core/nodes/MethodNode.js +55 -3
  115. package/dist/core/nodes/ModuleNode.d.ts +31 -0
  116. package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
  117. package/dist/core/nodes/ModuleNode.js +37 -0
  118. package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
  119. package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
  120. package/dist/core/nodes/NetworkRequestNode.js +65 -0
  121. package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
  122. package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
  123. package/dist/core/nodes/ObjectLiteralNode.js +43 -0
  124. package/dist/core/nodes/ParameterNode.d.ts +2 -2
  125. package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
  126. package/dist/core/nodes/ParameterNode.js +5 -3
  127. package/dist/core/nodes/ScopeNode.d.ts +31 -0
  128. package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
  129. package/dist/core/nodes/ScopeNode.js +49 -0
  130. package/dist/core/nodes/TypeNode.d.ts +36 -0
  131. package/dist/core/nodes/TypeNode.d.ts.map +1 -0
  132. package/dist/core/nodes/TypeNode.js +55 -0
  133. package/dist/core/nodes/VariableDeclarationNode.d.ts +29 -2
  134. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
  135. package/dist/core/nodes/VariableDeclarationNode.js +48 -4
  136. package/dist/core/nodes/index.d.ts +15 -1
  137. package/dist/core/nodes/index.d.ts.map +1 -1
  138. package/dist/core/nodes/index.js +17 -0
  139. package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
  140. package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
  141. package/dist/data/builtins/BuiltinRegistry.js +110 -0
  142. package/dist/data/builtins/definitions.d.ts +28 -0
  143. package/dist/data/builtins/definitions.d.ts.map +1 -0
  144. package/dist/data/builtins/definitions.js +250 -0
  145. package/dist/data/builtins/index.d.ts +10 -0
  146. package/dist/data/builtins/index.d.ts.map +1 -0
  147. package/dist/data/builtins/index.js +8 -0
  148. package/dist/data/builtins/jsGlobals.d.ts +18 -0
  149. package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
  150. package/dist/data/builtins/jsGlobals.js +26 -0
  151. package/dist/data/builtins/types.d.ts +34 -0
  152. package/dist/data/builtins/types.d.ts.map +1 -0
  153. package/dist/data/builtins/types.js +7 -0
  154. package/dist/data/globals/definitions.d.ts +27 -0
  155. package/dist/data/globals/definitions.d.ts.map +1 -0
  156. package/dist/data/globals/definitions.js +117 -0
  157. package/dist/data/globals/index.d.ts +36 -0
  158. package/dist/data/globals/index.d.ts.map +1 -0
  159. package/dist/data/globals/index.js +52 -0
  160. package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
  161. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  162. package/dist/diagnostics/DiagnosticCollector.js +129 -0
  163. package/dist/diagnostics/DiagnosticReporter.d.ts +100 -0
  164. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  165. package/dist/diagnostics/DiagnosticReporter.js +247 -0
  166. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  167. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  168. package/dist/diagnostics/DiagnosticWriter.js +43 -0
  169. package/dist/diagnostics/index.d.ts +14 -0
  170. package/dist/diagnostics/index.d.ts.map +1 -0
  171. package/dist/diagnostics/index.js +11 -0
  172. package/dist/errors/GrafemaError.d.ts +161 -0
  173. package/dist/errors/GrafemaError.d.ts.map +1 -0
  174. package/dist/errors/GrafemaError.js +181 -0
  175. package/dist/index.d.ts +73 -1
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +70 -1
  178. package/dist/logging/Logger.d.ts +48 -0
  179. package/dist/logging/Logger.d.ts.map +1 -0
  180. package/dist/logging/Logger.js +134 -0
  181. package/dist/plugins/Plugin.d.ts +5 -1
  182. package/dist/plugins/Plugin.d.ts.map +1 -1
  183. package/dist/plugins/Plugin.js +33 -0
  184. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  185. package/dist/plugins/analysis/DatabaseAnalyzer.js +14 -6
  186. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  187. package/dist/plugins/analysis/ExpressAnalyzer.js +29 -19
  188. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
  189. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
  190. package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
  191. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  192. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +71 -29
  193. package/dist/plugins/analysis/FetchAnalyzer.d.ts +41 -0
  194. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  195. package/dist/plugins/analysis/FetchAnalyzer.js +187 -19
  196. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
  197. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  198. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
  199. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +313 -19
  200. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  201. package/dist/plugins/analysis/JSASTAnalyzer.js +3430 -503
  202. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  203. package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
  204. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  205. package/dist/plugins/analysis/RustAnalyzer.js +16 -11
  206. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  207. package/dist/plugins/analysis/SQLiteAnalyzer.js +11 -7
  208. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  209. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
  210. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
  211. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  212. package/dist/plugins/analysis/SocketIOAnalyzer.js +117 -21
  213. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  214. package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
  215. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +207 -4
  216. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  217. package/dist/plugins/analysis/ast/GraphBuilder.js +1527 -316
  218. package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
  219. package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
  220. package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
  221. package/dist/plugins/analysis/ast/types.d.ts +470 -5
  222. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  223. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
  224. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
  225. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
  226. package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
  227. package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
  228. package/dist/plugins/analysis/ast/utils/index.js +5 -0
  229. package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
  230. package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
  231. package/dist/plugins/analysis/ast/utils/location.js +78 -0
  232. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +14 -5
  233. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  234. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
  235. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +100 -9
  236. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  237. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +674 -125
  238. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
  239. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  240. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
  241. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +14 -1
  242. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  243. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +190 -63
  244. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
  245. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
  246. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +112 -8
  247. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
  248. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  249. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
  250. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +20 -2
  251. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  252. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +243 -45
  253. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  254. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
  255. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
  256. package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
  257. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
  258. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
  259. package/dist/plugins/discovery/WorkspaceDiscovery.js +141 -0
  260. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
  261. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
  262. package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
  263. package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
  264. package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
  265. package/dist/plugins/discovery/workspaces/detector.js +49 -0
  266. package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
  267. package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
  268. package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
  269. package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
  270. package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
  271. package/dist/plugins/discovery/workspaces/index.js +8 -0
  272. package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
  273. package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
  274. package/dist/plugins/discovery/workspaces/parsers.js +80 -0
  275. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  276. package/dist/plugins/enrichment/AliasTracker.js +29 -8
  277. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
  278. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
  279. package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
  280. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
  281. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
  282. package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
  283. package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
  284. package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
  285. package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
  286. package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
  287. package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
  288. package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
  289. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
  290. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  291. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +78 -27
  292. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  293. package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
  294. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  295. package/dist/plugins/enrichment/MethodCallResolver.js +33 -13
  296. package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
  297. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  298. package/dist/plugins/enrichment/MountPointResolver.js +173 -147
  299. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
  300. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
  301. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
  302. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  303. package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
  304. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  305. package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
  306. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +22 -27
  307. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  308. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +185 -143
  309. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  310. package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
  311. package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
  312. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  313. package/dist/plugins/indexing/JSModuleIndexer.js +121 -31
  314. package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
  315. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  316. package/dist/plugins/indexing/RustModuleIndexer.js +8 -7
  317. package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
  318. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
  319. package/dist/plugins/indexing/ServiceDetector.js +28 -15
  320. package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
  321. package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
  322. package/dist/plugins/validation/BrokenImportValidator.js +249 -0
  323. package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
  324. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  325. package/dist/plugins/validation/CallResolverValidator.js +103 -77
  326. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
  327. package/dist/plugins/validation/DataFlowValidator.js +62 -49
  328. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
  329. package/dist/plugins/validation/EvalBanValidator.js +17 -16
  330. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  331. package/dist/plugins/validation/GraphConnectivityValidator.js +44 -24
  332. package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
  333. package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
  334. package/dist/plugins/validation/NodeCreationValidator.js +415 -0
  335. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  336. package/dist/plugins/validation/SQLInjectionValidator.js +61 -19
  337. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
  338. package/dist/plugins/validation/ShadowingDetector.js +6 -5
  339. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
  340. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
  341. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
  342. package/dist/plugins/vcs/GitPlugin.js +10 -12
  343. package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
  344. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
  345. package/dist/plugins/vcs/VCSPlugin.js +5 -5
  346. package/dist/queries/findCallsInFunction.d.ts +52 -0
  347. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  348. package/dist/queries/findCallsInFunction.js +135 -0
  349. package/dist/queries/findContainingFunction.d.ts +45 -0
  350. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  351. package/dist/queries/findContainingFunction.js +54 -0
  352. package/dist/queries/index.d.ts +14 -0
  353. package/dist/queries/index.d.ts.map +1 -0
  354. package/dist/queries/index.js +11 -0
  355. package/dist/queries/traceValues.d.ts +70 -0
  356. package/dist/queries/traceValues.d.ts.map +1 -0
  357. package/dist/queries/traceValues.js +299 -0
  358. package/dist/queries/types.d.ts +163 -0
  359. package/dist/queries/types.d.ts.map +1 -0
  360. package/dist/queries/types.js +9 -0
  361. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  362. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  363. package/dist/schema/GraphSchemaExtractor.js +124 -0
  364. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  365. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  366. package/dist/schema/InterfaceSchemaExtractor.js +112 -0
  367. package/dist/schema/index.d.ts +5 -0
  368. package/dist/schema/index.d.ts.map +1 -0
  369. package/dist/schema/index.js +2 -0
  370. package/dist/storage/backends/RFDBServerBackend.d.ts +21 -34
  371. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  372. package/dist/storage/backends/RFDBServerBackend.js +72 -62
  373. package/dist/storage/backends/typeValidation.d.ts.map +1 -1
  374. package/dist/storage/backends/typeValidation.js +1 -0
  375. package/dist/validation/PathValidator.d.ts +1 -2
  376. package/dist/validation/PathValidator.d.ts.map +1 -1
  377. package/package.json +3 -3
  378. package/src/Orchestrator.ts +272 -27
  379. package/src/config/ConfigLoader.ts +354 -0
  380. package/src/config/index.ts +5 -0
  381. package/src/core/ASTWorker.ts +143 -139
  382. package/src/core/CoverageAnalyzer.ts +243 -0
  383. package/src/core/FileExplainer.ts +179 -0
  384. package/src/core/FileNodeManager.ts +100 -0
  385. package/src/core/GraphFreshnessChecker.ts +143 -0
  386. package/src/core/HashUtils.ts +48 -0
  387. package/src/core/IncrementalReanalyzer.ts +192 -0
  388. package/src/core/NodeFactory.ts +470 -23
  389. package/src/core/ScopeTracker.ts +154 -0
  390. package/src/core/SemanticId.ts +192 -0
  391. package/src/core/VersionManager.ts +3 -2
  392. package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
  393. package/src/core/nodes/ArrayLiteralNode.ts +66 -0
  394. package/src/core/nodes/BranchNode.ts +113 -0
  395. package/src/core/nodes/CallSiteNode.ts +64 -4
  396. package/src/core/nodes/CaseNode.ts +123 -0
  397. package/src/core/nodes/ClassNode.ts +67 -4
  398. package/src/core/nodes/ConstantNode.ts +5 -4
  399. package/src/core/nodes/ConstructorCallNode.ts +217 -0
  400. package/src/core/nodes/DatabaseQueryNode.ts +5 -1
  401. package/src/core/nodes/DecoratorNode.ts +92 -0
  402. package/src/core/nodes/EnumNode.ts +87 -0
  403. package/src/core/nodes/EventListenerNode.ts +7 -4
  404. package/src/core/nodes/ExportNode.ts +74 -4
  405. package/src/core/nodes/ExpressionNode.ts +232 -0
  406. package/src/core/nodes/ExternalModuleNode.ts +65 -0
  407. package/src/core/nodes/ExternalStdioNode.ts +17 -9
  408. package/src/core/nodes/FunctionNode.ts +101 -1
  409. package/src/core/nodes/HttpRequestNode.ts +7 -4
  410. package/src/core/nodes/ImportNode.ts +62 -13
  411. package/src/core/nodes/InterfaceNode.ts +92 -0
  412. package/src/core/nodes/IssueNode.ts +177 -0
  413. package/src/core/nodes/LiteralNode.ts +5 -4
  414. package/src/core/nodes/MethodCallNode.ts +70 -4
  415. package/src/core/nodes/MethodNode.ts +68 -3
  416. package/src/core/nodes/ModuleNode.ts +50 -0
  417. package/src/core/nodes/NetworkRequestNode.ts +77 -0
  418. package/src/core/nodes/ObjectLiteralNode.ts +66 -0
  419. package/src/core/nodes/ParameterNode.ts +4 -3
  420. package/src/core/nodes/ScopeNode.ts +65 -0
  421. package/src/core/nodes/TypeNode.ts +79 -0
  422. package/src/core/nodes/VariableDeclarationNode.ts +58 -4
  423. package/src/core/nodes/index.ts +21 -1
  424. package/src/data/builtins/BuiltinRegistry.ts +124 -0
  425. package/src/data/builtins/definitions.ts +267 -0
  426. package/src/data/builtins/index.ts +10 -0
  427. package/src/data/builtins/jsGlobals.ts +28 -0
  428. package/src/data/builtins/types.ts +36 -0
  429. package/src/data/globals/definitions.ts +156 -0
  430. package/src/data/globals/index.ts +66 -0
  431. package/src/diagnostics/DiagnosticCollector.ts +163 -0
  432. package/src/diagnostics/DiagnosticReporter.ts +324 -0
  433. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  434. package/src/diagnostics/index.ts +16 -0
  435. package/src/errors/GrafemaError.ts +239 -0
  436. package/src/index.ts +193 -1
  437. package/src/logging/Logger.ts +152 -0
  438. package/src/plugins/Plugin.ts +42 -0
  439. package/src/plugins/analysis/DatabaseAnalyzer.ts +16 -8
  440. package/src/plugins/analysis/ExpressAnalyzer.ts +33 -19
  441. package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
  442. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +76 -36
  443. package/src/plugins/analysis/FetchAnalyzer.ts +232 -21
  444. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
  445. package/src/plugins/analysis/JSASTAnalyzer.ts +4265 -587
  446. package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
  447. package/src/plugins/analysis/RustAnalyzer.ts +16 -11
  448. package/src/plugins/analysis/SQLiteAnalyzer.ts +13 -7
  449. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
  450. package/src/plugins/analysis/SocketIOAnalyzer.ts +151 -28
  451. package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
  452. package/src/plugins/analysis/ast/GraphBuilder.ts +1947 -327
  453. package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
  454. package/src/plugins/analysis/ast/types.ts +596 -6
  455. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
  456. package/src/plugins/analysis/ast/utils/index.ts +12 -0
  457. package/src/plugins/analysis/ast/utils/location.ts +103 -0
  458. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +19 -8
  459. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +924 -83
  460. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
  461. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +234 -93
  462. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +124 -9
  463. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
  464. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +294 -49
  465. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
  466. package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
  467. package/src/plugins/discovery/WorkspaceDiscovery.ts +184 -0
  468. package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
  469. package/src/plugins/discovery/workspaces/detector.ts +63 -0
  470. package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
  471. package/src/plugins/discovery/workspaces/index.ts +23 -0
  472. package/src/plugins/discovery/workspaces/parsers.ts +99 -0
  473. package/src/plugins/enrichment/AliasTracker.ts +35 -8
  474. package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
  475. package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
  476. package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
  477. package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
  478. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +84 -27
  479. package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
  480. package/src/plugins/enrichment/MethodCallResolver.ts +39 -13
  481. package/src/plugins/enrichment/MountPointResolver.ts +208 -195
  482. package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
  483. package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
  484. package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
  485. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +209 -189
  486. package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
  487. package/src/plugins/indexing/JSModuleIndexer.ts +140 -34
  488. package/src/plugins/indexing/RustModuleIndexer.ts +8 -7
  489. package/src/plugins/validation/BrokenImportValidator.ts +325 -0
  490. package/src/plugins/validation/CallResolverValidator.ts +131 -110
  491. package/src/plugins/validation/DataFlowValidator.ts +88 -67
  492. package/src/plugins/validation/EvalBanValidator.ts +17 -16
  493. package/src/plugins/validation/GraphConnectivityValidator.ts +58 -24
  494. package/src/plugins/validation/NodeCreationValidator.ts +554 -0
  495. package/src/plugins/validation/SQLInjectionValidator.ts +63 -20
  496. package/src/plugins/validation/ShadowingDetector.ts +6 -5
  497. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
  498. package/src/plugins/vcs/GitPlugin.ts +40 -12
  499. package/src/plugins/vcs/VCSPlugin.ts +7 -5
  500. package/src/queries/README.md +46 -0
  501. package/src/queries/findCallsInFunction.ts +206 -0
  502. package/src/queries/findContainingFunction.ts +83 -0
  503. package/src/queries/index.ts +23 -0
  504. package/src/queries/traceValues.ts +398 -0
  505. package/src/queries/types.ts +187 -0
  506. package/src/schema/GraphSchemaExtractor.ts +177 -0
  507. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  508. package/src/schema/index.ts +5 -0
  509. package/src/storage/backends/RFDBServerBackend.ts +100 -98
  510. package/src/storage/backends/typeValidation.ts +1 -0
  511. package/src/validation/PathValidator.ts +1 -1
  512. package/dist/core/AnalysisWorker.d.ts +0 -14
  513. package/dist/core/AnalysisWorker.d.ts.map +0 -1
  514. package/dist/core/AnalysisWorker.js +0 -307
  515. package/dist/core/ParallelAnalyzer.d.ts +0 -120
  516. package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
  517. package/dist/core/ParallelAnalyzer.js +0 -331
  518. package/dist/core/QueueWorker.d.ts +0 -12
  519. package/dist/core/QueueWorker.d.ts.map +0 -1
  520. package/dist/core/QueueWorker.js +0 -567
  521. package/dist/core/RFDBClient.d.ts +0 -179
  522. package/dist/core/RFDBClient.d.ts.map +0 -1
  523. package/dist/core/RFDBClient.js +0 -429
  524. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
  525. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
  526. package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
  527. package/src/core/AnalysisWorker.ts +0 -410
  528. package/src/core/ParallelAnalyzer.ts +0 -476
  529. package/src/core/QueueWorker.ts +0 -780
  530. package/src/plugins/indexing/ServiceDetector.ts +0 -230
@@ -0,0 +1,101 @@
1
+ /**
2
+ * FileExplainer - Show what nodes exist in a file for discovery
3
+ *
4
+ * Purpose: Help users discover what nodes exist in the graph for a file,
5
+ * displaying semantic IDs so users can query them.
6
+ *
7
+ * This addresses the core UX problem: users can't find nodes because
8
+ * semantic IDs are opaque (e.g., "src/app.ts->fetchData->try#0->VARIABLE->response").
9
+ * This tool shows what's in the graph so users know what they can query.
10
+ *
11
+ * @see _tasks/REG-177/006-don-revised-plan.md for design rationale
12
+ */
13
+ import type { GraphBackend, BaseNodeRecord } from '@grafema/types';
14
+ /**
15
+ * Result of explaining a file's graph contents
16
+ */
17
+ export interface FileExplainResult {
18
+ /** The file path that was explained */
19
+ file: string;
20
+ /** Whether the file has been analyzed */
21
+ status: 'ANALYZED' | 'NOT_ANALYZED';
22
+ /** All nodes in the graph for this file, enhanced with context */
23
+ nodes: EnhancedNode[];
24
+ /** Node counts grouped by type */
25
+ byType: Record<string, number>;
26
+ /** Total number of nodes in the file */
27
+ totalCount: number;
28
+ }
29
+ /**
30
+ * A node record enhanced with scope context information.
31
+ *
32
+ * The context field provides human-readable information about
33
+ * where the node appears (e.g., "inside try block", "catch parameter").
34
+ */
35
+ export interface EnhancedNode extends BaseNodeRecord {
36
+ /** Human-readable context about the node's scope */
37
+ context?: string;
38
+ }
39
+ /**
40
+ * FileExplainer class - explains what nodes exist in a file's graph.
41
+ *
42
+ * Use this when:
43
+ * - User can't find a variable/function they expect to be in the graph
44
+ * - User wants to understand what's been analyzed for a file
45
+ * - User needs semantic IDs to construct queries
46
+ *
47
+ * Example:
48
+ * ```typescript
49
+ * const explainer = new FileExplainer(graphBackend);
50
+ * const result = await explainer.explain('src/app.ts');
51
+ *
52
+ * if (result.status === 'NOT_ANALYZED') {
53
+ * console.log('File not in graph. Run: grafema analyze');
54
+ * } else {
55
+ * for (const node of result.nodes) {
56
+ * console.log(`[${node.type}] ${node.name}`);
57
+ * console.log(` ID: ${node.id}`);
58
+ * if (node.context) {
59
+ * console.log(` Context: ${node.context}`);
60
+ * }
61
+ * }
62
+ * }
63
+ * ```
64
+ */
65
+ export declare class FileExplainer {
66
+ private graph;
67
+ constructor(graph: GraphBackend);
68
+ /**
69
+ * Explain what nodes exist in the graph for a file.
70
+ *
71
+ * @param filePath - The file path to explain (relative or absolute)
72
+ * @returns FileExplainResult with all nodes, grouped by type, with context
73
+ */
74
+ explain(filePath: string): Promise<FileExplainResult>;
75
+ /**
76
+ * Query graph for all nodes in a file
77
+ *
78
+ * Note: The server-side file filter may not work correctly in all cases,
79
+ * so we also filter client-side to ensure only nodes from the requested file are returned.
80
+ */
81
+ private getNodesForFile;
82
+ /**
83
+ * Group nodes by type, counting occurrences
84
+ */
85
+ private groupByType;
86
+ /**
87
+ * Enhance nodes with human-readable scope context.
88
+ *
89
+ * Detects patterns in semantic IDs like:
90
+ * - "file->func->try#0->VARIABLE->x" → "inside try block"
91
+ * - "file->func->catch#0->VARIABLE->error" → "inside catch block"
92
+ */
93
+ private enhanceWithContext;
94
+ /**
95
+ * Detect scope context from semantic ID patterns.
96
+ *
97
+ * Returns human-readable context string or undefined if no special scope.
98
+ */
99
+ private detectScopeContext;
100
+ }
101
+ //# sourceMappingURL=FileExplainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileExplainer.d.ts","sourceRoot":"","sources":["../../src/core/FileExplainer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAc,MAAM,gBAAgB,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC;IACpC,kEAAkE;IAClE,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY;IAEvC;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA0B3D;;;;;OAKG;YACW,eAAe;IAc7B;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAQ3B"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * FileExplainer - Show what nodes exist in a file for discovery
3
+ *
4
+ * Purpose: Help users discover what nodes exist in the graph for a file,
5
+ * displaying semantic IDs so users can query them.
6
+ *
7
+ * This addresses the core UX problem: users can't find nodes because
8
+ * semantic IDs are opaque (e.g., "src/app.ts->fetchData->try#0->VARIABLE->response").
9
+ * This tool shows what's in the graph so users know what they can query.
10
+ *
11
+ * @see _tasks/REG-177/006-don-revised-plan.md for design rationale
12
+ */
13
+ /**
14
+ * Scope patterns to detect from semantic IDs.
15
+ * Order matters - more specific patterns should come first.
16
+ */
17
+ const SCOPE_PATTERNS = [
18
+ { pattern: /->catch#\d+->/, context: 'inside catch block' },
19
+ { pattern: /->try#\d+->/, context: 'inside try block' },
20
+ { pattern: /->if#\d+->/, context: 'inside conditional' },
21
+ { pattern: /->else#\d+->/, context: 'inside else block' },
22
+ { pattern: /->for#\d+->/, context: 'inside loop' },
23
+ { pattern: /->while#\d+->/, context: 'inside loop' },
24
+ { pattern: /->switch#\d+->/, context: 'inside switch' },
25
+ ];
26
+ /**
27
+ * FileExplainer class - explains what nodes exist in a file's graph.
28
+ *
29
+ * Use this when:
30
+ * - User can't find a variable/function they expect to be in the graph
31
+ * - User wants to understand what's been analyzed for a file
32
+ * - User needs semantic IDs to construct queries
33
+ *
34
+ * Example:
35
+ * ```typescript
36
+ * const explainer = new FileExplainer(graphBackend);
37
+ * const result = await explainer.explain('src/app.ts');
38
+ *
39
+ * if (result.status === 'NOT_ANALYZED') {
40
+ * console.log('File not in graph. Run: grafema analyze');
41
+ * } else {
42
+ * for (const node of result.nodes) {
43
+ * console.log(`[${node.type}] ${node.name}`);
44
+ * console.log(` ID: ${node.id}`);
45
+ * if (node.context) {
46
+ * console.log(` Context: ${node.context}`);
47
+ * }
48
+ * }
49
+ * }
50
+ * ```
51
+ */
52
+ export class FileExplainer {
53
+ graph;
54
+ constructor(graph) {
55
+ this.graph = graph;
56
+ }
57
+ /**
58
+ * Explain what nodes exist in the graph for a file.
59
+ *
60
+ * @param filePath - The file path to explain (relative or absolute)
61
+ * @returns FileExplainResult with all nodes, grouped by type, with context
62
+ */
63
+ async explain(filePath) {
64
+ // Query graph for all nodes in this file
65
+ const nodes = await this.getNodesForFile(filePath);
66
+ // Group by type
67
+ const byType = this.groupByType(nodes);
68
+ // Enhance with context from semantic ID parsing
69
+ const enhanced = this.enhanceWithContext(nodes);
70
+ // Sort nodes: by type, then by name
71
+ enhanced.sort((a, b) => {
72
+ const typeCompare = a.type.localeCompare(b.type);
73
+ if (typeCompare !== 0)
74
+ return typeCompare;
75
+ return (a.name || '').localeCompare(b.name || '');
76
+ });
77
+ return {
78
+ file: filePath,
79
+ status: nodes.length > 0 ? 'ANALYZED' : 'NOT_ANALYZED',
80
+ nodes: enhanced,
81
+ byType,
82
+ totalCount: nodes.length,
83
+ };
84
+ }
85
+ /**
86
+ * Query graph for all nodes in a file
87
+ *
88
+ * Note: The server-side file filter may not work correctly in all cases,
89
+ * so we also filter client-side to ensure only nodes from the requested file are returned.
90
+ */
91
+ async getNodesForFile(filePath) {
92
+ const filter = { file: filePath };
93
+ const nodes = [];
94
+ for await (const node of this.graph.queryNodes(filter)) {
95
+ // Client-side filter as backup (server filter may not work correctly)
96
+ if (node.file === filePath) {
97
+ nodes.push(node);
98
+ }
99
+ }
100
+ return nodes;
101
+ }
102
+ /**
103
+ * Group nodes by type, counting occurrences
104
+ */
105
+ groupByType(nodes) {
106
+ const counts = {};
107
+ for (const node of nodes) {
108
+ const type = node.type || 'UNKNOWN';
109
+ counts[type] = (counts[type] || 0) + 1;
110
+ }
111
+ return counts;
112
+ }
113
+ /**
114
+ * Enhance nodes with human-readable scope context.
115
+ *
116
+ * Detects patterns in semantic IDs like:
117
+ * - "file->func->try#0->VARIABLE->x" → "inside try block"
118
+ * - "file->func->catch#0->VARIABLE->error" → "inside catch block"
119
+ */
120
+ enhanceWithContext(nodes) {
121
+ return nodes.map((node) => {
122
+ const context = this.detectScopeContext(node.id);
123
+ return context ? { ...node, context } : { ...node };
124
+ });
125
+ }
126
+ /**
127
+ * Detect scope context from semantic ID patterns.
128
+ *
129
+ * Returns human-readable context string or undefined if no special scope.
130
+ */
131
+ detectScopeContext(semanticId) {
132
+ for (const { pattern, context } of SCOPE_PATTERNS) {
133
+ if (pattern.test(semanticId)) {
134
+ return context;
135
+ }
136
+ }
137
+ return undefined;
138
+ }
139
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * FileNodeManager - utility for idempotent file node clearing
3
+ *
4
+ * Problem: Multiple phases create nodes for the same file:
5
+ * - INDEXING creates MODULE nodes
6
+ * - ANALYSIS creates FUNCTION, CLASS, SCOPE, etc. nodes
7
+ *
8
+ * When re-analyzing with forceAnalysis=true, we need to clear existing
9
+ * nodes BEFORE any phase creates new nodes for that file.
10
+ *
11
+ * Solution: Track "touched" files. First touch clears all nodes for that file.
12
+ * Subsequent touches (from other phases) are no-ops.
13
+ */
14
+ import type { GraphBackend } from '@grafema/types';
15
+ /**
16
+ * Clear all nodes for a file if it hasn't been touched yet in this analysis run.
17
+ *
18
+ * Thread-safety note: The touchedFiles Set is shared across concurrent Promise.all
19
+ * calls, but this is safe because:
20
+ * 1. The check (has) and add are synchronous operations
21
+ * 2. We add to the set BEFORE the async clear operation
22
+ * 3. Other concurrent calls will see the file as touched immediately
23
+ *
24
+ * @param graph - Graph backend with deleteNode support
25
+ * @param file - Absolute file path to clear nodes for
26
+ * @param touchedFiles - Set tracking files already touched in this run
27
+ * @returns Number of nodes deleted (0 if file was already touched or backend doesn't support delete)
28
+ */
29
+ export declare function clearFileNodesIfNeeded(graph: GraphBackend, file: string, touchedFiles: Set<string>): Promise<number>;
30
+ /**
31
+ * Clear a SERVICE node by ID.
32
+ * SERVICE nodes have file=directory_path (not individual files), so they need
33
+ * explicit clearing separate from file-based clearing.
34
+ *
35
+ * @param graph - Graph backend with deleteNode support
36
+ * @param serviceId - SERVICE node ID (e.g., "SERVICE:apps/api")
37
+ * @returns true if node was deleted, false otherwise
38
+ */
39
+ export declare function clearServiceNodeIfExists(graph: GraphBackend, serviceId: string): Promise<boolean>;
40
+ //# sourceMappingURL=FileNodeManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileNodeManager.d.ts","sourceRoot":"","sources":["../../src/core/FileNodeManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,OAAO,CAAC,MAAM,CAAC,CAsCjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAalB"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * FileNodeManager - utility for idempotent file node clearing
3
+ *
4
+ * Problem: Multiple phases create nodes for the same file:
5
+ * - INDEXING creates MODULE nodes
6
+ * - ANALYSIS creates FUNCTION, CLASS, SCOPE, etc. nodes
7
+ *
8
+ * When re-analyzing with forceAnalysis=true, we need to clear existing
9
+ * nodes BEFORE any phase creates new nodes for that file.
10
+ *
11
+ * Solution: Track "touched" files. First touch clears all nodes for that file.
12
+ * Subsequent touches (from other phases) are no-ops.
13
+ */
14
+ /**
15
+ * Clear all nodes for a file if it hasn't been touched yet in this analysis run.
16
+ *
17
+ * Thread-safety note: The touchedFiles Set is shared across concurrent Promise.all
18
+ * calls, but this is safe because:
19
+ * 1. The check (has) and add are synchronous operations
20
+ * 2. We add to the set BEFORE the async clear operation
21
+ * 3. Other concurrent calls will see the file as touched immediately
22
+ *
23
+ * @param graph - Graph backend with deleteNode support
24
+ * @param file - Absolute file path to clear nodes for
25
+ * @param touchedFiles - Set tracking files already touched in this run
26
+ * @returns Number of nodes deleted (0 if file was already touched or backend doesn't support delete)
27
+ */
28
+ export async function clearFileNodesIfNeeded(graph, file, touchedFiles) {
29
+ // Already touched in this run - nothing to clear
30
+ if (touchedFiles.has(file)) {
31
+ return 0;
32
+ }
33
+ // Mark as touched BEFORE clearing (sync operation, makes subsequent concurrent calls no-op)
34
+ touchedFiles.add(file);
35
+ // Skip if backend doesn't support deletion
36
+ if (!graph.deleteNode) {
37
+ return 0;
38
+ }
39
+ // Collect all nodes for this file
40
+ const nodesToDelete = [];
41
+ for await (const node of graph.queryNodes({ file })) {
42
+ nodesToDelete.push(node.id);
43
+ }
44
+ // Delete all of them - NO EXCLUSIONS
45
+ // MODULE nodes will be recreated by INDEXING phase
46
+ // FUNCTION/CLASS/etc will be recreated by ANALYSIS phase
47
+ for (const id of nodesToDelete) {
48
+ try {
49
+ await graph.deleteNode(id);
50
+ }
51
+ catch (err) {
52
+ // Log but continue - node might already be deleted by concurrent operation
53
+ console.warn(`[FileNodeManager] Failed to delete ${id}:`, err.message);
54
+ }
55
+ }
56
+ if (nodesToDelete.length > 0) {
57
+ const fileName = file.split('/').pop() || file;
58
+ console.log(`[FileNodeManager] Cleared ${nodesToDelete.length} nodes for ${fileName}`);
59
+ }
60
+ return nodesToDelete.length;
61
+ }
62
+ /**
63
+ * Clear a SERVICE node by ID.
64
+ * SERVICE nodes have file=directory_path (not individual files), so they need
65
+ * explicit clearing separate from file-based clearing.
66
+ *
67
+ * @param graph - Graph backend with deleteNode support
68
+ * @param serviceId - SERVICE node ID (e.g., "SERVICE:apps/api")
69
+ * @returns true if node was deleted, false otherwise
70
+ */
71
+ export async function clearServiceNodeIfExists(graph, serviceId) {
72
+ if (!graph.deleteNode) {
73
+ return false;
74
+ }
75
+ try {
76
+ await graph.deleteNode(serviceId);
77
+ console.log(`[FileNodeManager] Cleared SERVICE node: ${serviceId}`);
78
+ return true;
79
+ }
80
+ catch (err) {
81
+ // Node might not exist on fresh analysis - that's OK
82
+ return false;
83
+ }
84
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * GraphFreshnessChecker - checks if graph data matches current files
3
+ *
4
+ * Compares contentHash stored in MODULE nodes against current file hashes.
5
+ * Used by `grafema check` to detect when files have changed since analysis.
6
+ */
7
+ import type { NodeRecord } from '@grafema/types';
8
+ export interface StaleModule {
9
+ id: string;
10
+ file: string;
11
+ storedHash: string;
12
+ currentHash: string | null;
13
+ reason: 'changed' | 'deleted' | 'unreadable';
14
+ }
15
+ export interface FreshnessResult {
16
+ isFresh: boolean;
17
+ staleModules: StaleModule[];
18
+ freshCount: number;
19
+ staleCount: number;
20
+ deletedCount: number;
21
+ checkDurationMs: number;
22
+ }
23
+ export interface FreshnessGraph {
24
+ queryNodes(query: {
25
+ type: string;
26
+ }): AsyncGenerator<NodeRecord, void, unknown>;
27
+ }
28
+ export declare class GraphFreshnessChecker {
29
+ checkFreshness(graph: FreshnessGraph): Promise<FreshnessResult>;
30
+ private _checkModuleFreshness;
31
+ private _fileExists;
32
+ }
33
+ //# sourceMappingURL=GraphFreshnessChecker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphFreshnessChecker.d.ts","sourceRoot":"","sources":["../../src/core/GraphFreshnessChecker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;CAChF;AAUD,qBAAa,qBAAqB;IAC1B,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;YAyDvD,qBAAqB;YAoCrB,WAAW;CAQ1B"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * GraphFreshnessChecker - checks if graph data matches current files
3
+ *
4
+ * Compares contentHash stored in MODULE nodes against current file hashes.
5
+ * Used by `grafema check` to detect when files have changed since analysis.
6
+ */
7
+ import { access, constants } from 'fs/promises';
8
+ import { calculateFileHashAsync } from './HashUtils.js';
9
+ const BATCH_SIZE = 50;
10
+ export class GraphFreshnessChecker {
11
+ async checkFreshness(graph) {
12
+ const startTime = Date.now();
13
+ const modules = [];
14
+ for await (const node of graph.queryNodes({ type: 'MODULE' })) {
15
+ if (node.file && typeof node.contentHash === 'string') {
16
+ modules.push({
17
+ id: node.id,
18
+ file: node.file,
19
+ contentHash: node.contentHash
20
+ });
21
+ }
22
+ }
23
+ if (modules.length === 0) {
24
+ return {
25
+ isFresh: true,
26
+ staleModules: [],
27
+ freshCount: 0,
28
+ staleCount: 0,
29
+ deletedCount: 0,
30
+ checkDurationMs: Date.now() - startTime
31
+ };
32
+ }
33
+ const staleModules = [];
34
+ let freshCount = 0;
35
+ let deletedCount = 0;
36
+ for (let i = 0; i < modules.length; i += BATCH_SIZE) {
37
+ const batch = modules.slice(i, i + BATCH_SIZE);
38
+ const results = await Promise.all(batch.map(module => this._checkModuleFreshness(module)));
39
+ for (const result of results) {
40
+ if (result === null) {
41
+ freshCount++;
42
+ }
43
+ else {
44
+ staleModules.push(result);
45
+ if (result.reason === 'deleted') {
46
+ deletedCount++;
47
+ }
48
+ }
49
+ }
50
+ }
51
+ return {
52
+ isFresh: staleModules.length === 0,
53
+ staleModules,
54
+ freshCount,
55
+ staleCount: staleModules.length,
56
+ deletedCount,
57
+ checkDurationMs: Date.now() - startTime
58
+ };
59
+ }
60
+ async _checkModuleFreshness(module) {
61
+ const exists = await this._fileExists(module.file);
62
+ if (!exists) {
63
+ return {
64
+ id: module.id,
65
+ file: module.file,
66
+ storedHash: module.contentHash,
67
+ currentHash: null,
68
+ reason: 'deleted'
69
+ };
70
+ }
71
+ const currentHash = await calculateFileHashAsync(module.file);
72
+ if (currentHash === null) {
73
+ return {
74
+ id: module.id,
75
+ file: module.file,
76
+ storedHash: module.contentHash,
77
+ currentHash: null,
78
+ reason: 'unreadable'
79
+ };
80
+ }
81
+ if (currentHash !== module.contentHash) {
82
+ return {
83
+ id: module.id,
84
+ file: module.file,
85
+ storedHash: module.contentHash,
86
+ currentHash,
87
+ reason: 'changed'
88
+ };
89
+ }
90
+ return null;
91
+ }
92
+ async _fileExists(filePath) {
93
+ try {
94
+ await access(filePath, constants.R_OK);
95
+ return true;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * HashUtils - unified hash computation for Grafema
3
+ *
4
+ * WHY THIS EXISTS:
5
+ * - 6 copies of the same hash computation existed across the codebase
6
+ * - Single source of truth ensures consistent hashing everywhere
7
+ * - Makes future algorithm changes (e.g., SHA-256 -> BLAKE3) trivial
8
+ */
9
+ /**
10
+ * Calculate hash from a file path (synchronous).
11
+ * Returns null if file doesn't exist or is unreadable.
12
+ */
13
+ export declare function calculateFileHash(filePath: string): string | null;
14
+ /**
15
+ * Calculate hash from a file path (asynchronous).
16
+ * Returns null if file doesn't exist or is unreadable.
17
+ */
18
+ export declare function calculateFileHashAsync(filePath: string): Promise<string | null>;
19
+ /**
20
+ * Calculate hash from content string.
21
+ * Always returns a hash (never null).
22
+ */
23
+ export declare function calculateContentHash(content: string): string;
24
+ //# sourceMappingURL=HashUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HashUtils.d.ts","sourceRoot":"","sources":["../../src/core/HashUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOjE;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOrF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * HashUtils - unified hash computation for Grafema
3
+ *
4
+ * WHY THIS EXISTS:
5
+ * - 6 copies of the same hash computation existed across the codebase
6
+ * - Single source of truth ensures consistent hashing everywhere
7
+ * - Makes future algorithm changes (e.g., SHA-256 -> BLAKE3) trivial
8
+ */
9
+ import { createHash } from 'crypto';
10
+ import { readFileSync } from 'fs';
11
+ import { readFile } from 'fs/promises';
12
+ const HASH_ALGORITHM = 'sha256';
13
+ /**
14
+ * Calculate hash from a file path (synchronous).
15
+ * Returns null if file doesn't exist or is unreadable.
16
+ */
17
+ export function calculateFileHash(filePath) {
18
+ try {
19
+ const content = readFileSync(filePath, 'utf-8');
20
+ return createHash(HASH_ALGORITHM).update(content).digest('hex');
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ /**
27
+ * Calculate hash from a file path (asynchronous).
28
+ * Returns null if file doesn't exist or is unreadable.
29
+ */
30
+ export async function calculateFileHashAsync(filePath) {
31
+ try {
32
+ const content = await readFile(filePath, 'utf-8');
33
+ return createHash(HASH_ALGORITHM).update(content).digest('hex');
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ /**
40
+ * Calculate hash from content string.
41
+ * Always returns a hash (never null).
42
+ */
43
+ export function calculateContentHash(content) {
44
+ return createHash(HASH_ALGORITHM).update(content).digest('hex');
45
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * IncrementalReanalyzer - selective re-analysis of stale modules
3
+ *
4
+ * HOW IT WORKS:
5
+ * 1. Clear all nodes for stale files (using clearFileNodesIfNeeded)
6
+ * 2. Re-create MODULE nodes with updated contentHash
7
+ * 3. Run JSASTAnalyzer.analyzeModule() for each stale module
8
+ * 4. Re-run enrichment plugins to rebuild cross-file edges
9
+ */
10
+ import type { GraphBackend } from '@grafema/types';
11
+ import type { StaleModule } from './GraphFreshnessChecker.js';
12
+ export interface ReanalysisOptions {
13
+ skipEnrichment?: boolean;
14
+ onProgress?: (info: ReanalysisProgress) => void;
15
+ }
16
+ export interface ReanalysisProgress {
17
+ phase: 'clearing' | 'indexing' | 'analysis' | 'enrichment';
18
+ current: number;
19
+ total: number;
20
+ currentFile?: string;
21
+ }
22
+ export interface ReanalysisResult {
23
+ modulesReanalyzed: number;
24
+ modulesDeleted: number;
25
+ nodesCreated: number;
26
+ edgesCreated: number;
27
+ nodesCleared: number;
28
+ durationMs: number;
29
+ }
30
+ export declare class IncrementalReanalyzer {
31
+ private graph;
32
+ private projectPath;
33
+ constructor(graph: GraphBackend, projectPath: string);
34
+ reanalyze(staleModules: StaleModule[], options?: ReanalysisOptions): Promise<ReanalysisResult>;
35
+ }
36
+ //# sourceMappingURL=IncrementalReanalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IncrementalReanalyzer.d.ts","sourceRoot":"","sources":["../../src/core/IncrementalReanalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAYD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,WAAW,CAAS;gBAEhB,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IAK9C,SAAS,CACb,YAAY,EAAE,WAAW,EAAE,EAC3B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC;CAkI7B"}