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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/README.md +0 -1
  2. package/dist/Orchestrator.d.ts +31 -2
  3. package/dist/Orchestrator.d.ts.map +1 -1
  4. package/dist/Orchestrator.js +222 -27
  5. package/dist/config/ConfigLoader.d.ts +90 -0
  6. package/dist/config/ConfigLoader.d.ts.map +1 -0
  7. package/dist/config/ConfigLoader.js +249 -0
  8. package/dist/config/index.d.ts +6 -0
  9. package/dist/config/index.d.ts.map +1 -0
  10. package/dist/config/index.js +4 -0
  11. package/dist/core/ASTWorker.d.ts +11 -36
  12. package/dist/core/ASTWorker.d.ts.map +1 -1
  13. package/dist/core/ASTWorker.js +93 -99
  14. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  15. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  16. package/dist/core/CoverageAnalyzer.js +198 -0
  17. package/dist/core/FileExplainer.d.ts +101 -0
  18. package/dist/core/FileExplainer.d.ts.map +1 -0
  19. package/dist/core/FileExplainer.js +139 -0
  20. package/dist/core/FileNodeManager.d.ts +40 -0
  21. package/dist/core/FileNodeManager.d.ts.map +1 -0
  22. package/dist/core/FileNodeManager.js +84 -0
  23. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  24. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  25. package/dist/core/GraphFreshnessChecker.js +101 -0
  26. package/dist/core/HashUtils.d.ts +24 -0
  27. package/dist/core/HashUtils.d.ts.map +1 -0
  28. package/dist/core/HashUtils.js +45 -0
  29. package/dist/core/IncrementalReanalyzer.d.ts +36 -0
  30. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  31. package/dist/core/IncrementalReanalyzer.js +132 -0
  32. package/dist/core/NodeFactory.d.ts +266 -19
  33. package/dist/core/NodeFactory.d.ts.map +1 -1
  34. package/dist/core/NodeFactory.js +256 -21
  35. package/dist/core/ScopeTracker.d.ts +84 -0
  36. package/dist/core/ScopeTracker.d.ts.map +1 -0
  37. package/dist/core/ScopeTracker.js +116 -0
  38. package/dist/core/SemanticId.d.ts +90 -0
  39. package/dist/core/SemanticId.d.ts.map +1 -0
  40. package/dist/core/SemanticId.js +115 -0
  41. package/dist/core/VersionManager.d.ts.map +1 -1
  42. package/dist/core/VersionManager.js +3 -2
  43. package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
  44. package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
  45. package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
  46. package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
  47. package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
  48. package/dist/core/nodes/ArrayLiteralNode.js +43 -0
  49. package/dist/core/nodes/BranchNode.d.ts +41 -0
  50. package/dist/core/nodes/BranchNode.d.ts.map +1 -0
  51. package/dist/core/nodes/BranchNode.js +82 -0
  52. package/dist/core/nodes/CallSiteNode.d.ts +30 -2
  53. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
  54. package/dist/core/nodes/CallSiteNode.js +54 -4
  55. package/dist/core/nodes/CaseNode.d.ts +43 -0
  56. package/dist/core/nodes/CaseNode.d.ts.map +1 -0
  57. package/dist/core/nodes/CaseNode.js +81 -0
  58. package/dist/core/nodes/ClassNode.d.ts +34 -2
  59. package/dist/core/nodes/ClassNode.d.ts.map +1 -1
  60. package/dist/core/nodes/ClassNode.js +52 -4
  61. package/dist/core/nodes/ConstantNode.d.ts +2 -2
  62. package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
  63. package/dist/core/nodes/ConstantNode.js +6 -4
  64. package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
  65. package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
  66. package/dist/core/nodes/ConstructorCallNode.js +171 -0
  67. package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
  68. package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
  69. package/dist/core/nodes/DatabaseQueryNode.js +5 -2
  70. package/dist/core/nodes/DecoratorNode.d.ts +42 -0
  71. package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
  72. package/dist/core/nodes/DecoratorNode.js +64 -0
  73. package/dist/core/nodes/EnumNode.d.ts +42 -0
  74. package/dist/core/nodes/EnumNode.d.ts.map +1 -0
  75. package/dist/core/nodes/EnumNode.js +56 -0
  76. package/dist/core/nodes/EventListenerNode.d.ts +4 -4
  77. package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
  78. package/dist/core/nodes/EventListenerNode.js +7 -4
  79. package/dist/core/nodes/ExportNode.d.ts +38 -2
  80. package/dist/core/nodes/ExportNode.d.ts.map +1 -1
  81. package/dist/core/nodes/ExportNode.js +54 -4
  82. package/dist/core/nodes/ExpressionNode.d.ts +97 -0
  83. package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
  84. package/dist/core/nodes/ExpressionNode.js +180 -0
  85. package/dist/core/nodes/ExternalModuleNode.d.ts +32 -0
  86. package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
  87. package/dist/core/nodes/ExternalModuleNode.js +49 -0
  88. package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
  89. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
  90. package/dist/core/nodes/ExternalStdioNode.js +15 -8
  91. package/dist/core/nodes/FunctionNode.d.ts +36 -0
  92. package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
  93. package/dist/core/nodes/FunctionNode.js +80 -1
  94. package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
  95. package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
  96. package/dist/core/nodes/HttpRequestNode.js +7 -4
  97. package/dist/core/nodes/ImportNode.d.ts +28 -6
  98. package/dist/core/nodes/ImportNode.d.ts.map +1 -1
  99. package/dist/core/nodes/ImportNode.js +43 -8
  100. package/dist/core/nodes/InterfaceNode.d.ts +46 -0
  101. package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
  102. package/dist/core/nodes/InterfaceNode.js +57 -0
  103. package/dist/core/nodes/IssueNode.d.ts +73 -0
  104. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  105. package/dist/core/nodes/IssueNode.js +129 -0
  106. package/dist/core/nodes/LiteralNode.d.ts +2 -2
  107. package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
  108. package/dist/core/nodes/LiteralNode.js +6 -4
  109. package/dist/core/nodes/MethodCallNode.d.ts +32 -2
  110. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
  111. package/dist/core/nodes/MethodCallNode.js +57 -4
  112. package/dist/core/nodes/MethodNode.d.ts +34 -2
  113. package/dist/core/nodes/MethodNode.d.ts.map +1 -1
  114. package/dist/core/nodes/MethodNode.js +55 -3
  115. package/dist/core/nodes/ModuleNode.d.ts +31 -0
  116. package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
  117. package/dist/core/nodes/ModuleNode.js +37 -0
  118. package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
  119. package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
  120. package/dist/core/nodes/NetworkRequestNode.js +65 -0
  121. package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
  122. package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
  123. package/dist/core/nodes/ObjectLiteralNode.js +43 -0
  124. package/dist/core/nodes/ParameterNode.d.ts +2 -2
  125. package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
  126. package/dist/core/nodes/ParameterNode.js +5 -3
  127. package/dist/core/nodes/ScopeNode.d.ts +31 -0
  128. package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
  129. package/dist/core/nodes/ScopeNode.js +49 -0
  130. package/dist/core/nodes/TypeNode.d.ts +36 -0
  131. package/dist/core/nodes/TypeNode.d.ts.map +1 -0
  132. package/dist/core/nodes/TypeNode.js +55 -0
  133. package/dist/core/nodes/VariableDeclarationNode.d.ts +29 -2
  134. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
  135. package/dist/core/nodes/VariableDeclarationNode.js +48 -4
  136. package/dist/core/nodes/index.d.ts +15 -1
  137. package/dist/core/nodes/index.d.ts.map +1 -1
  138. package/dist/core/nodes/index.js +17 -0
  139. package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
  140. package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
  141. package/dist/data/builtins/BuiltinRegistry.js +110 -0
  142. package/dist/data/builtins/definitions.d.ts +28 -0
  143. package/dist/data/builtins/definitions.d.ts.map +1 -0
  144. package/dist/data/builtins/definitions.js +250 -0
  145. package/dist/data/builtins/index.d.ts +10 -0
  146. package/dist/data/builtins/index.d.ts.map +1 -0
  147. package/dist/data/builtins/index.js +8 -0
  148. package/dist/data/builtins/jsGlobals.d.ts +18 -0
  149. package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
  150. package/dist/data/builtins/jsGlobals.js +26 -0
  151. package/dist/data/builtins/types.d.ts +34 -0
  152. package/dist/data/builtins/types.d.ts.map +1 -0
  153. package/dist/data/builtins/types.js +7 -0
  154. package/dist/data/globals/definitions.d.ts +27 -0
  155. package/dist/data/globals/definitions.d.ts.map +1 -0
  156. package/dist/data/globals/definitions.js +117 -0
  157. package/dist/data/globals/index.d.ts +36 -0
  158. package/dist/data/globals/index.d.ts.map +1 -0
  159. package/dist/data/globals/index.js +52 -0
  160. package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
  161. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  162. package/dist/diagnostics/DiagnosticCollector.js +129 -0
  163. package/dist/diagnostics/DiagnosticReporter.d.ts +100 -0
  164. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  165. package/dist/diagnostics/DiagnosticReporter.js +247 -0
  166. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  167. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  168. package/dist/diagnostics/DiagnosticWriter.js +43 -0
  169. package/dist/diagnostics/index.d.ts +14 -0
  170. package/dist/diagnostics/index.d.ts.map +1 -0
  171. package/dist/diagnostics/index.js +11 -0
  172. package/dist/errors/GrafemaError.d.ts +161 -0
  173. package/dist/errors/GrafemaError.d.ts.map +1 -0
  174. package/dist/errors/GrafemaError.js +181 -0
  175. package/dist/index.d.ts +73 -1
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +70 -1
  178. package/dist/logging/Logger.d.ts +48 -0
  179. package/dist/logging/Logger.d.ts.map +1 -0
  180. package/dist/logging/Logger.js +134 -0
  181. package/dist/plugins/Plugin.d.ts +5 -1
  182. package/dist/plugins/Plugin.d.ts.map +1 -1
  183. package/dist/plugins/Plugin.js +33 -0
  184. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  185. package/dist/plugins/analysis/DatabaseAnalyzer.js +14 -6
  186. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  187. package/dist/plugins/analysis/ExpressAnalyzer.js +29 -19
  188. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
  189. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
  190. package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
  191. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  192. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +71 -29
  193. package/dist/plugins/analysis/FetchAnalyzer.d.ts +41 -0
  194. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  195. package/dist/plugins/analysis/FetchAnalyzer.js +187 -19
  196. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
  197. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  198. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
  199. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +313 -19
  200. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  201. package/dist/plugins/analysis/JSASTAnalyzer.js +3430 -503
  202. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  203. package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
  204. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  205. package/dist/plugins/analysis/RustAnalyzer.js +16 -11
  206. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  207. package/dist/plugins/analysis/SQLiteAnalyzer.js +11 -7
  208. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  209. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
  210. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
  211. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  212. package/dist/plugins/analysis/SocketIOAnalyzer.js +117 -21
  213. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  214. package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
  215. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +207 -4
  216. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  217. package/dist/plugins/analysis/ast/GraphBuilder.js +1527 -316
  218. package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
  219. package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
  220. package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
  221. package/dist/plugins/analysis/ast/types.d.ts +470 -5
  222. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  223. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
  224. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
  225. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
  226. package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
  227. package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
  228. package/dist/plugins/analysis/ast/utils/index.js +5 -0
  229. package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
  230. package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
  231. package/dist/plugins/analysis/ast/utils/location.js +78 -0
  232. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +14 -5
  233. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  234. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
  235. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +100 -9
  236. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  237. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +674 -125
  238. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
  239. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  240. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
  241. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +14 -1
  242. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  243. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +190 -63
  244. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
  245. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
  246. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +112 -8
  247. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
  248. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  249. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
  250. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +20 -2
  251. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  252. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +243 -45
  253. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  254. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
  255. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
  256. package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
  257. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
  258. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
  259. package/dist/plugins/discovery/WorkspaceDiscovery.js +141 -0
  260. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
  261. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
  262. package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
  263. package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
  264. package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
  265. package/dist/plugins/discovery/workspaces/detector.js +49 -0
  266. package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
  267. package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
  268. package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
  269. package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
  270. package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
  271. package/dist/plugins/discovery/workspaces/index.js +8 -0
  272. package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
  273. package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
  274. package/dist/plugins/discovery/workspaces/parsers.js +80 -0
  275. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  276. package/dist/plugins/enrichment/AliasTracker.js +29 -8
  277. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
  278. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
  279. package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
  280. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
  281. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
  282. package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
  283. package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
  284. package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
  285. package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
  286. package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
  287. package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
  288. package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
  289. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
  290. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  291. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +78 -27
  292. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  293. package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
  294. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  295. package/dist/plugins/enrichment/MethodCallResolver.js +33 -13
  296. package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
  297. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  298. package/dist/plugins/enrichment/MountPointResolver.js +173 -147
  299. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
  300. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
  301. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
  302. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  303. package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
  304. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  305. package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
  306. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +22 -27
  307. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  308. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +185 -143
  309. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  310. package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
  311. package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
  312. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  313. package/dist/plugins/indexing/JSModuleIndexer.js +121 -31
  314. package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
  315. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  316. package/dist/plugins/indexing/RustModuleIndexer.js +8 -7
  317. package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
  318. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
  319. package/dist/plugins/indexing/ServiceDetector.js +28 -15
  320. package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
  321. package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
  322. package/dist/plugins/validation/BrokenImportValidator.js +249 -0
  323. package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
  324. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  325. package/dist/plugins/validation/CallResolverValidator.js +103 -77
  326. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
  327. package/dist/plugins/validation/DataFlowValidator.js +62 -49
  328. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
  329. package/dist/plugins/validation/EvalBanValidator.js +17 -16
  330. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  331. package/dist/plugins/validation/GraphConnectivityValidator.js +44 -24
  332. package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
  333. package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
  334. package/dist/plugins/validation/NodeCreationValidator.js +415 -0
  335. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  336. package/dist/plugins/validation/SQLInjectionValidator.js +61 -19
  337. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
  338. package/dist/plugins/validation/ShadowingDetector.js +6 -5
  339. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
  340. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
  341. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
  342. package/dist/plugins/vcs/GitPlugin.js +10 -12
  343. package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
  344. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
  345. package/dist/plugins/vcs/VCSPlugin.js +5 -5
  346. package/dist/queries/findCallsInFunction.d.ts +52 -0
  347. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  348. package/dist/queries/findCallsInFunction.js +135 -0
  349. package/dist/queries/findContainingFunction.d.ts +45 -0
  350. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  351. package/dist/queries/findContainingFunction.js +54 -0
  352. package/dist/queries/index.d.ts +14 -0
  353. package/dist/queries/index.d.ts.map +1 -0
  354. package/dist/queries/index.js +11 -0
  355. package/dist/queries/traceValues.d.ts +70 -0
  356. package/dist/queries/traceValues.d.ts.map +1 -0
  357. package/dist/queries/traceValues.js +299 -0
  358. package/dist/queries/types.d.ts +163 -0
  359. package/dist/queries/types.d.ts.map +1 -0
  360. package/dist/queries/types.js +9 -0
  361. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  362. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  363. package/dist/schema/GraphSchemaExtractor.js +124 -0
  364. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  365. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  366. package/dist/schema/InterfaceSchemaExtractor.js +112 -0
  367. package/dist/schema/index.d.ts +5 -0
  368. package/dist/schema/index.d.ts.map +1 -0
  369. package/dist/schema/index.js +2 -0
  370. package/dist/storage/backends/RFDBServerBackend.d.ts +21 -34
  371. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  372. package/dist/storage/backends/RFDBServerBackend.js +72 -62
  373. package/dist/storage/backends/typeValidation.d.ts.map +1 -1
  374. package/dist/storage/backends/typeValidation.js +1 -0
  375. package/dist/validation/PathValidator.d.ts +1 -2
  376. package/dist/validation/PathValidator.d.ts.map +1 -1
  377. package/package.json +3 -3
  378. package/src/Orchestrator.ts +272 -27
  379. package/src/config/ConfigLoader.ts +354 -0
  380. package/src/config/index.ts +5 -0
  381. package/src/core/ASTWorker.ts +143 -139
  382. package/src/core/CoverageAnalyzer.ts +243 -0
  383. package/src/core/FileExplainer.ts +179 -0
  384. package/src/core/FileNodeManager.ts +100 -0
  385. package/src/core/GraphFreshnessChecker.ts +143 -0
  386. package/src/core/HashUtils.ts +48 -0
  387. package/src/core/IncrementalReanalyzer.ts +192 -0
  388. package/src/core/NodeFactory.ts +470 -23
  389. package/src/core/ScopeTracker.ts +154 -0
  390. package/src/core/SemanticId.ts +192 -0
  391. package/src/core/VersionManager.ts +3 -2
  392. package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
  393. package/src/core/nodes/ArrayLiteralNode.ts +66 -0
  394. package/src/core/nodes/BranchNode.ts +113 -0
  395. package/src/core/nodes/CallSiteNode.ts +64 -4
  396. package/src/core/nodes/CaseNode.ts +123 -0
  397. package/src/core/nodes/ClassNode.ts +67 -4
  398. package/src/core/nodes/ConstantNode.ts +5 -4
  399. package/src/core/nodes/ConstructorCallNode.ts +217 -0
  400. package/src/core/nodes/DatabaseQueryNode.ts +5 -1
  401. package/src/core/nodes/DecoratorNode.ts +92 -0
  402. package/src/core/nodes/EnumNode.ts +87 -0
  403. package/src/core/nodes/EventListenerNode.ts +7 -4
  404. package/src/core/nodes/ExportNode.ts +74 -4
  405. package/src/core/nodes/ExpressionNode.ts +232 -0
  406. package/src/core/nodes/ExternalModuleNode.ts +65 -0
  407. package/src/core/nodes/ExternalStdioNode.ts +17 -9
  408. package/src/core/nodes/FunctionNode.ts +101 -1
  409. package/src/core/nodes/HttpRequestNode.ts +7 -4
  410. package/src/core/nodes/ImportNode.ts +62 -13
  411. package/src/core/nodes/InterfaceNode.ts +92 -0
  412. package/src/core/nodes/IssueNode.ts +177 -0
  413. package/src/core/nodes/LiteralNode.ts +5 -4
  414. package/src/core/nodes/MethodCallNode.ts +70 -4
  415. package/src/core/nodes/MethodNode.ts +68 -3
  416. package/src/core/nodes/ModuleNode.ts +50 -0
  417. package/src/core/nodes/NetworkRequestNode.ts +77 -0
  418. package/src/core/nodes/ObjectLiteralNode.ts +66 -0
  419. package/src/core/nodes/ParameterNode.ts +4 -3
  420. package/src/core/nodes/ScopeNode.ts +65 -0
  421. package/src/core/nodes/TypeNode.ts +79 -0
  422. package/src/core/nodes/VariableDeclarationNode.ts +58 -4
  423. package/src/core/nodes/index.ts +21 -1
  424. package/src/data/builtins/BuiltinRegistry.ts +124 -0
  425. package/src/data/builtins/definitions.ts +267 -0
  426. package/src/data/builtins/index.ts +10 -0
  427. package/src/data/builtins/jsGlobals.ts +28 -0
  428. package/src/data/builtins/types.ts +36 -0
  429. package/src/data/globals/definitions.ts +156 -0
  430. package/src/data/globals/index.ts +66 -0
  431. package/src/diagnostics/DiagnosticCollector.ts +163 -0
  432. package/src/diagnostics/DiagnosticReporter.ts +324 -0
  433. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  434. package/src/diagnostics/index.ts +16 -0
  435. package/src/errors/GrafemaError.ts +239 -0
  436. package/src/index.ts +193 -1
  437. package/src/logging/Logger.ts +152 -0
  438. package/src/plugins/Plugin.ts +42 -0
  439. package/src/plugins/analysis/DatabaseAnalyzer.ts +16 -8
  440. package/src/plugins/analysis/ExpressAnalyzer.ts +33 -19
  441. package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
  442. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +76 -36
  443. package/src/plugins/analysis/FetchAnalyzer.ts +232 -21
  444. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
  445. package/src/plugins/analysis/JSASTAnalyzer.ts +4265 -587
  446. package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
  447. package/src/plugins/analysis/RustAnalyzer.ts +16 -11
  448. package/src/plugins/analysis/SQLiteAnalyzer.ts +13 -7
  449. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
  450. package/src/plugins/analysis/SocketIOAnalyzer.ts +151 -28
  451. package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
  452. package/src/plugins/analysis/ast/GraphBuilder.ts +1947 -327
  453. package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
  454. package/src/plugins/analysis/ast/types.ts +596 -6
  455. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
  456. package/src/plugins/analysis/ast/utils/index.ts +12 -0
  457. package/src/plugins/analysis/ast/utils/location.ts +103 -0
  458. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +19 -8
  459. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +924 -83
  460. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
  461. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +234 -93
  462. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +124 -9
  463. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
  464. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +294 -49
  465. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
  466. package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
  467. package/src/plugins/discovery/WorkspaceDiscovery.ts +184 -0
  468. package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
  469. package/src/plugins/discovery/workspaces/detector.ts +63 -0
  470. package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
  471. package/src/plugins/discovery/workspaces/index.ts +23 -0
  472. package/src/plugins/discovery/workspaces/parsers.ts +99 -0
  473. package/src/plugins/enrichment/AliasTracker.ts +35 -8
  474. package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
  475. package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
  476. package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
  477. package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
  478. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +84 -27
  479. package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
  480. package/src/plugins/enrichment/MethodCallResolver.ts +39 -13
  481. package/src/plugins/enrichment/MountPointResolver.ts +208 -195
  482. package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
  483. package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
  484. package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
  485. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +209 -189
  486. package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
  487. package/src/plugins/indexing/JSModuleIndexer.ts +140 -34
  488. package/src/plugins/indexing/RustModuleIndexer.ts +8 -7
  489. package/src/plugins/validation/BrokenImportValidator.ts +325 -0
  490. package/src/plugins/validation/CallResolverValidator.ts +131 -110
  491. package/src/plugins/validation/DataFlowValidator.ts +88 -67
  492. package/src/plugins/validation/EvalBanValidator.ts +17 -16
  493. package/src/plugins/validation/GraphConnectivityValidator.ts +58 -24
  494. package/src/plugins/validation/NodeCreationValidator.ts +554 -0
  495. package/src/plugins/validation/SQLInjectionValidator.ts +63 -20
  496. package/src/plugins/validation/ShadowingDetector.ts +6 -5
  497. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
  498. package/src/plugins/vcs/GitPlugin.ts +40 -12
  499. package/src/plugins/vcs/VCSPlugin.ts +7 -5
  500. package/src/queries/README.md +46 -0
  501. package/src/queries/findCallsInFunction.ts +206 -0
  502. package/src/queries/findContainingFunction.ts +83 -0
  503. package/src/queries/index.ts +23 -0
  504. package/src/queries/traceValues.ts +398 -0
  505. package/src/queries/types.ts +187 -0
  506. package/src/schema/GraphSchemaExtractor.ts +177 -0
  507. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  508. package/src/schema/index.ts +5 -0
  509. package/src/storage/backends/RFDBServerBackend.ts +100 -98
  510. package/src/storage/backends/typeValidation.ts +1 -0
  511. package/src/validation/PathValidator.ts +1 -1
  512. package/dist/core/AnalysisWorker.d.ts +0 -14
  513. package/dist/core/AnalysisWorker.d.ts.map +0 -1
  514. package/dist/core/AnalysisWorker.js +0 -307
  515. package/dist/core/ParallelAnalyzer.d.ts +0 -120
  516. package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
  517. package/dist/core/ParallelAnalyzer.js +0 -331
  518. package/dist/core/QueueWorker.d.ts +0 -12
  519. package/dist/core/QueueWorker.d.ts.map +0 -1
  520. package/dist/core/QueueWorker.js +0 -567
  521. package/dist/core/RFDBClient.d.ts +0 -179
  522. package/dist/core/RFDBClient.d.ts.map +0 -1
  523. package/dist/core/RFDBClient.js +0 -429
  524. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
  525. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
  526. package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
  527. package/src/core/AnalysisWorker.ts +0 -410
  528. package/src/core/ParallelAnalyzer.ts +0 -476
  529. package/src/core/QueueWorker.ts +0 -780
  530. package/src/plugins/indexing/ServiceDetector.ts +0 -230
