@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
@@ -6,16 +6,24 @@
6
6
  * - ArrowFunctionExpression (module-level)
7
7
  */
8
8
  import { ASTVisitor } from './ASTVisitor.js';
9
+ import { typeNodeToString } from './TypeScriptVisitor.js';
10
+ import { IdGenerator } from '../IdGenerator.js';
11
+ import { createParameterNodes } from '../utils/createParameterNodes.js';
12
+ import { getLine, getColumn } from '../utils/location.js';
13
+ import { ConstructorCallNode } from '../../../../core/nodes/ConstructorCallNode.js';
9
14
  export class FunctionVisitor extends ASTVisitor {
10
15
  analyzeFunctionBody;
16
+ scopeTracker;
11
17
  /**
12
18
  * @param module - Current module being analyzed
13
19
  * @param collections - Must contain arrays and counter refs
14
20
  * @param analyzeFunctionBody - Callback to analyze function internals
21
+ * @param scopeTracker - REQUIRED for semantic ID generation
15
22
  */
16
- constructor(module, collections, analyzeFunctionBody) {
23
+ constructor(module, collections, analyzeFunctionBody, scopeTracker) {
17
24
  super(module, collections);
18
25
  this.analyzeFunctionBody = analyzeFunctionBody;
26
+ this.scopeTracker = scopeTracker;
19
27
  }
20
28
  getHandlers() {
21
29
  const { module } = this;
@@ -23,71 +31,96 @@ export class FunctionVisitor extends ASTVisitor {
23
31
  const parameters = this.collections.parameters ?? [];
24
32
  const scopes = this.collections.scopes ?? [];
25
33
  const functionCounterRef = (this.collections.functionCounterRef ?? { value: 0 });
26
- const moduleScopeCtx = this.collections.moduleScopeCtx;
34
+ const scopeTracker = this.scopeTracker;
27
35
  const analyzeFunctionBody = this.analyzeFunctionBody;
28
36
  const collections = this.collections;
29
37
  // Helper function to generate stable anonymous function name
30
38
  const generateAnonymousName = () => {
31
- if (!moduleScopeCtx)
32
- return 'anonymous';
33
- const index = moduleScopeCtx.siblingCounters.get('anonymous') || 0;
34
- moduleScopeCtx.siblingCounters.set('anonymous', index + 1);
39
+ const index = scopeTracker.getSiblingIndex('anonymous');
35
40
  return `anonymous[${index}]`;
36
41
  };
37
- // Helper function to create PARAMETER nodes for function params
38
- const createParameterNodes = (params, functionId, file, line) => {
39
- if (!parameters)
40
- return; // Guard for backward compatibility
41
- params.forEach((param, index) => {
42
- // Handle different parameter types
42
+ // Helper function to extract parameter names and types from function params
43
+ const extractParamInfo = (params) => {
44
+ const names = [];
45
+ const types = [];
46
+ params.forEach((param) => {
43
47
  if (param.type === 'Identifier') {
44
- const paramId = `PARAMETER#${param.name}#${file}#${line}:${index}`;
45
- parameters.push({
46
- id: paramId,
47
- type: 'PARAMETER',
48
- name: param.name,
49
- file: file,
50
- line: param.loc?.start.line || line,
51
- index: index,
52
- parentFunctionId: functionId
53
- });
48
+ const id = param;
49
+ names.push(id.name);
50
+ // Check for type annotation
51
+ const typeAnnotation = id.typeAnnotation?.typeAnnotation;
52
+ types.push(typeAnnotation ? typeNodeToString(typeAnnotation) : 'any');
54
53
  }
55
54
  else if (param.type === 'AssignmentPattern') {
56
- // Default parameter: function(a = 1)
57
55
  const assignmentParam = param;
58
56
  if (assignmentParam.left.type === 'Identifier') {
59
- const paramId = `PARAMETER#${assignmentParam.left.name}#${file}#${line}:${index}`;
60
- parameters.push({
61
- id: paramId,
62
- type: 'PARAMETER',
63
- name: assignmentParam.left.name,
64
- file: file,
65
- line: assignmentParam.left.loc?.start.line || line,
66
- index: index,
67
- hasDefault: true,
68
- parentFunctionId: functionId
69
- });
57
+ const id = assignmentParam.left;
58
+ names.push(id.name + '?');
59
+ const typeAnnotation = id.typeAnnotation?.typeAnnotation;
60
+ types.push(typeAnnotation ? typeNodeToString(typeAnnotation) : 'any');
70
61
  }
71
62
  }
72
63
  else if (param.type === 'RestElement') {
73
- // Rest parameter: function(...args)
74
64
  const restParam = param;
75
65
  if (restParam.argument.type === 'Identifier') {
76
- const paramId = `PARAMETER#${restParam.argument.name}#${file}#${line}:${index}`;
77
- parameters.push({
78
- id: paramId,
79
- type: 'PARAMETER',
80
- name: restParam.argument.name,
81
- file: file,
82
- line: restParam.argument.loc?.start.line || line,
83
- index: index,
84
- isRest: true,
85
- parentFunctionId: functionId
86
- });
66
+ const id = restParam.argument;
67
+ names.push('...' + id.name);
68
+ const typeAnnotation = id.typeAnnotation?.typeAnnotation;
69
+ types.push(typeAnnotation ? typeNodeToString(typeAnnotation) : 'any[]');
87
70
  }
88
71
  }
89
- // ObjectPattern and ArrayPattern (destructuring parameters) can be added later
90
72
  });
73
+ return { names, types };
74
+ };
75
+ // Helper function to extract return type from function
76
+ const extractReturnType = (node) => {
77
+ const returnTypeAnnotation = node.returnType?.typeAnnotation;
78
+ if (returnTypeAnnotation) {
79
+ return typeNodeToString(returnTypeAnnotation);
80
+ }
81
+ return 'void';
82
+ };
83
+ // Helper function to extract JSDoc summary from leading comments
84
+ const extractJsdocSummary = (node) => {
85
+ const comments = node.leadingComments;
86
+ if (!comments || comments.length === 0)
87
+ return undefined;
88
+ // Find the last block comment that looks like JSDoc
89
+ for (let i = comments.length - 1; i >= 0; i--) {
90
+ const comment = comments[i];
91
+ if (comment.type === 'CommentBlock' && comment.value.startsWith('*')) {
92
+ // Parse JSDoc - get first non-empty line after the opening
93
+ const lines = comment.value.split('\n');
94
+ for (const line of lines) {
95
+ const trimmed = line.replace(/^\s*\*\s?/, '').trim();
96
+ // Skip empty lines and @tags
97
+ if (trimmed && !trimmed.startsWith('@')) {
98
+ return trimmed.slice(0, 200); // Limit length
99
+ }
100
+ }
101
+ }
102
+ }
103
+ return undefined;
104
+ };
105
+ // Helper function to build function signature
106
+ const buildSignature = (params, paramTypes, returnType, isAsync) => {
107
+ const paramParts = params.map((name, i) => {
108
+ const type = paramTypes[i] || 'any';
109
+ // Handle rest params
110
+ if (name.startsWith('...')) {
111
+ return `${name}: ${type}`;
112
+ }
113
+ // Handle optional params (with ?)
114
+ if (name.endsWith('?')) {
115
+ return `${name}: ${type}`;
116
+ }
117
+ return `${name}: ${type}`;
118
+ });
119
+ const paramsStr = `(${paramParts.join(', ')})`;
120
+ const retStr = isAsync && !returnType.startsWith('Promise')
121
+ ? `Promise<${returnType}>`
122
+ : returnType;
123
+ return `${paramsStr} => ${retStr}`;
91
124
  };
92
125
  return {
93
126
  // Regular function declarations
@@ -95,21 +128,36 @@ export class FunctionVisitor extends ASTVisitor {
95
128
  const node = path.node;
96
129
  if (!node.id)
97
130
  return; // Skip anonymous function declarations
98
- const functionId = `FUNCTION#${node.id.name}#${module.file}#${node.loc.start.line}`;
131
+ const isAsync = node.async || false;
132
+ const line = getLine(node);
133
+ // Generate ID using centralized IdGenerator
134
+ const idGenerator = new IdGenerator(scopeTracker);
135
+ const functionId = idGenerator.generateSimple('FUNCTION', node.id.name, module.file, line);
136
+ // Extract type info
137
+ const { names: paramNames, types: paramTypes } = extractParamInfo(node.params);
138
+ const returnType = extractReturnType(node);
139
+ const jsdocSummary = extractJsdocSummary(node);
140
+ const signature = buildSignature(paramNames, paramTypes, returnType, isAsync);
99
141
  functions.push({
100
142
  id: functionId,
101
- stableId: functionId,
102
143
  type: 'FUNCTION',
103
144
  name: node.id.name,
104
145
  file: module.file,
105
- line: node.loc.start.line,
106
- async: node.async || false,
107
- generator: node.generator || false
146
+ line,
147
+ async: isAsync,
148
+ generator: node.generator || false,
149
+ params: paramNames,
150
+ paramTypes,
151
+ returnType,
152
+ signature,
153
+ jsdocSummary
108
154
  });
155
+ // Enter function scope BEFORE creating parameters (semantic IDs need function context)
156
+ scopeTracker.enterScope(node.id.name, 'FUNCTION');
109
157
  // Create PARAMETER nodes for function parameters
110
- createParameterNodes(node.params, functionId, module.file, node.loc.start.line);
158
+ createParameterNodes(node.params, functionId, module.file, getLine(node), parameters, scopeTracker);
111
159
  // Create SCOPE for function body
112
- const functionBodyScopeId = `SCOPE#${node.id.name}:body#${module.file}#${node.loc.start.line}`;
160
+ const functionBodyScopeId = idGenerator.generateScope('body', `${node.id.name}:body`, module.file, line);
113
161
  scopes.push({
114
162
  id: functionBodyScopeId,
115
163
  type: 'SCOPE',
@@ -117,19 +165,22 @@ export class FunctionVisitor extends ASTVisitor {
117
165
  name: `${node.id.name}:body`,
118
166
  conditional: false,
119
167
  file: module.file,
120
- line: node.loc.start.line,
168
+ line,
121
169
  parentFunctionId: functionId
122
170
  });
123
171
  // Analyze function body
124
172
  analyzeFunctionBody(path, functionBodyScopeId, module, collections);
173
+ // Exit function scope
174
+ scopeTracker.exitScope();
125
175
  // Stop traversal - analyzeFunctionBody already processed contents
126
176
  path.skip();
127
177
  },
128
178
  // Arrow functions (module-level, assigned to variables or as callbacks)
129
179
  ArrowFunctionExpression: (path) => {
130
180
  const node = path.node;
131
- const line = node.loc.start.line;
132
- const column = node.loc.start.column;
181
+ const line = getLine(node);
182
+ const column = getColumn(node);
183
+ const isAsync = node.async || false;
133
184
  // Determine arrow function name (use scope-level counter for stable semanticId)
134
185
  let functionName = generateAnonymousName();
135
186
  // If arrow function is assigned to variable: const add = () => {}
@@ -140,22 +191,35 @@ export class FunctionVisitor extends ASTVisitor {
140
191
  functionName = declarator.id.name;
141
192
  }
142
193
  }
143
- const functionId = `FUNCTION#${functionName}#${module.file}#${line}:${column}:${functionCounterRef.value++}`;
194
+ // Generate ID using centralized IdGenerator
195
+ const idGenerator = new IdGenerator(scopeTracker);
196
+ const functionId = idGenerator.generate('FUNCTION', functionName, module.file, line, column, functionCounterRef);
197
+ // Extract type info
198
+ const { names: paramNames, types: paramTypes } = extractParamInfo(node.params);
199
+ const returnType = extractReturnType(node);
200
+ const jsdocSummary = extractJsdocSummary(node);
201
+ const signature = buildSignature(paramNames, paramTypes, returnType, isAsync);
144
202
  functions.push({
145
203
  id: functionId,
146
- stableId: functionId,
147
204
  type: 'FUNCTION',
148
205
  name: functionName,
149
206
  file: module.file,
150
207
  line,
151
208
  column,
152
- async: node.async || false,
153
- arrowFunction: true
209
+ async: isAsync,
210
+ arrowFunction: true,
211
+ params: paramNames,
212
+ paramTypes,
213
+ returnType,
214
+ signature,
215
+ jsdocSummary
154
216
  });
217
+ // Enter function scope BEFORE creating parameters (semantic IDs need function context)
218
+ scopeTracker.enterScope(functionName, 'FUNCTION');
155
219
  // Create PARAMETER nodes for arrow function parameters
156
- createParameterNodes(node.params, functionId, module.file, line);
220
+ createParameterNodes(node.params, functionId, module.file, line, parameters, scopeTracker);
157
221
  // Create SCOPE for arrow function body
158
- const bodyScope = `SCOPE#${functionName}:body#${module.file}#${line}:${column}`;
222
+ const bodyScope = idGenerator.generateScope('body', `${functionName}:body`, module.file, line, column);
159
223
  scopes.push({
160
224
  id: bodyScope,
161
225
  type: 'SCOPE',
@@ -165,8 +229,71 @@ export class FunctionVisitor extends ASTVisitor {
165
229
  scopeType: 'function-body',
166
230
  parentFunctionId: functionId
167
231
  });
232
+ // REG-334: Detect Promise executor context BEFORE analyzing body
233
+ // This must happen before analyzeFunctionBody so resolve/reject calls can be linked
234
+ this.detectPromiseExecutorContext(path, node, module, collections);
168
235
  analyzeFunctionBody(path, bodyScope, module, collections);
236
+ // Exit function scope
237
+ scopeTracker.exitScope();
238
+ // Stop traversal - analyzeFunctionBody already processed contents
239
+ // Without this, babel traverse continues into arrow body and finds
240
+ // nested arrow functions, causing duplicate FUNCTION nodes
241
+ path.skip();
169
242
  }
170
243
  };
171
244
  }
245
+ /**
246
+ * REG-334: Detect if this function is a Promise executor callback.
247
+ * If so, register the context so resolve/reject calls can be linked.
248
+ *
249
+ * Pattern: new Promise((resolve, reject) => { ... })
250
+ *
251
+ * Must be called BEFORE analyzeFunctionBody so the context is available
252
+ * when resolve/reject calls are processed.
253
+ */
254
+ detectPromiseExecutorContext(path, node, module, collections) {
255
+ // Check if this function is the first argument to new Promise()
256
+ const parent = path.parent;
257
+ if (parent?.type !== 'NewExpression')
258
+ return;
259
+ const newExpr = parent;
260
+ // Check it's Promise constructor
261
+ if (newExpr.callee.type !== 'Identifier')
262
+ return;
263
+ if (newExpr.callee.name !== 'Promise')
264
+ return;
265
+ // Check this function is the first argument
266
+ if (newExpr.arguments.length === 0)
267
+ return;
268
+ if (newExpr.arguments[0] !== node)
269
+ return;
270
+ // Extract resolve/reject parameter names
271
+ let resolveName;
272
+ let rejectName;
273
+ if (node.params.length > 0 && node.params[0].type === 'Identifier') {
274
+ resolveName = node.params[0].name;
275
+ }
276
+ if (node.params.length > 1 && node.params[1].type === 'Identifier') {
277
+ rejectName = node.params[1].name;
278
+ }
279
+ if (!resolveName)
280
+ return; // No resolve parameter, nothing to track
281
+ // Generate the CONSTRUCTOR_CALL ID for linking
282
+ const line = getLine(newExpr);
283
+ const column = getColumn(newExpr);
284
+ const constructorCallId = ConstructorCallNode.generateId('Promise', module.file, line, column);
285
+ // Initialize promiseExecutorContexts if not exists
286
+ if (!collections.promiseExecutorContexts) {
287
+ collections.promiseExecutorContexts = new Map();
288
+ }
289
+ // Key by function node position to allow nested Promise detection
290
+ const funcKey = `${node.start}:${node.end}`;
291
+ collections.promiseExecutorContexts.set(funcKey, {
292
+ constructorCallId,
293
+ resolveName,
294
+ rejectName,
295
+ file: module.file,
296
+ line: getLine(node)
297
+ });
298
+ }
172
299
  }
@@ -23,6 +23,10 @@ export declare class ImportExportVisitor extends ASTVisitor {
23
23
  */
24
24
  constructor(module: VisitorModule, collections: VisitorCollections, extractVariableNamesFromPattern: ExtractVariableNamesCallback);
25
25
  getImportHandlers(): VisitorHandlers;
26
+ /**
27
+ * Convert a TemplateLiteral to a string representation for debugging
28
+ */
29
+ private templateLiteralToString;
26
30
  getExportHandlers(): VisitorHandlers;
27
31
  getHandlers(): VisitorHandlers;
28
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ImportExportVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/ImportExportVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAaV,IAAI,EACL,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;AAuC7E,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,OAAO,CAAC,+BAA+B,CAA+B;IAEtE;;;;OAIG;gBAED,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,kBAAkB,EAC/B,+BAA+B,EAAE,4BAA4B;IAM/D,iBAAiB,IAAI,eAAe;IA+CpC,iBAAiB,IAAI,eAAe;IAqHpC,WAAW,IAAI,eAAe;CAM/B"}
1
+ {"version":3,"file":"ImportExportVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/ImportExportVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAaV,IAAI,EAGL,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;AA2C7E,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,OAAO,CAAC,+BAA+B,CAA+B;IAEtE;;;;OAIG;gBAED,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,kBAAkB,EAC/B,+BAA+B,EAAE,4BAA4B;IAM/D,iBAAiB,IAAI,eAAe;IAuIpC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B,iBAAiB,IAAI,eAAe;IAsHpC,WAAW,IAAI,eAAe;CAM/B"}
@@ -8,6 +8,7 @@
8
8
  * - ExportAllDeclaration: export * from './module'
9
9
  */
10
10
  import { ASTVisitor } from './ASTVisitor.js';
11
+ import { getLine, getColumn } from '../utils/location.js';
11
12
  export class ImportExportVisitor extends ASTVisitor {
12
13
  extractVariableNamesFromPattern;
13
14
  /**
@@ -59,11 +60,113 @@ export class ImportExportVisitor extends ASTVisitor {
59
60
  imports.push({
60
61
  source,
61
62
  specifiers,
62
- line: node.loc.start.line
63
+ line: getLine(node),
64
+ column: getColumn(node)
65
+ });
66
+ },
67
+ /**
68
+ * Handle dynamic import() expressions
69
+ * Examples:
70
+ * - import('./module.js') -> isResolvable: true
71
+ * - import(`./plugins/${name}.js`) -> isResolvable: false, source: './plugins/'
72
+ * - import(modulePath) -> isResolvable: false, source: '<dynamic>'
73
+ */
74
+ CallExpression: (path) => {
75
+ const node = path.node;
76
+ // Check if this is an import() call
77
+ if (node.callee.type !== 'Import') {
78
+ return;
79
+ }
80
+ const arg = node.arguments[0];
81
+ if (!arg)
82
+ return;
83
+ let source;
84
+ let isResolvable;
85
+ let dynamicPath;
86
+ if (arg.type === 'StringLiteral') {
87
+ // import('./module.js') - literal path, fully resolvable
88
+ source = arg.value;
89
+ isResolvable = true;
90
+ }
91
+ else if (arg.type === 'TemplateLiteral') {
92
+ // import(`./plugins/${name}.js`) - template literal
93
+ const templateArg = arg;
94
+ const firstQuasi = templateArg.quasis[0];
95
+ // Extract static prefix (part before first expression)
96
+ const prefix = firstQuasi?.value?.raw || '';
97
+ if (prefix) {
98
+ source = prefix;
99
+ }
100
+ else {
101
+ // No static prefix - e.g., import(`${baseDir}/loader.js`)
102
+ source = '<dynamic>';
103
+ }
104
+ isResolvable = false;
105
+ // Capture the original template for debugging/analysis
106
+ dynamicPath = this.templateLiteralToString(templateArg);
107
+ }
108
+ else if (arg.type === 'Identifier') {
109
+ // import(modulePath) - variable path
110
+ source = '<dynamic>';
111
+ isResolvable = false;
112
+ dynamicPath = arg.name;
113
+ }
114
+ else {
115
+ // Other expressions (e.g., function calls, member expressions)
116
+ source = '<dynamic>';
117
+ isResolvable = false;
118
+ }
119
+ // Find the receiving variable name from parent
120
+ // Patterns: const mod = await import(...) or const mod = import(...)
121
+ let localName = '*'; // Default for side-effect imports
122
+ const parent = path.parent;
123
+ if (parent?.type === 'AwaitExpression') {
124
+ // const mod = await import(...)
125
+ const awaitParent = path.parentPath?.parent;
126
+ if (awaitParent?.type === 'VariableDeclarator' &&
127
+ awaitParent.id?.type === 'Identifier') {
128
+ localName = awaitParent.id.name;
129
+ }
130
+ }
131
+ else if (parent?.type === 'VariableDeclarator' &&
132
+ parent.id?.type === 'Identifier') {
133
+ // const mod = import(...) (without await)
134
+ localName = parent.id.name;
135
+ }
136
+ imports.push({
137
+ source,
138
+ specifiers: [{
139
+ imported: '*', // Dynamic imports are always namespace imports
140
+ local: localName
141
+ }],
142
+ line: getLine(node),
143
+ column: getColumn(node),
144
+ isDynamic: true,
145
+ isResolvable,
146
+ dynamicPath
63
147
  });
64
148
  }
65
149
  };
66
150
  }
151
+ /**
152
+ * Convert a TemplateLiteral to a string representation for debugging
153
+ */
154
+ templateLiteralToString(template) {
155
+ let result = '';
156
+ for (let i = 0; i < template.quasis.length; i++) {
157
+ result += template.quasis[i].value.raw;
158
+ if (i < template.expressions.length) {
159
+ const expr = template.expressions[i];
160
+ if (expr.type === 'Identifier') {
161
+ result += `\${${expr.name}}`;
162
+ }
163
+ else {
164
+ result += '${...}';
165
+ }
166
+ }
167
+ }
168
+ return result;
169
+ }
67
170
  getExportHandlers() {
68
171
  const { exports } = this.collections;
69
172
  const extractVariableNamesFromPattern = this.extractVariableNamesFromPattern;
@@ -72,12 +175,13 @@ export class ImportExportVisitor extends ASTVisitor {
72
175
  const node = path.node;
73
176
  exports.push({
74
177
  type: 'default',
75
- line: node.loc.start.line,
178
+ line: getLine(node),
76
179
  declaration: node.declaration
77
180
  });
78
181
  },
79
182
  ExportNamedDeclaration: (path) => {
80
183
  const node = path.node;
184
+ const exportLine = getLine(node);
81
185
  // export { foo, bar } from './module'
82
186
  if (node.source) {
83
187
  const specifiers = node.specifiers.map((spec) => {
@@ -95,7 +199,7 @@ export class ImportExportVisitor extends ASTVisitor {
95
199
  });
96
200
  exports.push({
97
201
  type: 'named',
98
- line: node.loc.start.line,
202
+ line: exportLine,
99
203
  specifiers,
100
204
  source: node.source.value
101
205
  });
@@ -114,7 +218,7 @@ export class ImportExportVisitor extends ASTVisitor {
114
218
  });
115
219
  exports.push({
116
220
  type: 'named',
117
- line: node.loc.start.line,
221
+ line: exportLine,
118
222
  specifiers
119
223
  });
120
224
  }
@@ -127,7 +231,7 @@ export class ImportExportVisitor extends ASTVisitor {
127
231
  if (funcDecl.id) {
128
232
  exports.push({
129
233
  type: 'named',
130
- line: node.loc.start.line,
234
+ line: exportLine,
131
235
  name: funcDecl.id.name
132
236
  });
133
237
  }
@@ -141,7 +245,7 @@ export class ImportExportVisitor extends ASTVisitor {
141
245
  variables.forEach((varInfo) => {
142
246
  exports.push({
143
247
  type: 'named',
144
- line: node.loc.start.line,
248
+ line: exportLine,
145
249
  name: varInfo.name
146
250
  });
147
251
  });
@@ -153,7 +257,7 @@ export class ImportExportVisitor extends ASTVisitor {
153
257
  if (classDecl.id) {
154
258
  exports.push({
155
259
  type: 'named',
156
- line: node.loc.start.line,
260
+ line: exportLine,
157
261
  name: classDecl.id.name
158
262
  });
159
263
  }
@@ -165,7 +269,7 @@ export class ImportExportVisitor extends ASTVisitor {
165
269
  // export * from './module'
166
270
  exports.push({
167
271
  type: 'all',
168
- line: node.loc.start.line,
272
+ line: getLine(node),
169
273
  source: node.source.value
170
274
  });
171
275
  }
@@ -7,8 +7,19 @@
7
7
  * - TSEnumDeclaration
8
8
  */
9
9
  import { ASTVisitor, type VisitorModule, type VisitorCollections, type VisitorHandlers } from './ASTVisitor.js';
10
+ import { ScopeTracker } from '../../../../core/ScopeTracker.js';
11
+ /**
12
+ * Extracts a string representation of a TypeScript type node
13
+ */
14
+ export declare function typeNodeToString(node: unknown): string;
10
15
  export declare class TypeScriptVisitor extends ASTVisitor {
11
- constructor(module: VisitorModule, collections: VisitorCollections);
16
+ private scopeTracker?;
17
+ /**
18
+ * @param module - Current module being analyzed
19
+ * @param collections - Must contain interfaces, typeAliases, enums arrays
20
+ * @param scopeTracker - Optional ScopeTracker for semantic ID generation
21
+ */
22
+ constructor(module: VisitorModule, collections: VisitorCollections, scopeTracker?: ScopeTracker);
12
23
  getHandlers(): VisitorHandlers;
13
24
  }
14
25
  //# sourceMappingURL=TypeScriptVisitor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TypeScriptVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AA8EhH,qBAAa,iBAAkB,SAAQ,UAAU;gBACnC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB;IAIlE,WAAW,IAAI,eAAe;CAmI/B"}
1
+ {"version":3,"file":"TypeScriptVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAQhH,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIhE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAgEtD;AAED,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC;;;;OAIG;gBACS,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,CAAC,EAAE,YAAY;IAK/F,WAAW,IAAI,eAAe;CAmJ/B"}