@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,249 @@
1
+ /**
2
+ * BrokenImportValidator - detects broken imports and undefined symbols (REG-261)
3
+ *
4
+ * This VALIDATION plugin queries the graph (built by ANALYSIS and ENRICHMENT phases)
5
+ * to detect:
6
+ *
7
+ * 1. ERR_BROKEN_IMPORT: Named/default import references non-existent export
8
+ * - IMPORT node with relative source but no IMPORTS_FROM edge
9
+ * - Skips: external (npm) imports, namespace imports, type-only imports
10
+ *
11
+ * 2. ERR_UNDEFINED_SYMBOL: Symbol used but not defined, imported, or global
12
+ * - CALL node without CALLS edge
13
+ * - Not a method call (no `object` property)
14
+ * - Not a local definition (FUNCTION/CLASS/VARIABLE in same file)
15
+ * - Not an import (IMPORT with matching local name)
16
+ * - Not a known global (console, setTimeout, etc.)
17
+ *
18
+ * Architecture follows existing validator patterns:
19
+ * - Phase: VALIDATION
20
+ * - Priority: 85 (after enrichment, before general validators)
21
+ * - Returns: ValidationError[] collected via DiagnosticCollector
22
+ */
23
+ import { Plugin, createSuccessResult } from '../Plugin.js';
24
+ import { ValidationError } from '../../errors/GrafemaError.js';
25
+ import { GlobalsRegistry } from '../../data/globals/index.js';
26
+ // === CONSTANTS ===
27
+ const ERROR_CODES = {
28
+ BROKEN_IMPORT: 'ERR_BROKEN_IMPORT',
29
+ UNDEFINED_SYMBOL: 'ERR_UNDEFINED_SYMBOL',
30
+ };
31
+ // Types that represent local definitions
32
+ const DEFINITION_TYPES = new Set([
33
+ 'FUNCTION',
34
+ 'CLASS',
35
+ 'VARIABLE_DECLARATION',
36
+ 'CONSTANT',
37
+ 'PARAMETER',
38
+ ]);
39
+ // === PLUGIN CLASS ===
40
+ export class BrokenImportValidator extends Plugin {
41
+ globalsRegistry;
42
+ constructor(config = {}) {
43
+ super(config);
44
+ this.globalsRegistry = new GlobalsRegistry();
45
+ // Allow custom globals from config
46
+ const customGlobals = config.customGlobals;
47
+ if (customGlobals) {
48
+ this.globalsRegistry.addCustomGlobals(customGlobals);
49
+ }
50
+ }
51
+ get metadata() {
52
+ return {
53
+ name: 'BrokenImportValidator',
54
+ phase: 'VALIDATION',
55
+ priority: 85, // After enrichment plugins, before general validators
56
+ creates: {
57
+ nodes: [],
58
+ edges: []
59
+ },
60
+ dependencies: ['ImportExportLinker', 'FunctionCallResolver']
61
+ };
62
+ }
63
+ async execute(context) {
64
+ const { graph, onProgress } = context;
65
+ const logger = this.log(context);
66
+ logger.info('Starting broken import validation');
67
+ const startTime = Date.now();
68
+ const errors = [];
69
+ const stats = {
70
+ importsChecked: 0,
71
+ brokenImports: 0,
72
+ callsChecked: 0,
73
+ undefinedSymbols: 0,
74
+ skipped: {
75
+ externalImports: 0,
76
+ namespaceImports: 0,
77
+ typeOnlyImports: 0,
78
+ methodCalls: 0,
79
+ alreadyResolved: 0,
80
+ localDefinitions: 0,
81
+ imports: 0,
82
+ globals: 0,
83
+ },
84
+ };
85
+ // === Step 1: Build indexes ===
86
+ // Index: file -> Set<name> for local definitions
87
+ const definitionsByFile = new Map();
88
+ for await (const node of graph.queryNodes({})) {
89
+ if (!DEFINITION_TYPES.has(node.type))
90
+ continue;
91
+ if (!node.file || !node.name)
92
+ continue;
93
+ if (!definitionsByFile.has(node.file)) {
94
+ definitionsByFile.set(node.file, new Set());
95
+ }
96
+ definitionsByFile.get(node.file).add(node.name);
97
+ }
98
+ logger.debug('Indexed definitions', { files: definitionsByFile.size });
99
+ // Index: file:local -> ImportNode
100
+ const importsByFile = new Map();
101
+ const allImports = [];
102
+ for await (const node of graph.queryNodes({ nodeType: 'IMPORT' })) {
103
+ const imp = node;
104
+ if (!imp.file)
105
+ continue;
106
+ allImports.push(imp);
107
+ // Index by local name for undefined symbol checking
108
+ const localName = imp.local || imp.name;
109
+ if (localName) {
110
+ if (!importsByFile.has(imp.file)) {
111
+ importsByFile.set(imp.file, new Map());
112
+ }
113
+ importsByFile.get(imp.file).set(localName, imp);
114
+ }
115
+ }
116
+ logger.debug('Indexed imports', { count: allImports.length });
117
+ // === Step 2: Check for broken imports ===
118
+ for (const imp of allImports) {
119
+ stats.importsChecked++;
120
+ // Progress reporting
121
+ if (onProgress && stats.importsChecked % 100 === 0) {
122
+ onProgress({
123
+ phase: 'validation',
124
+ currentPlugin: 'BrokenImportValidator',
125
+ message: `Checking imports ${stats.importsChecked}/${allImports.length}`,
126
+ totalFiles: allImports.length,
127
+ processedFiles: stats.importsChecked
128
+ });
129
+ }
130
+ // Skip external (npm) imports - only check relative imports
131
+ const isRelative = imp.source &&
132
+ (imp.source.startsWith('./') || imp.source.startsWith('../'));
133
+ if (!isRelative) {
134
+ stats.skipped.externalImports++;
135
+ continue;
136
+ }
137
+ // Skip namespace imports - they link to MODULE, not EXPORT
138
+ if (imp.importType === 'namespace') {
139
+ stats.skipped.namespaceImports++;
140
+ continue;
141
+ }
142
+ // Skip type-only imports (TypeScript) - erased at compile time
143
+ if (imp.importBinding === 'type') {
144
+ stats.skipped.typeOnlyImports++;
145
+ continue;
146
+ }
147
+ // Check for IMPORTS_FROM edge
148
+ const importsFromEdges = await graph.getOutgoingEdges(imp.id, ['IMPORTS_FROM']);
149
+ if (importsFromEdges.length === 0) {
150
+ // No IMPORTS_FROM edge = broken import
151
+ const importedName = imp.imported || imp.local || imp.name;
152
+ errors.push(new ValidationError(`Import "${importedName}" from "${imp.source}" - export doesn't exist`, ERROR_CODES.BROKEN_IMPORT, {
153
+ filePath: imp.file,
154
+ lineNumber: imp.line,
155
+ phase: 'VALIDATION',
156
+ plugin: 'BrokenImportValidator',
157
+ importedName,
158
+ source: imp.source,
159
+ importType: imp.importType,
160
+ }, `Check if "${importedName}" is exported from "${imp.source}"`, 'error'));
161
+ stats.brokenImports++;
162
+ }
163
+ }
164
+ logger.debug('Broken imports found', { count: stats.brokenImports });
165
+ // === Step 3: Check for undefined symbols ===
166
+ const callsToCheck = [];
167
+ for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
168
+ const call = node;
169
+ // Skip method calls (have object attribute)
170
+ if (call.object) {
171
+ stats.skipped.methodCalls++;
172
+ continue;
173
+ }
174
+ // Skip if already has CALLS edge (resolved)
175
+ const callsEdges = await graph.getOutgoingEdges(call.id, ['CALLS']);
176
+ if (callsEdges.length > 0) {
177
+ stats.skipped.alreadyResolved++;
178
+ continue;
179
+ }
180
+ callsToCheck.push(call);
181
+ }
182
+ logger.debug('Unresolved calls to check', { count: callsToCheck.length });
183
+ for (const call of callsToCheck) {
184
+ stats.callsChecked++;
185
+ const calledName = call.name;
186
+ const file = call.file;
187
+ if (!calledName || !file)
188
+ continue;
189
+ // Check 1: Is it a local definition?
190
+ const fileDefinitions = definitionsByFile.get(file);
191
+ if (fileDefinitions?.has(calledName)) {
192
+ stats.skipped.localDefinitions++;
193
+ continue;
194
+ }
195
+ // Check 2: Is it imported? (even if broken, that's a different error)
196
+ const fileImports = importsByFile.get(file);
197
+ if (fileImports?.has(calledName)) {
198
+ stats.skipped.imports++;
199
+ continue;
200
+ }
201
+ // Check 3: Is it a global?
202
+ if (this.globalsRegistry.isGlobal(calledName)) {
203
+ stats.skipped.globals++;
204
+ continue;
205
+ }
206
+ // Symbol is undefined
207
+ errors.push(new ValidationError(`"${calledName}" is used but not defined or imported`, ERROR_CODES.UNDEFINED_SYMBOL, {
208
+ filePath: file,
209
+ lineNumber: call.line,
210
+ phase: 'VALIDATION',
211
+ plugin: 'BrokenImportValidator',
212
+ symbol: calledName,
213
+ }, `Add an import for "${calledName}" or define it locally`, 'warning' // Warning severity - might be a false positive
214
+ ));
215
+ stats.undefinedSymbols++;
216
+ }
217
+ // === Step 4: Summary ===
218
+ const totalTime = ((Date.now() - startTime) / 1000).toFixed(2);
219
+ const summary = {
220
+ importsChecked: stats.importsChecked,
221
+ brokenImports: stats.brokenImports,
222
+ callsChecked: stats.callsChecked,
223
+ undefinedSymbols: stats.undefinedSymbols,
224
+ skipped: stats.skipped,
225
+ totalIssues: stats.brokenImports + stats.undefinedSymbols,
226
+ time: `${totalTime}s`,
227
+ };
228
+ logger.info('Validation complete', summary);
229
+ if (errors.length > 0) {
230
+ logger.warn('Issues found', {
231
+ brokenImports: stats.brokenImports,
232
+ undefinedSymbols: stats.undefinedSymbols,
233
+ });
234
+ // Log first few errors for visibility
235
+ for (const error of errors.slice(0, 5)) {
236
+ if (error.code === ERROR_CODES.BROKEN_IMPORT) {
237
+ logger.error(`[${error.code}] ${error.message}`);
238
+ }
239
+ else {
240
+ logger.warn(`[${error.code}] ${error.message}`);
241
+ }
242
+ }
243
+ if (errors.length > 5) {
244
+ logger.debug(`... and ${errors.length - 5} more issues`);
245
+ }
246
+ }
247
+ return createSuccessResult({ nodes: 0, edges: 0 }, { summary }, errors);
248
+ }
249
+ }
@@ -1,14 +1,14 @@
1
1
  /**
2
- * CallResolverValidator - проверяет что все вызовы функций ссылаются на определения
2
+ * CallResolverValidator - validates function call resolution (REG-227)
3
3
  *
4
- * Использует Datalog для декларативной проверки гарантии:
5
- * "Все внутренние вызовы функций (CALL_SITE) должны иметь CALLS ребро к FUNCTION"
4
+ * Checks that all function calls are properly resolved:
5
+ * - Internal calls: CALLS edge to FUNCTION node
6
+ * - External calls: CALLS edge to EXTERNAL_MODULE node
7
+ * - Builtin calls: recognized by name (no edge needed)
8
+ * - Unresolved: no edge, not builtin -> WARNING
6
9
  *
7
- * ПРАВИЛО (Datalog):
8
- * violation(X) :- node(X, "CALL"), \+ attr(X, "object", _), \+ edge(X, _, "CALLS").
9
- *
10
- * Это находит CALL узлы без "object" метаданных (т.е. CALL_SITE, не METHOD_CALL),
11
- * которые не имеют CALLS ребра к определению функции.
10
+ * This validator runs AFTER FunctionCallResolver and ExternalCallResolver
11
+ * to verify resolution quality and report issues.
12
12
  */