@@ -0,0 +1,365 @@
1
+ /**
2
+ * NodejsBuiltinsResolver - Creates EXTERNAL_FUNCTION nodes for Node.js builtin calls (REG-218)
3
+ *
4
+ * This ENRICHMENT plugin:
5
+ * 1. Queries all CALL nodes
6
+ * 2. For each call that targets a builtin function:
7
+ * - Checks if call's `object` matches a builtin module (fs, path, etc.)
8
+ * - Or traces via IMPORT node to find the module source
9
+ * 3. Creates EXTERNAL_FUNCTION node lazily (if not exists)
10
+ * 4. Creates CALLS edge from CALL to EXTERNAL_FUNCTION
11
+ *
12
+ * Architecture:
13
+ * - Nodes are created lazily - only when a call is detected
14
+ * - ID format: EXTERNAL_FUNCTION:fs.readFile
15
+ * - Metadata includes: isBuiltin:true, security?, pure?
16
+ *
17
+ * Also creates:
18
+ * - EXTERNAL_MODULE nodes for imported builtin modules
19
+ * - IMPORTS_FROM edges from IMPORT to EXTERNAL_MODULE
20
+ */
21
+
22
+ import { Plugin, createSuccessResult } from '../Plugin.js';
23
+ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
24
+ import type { BaseNodeRecord } from '@grafema/types';
25
+ import { BuiltinRegistry } from '../../data/builtins/BuiltinRegistry.js';
26
+
27
+ /**
28
+ * Call node with method properties
29
+ */
30
+ interface CallNode extends BaseNodeRecord {
31
+ object?: string;
32
+ method?: string;
33
+ callee?: string;
34
+ }
35
+
36
+ /**
37
+ * Import node with source info
38
+ */
39
+ interface ImportNode extends BaseNodeRecord {
40
+ source?: string;
41
+ imported?: string;
42
+ importType?: string;
43
+ }
44
+
45
+ export class NodejsBuiltinsResolver extends Plugin {
46
+ private registry: BuiltinRegistry;
47
+
48
+ constructor(config: Record<string, unknown> = {}) {
49
+ super(config);
50
+ this.registry = new BuiltinRegistry();
51
+ }
52
+
53
+ get metadata(): PluginMetadata {
54
+ return {
55
+ name: 'NodejsBuiltinsResolver',
56
+ phase: 'ENRICHMENT',
57
+ priority: 45, // After ImportExportLinker (90), before/around MethodCallResolver (50)
58
+ creates: {
59
+ nodes: ['EXTERNAL_FUNCTION', 'EXTERNAL_MODULE'],
60
+ edges: ['CALLS', 'IMPORTS_FROM']
61
+ },
62
+ dependencies: ['JSASTAnalyzer', 'ImportExportLinker']
63
+ };
64
+ }
65
+
66
+ async execute(context: PluginContext): Promise<PluginResult> {
67
+ const { graph, onProgress } = context;
68
+ const logger = this.log(context);
69
+
70
+ logger.info('Starting Node.js builtins resolution');
71
+ const startTime = Date.now();
72
+
73
+ // Track created nodes and edges to avoid duplicates
74
+ const createdExternalFunctions = new Set<string>();
75
+ const createdExternalModules = new Set<string>();
76
+ const createdCallsEdges = new Set<string>();
77
+ const createdImportsFromEdges = new Set<string>();
78
+
79
+ // Build import index: local name -> {source, imported}
80
+ // For tracking what module each imported function comes from
81
+ const importIndex = await this.buildImportIndex(graph);
82
+ logger.debug('Built import index', { entries: importIndex.size });
83
+
84
+ // Step 1: Create EXTERNAL_MODULE nodes for builtin imports
85
+ // and IMPORTS_FROM edges
86
+ let externalModulesCreated = 0;
87
+ let importsFromEdgesCreated = 0;
88
+
89
+ for (const [, importInfo] of importIndex) {
90
+ const { source, file, localName, importNodeId, importType } = importInfo;
91
+ const normalizedSource = this.registry.normalizeModule(source);
92
+
93
+ if (this.registry.isBuiltinModule(normalizedSource)) {
94
+ // Create EXTERNAL_MODULE node if not exists
95
+ if (!createdExternalModules.has(normalizedSource)) {
96
+ const moduleNodeId = `EXTERNAL_MODULE:${normalizedSource}`;
97
+
98
+ // Check if node already exists in graph
99
+ const existingNode = await graph.getNode(moduleNodeId);
100
+ if (!existingNode) {
101
+ await graph.addNode({
102
+ id: moduleNodeId,
103
+ type: 'EXTERNAL_MODULE',
104
+ name: normalizedSource,
105
+ file: '',
106
+ line: 0
107
+ });
108
+ externalModulesCreated++;
109
+ }
110
+ createdExternalModules.add(normalizedSource);
111
+ }
112
+
113
+ // Create IMPORTS_FROM edge from IMPORT to EXTERNAL_MODULE
114
+ const moduleNodeId = `EXTERNAL_MODULE:${normalizedSource}`;
115
+ const edgeKey = `${importNodeId}:${moduleNodeId}`;
116
+
117
+ if (!createdImportsFromEdges.has(edgeKey) && importNodeId) {
118
+ // Check if edge already exists
119
+ const existingEdges = await graph.getOutgoingEdges(importNodeId, ['IMPORTS_FROM']);
120
+ const alreadyExists = existingEdges.some(e => e.dst === moduleNodeId);
121
+
122
+ if (!alreadyExists) {
123
+ await graph.addEdge({
124
+ type: 'IMPORTS_FROM',
125
+ src: importNodeId,
126
+ dst: moduleNodeId
127
+ });
128
+ importsFromEdgesCreated++;
129
+ }
130
+ createdImportsFromEdges.add(edgeKey);
131
+ }
132
+ }
133
+ }
134
+
135
+ logger.debug('Created EXTERNAL_MODULE nodes', { count: externalModulesCreated });
136
+ logger.debug('Created IMPORTS_FROM edges', { count: importsFromEdgesCreated });
137
+
138
+ // Step 2: Process all CALL nodes
139
+ const allCalls: CallNode[] = [];
140
+ for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
141
+ allCalls.push(node as CallNode);
142
+ }
143
+ logger.info('Found CALL nodes to process', { count: allCalls.length });
144
+
145
+ let nodesCreated = 0;
146
+ let edgesCreated = 0;
147
+ let processed = 0;
148
+
149
+ for (const callNode of allCalls) {
150
+ processed++;
151
+
152
+ // Progress reporting
153
+ if (onProgress && processed % 100 === 0) {
154
+ onProgress({
155
+ phase: 'enrichment',
156
+ currentPlugin: 'NodejsBuiltinsResolver',
157
+ message: `Processing calls ${processed}/${allCalls.length}`,
158
+ totalFiles: allCalls.length,
159
+ processedFiles: processed
160
+ });
161
+ }
162
+
163
+ // Determine module and function name
164
+ const resolution = this.resolveBuiltinCall(callNode, importIndex);
165
+ if (!resolution) {
166
+ continue;
167
+ }
168
+
169
+ const { moduleName, functionName } = resolution;
170
+
171
+ // Check if this is a known builtin function
172
+ const funcDef = this.registry.getFunction(moduleName, functionName);
173
+ if (!funcDef) {
174
+ continue;
175
+ }
176
+
177
+ // Create EXTERNAL_FUNCTION node if not exists
178
+ const externalFuncId = this.registry.createNodeId(moduleName, functionName);
179
+
180
+ if (!createdExternalFunctions.has(externalFuncId)) {
181
+ // Check if node already exists in graph
182
+ const existingNode = await graph.getNode(externalFuncId);
183
+ if (!existingNode) {
184
+ await graph.addNode({
185
+ id: externalFuncId,
186
+ type: 'EXTERNAL_FUNCTION',
187
+ name: `${this.registry.normalizeModule(moduleName)}.${functionName}`,
188
+ file: '',
189
+ line: 0,
190
+ isBuiltin: true,
191
+ ...(funcDef.security && { security: funcDef.security }),
192
+ ...(funcDef.pure !== undefined && { pure: funcDef.pure })
193
+ });
194
+ nodesCreated++;
195
+ }
196
+ createdExternalFunctions.add(externalFuncId);
197
+ }
198
+
199
+ // Create CALLS edge from CALL to EXTERNAL_FUNCTION
200
+ const edgeKey = `${callNode.id}:${externalFuncId}`;
201
+ if (!createdCallsEdges.has(edgeKey)) {
202
+ // Check if CALLS edge already exists
203
+ const existingEdges = await graph.getOutgoingEdges(callNode.id, ['CALLS']);
204
+ const alreadyExists = existingEdges.some(e => e.dst === externalFuncId);
205
+
206
+ if (!alreadyExists) {
207
+ await graph.addEdge({
208
+ type: 'CALLS',
209
+ src: callNode.id,
210
+ dst: externalFuncId
211
+ });
212
+ edgesCreated++;
213
+ }
214
+ createdCallsEdges.add(edgeKey);
215
+ }
216
+ }
217
+
218
+ const totalTime = ((Date.now() - startTime) / 1000).toFixed(2);
219
+ const summary = {
220
+ callsProcessed: processed,
221
+ externalFunctionsCreated: nodesCreated,
222
+ externalModulesCreated,
223
+ callsEdgesCreated: edgesCreated,
224
+ importsFromEdgesCreated,
225
+ time: `${totalTime}s`
226
+ };
227
+
228
+ logger.info('Complete', summary);
229
+
230
+ return createSuccessResult(
231
+ {
232
+ nodes: nodesCreated + externalModulesCreated,
233
+ edges: edgesCreated + importsFromEdgesCreated
234
+ },
235
+ summary
236
+ );
237
+ }
238
+
239
+ /**
240
+ * Build index of imports for tracking module sources.
241
+ *
242
+ * Maps: file:localName -> {source, imported, importNodeId, importType}
243
+ */
244
+ private async buildImportIndex(
245
+ graph: PluginContext['graph']
246
+ ): Promise<Map<string, {
247
+ source: string;
248
+ imported: string;
249
+ localName: string;
250
+ file: string;
251
+ importNodeId: string;
252
+ importType?: string;
253
+ }>> {
254
+ const index = new Map<string, {
255
+ source: string;
256
+ imported: string;
257
+ localName: string;
258
+ file: string;
259
+ importNodeId: string;
260
+ importType?: string;
261
+ }>();
262
+
263
+ for await (const node of graph.queryNodes({ nodeType: 'IMPORT' })) {
264
+ const importNode = node as ImportNode;
265
+ if (!importNode.source || !importNode.file) continue;
266
+
267
+ const localName = importNode.name as string;
268
+ const imported = importNode.imported || localName;
269
+ const importType = importNode.importType;
270
+
271
+ // Key: file:localName - for looking up what module a local name comes from
272
+ const key = `${importNode.file}:${localName}`;
273
+
274
+ index.set(key, {
275
+ source: importNode.source,
276
+ imported,
277
+ localName,
278
+ file: importNode.file,
279
+ importNodeId: importNode.id,
280
+ importType
281
+ });
282
+ }
283
+
284
+ return index;
285
+ }
286
+
287
+ /**
288
+ * Resolve a CALL node to its builtin module and function.
289
+ *
290
+ * Handles:
291
+ * 1. Method calls: fs.readFile() -> {module: 'fs', function: 'readFile'}
292
+ * 2. Direct calls from imports: readFile() -> trace to import source
293
+ * 3. Aliased imports: rf() where rf = readFile from 'fs'
294
+ */
295
+ private resolveBuiltinCall(
296
+ callNode: CallNode,
297
+ importIndex: Map<string, {
298
+ source: string;
299
+ imported: string;
300
+ localName: string;
301
+ file: string;
302
+ importNodeId: string;
303
+ importType?: string;
304
+ }>
305
+ ): { moduleName: string; functionName: string } | null {
306
+ const file = callNode.file;
307
+ if (!file) return null;
308
+
309
+ // Case 1: Method call - obj.method()
310
+ if (callNode.object && callNode.method) {
311
+ const objectName = callNode.object;
312
+ const methodName = callNode.method;
313
+
314
+ // Check if objectName is a namespace import (import * as fs from 'fs')
315
+ const importKey = `${file}:${objectName}`;
316
+ const importInfo = importIndex.get(importKey);
317
+
318
+ if (importInfo) {
319
+ // Object is an imported namespace or module
320
+ const normalizedSource = this.registry.normalizeModule(importInfo.source);
321
+
322
+ if (this.registry.isBuiltinModule(normalizedSource)) {
323
+ return {
324
+ moduleName: normalizedSource,
325
+ functionName: methodName
326
+ };
327
+ }
328
+ }
329
+
330
+ // Check if objectName directly matches a builtin module
331
+ // (for cases like: const fs = require('fs'); fs.readFile())
332
+ if (this.registry.isBuiltinModule(objectName)) {
333
+ return {
334
+ moduleName: this.registry.normalizeModule(objectName),
335
+ functionName: methodName
336
+ };
337
+ }
338
+
339
+ return null;
340
+ }
341
+
342
+ // Case 2: Direct call - funcName()
343
+ const calleeName = callNode.name as string || callNode.callee;
344
+ if (!calleeName) return null;
345
+
346
+ // Look up in import index
347
+ const importKey = `${file}:${calleeName}`;
348
+ const importInfo = importIndex.get(importKey);
349
+
350
+ if (importInfo) {
351
+ const normalizedSource = this.registry.normalizeModule(importInfo.source);
352
+
353
+ if (this.registry.isBuiltinModule(normalizedSource)) {
354
+ // Use the original imported name, not the alias
355
+ const originalName = importInfo.imported || calleeName;
356
+ return {
357
+ moduleName: normalizedSource,
358
+ functionName: originalName
359
+ };
360
+ }
361
+ }
362
+
363
+ return null;
364
+ }
365
+ }
@@ -94,6 +94,7 @@ export class PrefixEvaluator extends Plugin {
94
94
  async execute(context: PluginContext): Promise<PluginResult> {
95
95
  try {
96
96
  const { graph } = context;
97
+ const logger = this.log(context);
97
98
  const graphTyped = graph as unknown as Graph;
98
99
 
99
100
  let mountPointsEvaluated = 0;
@@ -112,7 +113,7 @@ export class PrefixEvaluator extends Plugin {
112
113
  }
113
114
  }
114
115
 
115
- console.log(`[PrefixEvaluator] Found ${mountPoints.length} mount points with placeholders`);
116
+ logger.info('Found mount points with placeholders', { count: mountPoints.length });
116
117
 
117
118
  // For each mount point try to evaluate prefix
118
119
  for (const mountPoint of mountPoints) {
@@ -125,7 +126,7 @@ export class PrefixEvaluator extends Plugin {
125
126
  });
126
127
 
127
128
  if (definesEdges.length === 0) {
128
- console.log(`[PrefixEvaluator] No DEFINES edge for mount point ${mountPoint.id}`);
129
+ logger.debug('No DEFINES edge for mount point', { mountPointId: mountPoint.id });
129
130
  continue;
130
131
  }
131
132
 
@@ -133,7 +134,7 @@ export class PrefixEvaluator extends Plugin {
133
134
  const module = (graphTyped.nodes as Map<string, NodeRecord>).get(moduleId) as ModuleNode | undefined;
134
135
 
135
136
  if (!module || module.type !== 'MODULE') {
136
- console.log(`[PrefixEvaluator] Module not found for ${mountPoint.id}`);
137
+ logger.debug('Module not found for mount point', { mountPointId: mountPoint.id });
137
138
  continue;
138
139
  }
139
140
 
@@ -147,7 +148,7 @@ export class PrefixEvaluator extends Plugin {
147
148
  });
148
149
  } catch (error) {
149
150
  const err = error as Error;
150
- console.log(`[PrefixEvaluator] Failed to parse ${module.file}:`, err.message);
151
+ logger.debug('Failed to parse file', { file: module.file, error: err.message });
151
152
  continue;
152
153
  }
153
154
 
@@ -163,11 +164,18 @@ export class PrefixEvaluator extends Plugin {
163
164
  mountPoint.prefix = evaluatedPrefix;
164
165
  mountPoint.evaluated = true;
165
166
  successfulEvaluations++;
166
- console.log(`[PrefixEvaluator] Resolved ${mountPoint.file}:${mountPoint.line}: ${evaluatedPrefix}`);
167
+ logger.debug('Resolved prefix', {
168
+ file: mountPoint.file,
169
+ line: mountPoint.line,
170
+ prefix: evaluatedPrefix
171
+ });
167
172
  }
168
173
  }
