@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,156 @@
1
+ /**
2
+ * Global Symbol Definitions
3
+ *
4
+ * JavaScript/TypeScript globals that should not be reported as undefined.
5
+ * Organized by environment and category.
6
+ */
7
+
8
+ /**
9
+ * ECMAScript standard globals (available in all JS environments)
10
+ */
11
+ export const ECMASCRIPT_GLOBALS: string[] = [
12
+ // Value properties
13
+ 'globalThis', 'Infinity', 'NaN', 'undefined',
14
+
15
+ // Function properties
16
+ 'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI',
17
+ 'decodeURIComponent', 'encodeURI', 'encodeURIComponent',
18
+
19
+ // Fundamental objects
20
+ 'Object', 'Function', 'Boolean', 'Symbol',
21
+
22
+ // Error objects
23
+ 'Error', 'AggregateError', 'EvalError', 'RangeError', 'ReferenceError',
24
+ 'SyntaxError', 'TypeError', 'URIError',
25
+
26
+ // Numbers and dates
27
+ 'Number', 'BigInt', 'Math', 'Date',
28
+
29
+ // Text processing
30
+ 'String', 'RegExp',
31
+
32
+ // Collections
33
+ 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array',
34
+ 'Uint16Array', 'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array',
35
+ 'BigInt64Array', 'BigUint64Array', 'Map', 'Set', 'WeakMap', 'WeakSet',
36
+
37
+ // Structured data
38
+ 'ArrayBuffer', 'SharedArrayBuffer', 'DataView', 'Atomics', 'JSON',
39
+
40
+ // Control abstraction
41
+ 'Promise', 'Generator', 'GeneratorFunction', 'AsyncFunction',
42
+ 'AsyncGenerator', 'AsyncGeneratorFunction',
43
+
44
+ // Reflection
45
+ 'Reflect', 'Proxy',
46
+
47
+ // Internationalization
48
+ 'Intl',
49
+ ];
50
+
51
+ /**
52
+ * Node.js-specific globals
53
+ */
54
+ export const NODEJS_GLOBALS: string[] = [
55
+ // Core globals
56
+ 'console', 'process', 'global', 'Buffer',
57
+
58
+ // Timers
59
+ 'setTimeout', 'clearTimeout', 'setInterval', 'clearInterval',
60
+ 'setImmediate', 'clearImmediate',
61
+
62
+ // Module system
63
+ 'require', 'module', 'exports', '__dirname', '__filename',
64
+
65
+ // URL/fetch (Node 18+)
66
+ 'fetch', 'URL', 'URLSearchParams', 'Request', 'Response', 'Headers',
67
+
68
+ // Blob/File (Node 18+)
69
+ 'Blob', 'File', 'FormData',
70
+
71
+ // Streams
72
+ 'ReadableStream', 'WritableStream', 'TransformStream',
73
+
74
+ // Crypto
75
+ 'crypto', 'Crypto', 'CryptoKey', 'SubtleCrypto',
76
+
77
+ // Text encoding
78
+ 'TextEncoder', 'TextDecoder',
79
+
80
+ // Events
81
+ 'Event', 'EventTarget', 'AbortController', 'AbortSignal',
82
+
83
+ // Performance
84
+ 'performance', 'PerformanceEntry', 'PerformanceObserver',
85
+
86
+ // Queuing
87
+ 'queueMicrotask',
88
+
89
+ // MessageChannel
90
+ 'MessageChannel', 'MessagePort', 'BroadcastChannel',
91
+
92
+ // Structured clone
93
+ 'structuredClone',
94
+ ];
95
+
96
+ /**
97
+ * Browser-specific globals (commonly used, may appear in isomorphic code)
98
+ */
99
+ export const BROWSER_GLOBALS: string[] = [
100
+ // DOM
101
+ 'window', 'document', 'navigator', 'location', 'history',
102
+
103
+ // Elements
104
+ 'HTMLElement', 'Element', 'Node', 'NodeList', 'DocumentFragment',
105
+
106
+ // Events
107
+ 'addEventListener', 'removeEventListener', 'CustomEvent',
108
+
109
+ // Storage
110
+ 'localStorage', 'sessionStorage', 'indexedDB',
111
+
112
+ // Workers
113
+ 'Worker', 'SharedWorker', 'ServiceWorker',
114
+
115
+ // Animation
116
+ 'requestAnimationFrame', 'cancelAnimationFrame',
117
+
118
+ // Alerts
119
+ 'alert', 'confirm', 'prompt',
120
+
121
+ // Screen/viewport
122
+ 'screen', 'innerWidth', 'innerHeight', 'scrollX', 'scrollY',
123
+
124
+ // Image/media
125
+ 'Image', 'Audio', 'Video',
126
+
127
+ // Observers
128
+ 'MutationObserver', 'IntersectionObserver', 'ResizeObserver',
129
+ ];
130
+
131
+ /**
132
+ * Test framework globals (common testing environments)
133
+ */
134
+ export const TEST_GLOBALS: string[] = [
135
+ // Node.js test runner
136
+ 'describe', 'it', 'test', 'before', 'after', 'beforeEach', 'afterEach',
137
+
138
+ // Jest
139
+ 'expect', 'jest', 'mock', 'spyOn', 'fn',
140
+
141
+ // Mocha/Chai
142
+ 'assert', 'should',
143
+
144
+ // Vitest
145
+ 'vi',
146
+ ];
147
+
148
+ /**
149
+ * All default globals combined
150
+ */
151
+ export const ALL_GLOBALS: Set<string> = new Set([
152
+ ...ECMASCRIPT_GLOBALS,
153
+ ...NODEJS_GLOBALS,
154
+ ...BROWSER_GLOBALS,
155
+ ...TEST_GLOBALS,
156
+ ]);
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Global Symbols Registry
3
+ *
4
+ * Provides lookup for JavaScript/TypeScript global symbols.
5
+ * Used by BrokenImportValidator to avoid false positives on globals.
6
+ */
7
+
8
+ import { ALL_GLOBALS as DEFAULT_GLOBALS } from './definitions.js';
9
+
10
+ export {
11
+ ECMASCRIPT_GLOBALS,
12
+ NODEJS_GLOBALS,
13
+ BROWSER_GLOBALS,
14
+ TEST_GLOBALS,
15
+ ALL_GLOBALS,
16
+ } from './definitions.js';
17
+
18
+ /**
19
+ * GlobalsRegistry class for extensible globals management.
20
+ *
21
+ * Usage:
22
+ * const registry = new GlobalsRegistry();
23
+ * if (registry.isGlobal('console')) { ... }
24
+ * registry.addCustomGlobals(['myGlobal']);
25
+ */
26
+ export class GlobalsRegistry {
27
+ private globals: Set<string>;
28
+
29
+ constructor(includeDefaults: boolean = true) {
30
+ this.globals = includeDefaults
31
+ ? new Set(DEFAULT_GLOBALS)
32
+ : new Set();
33
+ }
34
+
35
+ /**
36
+ * Check if a symbol name is a known global.
37
+ */
38
+ isGlobal(name: string): boolean {
39
+ return this.globals.has(name);
40
+ }
41
+
42
+ /**
43
+ * Add custom globals (e.g., from project config).
44
+ */
45
+ addCustomGlobals(names: string[]): void {
46
+ for (const name of names) {
47
+ this.globals.add(name);
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Remove globals from the set (e.g., if project doesn't use browser env).
53
+ */
54
+ removeGlobals(names: string[]): void {
55
+ for (const name of names) {
56
+ this.globals.delete(name);
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Get all registered globals.
62
+ */
63
+ getAllGlobals(): string[] {
64
+ return Array.from(this.globals);
65
+ }
66
+ }
@@ -0,0 +1,163 @@
1
+ /**
2
+ * DiagnosticCollector - Collects and filters diagnostics from plugin execution
3
+ *
4
+ * The DiagnosticCollector aggregates errors from PluginResult.errors[],
5
+ * converting both GrafemaError instances (with rich info) and plain Error
6
+ * instances (treated as generic errors) into unified Diagnostic entries.
7
+ *
8
+ * Usage:
9
+ * const collector = new DiagnosticCollector();
10
+ * collector.addFromPluginResult('INDEXING', 'JSModuleIndexer', result);
11
+ *
12
+ * if (collector.hasFatal()) {
13
+ * throw new Error('Fatal error detected');
14
+ * }
15
+ *
16
+ * console.log(collector.toDiagnosticsLog());
17
+ */
18
+
19
+ import type { PluginPhase, PluginResult } from '@grafema/types';
20
+ import { GrafemaError } from '../errors/GrafemaError.js';
21
+
22
+ /**
23
+ * Diagnostic entry - unified format for all errors/warnings
24
+ */
25
+ export interface Diagnostic {
26
+ code: string;
27
+ severity: 'fatal' | 'error' | 'warning' | 'info';
28
+ message: string;
29
+ file?: string;
30
+ line?: number;
31
+ phase: PluginPhase;
32
+ plugin: string;
33
+ timestamp: number;
34
+ suggestion?: string;
35
+ }
36
+
37
+ /**
38
+ * Diagnostic input (without timestamp, which is auto-generated)
39
+ */
40
+ export type DiagnosticInput = Omit<Diagnostic, 'timestamp'>;
41
+
42
+ /**
43
+ * DiagnosticCollector - collects, filters, and formats diagnostics
44
+ */
45
+ export class DiagnosticCollector {
46
+ private diagnostics: Diagnostic[] = [];
47
+
48
+ /**
49
+ * Extract errors from PluginResult and add as diagnostics.
50
+ *
51
+ * GrafemaError instances provide rich info (code, severity, context, suggestion).
52
+ * Plain Error instances are treated as generic errors with code 'ERR_UNKNOWN'.
53
+ */
54
+ addFromPluginResult(phase: PluginPhase, plugin: string, result: PluginResult): void {
55
+ for (const error of result.errors) {
56
+ if (error instanceof GrafemaError) {
57
+ this.add({
58
+ code: error.code,
59
+ severity: error.severity,
60
+ message: error.message,
61
+ file: error.context.filePath,
62
+ line: error.context.lineNumber,
63
+ phase,
64
+ plugin,
65
+ suggestion: error.suggestion,
66
+ });
67
+ } else {
68
+ // Plain Error - treat as generic error
69
+ this.add({
70
+ code: 'ERR_UNKNOWN',
71
+ severity: 'error',
72
+ message: error.message,
73
+ phase,
74
+ plugin,
75
+ });
76
+ }
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Add a diagnostic directly.
82
+ * Timestamp is set automatically.
83
+ */
84
+ add(diagnostic: DiagnosticInput): void {
85
+ this.diagnostics.push({
86
+ ...diagnostic,
87
+ timestamp: Date.now(),
88
+ });
89
+ }
90
+
91
+ /**
92
+ * Get all diagnostics.
93
+ * Returns a copy to prevent external modification.
94
+ */
95
+ getAll(): Diagnostic[] {
96
+ return [...this.diagnostics];
97
+ }
98
+
99
+ /**
100
+ * Get diagnostics filtered by phase.
101
+ */
102
+ getByPhase(phase: PluginPhase): Diagnostic[] {
103
+ return this.diagnostics.filter(d => d.phase === phase);
104
+ }
105
+
106
+ /**
107
+ * Get diagnostics filtered by plugin name (case-sensitive).
108
+ */
109
+ getByPlugin(plugin: string): Diagnostic[] {
110
+ return this.diagnostics.filter(d => d.plugin === plugin);
111
+ }
112
+
113
+ /**
114
+ * Get diagnostics filtered by error code.
115
+ */
116
+ getByCode(code: string): Diagnostic[] {
117
+ return this.diagnostics.filter(d => d.code === code);
118
+ }
119
+
120
+ /**
121
+ * Check if any fatal diagnostic exists.
122
+ * Fatal errors require immediate stop of analysis.
123
+ */
124
+ hasFatal(): boolean {
125
+ return this.diagnostics.some(d => d.severity === 'fatal');
126
+ }
127
+
128
+ /**
129
+ * Check if any error (including fatal) exists.
130
+ */
131
+ hasErrors(): boolean {
132
+ return this.diagnostics.some(d => d.severity === 'error' || d.severity === 'fatal');
133
+ }
134
+
135
+ /**
136
+ * Check if any warning exists.
137
+ */
138
+ hasWarnings(): boolean {
139
+ return this.diagnostics.some(d => d.severity === 'warning');
140
+ }
141
+
142
+ /**
143
+ * Get total count of diagnostics.
144
+ */
145
+ count(): number {
146
+ return this.diagnostics.length;
147
+ }
148
+
149
+ /**
150
+ * Format diagnostics as JSON lines (one JSON object per line).
151
+ * Suitable for .grafema/diagnostics.log file.
152
+ */
153
+ toDiagnosticsLog(): string {
154
+ return this.diagnostics.map(d => JSON.stringify(d)).join('\n');
155
+ }
156
+
157
+ /**
158
+ * Clear all diagnostics.
159
+ */
160
+ clear(): void {
161
+ this.diagnostics = [];
162
+ }
163
+ }
@@ -0,0 +1,324 @@
1
+ /**
2
+ * DiagnosticReporter - Formats diagnostics for output
3
+ *
4
+ * Supports multiple output formats:
5
+ * - text: Human-readable format with severity indicators
6
+ * - json: Machine-readable JSON format for CI integration
7
+ * - csv: Spreadsheet-compatible format
8
+ *
9
+ * Usage:
10
+ * const reporter = new DiagnosticReporter(collector);
11
+ * console.log(reporter.report({ format: 'text', includeSummary: true }));
12
+ * console.log(reporter.summary());
13
+ */
14
+
15
+ import type { Diagnostic, DiagnosticCollector } from './DiagnosticCollector.js';
16
+
17
+ /**
18
+ * Mapping from diagnostic codes to category information
19
+ */
20
+ const DIAGNOSTIC_CODE_CATEGORIES: Record<string, { name: string; checkCommand: string }> = {
21
+ 'ERR_DISCONNECTED_NODES': { name: 'disconnected nodes', checkCommand: 'grafema check connectivity' },
22
+ 'ERR_DISCONNECTED_NODE': { name: 'disconnected nodes', checkCommand: 'grafema check connectivity' },
23
+ 'ERR_UNRESOLVED_CALL': { name: 'unresolved calls', checkCommand: 'grafema check calls' },
24
+ 'ERR_MISSING_ASSIGNMENT': { name: 'missing assignments', checkCommand: 'grafema check dataflow' },
25
+ 'ERR_BROKEN_REFERENCE': { name: 'broken references', checkCommand: 'grafema check dataflow' },
26
+ 'ERR_NO_LEAF_NODE': { name: 'incomplete traces', checkCommand: 'grafema check dataflow' },
27
+ 'DISCONNECTED_NODES': { name: 'disconnected nodes', checkCommand: 'grafema check connectivity' },
28
+ 'UNRESOLVED_FUNCTION_CALL': { name: 'unresolved calls', checkCommand: 'grafema check calls' },
29
+ 'MISSING_ASSIGNMENT': { name: 'missing assignments', checkCommand: 'grafema check dataflow' },
30
+ };
31
+
32
+ /**
33
+ * Report output options
34
+ */
35
+ export interface ReportOptions {
36
+ format: 'text' | 'json' | 'csv';
37
+ includeSummary?: boolean;
38
+ includeTrace?: boolean;
39
+ }
40
+
41
+ /**
42
+ * Summary statistics
43
+ */
44
+ export interface SummaryStats {
45
+ total: number;
46
+ fatal: number;
47
+ errors: number;
48
+ warnings: number;
49
+ info: number;
50
+ }
51
+
52
+ /**
53
+ * Category count with metadata
54
+ */
55
+ export interface CategoryCount {
56
+ code: string;
57
+ count: number;
58
+ name: string;
59
+ checkCommand: string;
60
+ }
61
+
62
+ /**
63
+ * Summary statistics with category breakdown
64
+ */
65
+ export interface CategorizedSummaryStats extends SummaryStats {
66
+ byCode: CategoryCount[];
67
+ }
68
+
69
+ /**
70
+ * DiagnosticReporter - formats diagnostics for different output formats
71
+ */
72
+ export class DiagnosticReporter {
73
+ constructor(private collector: DiagnosticCollector) {}
74
+
75
+ /**
76
+ * Generate a formatted report of all diagnostics.
77
+ */
78
+ report(options: ReportOptions): string {
79
+ const diagnostics = this.collector.getAll();
80
+
81
+ if (options.format === 'json') {
82
+ return this.jsonReport(diagnostics, options);
83
+ } else if (options.format === 'csv') {
84
+ return this.csvReport(diagnostics);
85
+ } else {
86
+ return this.textReport(diagnostics, options);
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Generate a human-readable summary of diagnostic counts.
92
+ */
93
+ summary(): string {
94
+ const stats = this.getStats();
95
+
96
+ if (stats.total === 0) {
97
+ return 'No issues found.';
98
+ }
99
+
100
+ const parts: string[] = [];
101
+
102
+ if (stats.fatal > 0) {
103
+ parts.push(`Fatal: ${stats.fatal}`);
104
+ }
105
+ if (stats.errors > 0) {
106
+ parts.push(`Errors: ${stats.errors}`);
107
+ }
108
+ if (stats.warnings > 0) {
109
+ parts.push(`Warnings: ${stats.warnings}`);
110
+ }
111
+
112
+ return parts.join(', ');
113
+ }
114
+
115
+ /**
116
+ * Generate a categorized summary with actionable commands.
117
+ */
118
+ categorizedSummary(): string {
119
+ const stats = this.getCategorizedStats();
120
+
121
+ if (stats.total === 0) {
122
+ return 'No issues found.';
123
+ }
124
+
125
+ const lines: string[] = [];
126
+
127
+ // Severity totals (same format as summary())
128
+ const severityParts: string[] = [];
129
+ if (stats.fatal > 0) {
130
+ severityParts.push(`Fatal: ${stats.fatal}`);
131
+ }
132
+ if (stats.errors > 0) {
133
+ severityParts.push(`Errors: ${stats.errors}`);
134
+ }
135
+ if (stats.warnings > 0) {
136
+ severityParts.push(`Warnings: ${stats.warnings}`);
137
+ }
138
+ lines.push(severityParts.join(', '));
139
+
140
+ // Top 5 categories
141
+ const topCategories = stats.byCode.slice(0, 5);
142
+ for (const category of topCategories) {
143
+ lines.push(` - ${category.count} ${category.name} (run \`${category.checkCommand}\`)`);
144
+ }
145
+
146
+ // "Other issues" if more than 5 categories
147
+ if (stats.byCode.length > 5) {
148
+ const remainingCount = stats.byCode.slice(5).reduce((sum, cat) => sum + cat.count, 0);
149
+ const issueWord = remainingCount === 1 ? 'other issue' : 'other issues';
150
+ lines.push(` - ${remainingCount} ${issueWord}`);
151
+ }
152
+
153
+ // Footer
154
+ lines.push('');
155
+ lines.push('Run `grafema check --all` for full diagnostics.');
156
+
157
+ return lines.join('\n');
158
+ }
159
+
160
+ /**
161
+ * Get diagnostic statistics by severity.
162
+ */
163
+ getStats(): SummaryStats {
164
+ const diagnostics = this.collector.getAll();
165
+ return {
166
+ total: diagnostics.length,
167
+ fatal: diagnostics.filter(d => d.severity === 'fatal').length,
168
+ errors: diagnostics.filter(d => d.severity === 'error').length,
169
+ warnings: diagnostics.filter(d => d.severity === 'warning').length,
170
+ info: diagnostics.filter(d => d.severity === 'info').length,
171
+ };
172
+ }
173
+
174
+ /**
175
+ * Get diagnostic statistics grouped by category.
176
+ */
177
+ getCategorizedStats(): CategorizedSummaryStats {
178
+ const diagnostics = this.collector.getAll();
179
+
180
+ // Get severity stats
181
+ const severityStats: SummaryStats = {
182
+ total: diagnostics.length,
183
+ fatal: diagnostics.filter(d => d.severity === 'fatal').length,
184
+ errors: diagnostics.filter(d => d.severity === 'error').length,
185
+ warnings: diagnostics.filter(d => d.severity === 'warning').length,
186
+ info: diagnostics.filter(d => d.severity === 'info').length,
187
+ };
188
+
189
+ // Group by code
190
+ const codeMap = new Map<string, number>();
191
+ for (const diag of diagnostics) {
192
+ const count = codeMap.get(diag.code) || 0;
193
+ codeMap.set(diag.code, count + 1);
194
+ }
195
+
196
+ // Convert to CategoryCount array with metadata
197
+ const byCode: CategoryCount[] = [];
198
+ for (const [code, count] of codeMap.entries()) {
199
+ const category = DIAGNOSTIC_CODE_CATEGORIES[code];
200
+ byCode.push({
201
+ code,
202
+ count,
203
+ name: category?.name || code,
204
+ checkCommand: category?.checkCommand || 'grafema check --all',
205
+ });
206
+ }
207
+
208
+ // Sort by count descending
209
+ byCode.sort((a, b) => b.count - a.count);
210
+
211
+ return {
212
+ ...severityStats,
213
+ byCode,
214
+ };
215
+ }
216
+
217
+ /**
218
+ * Generate human-readable text report.
219
+ */
220
+ private textReport(diagnostics: Diagnostic[], options: ReportOptions): string {
221
+ if (diagnostics.length === 0) {
222
+ return 'No issues found.';
223
+ }
224
+
225
+ const lines: string[] = [];
226
+
227
+ for (const diag of diagnostics) {
228
+ const icon = this.getSeverityIcon(diag.severity);
229
+ const location = this.formatLocation(diag);
230
+
231
+ lines.push(`${icon} ${diag.code} ${location} ${diag.message}`);
232
+
233
+ if (diag.suggestion) {
234
+ lines.push(` Suggestion: ${diag.suggestion}`);
235
+ }
236
+ }
237
+
238
+ if (options.includeSummary) {
239
+ lines.push('');
240
+ lines.push(this.summary());
241
+ }
242
+
243
+ return lines.join('\n');
244
+ }
245
+
246
+ /**
247
+ * Generate JSON report.
248
+ */
249
+ private jsonReport(diagnostics: Diagnostic[], options: ReportOptions): string {
250
+ const result: {
251
+ diagnostics: Diagnostic[];
252
+ summary?: SummaryStats;
253
+ } = {
254
+ diagnostics,
255
+ };
256
+
257
+ if (options.includeSummary) {
258
+ result.summary = this.getStats();
259
+ }
260
+
261
+ return JSON.stringify(result, null, 2);
262
+ }
263
+
264
+ /**
265
+ * Generate CSV report.
266
+ */
267
+ private csvReport(diagnostics: Diagnostic[]): string {
268
+ const header = 'severity,code,file,line,message,plugin,phase,suggestion';
269
+ const rows = diagnostics.map(d =>
270
+ [
271
+ d.severity,
272
+ d.code,
273
+ d.file || '',
274
+ d.line || '',
275
+ this.csvEscape(d.message),
276
+ d.plugin,
277
+ d.phase,
278
+ d.suggestion ? this.csvEscape(d.suggestion) : '',
279
+ ].join(',')
280
+ );
281
+ return [header, ...rows].join('\n');
282
+ }
283
+
284
+ /**
285
+ * Get severity indicator for text output.
286
+ */
287
+ private getSeverityIcon(severity: Diagnostic['severity']): string {
288
+ switch (severity) {
289
+ case 'fatal':
290
+ return '[FATAL]';
291
+ case 'error':
292
+ return '[ERROR]';
293
+ case 'warning':
294
+ return '[WARN]';
295
+ case 'info':
296
+ return '[INFO]';
297
+ default:
298
+ return '[?]';
299
+ }
300
+ }
301
+
302
+ /**
303
+ * Format file location for display.
304
+ */
305
+ private formatLocation(diag: Diagnostic): string {
306
+ if (!diag.file) {
307
+ return '';
308
+ }
309
+ if (diag.line) {
310
+ return `(${diag.file}:${diag.line})`;
311
+ }
312
+ return `(${diag.file})`;
313
+ }
314
+
315
+ /**
316
+ * Escape a value for CSV output.
317
+ * Wraps in quotes and escapes internal quotes.
318
+ */
319
+ private csvEscape(value: string): string {
320
+ // Always quote to handle commas and special characters
321
+ const escaped = value.replace(/"/g, '""');
322
+ return `"${escaped}"`;
323
+ }
324
+ }