13
13
  import { Plugin } from '../Plugin.js';
14
14
  import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
@@ -16,8 +16,19 @@ export declare class CallResolverValidator extends Plugin {
16
16
  get metadata(): PluginMetadata;
17
17
  execute(context: PluginContext): Promise<PluginResult>;
18
18
  /**
19
- * Подсчитывает статистику по вызовам
19
+ * Determine the resolution type for a CALL node.
20
+ *
21
+ * Resolution priority:
22
+ * 1. Method call (has 'object' attribute) -> 'method'
23
+ * 2. Has CALLS edge to FUNCTION -> 'internal'
24
+ * 3. Has CALLS edge to EXTERNAL_MODULE -> 'external'
25
+ * 4. Name in JS_GLOBAL_FUNCTIONS -> 'builtin'
26
+ * 5. Otherwise -> 'unresolved'
27
+ */
28
+ private determineResolutionType;
29
+ /**
30
+ * Create a warning for an unresolved call.
20
31
  */
21
- private countMethodCalls;
32
+ private createWarning;
22
33
  }
23
34
  //# sourceMappingURL=CallResolverValidator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallResolverValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/CallResolverValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA2ChF,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAuE5D;;OAEG;YACW,gBAAgB;CAyB/B"}
1
+ {"version":3,"file":"CallResolverValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/CallResolverValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8BhF,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgE5D;;;;;;;;;OASG;YACW,uBAAuB;IAuCrC;;OAEG;IACH,OAAO,CAAC,aAAa;CAgBtB"}
@@ -1,16 +1,18 @@
1
1
  /**
2
- * CallResolverValidator - проверяет что все вызовы функций ссылаются на определения
2
+ * CallResolverValidator - validates function call resolution (REG-227)
3
3
  *
4
- * Использует Datalog для декларативной проверки гарантии:
5
- * "Все внутренние вызовы функций (CALL_SITE) должны иметь CALLS ребро к FUNCTION"
4
+ * Checks that all function calls are properly resolved:
5
+ * - Internal calls: CALLS edge to FUNCTION node
6
+ * - External calls: CALLS edge to EXTERNAL_MODULE node
7
+ * - Builtin calls: recognized by name (no edge needed)
8
+ * - Unresolved: no edge, not builtin -> WARNING
6
9
  *
7
- * ПРАВИЛО (Datalog):
8
- * violation(X) :- node(X, "CALL"), \+ attr(X, "object", _), \+ edge(X, _, "CALLS").
9
- *
10
- * Это находит CALL узлы без "object" метаданных (т.е. CALL_SITE, не METHOD_CALL),
11
- * которые не имеют CALLS ребра к определению функции.
10
+ * This validator runs AFTER FunctionCallResolver and ExternalCallResolver
11
+ * to verify resolution quality and report issues.
12
12
  */
