@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
@@ -7,10 +7,12 @@
7
7
  * - TSEnumDeclaration
8
8
  */
9
9
  import { ASTVisitor } from './ASTVisitor.js';
10
+ import { computeSemanticId } from '../../../../core/SemanticId.js';
11
+ import { getLine, getColumn } from '../utils/location.js';
10
12
  /**
11
13
  * Extracts a string representation of a TypeScript type node
12
14
  */
13
- function typeNodeToString(node) {
15
+ export function typeNodeToString(node) {
14
16
  if (!node || typeof node !== 'object')
15
17
  return 'unknown';
16
18
  const typeNode = node;
@@ -77,19 +79,31 @@ function typeNodeToString(node) {
77
79
  }
78
80
  }
79
81
  export class TypeScriptVisitor extends ASTVisitor {
80
- constructor(module, collections) {
82
+ scopeTracker;
83
+ /**
84
+ * @param module - Current module being analyzed
85
+ * @param collections - Must contain interfaces, typeAliases, enums arrays
86
+ * @param scopeTracker - Optional ScopeTracker for semantic ID generation
87
+ */
88
+ constructor(module, collections, scopeTracker) {
81
89
  super(module, collections);
90
+ this.scopeTracker = scopeTracker;
82
91
  }
83
92
  getHandlers() {
84
93
  const { module } = this;
85
94
  const { interfaces, typeAliases, enums } = this.collections;
95
+ const scopeTracker = this.scopeTracker;
86
96
  return {
87
97
  TSInterfaceDeclaration: (path) => {
88
98
  const node = path.node;
89
99
  if (!node.id)
90
100
  return;
91
101
  const interfaceName = node.id.name;
92
- const interfaceId = `INTERFACE#${interfaceName}#${module.file}#${node.loc.start.line}`;
102
+ // Generate semantic ID if scopeTracker available
103
+ let interfaceSemanticId;
104
+ if (scopeTracker) {
105
+ interfaceSemanticId = computeSemanticId('INTERFACE', interfaceName, scopeTracker.getContext());
106
+ }
93
107
  // Extract extends
94
108
  const extendsNames = [];
95
109
  if (node.extends && node.extends.length > 0) {
@@ -128,12 +142,12 @@ export class TypeScriptVisitor extends ASTVisitor {
128
142
  }
129
143
  }
130
144
  interfaces.push({
131
- id: interfaceId,
145
+ semanticId: interfaceSemanticId,
132
146
  type: 'INTERFACE',
133
147
  name: interfaceName,
134
148
  file: module.file,
135
- line: node.loc.start.line,
136
- column: node.loc.start.column,
149
+ line: getLine(node),
150
+ column: getColumn(node),
137
151
  extends: extendsNames.length > 0 ? extendsNames : undefined,
138
152
  properties
139
153
  });
@@ -143,16 +157,20 @@ export class TypeScriptVisitor extends ASTVisitor {
143
157
  if (!node.id)
144
158
  return;
145
159
  const typeName = node.id.name;
146
- const typeId = `TYPE#${typeName}#${module.file}#${node.loc.start.line}`;
160
+ // Generate semantic ID if scopeTracker available
161
+ let typeSemanticId;
162
+ if (scopeTracker) {
163
+ typeSemanticId = computeSemanticId('TYPE', typeName, scopeTracker.getContext());
164
+ }
147
165
  // Extract the type being aliased
148
166
  const aliasOf = typeNodeToString(node.typeAnnotation);
149
167
  typeAliases.push({
150
- id: typeId,
168
+ semanticId: typeSemanticId,
151
169
  type: 'TYPE',
152
170
  name: typeName,
153
171
  file: module.file,
154
- line: node.loc.start.line,
155
- column: node.loc.start.column,
172
+ line: getLine(node),
173
+ column: getColumn(node),
156
174
  aliasOf
157
175
  });
158
176
  },
@@ -161,7 +179,11 @@ export class TypeScriptVisitor extends ASTVisitor {
161
179
  if (!node.id)
162
180
  return;
163
181
  const enumName = node.id.name;
164
- const enumId = `ENUM#${enumName}#${module.file}#${node.loc.start.line}`;
182
+ // Generate semantic ID if scopeTracker available
183
+ let enumSemanticId;
184
+ if (scopeTracker) {
185
+ enumSemanticId = computeSemanticId('ENUM', enumName, scopeTracker.getContext());
186
+ }
165
187
  // Extract members
166
188
  const members = [];
167
189
  if (node.members) {
@@ -185,12 +207,12 @@ export class TypeScriptVisitor extends ASTVisitor {
185
207
  }
186
208
  }
187
209
  enums.push({
188
- id: enumId,
210
+ semanticId: enumSemanticId,
189
211
  type: 'ENUM',
190
212
  name: enumName,
191
213
  file: module.file,
192
- line: node.loc.start.line,
193
- column: node.loc.start.column,
214
+ line: getLine(node),
215
+ column: getColumn(node),
194
216
  isConst: node.const || false,
195
217
  members
196
218
  });
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import type { Node } from '@babel/types';
10
10
  import { ASTVisitor, type VisitorModule, type VisitorCollections, type VisitorHandlers, type CounterRef } from './ASTVisitor.js';
11
+ import { ScopeTracker } from '../../../../core/ScopeTracker.js';
11
12
  /**
12
13
  * Variable info extracted from pattern
13
14
  */
@@ -21,6 +22,7 @@ export interface VariableInfo {
21
22
  };
22
23
  propertyPath?: string[];
23
24
  arrayIndex?: number;
25
+ isRest?: boolean;
24
26
  }
25
27
  /**
26
28
  * Callback type for extracting variable names from patterns
@@ -29,17 +31,33 @@ export type ExtractVariableNamesCallback = (pattern: Node) => VariableInfo[];
29
31
  /**
30
32
  * Callback type for tracking variable assignments
31
33
  */
32
- export type TrackVariableAssignmentCallback = (initNode: Node, variableId: string, variableName: string, module: VisitorModule, line: number, literals: unknown[], variableAssignments: unknown[], literalCounterRef: CounterRef) => void;
34
+ export type TrackVariableAssignmentCallback = (initNode: Node, variableId: string, variableName: string, module: VisitorModule, line: number, literals: unknown[], variableAssignments: unknown[], literalCounterRef: CounterRef, objectLiterals: unknown[], objectProperties: unknown[], objectLiteralCounterRef: CounterRef) => void;
33
35
  export declare class VariableVisitor extends ASTVisitor {
34
36
  private extractVariableNamesFromPattern;
35
37
  private trackVariableAssignment;
38
+ private scopeTracker?;
39
+ /**
40
+ * Recursively unwrap AwaitExpression to get the underlying expression.
41
+ * await await fetch() -> fetch() (REG-223)
42
+ */
43
+ private unwrapAwaitExpression;
44
+ /**
45
+ * Check if expression is CallExpression or AwaitExpression wrapping a call. (REG-223)
46
+ */
47
+ private isCallOrAwaitExpression;
48
+ /**
49
+ * Extract call site information from CallExpression. (REG-223)
50
+ * Returns null if not a valid CallExpression.
51
+ */
52
+ private extractCallInfo;
36
53
  /**
37
54
  * @param module - Current module being analyzed
38
55
  * @param collections - Must contain arrays and counter refs
39
56
  * @param extractVariableNamesFromPattern - Helper for destructuring
40
57
  * @param trackVariableAssignment - Helper for data flow tracking
58
+ * @param scopeTracker - Optional ScopeTracker for semantic ID generation
41
59
  */
42
- constructor(module: VisitorModule, collections: VisitorCollections, extractVariableNamesFromPattern: ExtractVariableNamesCallback, trackVariableAssignment: TrackVariableAssignmentCallback);
60
+ constructor(module: VisitorModule, collections: VisitorCollections, extractVariableNamesFromPattern: ExtractVariableNamesCallback, trackVariableAssignment: TrackVariableAssignmentCallback, scopeTracker?: ScopeTracker);
43
61
  getHandlers(): VisitorHandlers;
44
62
  }
45
63
  //# sourceMappingURL=VariableVisitor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VariableVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/VariableVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAKV,IAAI,EACL,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGjI;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACjD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG,CAC5C,QAAQ,EAAE,IAAI,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,mBAAmB,EAAE,OAAO,EAAE,EAC9B,iBAAiB,EAAE,UAAU,KAC1B,IAAI,CAAC;AAoDV,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,+BAA+B,CAA+B;IACtE,OAAO,CAAC,uBAAuB,CAAkC;IAEjE;;;;;OAKG;gBAED,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,kBAAkB,EAC/B,+BAA+B,EAAE,4BAA4B,EAC7D,uBAAuB,EAAE,+BAA+B;IAO1D,WAAW,IAAI,eAAe;CAmJ/B"}
1
+ {"version":3,"file":"VariableVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/VariableVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAKV,IAAI,EACL,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEjI,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIhE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACjD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG,CAC5C,QAAQ,EAAE,IAAI,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,mBAAmB,EAAE,OAAO,EAAE,EAC9B,iBAAiB,EAAE,UAAU,EAC7B,cAAc,EAAE,OAAO,EAAE,EACzB,gBAAgB,EAAE,OAAO,EAAE,EAC3B,uBAAuB,EAAE,UAAU,KAChC,IAAI,CAAC;AA8DV,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,+BAA+B,CAA+B;IACtE,OAAO,CAAC,uBAAuB,CAAkC;IACjE,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAsCvB;;;;;;OAMG;gBAED,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,kBAAkB,EAC/B,+BAA+B,EAAE,4BAA4B,EAC7D,uBAAuB,EAAE,+BAA+B,EACxD,YAAY,CAAC,EAAE,YAAY;IAQ7B,WAAW,IAAI,eAAe;CAsT/B"}
@@ -8,19 +8,78 @@
8
8
  */
9
9
  import { ASTVisitor } from './ASTVisitor.js';
10
10
  import { ExpressionEvaluator } from '../ExpressionEvaluator.js';
11
+ import { IdGenerator } from '../IdGenerator.js';
11
12
  export class VariableVisitor extends ASTVisitor {
12
13
  extractVariableNamesFromPattern;
13
14
  trackVariableAssignment;
15
+ scopeTracker;
16
+ /**
17
+ * Recursively unwrap AwaitExpression to get the underlying expression.
18
+ * await await fetch() -> fetch() (REG-223)
19
+ */
20
+ unwrapAwaitExpression(node) {
21
+ if (node.type === 'AwaitExpression' && node.argument) {
22
+ return this.unwrapAwaitExpression(node.argument);
23
+ }
24
+ return node;
25
+ }
26
+ /**
27
+ * Check if expression is CallExpression or AwaitExpression wrapping a call. (REG-223)
28
+ */
29
+ isCallOrAwaitExpression(node) {
30
+ const unwrapped = this.unwrapAwaitExpression(node);
31
+ return unwrapped.type === 'CallExpression';
32
+ }
33
+ /**
34
+ * Extract call site information from CallExpression. (REG-223)
35
+ * Returns null if not a valid CallExpression.
36
+ */
37
+ extractCallInfo(node) {
38
+ if (node.type !== 'CallExpression') {
39
+ return null;
40
+ }
41
+ const callExpr = node;
42
+ const callee = callExpr.callee;
43
+ let name;
44
+ let isMethodCall = false;
45
+ // Direct call: fetchUser()
46
+ if (callee.type === 'Identifier') {
47
+ name = callee.name;
48
+ }
49
+ // Method call: obj.fetchUser() or arr.map()
50
+ else if (callee.type === 'MemberExpression') {
51
+ isMethodCall = true;
52
+ const memberExpr = callee;
53
+ const objectName = memberExpr.object.type === 'Identifier'
54
+ ? memberExpr.object.name
55
+ : (memberExpr.object.type === 'ThisExpression' ? 'this' : 'unknown');
56
+ const methodName = memberExpr.property.type === 'Identifier'
57
+ ? memberExpr.property.name
58
+ : 'unknown';
59
+ name = `${objectName}.${methodName}`;
60
+ }
61
+ else {
62
+ return null;
63
+ }
64
+ return {
65
+ line: callExpr.loc?.start.line ?? 0,
66
+ column: callExpr.loc?.start.column ?? 0,
67
+ name,
68
+ isMethodCall
69
+ };
70
+ }
14
71
  /**
15
72
  * @param module - Current module being analyzed
16
73
  * @param collections - Must contain arrays and counter refs
17
74
  * @param extractVariableNamesFromPattern - Helper for destructuring
18
75
  * @param trackVariableAssignment - Helper for data flow tracking
76
+ * @param scopeTracker - Optional ScopeTracker for semantic ID generation
19
77
  */
20
- constructor(module, collections, extractVariableNamesFromPattern, trackVariableAssignment) {
78
+ constructor(module, collections, extractVariableNamesFromPattern, trackVariableAssignment, scopeTracker) {
21
79
  super(module, collections);
22
80
  this.extractVariableNamesFromPattern = extractVariableNamesFromPattern;
23
81
  this.trackVariableAssignment = trackVariableAssignment;
82
+ this.scopeTracker = scopeTracker;
24
83
  }
25
84
  getHandlers() {
26
85
  const { module } = this;
@@ -28,10 +87,19 @@ export class VariableVisitor extends ASTVisitor {
28
87
  const classInstantiations = this.collections.classInstantiations ?? [];
29
88
  const literals = (this.collections.literals ?? []);
30
89
  const variableAssignments = this.collections.variableAssignments ?? [];
90
+ const scopes = (this.collections.scopes ?? []);
31
91
  const varDeclCounterRef = (this.collections.varDeclCounterRef ?? { value: 0 });
32
92
  const literalCounterRef = (this.collections.literalCounterRef ?? { value: 0 });
93
+ const scopeCounterRef = (this.collections.scopeCounterRef ?? { value: 0 });
94
+ // Object literal tracking collections (REG-328)
95
+ const objectLiterals = (this.collections.objectLiterals ?? []);
96
+ const objectProperties = (this.collections.objectProperties ?? []);
97
+ const objectLiteralCounterRef = (this.collections.objectLiteralCounterRef ?? { value: 0 });
98
+ const scopeTracker = this.scopeTracker;
33
99
  const extractVariableNamesFromPattern = this.extractVariableNamesFromPattern;
34
100
  const trackVariableAssignment = this.trackVariableAssignment;
101
+ // Track which loops we've already created scopes for
102
+ const processedLoops = new Set();
35
103
  return {
36
104
  VariableDeclaration: (path) => {
37
105
  // Only module-level variables
@@ -39,6 +107,35 @@ export class VariableVisitor extends ASTVisitor {
39
107
  if (!functionParent) {
40
108
  const varNode = path.node;
41
109
  const isConst = varNode.kind === 'const';
110
+ // Check if this is a loop variable (for...of or for...in)
111
+ const parent = path.parent;
112
+ const isLoopVariable = (parent.type === 'ForOfStatement' || parent.type === 'ForInStatement')
113
+ && parent.left === varNode;
114
+ // If this is a loop variable, create the loop scope first (if not already created)
115
+ if (isLoopVariable && !processedLoops.has(parent)) {
116
+ processedLoops.add(parent);
117
+ const loopNode = parent;
118
+ const line = loopNode.loc?.start.line ?? 0;
119
+ const scopeType = loopNode.type === 'ForOfStatement' ? 'for-of-loop' : 'for-in-loop';
120
+ const trackerType = loopNode.type === 'ForOfStatement' ? 'for-of' : 'for-in';
121
+ const scopeId = `SCOPE#${scopeType}#${module.file}#${line}:${scopeCounterRef.value++}`;
122
+ // Enter scope in tracker BEFORE generating semantic ID
123
+ if (scopeTracker) {
124
+ scopeTracker.enterCountedScope(trackerType);
125
+ }
126
+ const semanticId = scopeTracker
127
+ ? scopeTracker.getContext().scopePath.join('->')
128
+ : scopeId;
129
+ scopes.push({
130
+ id: scopeId,
131
+ type: 'SCOPE',
132
+ scopeType,
133
+ semanticId,
134
+ file: module.file,
135
+ line,
136
+ parentScopeId: module.id
137
+ });
138
+ }
42
139
  varNode.declarations.forEach((declarator) => {
43
140
  // Extract all variable names from the pattern (handles destructuring)
44
141
  const variables = extractVariableNamesFromPattern(declarator.id);
@@ -46,12 +143,13 @@ export class VariableVisitor extends ASTVisitor {
46
143
  const literalValue = ExpressionEvaluator.extractLiteralValue(declarator.init);
47
144
  const isLiteral = literalValue !== null;
48
145
  const isNewExpression = declarator.init && declarator.init.type === 'NewExpression';
49
- // For const with literal or NewExpression create CONSTANT
50
- // For everything else - VARIABLE
51
- const shouldBeConstant = isConst && (isLiteral || isNewExpression);
52
- const varId = shouldBeConstant
53
- ? `CONSTANT#${varInfo.name}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}:${varDeclCounterRef.value++}`
54
- : `VARIABLE#${varInfo.name}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}:${varDeclCounterRef.value++}`;
146
+ // Loop variables with const should be CONSTANT (they can't be reassigned in loop body)
147
+ // Regular variables with const are CONSTANT only if initialized with literal or new expression
148
+ const shouldBeConstant = isConst && (isLoopVariable || isLiteral || isNewExpression);
149
+ const nodeType = shouldBeConstant ? 'CONSTANT' : 'VARIABLE';
150
+ // Generate ID using centralized IdGenerator
151
+ const idGenerator = new IdGenerator(scopeTracker);
152
+ const varId = idGenerator.generate(nodeType, varInfo.name, module.file, varInfo.loc.start.line, varInfo.loc.start.column, varDeclCounterRef);
55
153
  if (shouldBeConstant) {
56
154
  // CONSTANT node
57
155
  const constantData = {
@@ -92,53 +190,153 @@ export class VariableVisitor extends ASTVisitor {
92
190
  });
93
191
  }
94
192
  // Track assignment for data flow analysis
95
- if (declarator.init) {
96
- // Handle destructuring - create EXPRESSION for property path
97
- if (varInfo.propertyPath || varInfo.arrayIndex !== undefined) {
98
- // Create EXPRESSION node for the property access
99
- const initName = declarator.init.type === 'Identifier'
100
- ? declarator.init.name
101
- : 'expr';
102
- let expressionPath = initName;
103
- if (varInfo.propertyPath) {
104
- expressionPath = `${initName}.${varInfo.propertyPath.join('.')}`;
105
- }
106
- else if (varInfo.arrayIndex !== undefined) {
107
- expressionPath = `${initName}[${varInfo.arrayIndex}]`;
108
- }
109
- const expressionId = `EXPRESSION#${expressionPath}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}`;
110
- // Create EXPRESSION node representing the property access
111
- literals.push({
112
- id: expressionId,
113
- type: 'EXPRESSION',
114
- expressionType: varInfo.propertyPath ? 'MemberExpression' : 'ArrayAccess',
115
- path: expressionPath,
116
- baseName: initName,
117
- propertyPath: varInfo.propertyPath || null,
118
- arrayIndex: varInfo.arrayIndex,
119
- file: module.file,
120
- line: varInfo.loc.start.line
121
- });
122
- // Create ASSIGNED_FROM edge: VARIABLE -> EXPRESSION
193
+ // For loop variables, the "init" is the right side of for...of/for...in
194
+ const initExpression = isLoopVariable
195
+ ? parent.right
196
+ : declarator.init;
197
+ if (initExpression) {
198
+ // For loop variables, create DERIVES_FROM edges instead of ASSIGNED_FROM
199
+ // Loop variables derive their values from the collection (semantic difference)
200
+ if (isLoopVariable && initExpression.type === 'Identifier') {
201
+ const sourceName = initExpression.name;
123
202
  variableAssignments.push({
124
203
  variableId: varId,
125
- sourceId: expressionId,
126
- sourceType: 'EXPRESSION'
204
+ sourceType: 'DERIVES_FROM_VARIABLE',
205
+ sourceName,
206
+ file: module.file,
207
+ line: varInfo.loc.start.line
127
208
  });
128
- // Also create DERIVES_FROM edge: EXPRESSION -> base variable (if identifier)
129
- if (declarator.init.type === 'Identifier') {
209
+ }
210
+ // Handle destructuring - create EXPRESSION for property path
211
+ else if (varInfo.propertyPath || varInfo.arrayIndex !== undefined || varInfo.isRest) {
212
+ // Phase 1: Simple Identifier init expressions (REG-201)
213
+ if (initExpression.type === 'Identifier') {
214
+ const sourceBaseName = initExpression.name;
215
+ const expressionLine = varInfo.loc.start.line;
216
+ // Handle rest elements specially - create edge to whole source
217
+ if (varInfo.isRest) {
218
+ variableAssignments.push({
219
+ variableId: varId,
220
+ sourceType: 'VARIABLE',
221
+ sourceName: sourceBaseName,
222
+ line: expressionLine
223
+ });
224
+ return;
225
+ }
226
+ const expressionColumn = varInfo.loc.start.column;
227
+ // Build property path string
228
+ let fullPath = sourceBaseName;
229
+ if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
230
+ fullPath = `${sourceBaseName}.${varInfo.propertyPath.join('.')}`;
231
+ }
232
+ // Generate expression ID (matches GraphBuilder expectations)
233
+ const expressionId = `${module.file}:EXPRESSION:MemberExpression:${expressionLine}:${expressionColumn}`;
234
+ // Determine property for display
235
+ let property;
236
+ if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
237
+ property = varInfo.propertyPath[varInfo.propertyPath.length - 1];
238
+ }
239
+ else if (varInfo.arrayIndex !== undefined) {
240
+ property = String(varInfo.arrayIndex);
241
+ }
242
+ else {
243
+ property = '';
244
+ }
245
+ // Push assignment with full metadata for GraphBuilder (REG-201)
246
+ // GraphBuilder will create the EXPRESSION node from this metadata
247
+ variableAssignments.push({
248
+ variableId: varId,
249
+ sourceId: expressionId,
250
+ sourceType: 'EXPRESSION',
251
+ expressionType: 'MemberExpression',
252
+ object: sourceBaseName,
253
+ property: property,
254
+ computed: varInfo.arrayIndex !== undefined,
255
+ path: fullPath,
256
+ objectSourceName: sourceBaseName, // Use objectSourceName for DERIVES_FROM edge creation
257
+ propertyPath: varInfo.propertyPath || undefined,
258
+ arrayIndex: varInfo.arrayIndex,
259
+ file: module.file,
260
+ line: expressionLine,
261
+ column: expressionColumn
262
+ });
263
+ }
264
+ // Phase 2: CallExpression or AwaitExpression (REG-223)
265
+ else if (this.isCallOrAwaitExpression(initExpression)) {
266
+ const unwrapped = this.unwrapAwaitExpression(initExpression);
267
+ const callInfo = this.extractCallInfo(unwrapped);
268
+ if (!callInfo) {
269
+ // Unsupported call pattern (computed callee, etc.)
270
+ return;
271
+ }
272
+ const callRepresentation = `${callInfo.name}()`;
273
+ const expressionLine = varInfo.loc.start.line;
274
+ const expressionColumn = varInfo.loc.start.column;
275
+ // Handle rest elements - create direct CALL_SITE assignment
276
+ if (varInfo.isRest) {
277
+ variableAssignments.push({
278
+ variableId: varId,
279
+ sourceType: 'CALL_SITE',
280
+ callName: callInfo.name,
281
+ callLine: callInfo.line,
282
+ callColumn: callInfo.column,
283
+ callSourceLine: callInfo.line,
284
+ callSourceColumn: callInfo.column,
285
+ callSourceFile: module.file,
286
+ callSourceName: callInfo.name,
287
+ line: expressionLine
288
+ });
289
+ return;
290
+ }
291
+ // Generate expression ID (matches GraphBuilder expectations)
292
+ const expressionId = `${module.file}:EXPRESSION:MemberExpression:${expressionLine}:${expressionColumn}`;
293
+ // Determine property for display
294
+ let property;
295
+ if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
296
+ property = varInfo.propertyPath[varInfo.propertyPath.length - 1];
297
+ }
298
+ else if (varInfo.arrayIndex !== undefined) {
299
+ property = String(varInfo.arrayIndex);
300
+ }
301
+ else {
302
+ property = '';
303
+ }
304
+ // Build property path string: "fetchUser().data" or "fetchUser().user.name"
305
+ let fullPath = callRepresentation;
306
+ if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
307
+ fullPath = `${callRepresentation}.${varInfo.propertyPath.join('.')}`;
308
+ }
309
+ // Push assignment with call source metadata for GraphBuilder (REG-223)
130
310
  variableAssignments.push({
131
- variableId: expressionId,
132
- sourceId: null, // Will be resolved by name
133
- sourceName: declarator.init.name,
134
- sourceType: 'DERIVES_FROM_VARIABLE',
135
- file: module.file
311
+ variableId: varId,
312
+ sourceId: expressionId,
313
+ sourceType: 'EXPRESSION',
314
+ expressionType: 'MemberExpression',
315
+ object: callRepresentation, // "fetchUser()" - display name
316
+ property: property,
317
+ computed: varInfo.arrayIndex !== undefined,
318
+ path: fullPath,
319
+ propertyPath: varInfo.propertyPath || undefined,
320
+ arrayIndex: varInfo.arrayIndex,
321
+ // Call source for DERIVES_FROM lookup (REG-223)
322
+ callSourceLine: callInfo.line,
323
+ callSourceColumn: callInfo.column,
324
+ callSourceFile: module.file,
325
+ callSourceName: callInfo.name,
326
+ sourceMetadata: {
327
+ sourceType: callInfo.isMethodCall ? 'method-call' : 'call'
328
+ },
329
+ file: module.file,
330
+ line: expressionLine,
331
+ column: expressionColumn
136
332
  });
137
333
  }
334
+ // Unsupported init type (MemberExpression without call, etc.)
335
+ // Skip silently
138
336
  }
139
337
  else {
140
338
  // Normal assignment tracking
141
- trackVariableAssignment(declarator.init, varId, varInfo.name, module, varInfo.loc.start.line, literals, variableAssignments, literalCounterRef);
339
+ trackVariableAssignment(initExpression, varId, varInfo.name, module, varInfo.loc.start.line, literals, variableAssignments, literalCounterRef, objectLiterals, objectProperties, objectLiteralCounterRef);
142
340
  }
143
341
  }
144
342
  });
@@ -1 +1 @@
1
- {"version":3,"file":"MonorepoServiceDiscovery.d.ts","sourceRoot":"","sources":["../../../src/plugins/discovery/MonorepoServiceDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAehF;;GAEG;AACH,UAAU,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IAC3D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAW;gBAElB,MAAM,GAAE,cAAmB;IAOvC,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA0D7D"}
1
+ {"version":3,"file":"MonorepoServiceDiscovery.d.ts","sourceRoot":"","sources":["../../../src/plugins/discovery/MonorepoServiceDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAehF;;GAEG;AACH,UAAU,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IAC3D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAW;gBAElB,MAAM,GAAE,cAAmB;IAOvC,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA2D7D"}
@@ -32,16 +32,17 @@ export class MonorepoServiceDiscovery extends DiscoveryPlugin {
32
32
  };
33
33
  }
34
34
  async execute(context) {
35
+ const logger = this.log(context);
35
36
  const { projectPath, graph } = context;
36
37
  const servicesPath = join(projectPath, this.servicesDir);
37
- console.log(`[MonorepoServiceDiscovery] Looking for services in: ${servicesPath}`);
38
+ logger.debug('Looking for services', { servicesPath });
38
39
  if (!existsSync(servicesPath)) {
39
40
  return createErrorResult(new Error(`Services directory not found: ${servicesPath}`));
40
41
  }
41
42
  try {
42
43
  const services = [];
43
44
  const entries = readdirSync(servicesPath);
44
- console.log(`[MonorepoServiceDiscovery] Found ${entries.length} entries`);
45
+ logger.debug('Found entries', { count: entries.length });
45
46
  for (const entry of entries) {
46
47
  const fullPath = join(servicesPath, entry);
47
48
  const stat = statSync(fullPath);
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleProjectDiscovery.d.ts","sourceRoot":"","sources":["../../../src/plugins/discovery/SimpleProjectDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA2BhF,qBAAa,sBAAuB,SAAQ,MAAM;IAEhD,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA+C7D"}
1
+ {"version":3,"file":"SimpleProjectDiscovery.d.ts","sourceRoot":"","sources":["../../../src/plugins/discovery/SimpleProjectDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA6BhF,qBAAa,sBAAuB,SAAQ,MAAM;IAEhD,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAkD7D"}
@@ -9,6 +9,7 @@ import { existsSync, readFileSync } from 'fs';
9
9
  import { join } from 'path';
10
10
  import { NodeFactory } from '../../core/NodeFactory.js';
11
11
  import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
12
+ import { resolveSourceEntrypoint } from './resolveSourceEntrypoint.js';
12
13
  export class SimpleProjectDiscovery extends Plugin {
13
14
  get metadata() {
14
15
  return {
@@ -36,7 +37,10 @@ export class SimpleProjectDiscovery extends Plugin {
36
37
  try {
37
38
  const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
38
39
  const serviceName = packageJson.name || 'unnamed-service';
39
- const entrypoint = packageJson.main || 'index.js';
40
+ // Prefer TypeScript source over compiled output
41
+ const entrypoint = resolveSourceEntrypoint(projectPath, packageJson)
42
+ ?? packageJson.main
43
+ ?? 'index.js';
40
44
  // Используем NodeFactory для создания SERVICE ноды
41
45
  const serviceNode = NodeFactory.createService(serviceName, projectPath, {
42
46
  discoveryMethod: 'simple',
@@ -0,0 +1,22 @@
1
+ /**
2
+ * WorkspaceDiscovery - Discovery plugin for npm/pnpm/yarn/lerna workspaces
3
+ *
4
+ * Detects workspace configuration and creates SERVICE nodes for each package.
5
+ * Priority: 110 (higher than MonorepoServiceDiscovery at 100)
6
+ *
7
+ * Supports:
8
+ * - pnpm-workspace.yaml
9
+ * - package.json workspaces (npm/yarn)
10
+ * - lerna.json
11
+ */
12
+ import { DiscoveryPlugin } from './DiscoveryPlugin.js';
13
+ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
14
+ export declare class WorkspaceDiscovery extends DiscoveryPlugin {
15
+ get metadata(): PluginMetadata;
16
+ execute(context: PluginContext): Promise<PluginResult>;
17
+ /**
18
+ * Create SERVICE node from workspace package.
19
+ */
20
+ private createServiceNode;
21
+ }
22
+ //# sourceMappingURL=WorkspaceDiscovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceDiscovery.d.ts","sourceRoot":"","sources":["../../../src/plugins/discovery/WorkspaceDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAuBhF,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA4F5D;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAmC1B"}