169
174
 
170
- console.log(`[PrefixEvaluator] Evaluated ${successfulEvaluations}/${mountPointsEvaluated} mount points`);
175
+ logger.info('Evaluated mount points', {
176
+ successful: successfulEvaluations,
177
+ total: mountPointsEvaluated
178
+ });
171
179
 
172
180
  return createSuccessResult(
173
181
  { nodes: 0, edges: 0 },
@@ -175,7 +183,8 @@ export class PrefixEvaluator extends Plugin {
175
183
  );
176
184
 
177
185
  } catch (error) {
178
- console.error(`[PrefixEvaluator] Error:`, error);
186
+ const logger = this.log(context);
187
+ logger.error('Error in PrefixEvaluator', { error });
179
188
  return createErrorResult(error as Error);
180
189
  }
181
190
  }
@@ -40,20 +40,21 @@ export class RustFFIEnricher extends Plugin {
40
40
 
41
41
  async execute(context: PluginContext): Promise<PluginResult> {
42
42
  const { graph } = context;
43
+ const logger = this.log(context);
43
44
 
44
45
  // 1. Build index of NAPI-exported Rust functions/methods
45
46
  const napiIndex = await this.buildNapiIndex(graph);
46
47
 
47
48
  if (napiIndex.size === 0) {
48
- console.log('[RustFFIEnricher] No NAPI exports found, skipping');
49
+ logger.info('No NAPI exports found, skipping');
49
50
  return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true, reason: 'No NAPI exports' });
50
51
  }
