@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
@@ -3,17 +3,30 @@
3
3
  *
4
4
  * Receives: { filePath, moduleId, moduleName }
5
5
  * Returns: { collections } - extracted AST data for GraphBuilder
6
+ *
7
+ * Uses ScopeTracker for semantic ID generation (REG-133).
8
+ * IDs are stable and don't change when unrelated code is added/removed.
6
9
  */
7
10
  import { parentPort } from 'worker_threads';
8
11
  import { readFileSync } from 'fs';
12
+ import { basename } from 'path';
9
13
  import { parse } from '@babel/parser';
10
14
  import traverseModule from '@babel/traverse';
15
+ import { ClassNode } from './nodes/ClassNode.js';
16
+ import { ImportNode } from './nodes/ImportNode.js';
17
+ import { ExportNode } from './nodes/ExportNode.js';
18
+ import { ScopeTracker } from './ScopeTracker.js';
19
+ import { computeSemanticId } from './SemanticId.js';
20
+ import { getLine, getColumn } from '../plugins/analysis/ast/utils/location.js';
11
21
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
22
  const traverse = traverseModule.default || traverseModule;
13
23
  // Simplified visitors for extraction (no graph access needed)
14
24
  import { ExpressionEvaluator } from '../plugins/analysis/ast/ExpressionEvaluator.js';
15
25
  /**
16
26
  * Parse a single module and extract all collections
27
+ *
28
+ * Uses ScopeTracker for semantic ID generation - IDs are stable
29
+ * and don't change when unrelated code is added/removed.
17
30
  */
18
31
  function parseModule(filePath, moduleId, moduleName) {
19
32
  const code = readFileSync(filePath, 'utf-8');
@@ -21,6 +34,9 @@ function parseModule(filePath, moduleId, moduleName) {
21
34
  sourceType: 'module',
22
35
  plugins: ['jsx', 'typescript']
23
36
  });
37
+ // Create ScopeTracker for semantic ID generation
38
+ // Use basename for shorter, more readable IDs
39
+ const scopeTracker = new ScopeTracker(basename(filePath));
24
40
  // Collections to extract
25
41
  const collections = {
26
42
  functions: [],
@@ -40,17 +56,7 @@ function parseModule(filePath, moduleId, moduleName) {
40
56
  literals: [],
41
57
  variableAssignments: []
42
58
  };
43
- // Counters for unique IDs
44
- const counters = {
45
- ifScope: 0,
46
- scope: 0,
47
- varDecl: 0,
48
- callSite: 0,
49
- function: 0,
50
- httpRequest: 0,
51
- literal: 0
52
- };
53
- // Processed nodes tracking
59
+ // Processed nodes tracking (still needed for deduplication)
54
60
  const processed = {
55
61
  callSites: new Set(),
56
62
  methodCalls: new Set(),
@@ -78,54 +84,35 @@ function parseModule(filePath, moduleId, moduleName) {
78
84
  importedName = spec.imported?.name || spec.local.name;
79
85
  localName = spec.local.name;
80
86
  }
81
- collections.imports.push({
82
- id: `IMPORT#${localName}#${filePath}#${node.loc.start.line}`,
83
- type: 'IMPORT',
84
- name: localName,
85
- importedName,
86
- source,
87
- file: filePath,
88
- line: node.loc.start.line
89
- });
87
+ // Babel AST guarantees node.loc exists with locations: true option
88
+ const importNode = ImportNode.create(localName, // name
89
+ filePath, // file
90
+ getLine(node), // line (non-null - Babel guarantees location)
91
+ 0, // column (not available in this worker)
92
+ source, // source
93
+ { imported: importedName, local: localName });
94
+ collections.imports.push(importNode);
90
95
  });
91
96
  }
92
97
  });
