@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
@@ -26,11 +26,14 @@ import type {
26
26
  EnumDeclarationInfo,
27
27
  EnumMemberInfo
28
28
  } from '../types.js';
29
+ import { ScopeTracker } from '../../../../core/ScopeTracker.js';
30
+ import { computeSemanticId } from '../../../../core/SemanticId.js';
31
+ import { getLine, getColumn } from '../utils/location.js';
29
32
 
30
33
  /**
31
34
  * Extracts a string representation of a TypeScript type node
32
35
  */
33
- function typeNodeToString(node: unknown): string {
36
+ export function typeNodeToString(node: unknown): string {
34
37
  if (!node || typeof node !== 'object') return 'unknown';
35
38
 
36
39
  const typeNode = node as { type: string; [key: string]: unknown };
@@ -97,8 +100,16 @@ function typeNodeToString(node: unknown): string {
97
100
  }
98
101
 
99
102
  export class TypeScriptVisitor extends ASTVisitor {
100
- constructor(module: VisitorModule, collections: VisitorCollections) {
103
+ private scopeTracker?: ScopeTracker;
104
+
105
+ /**
106
+ * @param module - Current module being analyzed
107
+ * @param collections - Must contain interfaces, typeAliases, enums arrays
108
+ * @param scopeTracker - Optional ScopeTracker for semantic ID generation
109
+ */
110
+ constructor(module: VisitorModule, collections: VisitorCollections, scopeTracker?: ScopeTracker) {
101
111
  super(module, collections);
112
+ this.scopeTracker = scopeTracker;
102
113
  }
103
114
 
104
115
  getHandlers(): VisitorHandlers {
@@ -108,6 +119,7 @@ export class TypeScriptVisitor extends ASTVisitor {
108
119
  typeAliases,
109
120
  enums
110
121
  } = this.collections;
122
+ const scopeTracker = this.scopeTracker;
111
123
 
112
124
  return {
113
125
  TSInterfaceDeclaration: (path: NodePath) => {
@@ -115,7 +127,12 @@ export class TypeScriptVisitor extends ASTVisitor {
115
127
  if (!node.id) return;
116
128
 
117
129
  const interfaceName = node.id.name;
118
- const interfaceId = `INTERFACE#${interfaceName}#${module.file}#${node.loc!.start.line}`;
130
+
131
+ // Generate semantic ID if scopeTracker available
132
+ let interfaceSemanticId: string | undefined;
133
+ if (scopeTracker) {
134
+ interfaceSemanticId = computeSemanticId('INTERFACE', interfaceName, scopeTracker.getContext());
135
+ }
119
136
 
120
137
  // Extract extends
121
138
  const extendsNames: string[] = [];
@@ -156,12 +173,12 @@ export class TypeScriptVisitor extends ASTVisitor {
156
173
  }
157
174
 
158
175
  (interfaces as InterfaceDeclarationInfo[]).push({
159
- id: interfaceId,
176
+ semanticId: interfaceSemanticId,
160
177
  type: 'INTERFACE',
161
178
  name: interfaceName,
162
179
  file: module.file,
163
- line: node.loc!.start.line,
164
- column: node.loc!.start.column,
180
+ line: getLine(node),
181
+ column: getColumn(node),
165
182
  extends: extendsNames.length > 0 ? extendsNames : undefined,
166
183
  properties
167
184
  });
@@ -172,18 +189,23 @@ export class TypeScriptVisitor extends ASTVisitor {
172
189
  if (!node.id) return;
173
190
 
174
191
  const typeName = node.id.name;
175
- const typeId = `TYPE#${typeName}#${module.file}#${node.loc!.start.line}`;
192
+
193
+ // Generate semantic ID if scopeTracker available
194
+ let typeSemanticId: string | undefined;
195
+ if (scopeTracker) {
196
+ typeSemanticId = computeSemanticId('TYPE', typeName, scopeTracker.getContext());
197
+ }
176
198
 
177
199
  // Extract the type being aliased
178
200
  const aliasOf = typeNodeToString(node.typeAnnotation);
179
201
 
180
202
  (typeAliases as TypeAliasInfo[]).push({
181
- id: typeId,
203
+ semanticId: typeSemanticId,
182
204
  type: 'TYPE',
183
205
  name: typeName,
184
206
  file: module.file,
185
- line: node.loc!.start.line,
186
- column: node.loc!.start.column,
207
+ line: getLine(node),
208
+ column: getColumn(node),
187
209
  aliasOf
188
210
  });
189
211
  },
@@ -193,7 +215,12 @@ export class TypeScriptVisitor extends ASTVisitor {
193
215
  if (!node.id) return;
194
216
 
195
217
  const enumName = node.id.name;
196
- const enumId = `ENUM#${enumName}#${module.file}#${node.loc!.start.line}`;
218
+
219
+ // Generate semantic ID if scopeTracker available
220
+ let enumSemanticId: string | undefined;
221
+ if (scopeTracker) {
222
+ enumSemanticId = computeSemanticId('ENUM', enumName, scopeTracker.getContext());
223
+ }
197
224
 
198
225
  // Extract members
199
226
  const members: EnumMemberInfo[] = [];
@@ -220,12 +247,12 @@ export class TypeScriptVisitor extends ASTVisitor {
220
247
  }
221
248
 
222
249
  (enums as EnumDeclarationInfo[]).push({
223
- id: enumId,
250
+ semanticId: enumSemanticId,
224
251
  type: 'ENUM',
225
252
  name: enumName,
226
253
  file: module.file,
227
- line: node.loc!.start.line,
228
- column: node.loc!.start.column,
254
+ line: getLine(node),
255
+ column: getColumn(node),
229
256
  isConst: node.const || false,
230
257
  members
231
258
  });
@@ -17,6 +17,9 @@ import type {
17
17
  import type { NodePath } from '@babel/traverse';
18
18
  import { ASTVisitor, type VisitorModule, type VisitorCollections, type VisitorHandlers, type CounterRef } from './ASTVisitor.js';
19
19
  import { ExpressionEvaluator } from '../ExpressionEvaluator.js';
20
+ import { ScopeTracker } from '../../../../core/ScopeTracker.js';
21
+ import { IdGenerator } from '../IdGenerator.js';
22
+ import { NodeFactory } from '../../../../core/NodeFactory.js';
20
23
 
21
24
  /**
22
25
  * Variable info extracted from pattern
@@ -26,6 +29,7 @@ export interface VariableInfo {
26
29
  loc: { start: { line: number; column: number } };
27
30
  propertyPath?: string[];
28
31
  arrayIndex?: number;
32
+ isRest?: boolean;
29
33
  }
30
34
 
31
35
  /**
@@ -44,7 +48,10 @@ export type TrackVariableAssignmentCallback = (
44
48
  line: number,
45
49
  literals: unknown[],
46
50
  variableAssignments: unknown[],
47
- literalCounterRef: CounterRef
51
+ literalCounterRef: CounterRef,
52
+ objectLiterals: unknown[],
53
+ objectProperties: unknown[],
54
+ objectLiteralCounterRef: CounterRef
48
55
  ) => void;
49
56
 
50
57
  /**
@@ -97,25 +104,100 @@ interface VariableAssignmentInfo {
97
104
  file?: string;
98
105
  }
99
106
 
107
+ /**
108
+ * Call info extracted from CallExpression (REG-223)
109
+ */
110
+ interface CallInfo {
111
+ line: number;
112
+ column: number;
113
+ name: string;
114
+ isMethodCall: boolean;
115
+ }
116
+
100
117
  export class VariableVisitor extends ASTVisitor {
101
118
  private extractVariableNamesFromPattern: ExtractVariableNamesCallback;
102
119
  private trackVariableAssignment: TrackVariableAssignmentCallback;
120
+ private scopeTracker?: ScopeTracker;
121
+
122
+ /**
123
+ * Recursively unwrap AwaitExpression to get the underlying expression.
124
+ * await await fetch() -> fetch() (REG-223)
125
+ */
126
+ private unwrapAwaitExpression(node: Node): Node {
127
+ if (node.type === 'AwaitExpression' && (node as { argument?: Node }).argument) {
128
+ return this.unwrapAwaitExpression((node as { argument: Node }).argument);
129
+ }
130
+ return node;
131
+ }
132
+
133
+ /**
134
+ * Check if expression is CallExpression or AwaitExpression wrapping a call. (REG-223)
135
+ */
136
+ private isCallOrAwaitExpression(node: Node): boolean {
137
+ const unwrapped = this.unwrapAwaitExpression(node);
138
+ return unwrapped.type === 'CallExpression';
139
+ }
140
+
141
+ /**
142
+ * Extract call site information from CallExpression. (REG-223)
143
+ * Returns null if not a valid CallExpression.
144
+ */
145
+ private extractCallInfo(node: Node): CallInfo | null {
146
+ if (node.type !== 'CallExpression') {
147
+ return null;
148
+ }
149
+
150
+ const callExpr = node as { callee: Node; loc?: { start: { line: number; column: number } } };
151
+ const callee = callExpr.callee;
152
+ let name: string;
153
+ let isMethodCall = false;
154
+
155
+ // Direct call: fetchUser()
156
+ if (callee.type === 'Identifier') {
157
+ name = (callee as Identifier).name;
158
+ }
159
+ // Method call: obj.fetchUser() or arr.map()
160
+ else if (callee.type === 'MemberExpression') {
161
+ isMethodCall = true;
162
+ const memberExpr = callee as { object: Node; property: Node };
163
+ const objectName = memberExpr.object.type === 'Identifier'
164
+ ? (memberExpr.object as Identifier).name
165
+ : (memberExpr.object.type === 'ThisExpression' ? 'this' : 'unknown');
166
+ const methodName = memberExpr.property.type === 'Identifier'
167
+ ? (memberExpr.property as Identifier).name
168
+ : 'unknown';
169
+ name = `${objectName}.${methodName}`;
170
+ }
171
+ else {
172
+ return null;
173
+ }
174
+
175
+ return {
176
+ line: callExpr.loc?.start.line ?? 0,
177
+ column: callExpr.loc?.start.column ?? 0,
178
+ name,
179
+ isMethodCall
180
+ };
181
+ }
103
182
 
104
183
  /**
105
184
  * @param module - Current module being analyzed
106
185
  * @param collections - Must contain arrays and counter refs
107
186
  * @param extractVariableNamesFromPattern - Helper for destructuring
108
187
  * @param trackVariableAssignment - Helper for data flow tracking
188
+ * @param scopeTracker - Optional ScopeTracker for semantic ID generation
109
189
  */
110
190
  constructor(
111
191
  module: VisitorModule,
112
192
  collections: VisitorCollections,
113
193
  extractVariableNamesFromPattern: ExtractVariableNamesCallback,
114
- trackVariableAssignment: TrackVariableAssignmentCallback
194
+ trackVariableAssignment: TrackVariableAssignmentCallback,
195
+ scopeTracker?: ScopeTracker
115
196
  ) {
116
197
  super(module, collections);
117
198
  this.extractVariableNamesFromPattern = extractVariableNamesFromPattern;
118
199
  this.trackVariableAssignment = trackVariableAssignment;
200
+ this.scopeTracker = scopeTracker;
119
201
  }
120
202
 
121
203
  getHandlers(): VisitorHandlers {
@@ -124,12 +206,22 @@ export class VariableVisitor extends ASTVisitor {
124
206
  const classInstantiations = this.collections.classInstantiations ?? [];
125
207
  const literals = (this.collections.literals ?? []) as unknown[];
126
208
  const variableAssignments = this.collections.variableAssignments ?? [];
209
+ const scopes = (this.collections.scopes ?? []) as unknown[];
127
210
  const varDeclCounterRef = (this.collections.varDeclCounterRef ?? { value: 0 }) as CounterRef;
128
211
  const literalCounterRef = (this.collections.literalCounterRef ?? { value: 0 }) as CounterRef;
212
+ const scopeCounterRef = (this.collections.scopeCounterRef ?? { value: 0 }) as CounterRef;
213
+ // Object literal tracking collections (REG-328)
214
+ const objectLiterals = (this.collections.objectLiterals ?? []) as unknown[];
215
+ const objectProperties = (this.collections.objectProperties ?? []) as unknown[];
216
+ const objectLiteralCounterRef = (this.collections.objectLiteralCounterRef ?? { value: 0 }) as CounterRef;
217
+ const scopeTracker = this.scopeTracker;
129
218
 
130
219
  const extractVariableNamesFromPattern = this.extractVariableNamesFromPattern;
131
220
  const trackVariableAssignment = this.trackVariableAssignment;
132
221
 
222
+ // Track which loops we've already created scopes for
223
+ const processedLoops = new Set<unknown>();
224
+
133
225
  return {
134
226
  VariableDeclaration: (path: NodePath) => {
135
227
  // Only module-level variables
@@ -138,6 +230,41 @@ export class VariableVisitor extends ASTVisitor {
138
230
  const varNode = path.node as VariableDeclaration;
139
231
  const isConst = varNode.kind === 'const';
140
232
 
233
+ // Check if this is a loop variable (for...of or for...in)
234
+ const parent = path.parent;
235
+ const isLoopVariable = (parent.type === 'ForOfStatement' || parent.type === 'ForInStatement')
236
+ && (parent as {left?: unknown}).left === varNode;
237
+
238
+ // If this is a loop variable, create the loop scope first (if not already created)
239
+ if (isLoopVariable && !processedLoops.has(parent)) {
240
+ processedLoops.add(parent);
241
+
242
+ const loopNode = parent as { type: string; loc?: { start: { line: number } } };
243
+ const line = loopNode.loc?.start.line ?? 0;
244
+ const scopeType = loopNode.type === 'ForOfStatement' ? 'for-of-loop' : 'for-in-loop';
245
+ const trackerType = loopNode.type === 'ForOfStatement' ? 'for-of' : 'for-in';
246
+ const scopeId = `SCOPE#${scopeType}#${module.file}#${line}:${scopeCounterRef.value++}`;
247
+
248
+ // Enter scope in tracker BEFORE generating semantic ID
249
+ if (scopeTracker) {
250
+ scopeTracker.enterCountedScope(trackerType);
251
+ }
252
+
253
+ const semanticId = scopeTracker
254
+ ? scopeTracker.getContext().scopePath.join('->')
255
+ : scopeId;
256
+
257
+ (scopes as { id: string; type: string; scopeType: string; semanticId: string; file: string; line: number; parentScopeId: string }[]).push({
258
+ id: scopeId,
259
+ type: 'SCOPE',
260
+ scopeType,
261
+ semanticId,
262
+ file: module.file,
263
+ line,
264
+ parentScopeId: module.id
265
+ });
266
+ }
267
+
141
268
  varNode.declarations.forEach((declarator: VariableDeclarator) => {
142
269
  // Extract all variable names from the pattern (handles destructuring)
143
270
  const variables = extractVariableNamesFromPattern(declarator.id);
@@ -147,13 +274,22 @@ export class VariableVisitor extends ASTVisitor {
147
274
  const isLiteral = literalValue !== null;
148
275
  const isNewExpression = declarator.init && declarator.init.type === 'NewExpression';
149
276
 
150
- // For const with literal or NewExpression create CONSTANT
151
- // For everything else - VARIABLE
152
- const shouldBeConstant = isConst && (isLiteral || isNewExpression);
277
+ // Loop variables with const should be CONSTANT (they can't be reassigned in loop body)
278
+ // Regular variables with const are CONSTANT only if initialized with literal or new expression
279
+ const shouldBeConstant = isConst && (isLoopVariable || isLiteral || isNewExpression);
153
280
 
154
- const varId = shouldBeConstant
155
- ? `CONSTANT#${varInfo.name}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}:${(varDeclCounterRef as CounterRef).value++}`
156
- : `VARIABLE#${varInfo.name}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}:${(varDeclCounterRef as CounterRef).value++}`;
281
+ const nodeType = shouldBeConstant ? 'CONSTANT' : 'VARIABLE';
282
+
283
+ // Generate ID using centralized IdGenerator
284
+ const idGenerator = new IdGenerator(scopeTracker);
285
+ const varId = idGenerator.generate(
286
+ nodeType,
287
+ varInfo.name,
288
+ module.file,
289
+ varInfo.loc.start.line,
290
+ varInfo.loc.start.column,
291
+ varDeclCounterRef as CounterRef
292
+ );
157
293
 
158
294
  if (shouldBeConstant) {
159
295
  // CONSTANT node
@@ -198,64 +334,173 @@ export class VariableVisitor extends ASTVisitor {
198
334
  }
199
335
 
200
336
  // Track assignment for data flow analysis
201
- if (declarator.init) {
202
- // Handle destructuring - create EXPRESSION for property path
203
- if (varInfo.propertyPath || varInfo.arrayIndex !== undefined) {
204
- // Create EXPRESSION node for the property access
205
- const initName = declarator.init.type === 'Identifier'
206
- ? (declarator.init as Identifier).name
207
- : 'expr';
208
- let expressionPath = initName;
209
-
210
- if (varInfo.propertyPath) {
211
- expressionPath = `${initName}.${varInfo.propertyPath.join('.')}`;
212
- } else if (varInfo.arrayIndex !== undefined) {
213
- expressionPath = `${initName}[${varInfo.arrayIndex}]`;
214
- }
337
+ // For loop variables, the "init" is the right side of for...of/for...in
338
+ const initExpression = isLoopVariable
339
+ ? (parent as {right?: Node}).right
340
+ : declarator.init;
215
341
 
216
- const expressionId = `EXPRESSION#${expressionPath}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}`;
217
-
218
- // Create EXPRESSION node representing the property access
219
- (literals as LiteralExpressionInfo[]).push({
220
- id: expressionId,
221
- type: 'EXPRESSION',
222
- expressionType: varInfo.propertyPath ? 'MemberExpression' : 'ArrayAccess',
223
- path: expressionPath,
224
- baseName: initName,
225
- propertyPath: varInfo.propertyPath || null,
226
- arrayIndex: varInfo.arrayIndex,
342
+ if (initExpression) {
343
+ // For loop variables, create DERIVES_FROM edges instead of ASSIGNED_FROM
344
+ // Loop variables derive their values from the collection (semantic difference)
345
+ if (isLoopVariable && initExpression.type === 'Identifier') {
346
+ const sourceName = (initExpression as Identifier).name;
347
+ (variableAssignments as unknown[]).push({
348
+ variableId: varId,
349
+ sourceType: 'DERIVES_FROM_VARIABLE',
350
+ sourceName,
227
351
  file: module.file,
228
352
  line: varInfo.loc.start.line
229
353
  });
354
+ }
355
+ // Handle destructuring - create EXPRESSION for property path
356
+ else if (varInfo.propertyPath || varInfo.arrayIndex !== undefined || varInfo.isRest) {
357
+ // Phase 1: Simple Identifier init expressions (REG-201)
358
+ if (initExpression.type === 'Identifier') {
359
+ const sourceBaseName = (initExpression as Identifier).name;
360
+ const expressionLine = varInfo.loc.start.line;
230
361
 
231
- // Create ASSIGNED_FROM edge: VARIABLE -> EXPRESSION
232
- (variableAssignments as VariableAssignmentInfo[]).push({
233
- variableId: varId,
234
- sourceId: expressionId,
235
- sourceType: 'EXPRESSION'
236
- });
362
+ // Handle rest elements specially - create edge to whole source
363
+ if (varInfo.isRest) {
364
+ (variableAssignments as unknown[]).push({
365
+ variableId: varId,
366
+ sourceType: 'VARIABLE',
367
+ sourceName: sourceBaseName,
368
+ line: expressionLine
369
+ });
370
+ return;
371
+ }
372
+
373
+ const expressionColumn = varInfo.loc.start.column;
374
+
375
+ // Build property path string
376
+ let fullPath = sourceBaseName;
377
+ if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
378
+ fullPath = `${sourceBaseName}.${varInfo.propertyPath.join('.')}`;
379
+ }
237
380
 
238
- // Also create DERIVES_FROM edge: EXPRESSION -> base variable (if identifier)
239
- if (declarator.init.type === 'Identifier') {
240
- (variableAssignments as VariableAssignmentInfo[]).push({
241
- variableId: expressionId,
242
- sourceId: null, // Will be resolved by name
243
- sourceName: (declarator.init as Identifier).name,
244
- sourceType: 'DERIVES_FROM_VARIABLE',
245
- file: module.file
381
+ // Generate expression ID (matches GraphBuilder expectations)
382
+ const expressionId = `${module.file}:EXPRESSION:MemberExpression:${expressionLine}:${expressionColumn}`;
383
+
384
+ // Determine property for display
385
+ let property: string;
386
+ if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
387
+ property = varInfo.propertyPath[varInfo.propertyPath.length - 1];
388
+ } else if (varInfo.arrayIndex !== undefined) {
389
+ property = String(varInfo.arrayIndex);
390
+ } else {
391
+ property = '';
392
+ }
393
+
394
+ // Push assignment with full metadata for GraphBuilder (REG-201)
395
+ // GraphBuilder will create the EXPRESSION node from this metadata
396
+ (variableAssignments as unknown[]).push({
397
+ variableId: varId,
398
+ sourceId: expressionId,
399
+ sourceType: 'EXPRESSION',
400
+ expressionType: 'MemberExpression',
401
+ object: sourceBaseName,
402
+ property: property,
403
+ computed: varInfo.arrayIndex !== undefined,
404
+ path: fullPath,
405
+ objectSourceName: sourceBaseName, // Use objectSourceName for DERIVES_FROM edge creation
406
+ propertyPath: varInfo.propertyPath || undefined,
407
+ arrayIndex: varInfo.arrayIndex,
408
+ file: module.file,
409
+ line: expressionLine,
410
+ column: expressionColumn
411
+ });
412
+ }
413
+ // Phase 2: CallExpression or AwaitExpression (REG-223)
414
+ else if (this.isCallOrAwaitExpression(initExpression)) {
415
+ const unwrapped = this.unwrapAwaitExpression(initExpression);
416
+ const callInfo = this.extractCallInfo(unwrapped);
417
+
418
+ if (!callInfo) {
419
+ // Unsupported call pattern (computed callee, etc.)
420
+ return;
421
+ }
422
+
423
+ const callRepresentation = `${callInfo.name}()`;
424
+ const expressionLine = varInfo.loc.start.line;
425
+ const expressionColumn = varInfo.loc.start.column;
426
+
427
+ // Handle rest elements - create direct CALL_SITE assignment
428
+ if (varInfo.isRest) {
429
+ (variableAssignments as unknown[]).push({
430
+ variableId: varId,
431
+ sourceType: 'CALL_SITE',
432
+ callName: callInfo.name,
433
+ callLine: callInfo.line,
434
+ callColumn: callInfo.column,
435
+ callSourceLine: callInfo.line,
436
+ callSourceColumn: callInfo.column,
437
+ callSourceFile: module.file,
438
+ callSourceName: callInfo.name,
439
+ line: expressionLine
440
+ });
441
+ return;
442
+ }
443
+
444
+ // Generate expression ID (matches GraphBuilder expectations)
445
+ const expressionId = `${module.file}:EXPRESSION:MemberExpression:${expressionLine}:${expressionColumn}`;
446
+
447
+ // Determine property for display
448
+ let property: string;
449
+ if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
450
+ property = varInfo.propertyPath[varInfo.propertyPath.length - 1];
451
+ } else if (varInfo.arrayIndex !== undefined) {
452
+ property = String(varInfo.arrayIndex);
453
+ } else {
454
+ property = '';
455
+ }
456
+
457
+ // Build property path string: "fetchUser().data" or "fetchUser().user.name"
458
+ let fullPath = callRepresentation;
459
+ if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
460
+ fullPath = `${callRepresentation}.${varInfo.propertyPath.join('.')}`;
461
+ }
462
+
463
+ // Push assignment with call source metadata for GraphBuilder (REG-223)
464
+ (variableAssignments as unknown[]).push({
465
+ variableId: varId,
466
+ sourceId: expressionId,
467
+ sourceType: 'EXPRESSION',
468
+ expressionType: 'MemberExpression',
469
+ object: callRepresentation, // "fetchUser()" - display name
470
+ property: property,
471
+ computed: varInfo.arrayIndex !== undefined,
472
+ path: fullPath,
473
+ propertyPath: varInfo.propertyPath || undefined,
474
+ arrayIndex: varInfo.arrayIndex,
475
+ // Call source for DERIVES_FROM lookup (REG-223)
476
+ callSourceLine: callInfo.line,
477
+ callSourceColumn: callInfo.column,
478
+ callSourceFile: module.file,
479
+ callSourceName: callInfo.name,
480
+ sourceMetadata: {
481
+ sourceType: callInfo.isMethodCall ? 'method-call' : 'call'
482
+ },
483
+ file: module.file,
484
+ line: expressionLine,
485
+ column: expressionColumn
246
486
  });
247
487
  }
488
+ // Unsupported init type (MemberExpression without call, etc.)
489
+ // Skip silently
248
490
  } else {
249
491
  // Normal assignment tracking
250
492
  trackVariableAssignment(
251
- declarator.init,
493
+ initExpression,
252
494
  varId,
253
495
  varInfo.name,
254
496
  module,
255
497
  varInfo.loc.start.line,
256
498
  literals,
257
499
  variableAssignments,
258
- literalCounterRef as CounterRef
500
+ literalCounterRef as CounterRef,
501
+ objectLiterals,
502
+ objectProperties,
503
+ objectLiteralCounterRef
259
504
  );
260
505
  }
261
506
  }
@@ -57,10 +57,11 @@ export class MonorepoServiceDiscovery extends DiscoveryPlugin {
57
57
  }
58
58
 
59
59
  async execute(context: PluginContext): Promise<PluginResult> {
60
+ const logger = this.log(context);
60
61
  const { projectPath, graph } = context;
61
62
  const servicesPath = join(projectPath!, this.servicesDir);
62
63
 
63
- console.log(`[MonorepoServiceDiscovery] Looking for services in: ${servicesPath}`);
64
+ logger.debug('Looking for services', { servicesPath });
64
65
 
65
66
  if (!existsSync(servicesPath)) {
66
67
  return createErrorResult(
@@ -71,7 +72,7 @@ export class MonorepoServiceDiscovery extends DiscoveryPlugin {
71
72
  try {
72
73
  const services: ServiceInfo[] = [];
73
74
  const entries = readdirSync(servicesPath);
74
- console.log(`[MonorepoServiceDiscovery] Found ${entries.length} entries`);
75
+ logger.debug('Found entries', { count: entries.length });
75
76
 
76
77
  for (const entry of entries) {
77
78
  const fullPath = join(servicesPath, entry);
@@ -11,6 +11,7 @@ import { join } from 'path';
11
11
  import { NodeFactory } from '../../core/NodeFactory.js';
12
12
  import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
13
13
  import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
14
+ import { resolveSourceEntrypoint } from './resolveSourceEntrypoint.js';
14
15
 
15
16
  /**
16
17
  * Service info returned in metadata
@@ -33,6 +34,7 @@ interface PackageJson {
33
34
  name?: string;
34
35
  version?: string;
35
36
  main?: string;
37
+ source?: string;
36
38
  description?: string;
37
39
  dependencies?: Record<string, string>;
38
40
  }
@@ -70,7 +72,10 @@ export class SimpleProjectDiscovery extends Plugin {
70
72
  try {
71
73
  const packageJson: PackageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
72
74
  const serviceName = packageJson.name || 'unnamed-service';
73
- const entrypoint = packageJson.main || 'index.js';
75
+ // Prefer TypeScript source over compiled output
76
+ const entrypoint = resolveSourceEntrypoint(projectPath, packageJson)
77
+ ?? packageJson.main
78
+ ?? 'index.js';
74
79
 
75
80
  // Используем NodeFactory для создания SERVICE ноды
76
81
  const serviceNode = NodeFactory.createService(serviceName, projectPath, {