51
52
 
52
- console.log(`[RustFFIEnricher] Indexed ${napiIndex.size} NAPI exports`);
53
+ logger.debug('Indexed NAPI exports', { count: napiIndex.size });
53
54
 
54
55
  // 2. Find JS CALL nodes that target Rust
55
56
  const jsCalls = await this.findRustCallingJsCalls(graph);
56
- console.log(`[RustFFIEnricher] Found ${jsCalls.length} candidate JS calls`);
57
+ logger.debug('Found candidate JS calls', { count: jsCalls.length });
57
58
 
58
59
  // 3. Match and create FFI_CALLS edges
59
60
  let edgesCreated = 0;
@@ -78,10 +79,10 @@ export class RustFFIEnricher extends Plugin {
78
79
  }
79
80
 
80
81
  if (unmatched.length > 0 && unmatched.length <= 20) {
81
- console.log(`[RustFFIEnricher] Unmatched calls:`, unmatched.slice(0, 10));
82
+ logger.debug('Unmatched calls', { calls: unmatched.slice(0, 10) });
82
83
  }
83
84
 
84
- console.log(`[RustFFIEnricher] Created ${edgesCreated} FFI_CALLS edges`);
85
+ logger.info('Created FFI_CALLS edges', { count: edgesCreated, unmatched: unmatched.length });
85
86
  return createSuccessResult({ nodes: 0, edges: edgesCreated }, { unmatched: unmatched.length });
86
87
  }
87
88