13
13
  import { Plugin, createSuccessResult } from '../Plugin.js';
14
+ import { ValidationError } from '../../errors/GrafemaError.js';
15
+ import { JS_GLOBAL_FUNCTIONS } from '../../data/builtins/index.js';
14
16
  export class CallResolverValidator extends Plugin {
15
17
  get metadata() {
16
18
  return {
@@ -20,89 +22,113 @@ export class CallResolverValidator extends Plugin {
20
22
  creates: {
21
23
  nodes: [],
22
24
  edges: []
23
- }
25
+ },
26
+ dependencies: ['FunctionCallResolver', 'ExternalCallResolver']
24
27
  };
25
28
  }
26
29
  async execute(context) {
27
30
  const { graph } = context;
28
- console.log('[CallResolverValidator] Starting call resolution validation using Datalog...');
29
- // Check if graph supports checkGuarantee
30
- if (!graph.checkGuarantee) {
31
- console.log('[CallResolverValidator] Graph does not support checkGuarantee, skipping validation');
32
- return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true });
33
- }
34
- // Datalog гарантия:
35
- // CALL без "object" (т.е. CALL_SITE) должен иметь CALLS ребро
36
- const violations = await graph.checkGuarantee(`
37
- violation(X) :- node(X, "CALL"), \\+ attr(X, "object", _), \\+ edge(X, _, "CALLS").
38
- `);
39
- const issues = [];
40
- if (violations.length > 0) {
41
- console.log(`[CallResolverValidator] Found ${violations.length} unresolved function calls`);
42
- for (const v of violations) {
43
- const nodeId = v.bindings.find(b => b.name === 'X')?.value;
44
- if (nodeId) {
45
- const node = await graph.getNode(nodeId);
46
- if (node) {
47
- issues.push({
48
- type: 'UNRESOLVED_FUNCTION_CALL',
49
- severity: 'WARNING',
50
- message: `Call to "${node.name}" at ${node.file}:${node.line || '?'} does not resolve to a function definition`,
51
- callName: node.name,
52
- nodeId: nodeId,
53
- file: node.file,
54
- line: node.line
55
- });
56
- }
57
- }
58
- }
59
- }
60
- // Также проверим METHOD_CALL на известные внешние методы
61
- // (это информационно, не ошибка)
62
- const methodCallStats = await this.countMethodCalls(graph);
31
+ const logger = this.log(context);
32
+ logger.info('Starting call resolution validation');
33
+ const warnings = [];
63
34
  const summary = {
64
- totalCalls: methodCallStats.total,
65
- resolvedInternalCalls: methodCallStats.resolved,
66
- unresolvedInternalCalls: issues.length,
67
- externalMethodCalls: methodCallStats.external,
68
- issues: issues.length
35
+ totalCalls: 0,
36
+ resolvedInternal: 0,
37
+ resolvedExternal: 0,
38
+ resolvedBuiltin: 0,
39
+ methodCalls: 0,
40
+ unresolvedCalls: 0,
41
+ warnings: 0
69
42
  };