93
- // Extract exports
98
+ // Extract exports using semantic IDs (via createWithContext)
94
99
  traverse(ast, {
95
100
  ExportNamedDeclaration(path) {
96
101
  const node = path.node;
97
102
  if (node.declaration) {
98
103
  if (node.declaration.type === 'FunctionDeclaration' && node.declaration.id) {
99
- collections.exports.push({
100
- id: `EXPORT#${node.declaration.id.name}#${filePath}#${node.loc.start.line}`,
101
- type: 'EXPORT',
102
- name: node.declaration.id.name,
103
- exportType: 'function',
104
- file: filePath,
105
- line: node.loc.start.line
106
- });
104
+ const exportNode = ExportNode.createWithContext(node.declaration.id.name, scopeTracker.getContext(), { line: getLine(node), column: 0 }, { exportType: 'named' });
105
+ collections.exports.push(exportNode);
107
106
  }
108
107
  else if (node.declaration.type === 'ClassDeclaration' && node.declaration.id) {
109
- collections.exports.push({
110
- id: `EXPORT#${node.declaration.id.name}#${filePath}#${node.loc.start.line}`,
111
- type: 'EXPORT',
112
- name: node.declaration.id.name,
113
- exportType: 'class',
114
- file: filePath,
115
- line: node.loc.start.line
116
- });
108
+ const exportNode = ExportNode.createWithContext(node.declaration.id.name, scopeTracker.getContext(), { line: getLine(node), column: 0 }, { exportType: 'named' });
109
+ collections.exports.push(exportNode);
117
110
  }
118
111
  else if (node.declaration.type === 'VariableDeclaration') {
119
112
  node.declaration.declarations.forEach(decl => {
120
113
  if (decl.id.type === 'Identifier') {
121
- collections.exports.push({
122
- id: `EXPORT#${decl.id.name}#${filePath}#${node.loc.start.line}`,
123
- type: 'EXPORT',
124
- name: decl.id.name,
125
- exportType: 'variable',
126
- file: filePath,
127
- line: node.loc.start.line
128
- });
114
+ const exportNode = ExportNode.createWithContext(decl.id.name, scopeTracker.getContext(), { line: getLine(node), column: 0 }, { exportType: 'named' });
115
+ collections.exports.push(exportNode);
129
116
  }
130
117
  });
131
118
  }
@@ -135,38 +122,32 @@ function parseModule(filePath, moduleId, moduleName) {
135
122
  if (spec.type !== 'ExportSpecifier')
136
123
  return;
137
124
  const exportedName = spec.exported.type === 'Identifier' ? spec.exported.name : spec.exported.value;
138
- collections.exports.push({
139
- id: `EXPORT#${exportedName}#${filePath}#${node.loc.start.line}`,
140
- type: 'EXPORT',
141
- name: exportedName,
142
- localName: spec.local.name,
143
- file: filePath,
144
- line: node.loc.start.line
125
+ const exportNode = ExportNode.createWithContext(exportedName, scopeTracker.getContext(), { line: getLine(node), column: 0 }, {
126
+ local: spec.local.name,
127
+ exportType: 'named'
145
128
  });
129
+ collections.exports.push(exportNode);
146
130
  });
147
131
  }
148
132
  },
149
133
  ExportDefaultDeclaration(path) {
150
134
  const node = path.node;
151
- let name = 'default';
135
+ let localName = 'default';
152
136
  if (node.declaration.type === 'Identifier') {
153
- name = node.declaration.name;
137
+ localName = node.declaration.name;
154
138
  }
155
139
  else if ('id' in node.declaration && node.declaration.id) {
156
- name = node.declaration.id.name;
140
+ localName = node.declaration.id.name;
157
141
  }
158
- collections.exports.push({
159
- id: `EXPORT#default#${filePath}#${node.loc.start.line}`,
160
- type: 'EXPORT',
161
- name: 'default',
162
- localName: name,
163
- isDefault: true,
164
- file: filePath,
165
- line: node.loc.start.line
142
+ const exportNode = ExportNode.createWithContext('default', scopeTracker.getContext(), { line: getLine(node), column: 0 }, {
143
+ local: localName,
144
+ default: true,
145
+ exportType: 'default'
166
146
  });
147
+ collections.exports.push(exportNode);
167
148
  }
168
149
  });
169
- // Extract top-level variables
150
+ // Extract top-level variables using semantic IDs
170
151
  traverse(ast, {
171
152
  VariableDeclaration(path) {
172
153
  if (path.getFunctionParent())
@@ -176,15 +157,14 @@ function parseModule(filePath, moduleId, moduleName) {
176
157
  node.declarations.forEach(decl => {
177
158
  if (decl.id.type === 'Identifier') {
178
159
  const varName = decl.id.name;
179
- const line = decl.id.loc.start.line;
180
- const column = decl.id.loc.start.column;
160
+ const line = getLine(decl.id);
181
161
  const literalValue = ExpressionEvaluator.extractLiteralValue(decl.init);
182
162
  const isLiteral = literalValue !== null;
183
163
  const isNewExpr = decl.init?.type === 'NewExpression';
184
164
  const shouldBeConstant = isConst && (isLiteral || isNewExpr);
185
- const varId = shouldBeConstant
186
- ? `CONSTANT#${varName}#${filePath}#${line}:${column}:${counters.varDecl++}`
187
- : `VARIABLE#${varName}#${filePath}#${line}:${column}:${counters.varDecl++}`;
165
+ // Generate semantic ID using ScopeTracker
166
+ const nodeType = shouldBeConstant ? 'CONSTANT' : 'VARIABLE';
167
+ const varId = computeSemanticId(nodeType, varName, scopeTracker.getContext());
188
168
  collections.variableDeclarations.push({
189
169
  id: varId,
190
170
  type: shouldBeConstant ? 'CONSTANT' : 'VARIABLE',
@@ -207,7 +187,7 @@ function parseModule(filePath, moduleId, moduleName) {
207
187
  });
208
188
  }
209
189
  });
210
- // Extract functions and classes
190
+ // Extract functions and classes using semantic IDs
211
191
  traverse(ast, {
212
192
  FunctionDeclaration(path) {
213
193
  if (path.getFunctionParent())
@@ -216,33 +196,38 @@ function parseModule(filePath, moduleId, moduleName) {
216
196
  if (!node.id)
217
197
  return;
218
198
  const funcName = node.id.name;
219
- const functionId = `FUNCTION#${funcName}#${filePath}#${node.loc.start.line}:${node.loc.start.column}`;
199
+ // Generate semantic ID using ScopeTracker
200
+ const functionId = computeSemanticId('FUNCTION', funcName, scopeTracker.getContext());
220
201
  collections.functions.push({
221
202
  id: functionId,
222
- stableId: functionId,
223
203
  type: 'FUNCTION',
224
204
  name: funcName,
225
205
  file: filePath,
226
- line: node.loc.start.line,
227
- column: node.loc.start.column,
206
+ line: getLine(node),
207
+ column: getColumn(node),
228
208
  async: node.async || false,
229
209
  generator: node.generator || false,
230
210
  exported: path.parent?.type === 'ExportNamedDeclaration' || path.parent?.type === 'ExportDefaultDeclaration'
231
211
  });
232
- // Extract parameters
212
+ // Enter function scope for parameter extraction
213
+ scopeTracker.enterScope(funcName, 'FUNCTION');
214
+ // Extract parameters with semantic IDs
233
215
  node.params.forEach((param, index) => {
234
216
  if (param.type === 'Identifier') {
217
+ const paramId = computeSemanticId('PARAMETER', param.name, scopeTracker.getContext(), { discriminator: index });
235
218
  collections.parameters.push({
236
- id: `PARAMETER#${param.name}#${functionId}#${index}`,
219
+ id: paramId,
237
220
  type: 'PARAMETER',
238
221
  name: param.name,
239
222
  index,
240
223
  functionId,
241
224
  file: filePath,
242
- line: param.loc.start.line
225
+ line: getLine(param)
243
226
  });
244
227
  }
245
228
  });
229
+ // Exit function scope
230
+ scopeTracker.exitScope();
246
231
  },
247
232
  ClassDeclaration(path) {
248
233
  if (path.getFunctionParent())
@@ -251,30 +236,30 @@ function parseModule(filePath, moduleId, moduleName) {
251
236
  if (!node.id)
252
237
  return;
253
238
  const className = node.id.name;
254
- const classId = `CLASS#${className}#${filePath}#${node.loc.start.line}`;
255
- collections.classDeclarations.push({
256
- id: classId,
257
- type: 'CLASS',
258
- name: className,
259
- file: filePath,
260
- line: node.loc.start.line,
261
- superClass: node.superClass?.name || null
262
- });
263
- // Extract methods
239
+ // Extract superClass name
240
+ const superClassName = node.superClass && node.superClass.type === 'Identifier'
241
+ ? node.superClass.name
242
+ : null;
243
+ // Create CLASS node using ClassNode.createWithContext() for semantic IDs
244
+ const classRecord = ClassNode.createWithContext(className, scopeTracker.getContext(), { line: getLine(node), column: getColumn(node) }, { superClass: superClassName || undefined });
245
+ collections.classDeclarations.push(classRecord);
246
+ // Enter class scope for method extraction
247
+ scopeTracker.enterScope(className, 'CLASS');
248
+ // Extract methods with semantic IDs (including class scope)
264
249
  node.body.body.forEach(member => {
265
250
  if (member.type === 'ClassMethod' && member.key.type === 'Identifier') {
266
251
  const methodName = member.key.name;
267
- const methodId = `METHOD#${className}.${methodName}#${filePath}#${member.loc.start.line}`;
252
+ // Method ID includes class scope: file->ClassName->FUNCTION->methodName
253
+ const methodId = computeSemanticId('FUNCTION', methodName, scopeTracker.getContext());
268
254
  collections.functions.push({
269
255
  id: methodId,
270
- stableId: methodId,
271
256
  type: 'METHOD',
272
257
  name: methodName,
273
258
  className,
274
- classId,
259
+ classId: classRecord.id,
275
260
  file: filePath,
276
- line: member.loc.start.line,
277
- column: member.loc.start.column,
261
+ line: getLine(member),
262
+ column: getColumn(member),
278
263
  async: member.async || false,
279
264
  isClassMethod: true,
280
265
  isConstructor: member.kind === 'constructor',
@@ -282,9 +267,11 @@ function parseModule(filePath, moduleId, moduleName) {
282
267
  });
283
268
  }
284
269
  });
270
+ // Exit class scope
271
+ scopeTracker.exitScope();
285
272
  }
286
273
  });
287
- // Extract call expressions at module level
274
+ // Extract call expressions at module level using semantic IDs with discriminators
288
275
  traverse(ast, {
289
276
  CallExpression(path) {
290
277
  if (path.getFunctionParent())
@@ -295,14 +282,18 @@ function parseModule(filePath, moduleId, moduleName) {
295
282
  if (processed.callSites.has(nodeKey))
296
283
  return;
297
284
  processed.callSites.add(nodeKey);
285
+ // Get discriminator for same-named calls in current scope
286
+ const calleeName = node.callee.name;
287
+ const discriminator = scopeTracker.getItemCounter(`CALL:${calleeName}`);
288
+ const callId = computeSemanticId('CALL', calleeName, scopeTracker.getContext(), { discriminator });
298
289
  collections.callSites.push({
299
- id: `CALL#${node.callee.name}#${filePath}#${node.loc.start.line}:${node.loc.start.column}:${counters.callSite++}`,
290
+ id: callId,
300
291
  type: 'CALL',
301
- name: node.callee.name,
292
+ name: calleeName,
302
293
  file: filePath,
303
- line: node.loc.start.line,
294
+ line: getLine(node),
304
295
  parentScopeId: moduleId,
305
- targetFunctionName: node.callee.name
296
+ targetFunctionName: calleeName
306
297
  });
307
298
  }
308
299
  else if (node.callee.type === 'MemberExpression') {
@@ -315,14 +306,17 @@ function parseModule(filePath, moduleId, moduleName) {
315
306
  const objectName = obj.type === 'Identifier' ? obj.name : 'this';
316
307
  const methodName = prop.name;
317
308
  const fullName = `${objectName}.${methodName}`;
309
+ // Get discriminator for same-named method calls
310
+ const discriminator = scopeTracker.getItemCounter(`CALL:${fullName}`);
311
+ const callId = computeSemanticId('CALL', fullName, scopeTracker.getContext(), { discriminator });
318
312
  collections.methodCalls.push({
319
- id: `CALL#${fullName}#${filePath}#${node.loc.start.line}:${node.loc.start.column}:${counters.callSite++}`,
313
+ id: callId,
320
314
  type: 'CALL',
321
315
  name: fullName,
322
316
  object: objectName,
323
317
  method: methodName,
324
318
  file: filePath,
325
- line: node.loc.start.line,
319
+ line: getLine(node),
326
320
  parentScopeId: moduleId
327
321
  });
328
322
  }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * CoverageAnalyzer - Calculates analysis coverage for a project
3
+ *
4
+ * Determines which files in a project have been analyzed and categorizes
5
+ * files into three groups:
6
+ * - Analyzed: Files that appear as MODULE nodes in the graph
7
+ * - Unsupported: Files with extensions that no indexer can handle
8
+ * - Unreachable: Files with supported extensions but not in the graph
9
+ *
10
+ * Usage:
11
+ * const analyzer = new CoverageAnalyzer(graphBackend, '/path/to/project');
12
+ * const result = await analyzer.analyze();
13
+ */
14
+ import type { GraphBackend } from '@grafema/types';
15
+ /**
16
+ * Coverage analysis result
17
+ */
18
+ export interface CoverageResult {
19
+ projectPath: string;
20
+ total: number;
21
+ analyzed: {
22
+ count: number;
23
+ files: string[];
24
+ };
25
+ unsupported: {
26
+ count: number;
27
+ byExtension: Record<string, string[]>;
28
+ };
29
+ unreachable: {
30
+ count: number;
31
+ files: string[];
32
+ byExtension: Record<string, string[]>;
33
+ };
34
+ percentages: {
35
+ analyzed: number;
36
+ unsupported: number;
37
+ unreachable: number;
38
+ };
39
+ }
40
+ /**
41
+ * CoverageAnalyzer calculates what percentage of a codebase has been analyzed.
42
+ */
43
+ export declare class CoverageAnalyzer {
44
+ private graph;
45
+ private projectPath;
46
+ constructor(graph: GraphBackend, projectPath: string);
47
+ /**
48
+ * Analyze the project and return coverage statistics
49
+ */
50
+ analyze(): Promise<CoverageResult>;
51
+ /**
52
+ * Get list of analyzed files from the graph (MODULE nodes)
53
+ */
54
+ private getAnalyzedFiles;
55
+ /**
56
+ * Scan project directory for all code files
57
+ * Respects common ignore patterns (node_modules, .git, etc.)
58
+ */
59
+ private scanProjectFiles;
60
+ /**
61
+ * Recursively walk directory and collect code files
62
+ */
63
+ private walkDirectory;
64
+ }
65
+ //# sourceMappingURL=CoverageAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoverageAnalyzer.d.ts","sourceRoot":"","sources":["../../src/core/CoverageAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAwC/D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACvC,CAAC;IACF,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACvC,CAAC;IACF,WAAW,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,WAAW,CAAS;gBAEhB,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IAKpD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAsExC;;OAEG;YACW,gBAAgB;IAiB9B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,aAAa;CA0CtB"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * CoverageAnalyzer - Calculates analysis coverage for a project
3
+ *
4
+ * Determines which files in a project have been analyzed and categorizes
5
+ * files into three groups:
6
+ * - Analyzed: Files that appear as MODULE nodes in the graph
7
+ * - Unsupported: Files with extensions that no indexer can handle
8
+ * - Unreachable: Files with supported extensions but not in the graph
9
+ *
10
+ * Usage:
11
+ * const analyzer = new CoverageAnalyzer(graphBackend, '/path/to/project');
12
+ * const result = await analyzer.analyze();
13
+ */
14
+ import { readdirSync, existsSync, lstatSync } from 'fs';
15
+ import { join, relative, extname } from 'path';
16
+ /**
17
+ * Supported file extensions by language
18
+ */
19
+ const JS_SUPPORTED = ['.js', '.mjs', '.cjs', '.jsx', '.ts', '.tsx'];
20
+ const RUST_SUPPORTED = ['.rs'];
21
+ const SUPPORTED_EXTENSIONS = new Set([...JS_SUPPORTED, ...RUST_SUPPORTED]);
22
+ /**
23
+ * Known code file extensions (for scanning)
24
+ * Files with these extensions are considered source code
25
+ */
26
+ const CODE_EXTENSIONS = new Set([
27
+ // Supported
28
+ ...JS_SUPPORTED,
29
+ ...RUST_SUPPORTED,
30
+ // Unsupported but tracked
31
+ '.go', '.kt', '.java', '.py', '.rb', '.php', '.c', '.cpp', '.h', '.hpp',
32
+ '.cs', '.swift', '.scala', '.sql', '.graphql', '.gql',
33
+ ]);
34
+ /**
35
+ * Directories to always skip during scanning
36
+ */
37
+ const SKIP_DIRS = new Set([
38
+ 'node_modules',
39
+ '.git',
40
+ '.grafema',
41
+ 'dist',
42
+ 'build',
43
+ 'out',
44
+ 'coverage',
45
+ '.next',
46
+ '.nuxt',
47
+ '__pycache__',
48
+ 'target', // Rust
49
+ 'vendor',
50
+ ]);
51
+ /**
52
+ * CoverageAnalyzer calculates what percentage of a codebase has been analyzed.
53
+ */
54
+ export class CoverageAnalyzer {
55
+ graph;
56
+ projectPath;
57
+ constructor(graph, projectPath) {
58
+ this.graph = graph;
59
+ this.projectPath = projectPath;
60
+ }
61
+ /**
62
+ * Analyze the project and return coverage statistics
63
+ */
64
+ async analyze() {
65
+ // Step 1: Get all MODULE nodes from the graph
66
+ const analyzedFiles = await this.getAnalyzedFiles();
67
+ const analyzedSet = new Set(analyzedFiles);
68
+ // Step 2: Scan project for all code files
69
+ const allCodeFiles = this.scanProjectFiles();
70
+ // Step 3: Categorize files
71
+ const unsupportedByExt = {};
72
+ const unreachableByExt = {};
73
+ const unreachableFiles = [];
74
+ for (const file of allCodeFiles) {
75
+ if (analyzedSet.has(file)) {
76
+ continue; // Already analyzed
77
+ }
78
+ const ext = extname(file).toLowerCase();
79
+ if (SUPPORTED_EXTENSIONS.has(ext)) {
80
+ // Supported but not in graph = unreachable
81
+ unreachableFiles.push(file);
82
+ if (!unreachableByExt[ext]) {
83
+ unreachableByExt[ext] = [];
84
+ }
85
+ unreachableByExt[ext].push(file);
86
+ }
87
+ else {
88
+ // Not supported = unsupported
89
+ if (!unsupportedByExt[ext]) {
90
+ unsupportedByExt[ext] = [];
91
+ }
92
+ unsupportedByExt[ext].push(file);
93
+ }
94
+ }
95
+ // Calculate counts
96
+ const unsupportedCount = Object.values(unsupportedByExt)
97
+ .reduce((sum, files) => sum + files.length, 0);
98
+ const unreachableCount = unreachableFiles.length;
99
+ const analyzedCount = analyzedFiles.length;
100
+ const total = analyzedCount + unsupportedCount + unreachableCount;
101
+ // Calculate percentages (handle division by zero)
102
+ const percentages = {
103
+ analyzed: total > 0 ? Math.round((analyzedCount / total) * 100) : 0,
104
+ unsupported: total > 0 ? Math.round((unsupportedCount / total) * 100) : 0,
105
+ unreachable: total > 0 ? Math.round((unreachableCount / total) * 100) : 0,
106
+ };
107
+ return {
108
+ projectPath: this.projectPath,
109
+ total,
110
+ analyzed: {
111
+ count: analyzedCount,
112
+ files: analyzedFiles,
113
+ },
114
+ unsupported: {
115
+ count: unsupportedCount,
116
+ byExtension: unsupportedByExt,
117
+ },
118
+ unreachable: {
119
+ count: unreachableCount,
120
+ files: unreachableFiles,
121
+ byExtension: unreachableByExt,
122
+ },
123
+ percentages,
124
+ };
125
+ }
126
+ /**
127
+ * Get list of analyzed files from the graph (MODULE nodes)
128
+ */
129
+ async getAnalyzedFiles() {
130
+ const files = [];
131
+ // Use queryNodes with type: 'MODULE'
132
+ for await (const node of this.graph.queryNodes({ type: 'MODULE' })) {
133
+ if (node.file) {
134
+ // Store relative path for consistency
135
+ const relativePath = node.file.startsWith(this.projectPath)
136
+ ? relative(this.projectPath, node.file)
137
+ : node.file;
138
+ files.push(relativePath);
139
+ }
140
+ }
141
+ return files;
142
+ }
143
+ /**
144
+ * Scan project directory for all code files
145
+ * Respects common ignore patterns (node_modules, .git, etc.)
146
+ */
147
+ scanProjectFiles() {
148
+ const files = [];
149
+ this.walkDirectory(this.projectPath, files);
150
+ return files;
151
+ }
152
+ /**
153
+ * Recursively walk directory and collect code files
154
+ */
155
+ walkDirectory(dir, files, depth = 0) {
156
+ // Safety: limit recursion depth
157
+ if (depth > 20)
158
+ return;
159
+ if (!existsSync(dir))
160
+ return;
161
+ let entries;
162
+ try {
163
+ entries = readdirSync(dir);
164
+ }
165
+ catch {
166
+ return; // Skip directories we can't read
167
+ }
168
+ for (const entry of entries) {
169
+ // Skip hidden files and directories
170
+ if (entry.startsWith('.'))
171
+ continue;
172
+ // Skip known non-source directories
173
+ if (SKIP_DIRS.has(entry))
174
+ continue;
175
+ const fullPath = join(dir, entry);
176
+ // Skip symlinks to avoid infinite loops
177
+ try {
178
+ const stat = lstatSync(fullPath);
179
+ if (stat.isSymbolicLink())
180
+ continue;
181
+ if (stat.isDirectory()) {
182
+ this.walkDirectory(fullPath, files, depth + 1);
183
+ }
184
+ else if (stat.isFile()) {
185
+ const ext = extname(entry).toLowerCase();
186
+ if (CODE_EXTENSIONS.has(ext)) {
187
+ // Store relative path
188
+ files.push(relative(this.projectPath, fullPath));
189
+ }
190
+ }
191
+ }
192
+ catch {
193
+ // Skip files we can't stat
194
+ continue;
195
+ }
196
+ }
197
+ }
198
+ }