70
- console.log('[CallResolverValidator] Summary:', summary);
71
- if (issues.length > 0) {
72
- console.log(`[CallResolverValidator] Unresolved calls:`);
73
- for (const issue of issues.slice(0, 10)) { // Show first 10
74
- console.log(` ⚠️ ${issue.message}`);
43
+ // Process all CALL nodes
44
+ for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
45
+ summary.totalCalls++;
46
+ const callNode = node;
47
+ const resolutionType = await this.determineResolutionType(graph, callNode);
48
+ switch (resolutionType) {
49
+ case 'internal':
50
+ summary.resolvedInternal++;
51
+ break;
52
+ case 'external':
53
+ summary.resolvedExternal++;
54
+ break;
55
+ case 'builtin':
56
+ summary.resolvedBuiltin++;
57
+ break;
58
+ case 'method':
59
+ summary.methodCalls++;
60
+ break;
61
+ case 'unresolved':
62
+ summary.unresolvedCalls++;
63
+ summary.warnings++;
64
+ warnings.push(this.createWarning(callNode));
65
+ break;
75
66
  }
76
- if (issues.length > 10) {
77
- console.log(` ... and ${issues.length - 10} more`);
67
+ }
68
+ logger.info('Validation complete', { ...summary });
69
+ if (warnings.length > 0) {
70
+ logger.warn('Unresolved calls detected', { count: warnings.length });
71
+ for (const warning of warnings.slice(0, 10)) {
72
+ logger.warn(warning.message);
73
+ }
74
+ if (warnings.length > 10) {
75
+ logger.debug(`... and ${warnings.length - 10} more`);
78
76
  }
79
77
  }
80
- return createSuccessResult({ nodes: 0, edges: 0 }, { summary, issues });
78
+ return createSuccessResult({ nodes: 0, edges: 0 }, { summary }, warnings);
81
79
  }
82
80
  /**
83
- * Подсчитывает статистику по вызовам
81
+ * Determine the resolution type for a CALL node.
82
+ *
83
+ * Resolution priority:
84
+ * 1. Method call (has 'object' attribute) -> 'method'
85
+ * 2. Has CALLS edge to FUNCTION -> 'internal'
86
+ * 3. Has CALLS edge to EXTERNAL_MODULE -> 'external'
87
+ * 4. Name in JS_GLOBAL_FUNCTIONS -> 'builtin'
88
+ * 5. Otherwise -> 'unresolved'
84
89
  */
85
- async countMethodCalls(graph) {
86
- const stats = {
87
- total: 0,
88
- resolved: 0,
89
- external: 0
90
- };
91
- // Подсчитываем все CALL узлы
92
- for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
93
- stats.total++;
94
- // Проверяем наличие "object" в метаданных (METHOD_CALL)
95
- if (node.object) {
96
- stats.external++;
97
- }
98
- else {
99
- // CALL_SITE - проверяем есть ли CALLS ребро
100
- const edges = await graph.getOutgoingEdges(node.id, ['CALLS']);
101
- if (edges.length > 0) {
102
- stats.resolved++;
90
+ async determineResolutionType(graph, callNode) {
91
+ // 1. Check if method call (has object attribute)
92
+ if (callNode.object) {
93
+ return 'method';
94
+ }
95
+ // 2. Check for CALLS edges
96
+ const edges = await graph.getOutgoingEdges(callNode.id, ['CALLS']);
97
+ if (edges.length > 0) {
98
+ // Determine destination type
99
+ const edge = edges[0];
100
+ const dstNode = await graph.getNode(edge.dst);
101
+ if (dstNode) {
102
+ if (dstNode.type === 'FUNCTION') {
103
+ return 'internal';
104
+ }
105
+ if (dstNode.type === 'EXTERNAL_MODULE') {
106
+ return 'external';
103
107
  }
104
108
  }
109
+ // Has edge but unknown destination type - treat as resolved
110
+ return 'internal';
111
+ }
112
+ // 3. Check if builtin
113
+ const calledName = callNode.name;
114
+ if (calledName && JS_GLOBAL_FUNCTIONS.has(calledName)) {
115
+ return 'builtin';
105
116
  }
106
- return stats;
117
+ // 4. Unresolved
118
+ return 'unresolved';
119
+ }
120
+ /**
121
+ * Create a warning for an unresolved call.
122
+ */
123
+ createWarning(callNode) {
124
+ return new ValidationError(`Unresolved call to "${callNode.name}" at ${callNode.file}:${callNode.line || '?'}`, 'WARN_UNRESOLVED_CALL', {
125
+ filePath: callNode.file,
126
+ lineNumber: callNode.line,
127
+ phase: 'VALIDATION',
128
+ plugin: 'CallResolverValidator',
129
+ nodeId: callNode.id,
130
+ callName: callNode.name,
131
+ }, 'Ensure the function is defined, imported, or is a known global', 'warning' // Severity: warning (not error)
132
+ );
107
133
  }
108
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataFlowValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/DataFlowValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA4ChF,qBAAa,iBAAkB,SAAQ,MAAM;IAC3C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAkH5D;;OAEG;IACH,OAAO,CAAC,cAAc;CA2CvB"}
1
+ {"version":3,"file":"DataFlowValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/DataFlowValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgChF,qBAAa,iBAAkB,SAAQ,MAAM;IAC3C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAwI5D;;OAEG;IACH,OAAO,CAAC,cAAc;CAsDvB"}