@grafema/core 0.1.0-alpha.4 → 0.1.1-alpha

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 (391) hide show
  1. package/README.md +0 -1
  2. package/dist/Orchestrator.d.ts +24 -2
  3. package/dist/Orchestrator.d.ts.map +1 -1
  4. package/dist/Orchestrator.js +197 -24
  5. package/dist/config/ConfigLoader.d.ts +72 -0
  6. package/dist/config/ConfigLoader.d.ts.map +1 -0
  7. package/dist/config/ConfigLoader.js +187 -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/FileNodeManager.d.ts +40 -0
  18. package/dist/core/FileNodeManager.d.ts.map +1 -0
  19. package/dist/core/FileNodeManager.js +84 -0
  20. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  21. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  22. package/dist/core/GraphFreshnessChecker.js +101 -0
  23. package/dist/core/HashUtils.d.ts +24 -0
  24. package/dist/core/HashUtils.d.ts.map +1 -0
  25. package/dist/core/HashUtils.js +45 -0
  26. package/dist/core/IncrementalReanalyzer.d.ts +36 -0
  27. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  28. package/dist/core/IncrementalReanalyzer.js +132 -0
  29. package/dist/core/NodeFactory.d.ts +225 -17
  30. package/dist/core/NodeFactory.d.ts.map +1 -1
  31. package/dist/core/NodeFactory.js +208 -18
  32. package/dist/core/ScopeTracker.d.ts +84 -0
  33. package/dist/core/ScopeTracker.d.ts.map +1 -0
  34. package/dist/core/ScopeTracker.js +116 -0
  35. package/dist/core/SemanticId.d.ts +90 -0
  36. package/dist/core/SemanticId.d.ts.map +1 -0
  37. package/dist/core/SemanticId.js +115 -0
  38. package/dist/core/VersionManager.d.ts.map +1 -1
  39. package/dist/core/VersionManager.js +3 -2
  40. package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
  41. package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
  42. package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
  43. package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
  44. package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
  45. package/dist/core/nodes/ArrayLiteralNode.js +41 -0
  46. package/dist/core/nodes/CallSiteNode.d.ts +28 -0
  47. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
  48. package/dist/core/nodes/CallSiteNode.js +46 -0
  49. package/dist/core/nodes/ClassNode.d.ts +33 -1
  50. package/dist/core/nodes/ClassNode.d.ts.map +1 -1
  51. package/dist/core/nodes/ClassNode.js +46 -2
  52. package/dist/core/nodes/DecoratorNode.d.ts +42 -0
  53. package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
  54. package/dist/core/nodes/DecoratorNode.js +62 -0
  55. package/dist/core/nodes/EnumNode.d.ts +42 -0
  56. package/dist/core/nodes/EnumNode.d.ts.map +1 -0
  57. package/dist/core/nodes/EnumNode.js +54 -0
  58. package/dist/core/nodes/ExportNode.d.ts +37 -1
  59. package/dist/core/nodes/ExportNode.d.ts.map +1 -1
  60. package/dist/core/nodes/ExportNode.js +48 -2
  61. package/dist/core/nodes/ExpressionNode.d.ts +97 -0
  62. package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
  63. package/dist/core/nodes/ExpressionNode.js +178 -0
  64. package/dist/core/nodes/ExternalModuleNode.d.ts +28 -0
  65. package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
  66. package/dist/core/nodes/ExternalModuleNode.js +41 -0
  67. package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
  68. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
  69. package/dist/core/nodes/ExternalStdioNode.js +15 -8
  70. package/dist/core/nodes/FunctionNode.d.ts +36 -0
  71. package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
  72. package/dist/core/nodes/FunctionNode.js +80 -1
  73. package/dist/core/nodes/ImportNode.d.ts +19 -5
  74. package/dist/core/nodes/ImportNode.d.ts.map +1 -1
  75. package/dist/core/nodes/ImportNode.js +23 -5
  76. package/dist/core/nodes/InterfaceNode.d.ts +46 -0
  77. package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
  78. package/dist/core/nodes/InterfaceNode.js +55 -0
  79. package/dist/core/nodes/IssueNode.d.ts +73 -0
  80. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  81. package/dist/core/nodes/IssueNode.js +129 -0
  82. package/dist/core/nodes/MethodCallNode.d.ts +30 -0
  83. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
  84. package/dist/core/nodes/MethodCallNode.js +49 -0
  85. package/dist/core/nodes/MethodNode.d.ts +32 -0
  86. package/dist/core/nodes/MethodNode.d.ts.map +1 -1
  87. package/dist/core/nodes/MethodNode.js +48 -0
  88. package/dist/core/nodes/ModuleNode.d.ts +31 -0
  89. package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
  90. package/dist/core/nodes/ModuleNode.js +37 -0
  91. package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
  92. package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
  93. package/dist/core/nodes/NetworkRequestNode.js +65 -0
  94. package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
  95. package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
  96. package/dist/core/nodes/ObjectLiteralNode.js +41 -0
  97. package/dist/core/nodes/ScopeNode.d.ts +31 -0
  98. package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
  99. package/dist/core/nodes/ScopeNode.js +49 -0
  100. package/dist/core/nodes/TypeNode.d.ts +36 -0
  101. package/dist/core/nodes/TypeNode.d.ts.map +1 -0
  102. package/dist/core/nodes/TypeNode.js +53 -0
  103. package/dist/core/nodes/VariableDeclarationNode.d.ts +27 -0
  104. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
  105. package/dist/core/nodes/VariableDeclarationNode.js +40 -0
  106. package/dist/core/nodes/index.d.ts +12 -1
  107. package/dist/core/nodes/index.d.ts.map +1 -1
  108. package/dist/core/nodes/index.js +14 -0
  109. package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
  110. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  111. package/dist/diagnostics/DiagnosticCollector.js +129 -0
  112. package/dist/diagnostics/DiagnosticReporter.d.ts +77 -0
  113. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  114. package/dist/diagnostics/DiagnosticReporter.js +159 -0
  115. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  116. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  117. package/dist/diagnostics/DiagnosticWriter.js +43 -0
  118. package/dist/diagnostics/index.d.ts +14 -0
  119. package/dist/diagnostics/index.d.ts.map +1 -0
  120. package/dist/diagnostics/index.js +11 -0
  121. package/dist/errors/GrafemaError.d.ts +118 -0
  122. package/dist/errors/GrafemaError.d.ts.map +1 -0
  123. package/dist/errors/GrafemaError.js +131 -0
  124. package/dist/index.d.ts +57 -1
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +54 -1
  127. package/dist/logging/Logger.d.ts +48 -0
  128. package/dist/logging/Logger.d.ts.map +1 -0
  129. package/dist/logging/Logger.js +134 -0
  130. package/dist/plugins/Plugin.d.ts +5 -1
  131. package/dist/plugins/Plugin.d.ts.map +1 -1
  132. package/dist/plugins/Plugin.js +33 -0
  133. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  134. package/dist/plugins/analysis/DatabaseAnalyzer.js +13 -6
  135. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  136. package/dist/plugins/analysis/ExpressAnalyzer.js +27 -19
  137. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  138. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +21 -14
  139. package/dist/plugins/analysis/FetchAnalyzer.d.ts +1 -0
  140. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  141. package/dist/plugins/analysis/FetchAnalyzer.js +34 -14
  142. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
  143. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  144. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
  145. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +180 -17
  146. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  147. package/dist/plugins/analysis/JSASTAnalyzer.js +1171 -471
  148. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  149. package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
  150. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  151. package/dist/plugins/analysis/RustAnalyzer.js +15 -10
  152. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  153. package/dist/plugins/analysis/SQLiteAnalyzer.js +9 -7
  154. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  155. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
  156. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  157. package/dist/plugins/analysis/SocketIOAnalyzer.js +27 -15
  158. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  159. package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
  160. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +34 -4
  161. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  162. package/dist/plugins/analysis/ast/GraphBuilder.js +318 -298
  163. package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
  164. package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
  165. package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
  166. package/dist/plugins/analysis/ast/types.d.ts +176 -5
  167. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  168. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
  169. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
  170. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
  171. package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
  172. package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
  173. package/dist/plugins/analysis/ast/utils/index.js +5 -0
  174. package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
  175. package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
  176. package/dist/plugins/analysis/ast/utils/location.js +78 -0
  177. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +9 -4
  178. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  179. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
  180. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +99 -9
  181. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  182. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +663 -125
  183. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
  184. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  185. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
  186. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +4 -1
  187. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  188. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +128 -63
  189. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
  190. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +11 -8
  191. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
  192. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  193. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
  194. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +4 -1
  195. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  196. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +17 -13
  197. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  198. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
  199. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
  200. package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
  201. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
  202. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
  203. package/dist/plugins/discovery/WorkspaceDiscovery.js +136 -0
  204. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
  205. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
  206. package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
  207. package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
  208. package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
  209. package/dist/plugins/discovery/workspaces/detector.js +49 -0
  210. package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
  211. package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
  212. package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
  213. package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
  214. package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
  215. package/dist/plugins/discovery/workspaces/index.js +8 -0
  216. package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
  217. package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
  218. package/dist/plugins/discovery/workspaces/parsers.js +80 -0
  219. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  220. package/dist/plugins/enrichment/AliasTracker.js +14 -8
  221. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  222. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +14 -7
  223. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  224. package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
  225. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  226. package/dist/plugins/enrichment/MethodCallResolver.js +18 -12
  227. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  228. package/dist/plugins/enrichment/MountPointResolver.js +8 -3
  229. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  230. package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
  231. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  232. package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
  233. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +17 -0
  234. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  235. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +129 -10
  236. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  237. package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
  238. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  239. package/dist/plugins/indexing/JSModuleIndexer.js +63 -31
  240. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  241. package/dist/plugins/indexing/RustModuleIndexer.js +5 -4
  242. package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
  243. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
  244. package/dist/plugins/indexing/ServiceDetector.js +28 -15
  245. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  246. package/dist/plugins/validation/CallResolverValidator.js +8 -7
  247. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
  248. package/dist/plugins/validation/DataFlowValidator.js +17 -12
  249. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
  250. package/dist/plugins/validation/EvalBanValidator.js +17 -16
  251. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  252. package/dist/plugins/validation/GraphConnectivityValidator.js +19 -23
  253. package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
  254. package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
  255. package/dist/plugins/validation/NodeCreationValidator.js +415 -0
  256. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  257. package/dist/plugins/validation/SQLInjectionValidator.js +59 -16
  258. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
  259. package/dist/plugins/validation/ShadowingDetector.js +6 -5
  260. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
  261. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
  262. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
  263. package/dist/plugins/vcs/GitPlugin.js +10 -12
  264. package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
  265. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
  266. package/dist/plugins/vcs/VCSPlugin.js +5 -5
  267. package/dist/storage/backends/RFDBServerBackend.d.ts +10 -17
  268. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  269. package/dist/storage/backends/RFDBServerBackend.js +31 -10
  270. package/dist/validation/PathValidator.d.ts +1 -2
  271. package/dist/validation/PathValidator.d.ts.map +1 -1
  272. package/package.json +6 -3
  273. package/src/Orchestrator.ts +237 -24
  274. package/src/config/ConfigLoader.ts +263 -0
  275. package/src/config/index.ts +5 -0
  276. package/src/core/ASTWorker.ts +143 -139
  277. package/src/core/CoverageAnalyzer.ts +243 -0
  278. package/src/core/FileNodeManager.ts +100 -0
  279. package/src/core/GraphFreshnessChecker.ts +143 -0
  280. package/src/core/HashUtils.ts +48 -0
  281. package/src/core/IncrementalReanalyzer.ts +192 -0
  282. package/src/core/NodeFactory.ts +401 -18
  283. package/src/core/ScopeTracker.ts +154 -0
  284. package/src/core/SemanticId.ts +192 -0
  285. package/src/core/VersionManager.ts +3 -2
  286. package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
  287. package/src/core/nodes/ArrayLiteralNode.ts +65 -0
  288. package/src/core/nodes/CallSiteNode.ts +58 -0
  289. package/src/core/nodes/ClassNode.ts +63 -2
  290. package/src/core/nodes/DecoratorNode.ts +91 -0
  291. package/src/core/nodes/EnumNode.ts +86 -0
  292. package/src/core/nodes/ExportNode.ts +70 -2
  293. package/src/core/nodes/ExpressionNode.ts +231 -0
  294. package/src/core/nodes/ExternalModuleNode.ts +56 -0
  295. package/src/core/nodes/ExternalStdioNode.ts +17 -9
  296. package/src/core/nodes/FunctionNode.ts +101 -1
  297. package/src/core/nodes/ImportNode.ts +32 -10
  298. package/src/core/nodes/InterfaceNode.ts +91 -0
  299. package/src/core/nodes/IssueNode.ts +177 -0
  300. package/src/core/nodes/MethodCallNode.ts +64 -0
  301. package/src/core/nodes/MethodNode.ts +63 -0
  302. package/src/core/nodes/ModuleNode.ts +50 -0
  303. package/src/core/nodes/NetworkRequestNode.ts +77 -0
  304. package/src/core/nodes/ObjectLiteralNode.ts +65 -0
  305. package/src/core/nodes/ScopeNode.ts +65 -0
  306. package/src/core/nodes/TypeNode.ts +78 -0
  307. package/src/core/nodes/VariableDeclarationNode.ts +52 -0
  308. package/src/core/nodes/index.ts +18 -1
  309. package/src/diagnostics/DiagnosticCollector.ts +163 -0
  310. package/src/diagnostics/DiagnosticReporter.ts +204 -0
  311. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  312. package/src/diagnostics/index.ts +16 -0
  313. package/src/errors/GrafemaError.ts +174 -0
  314. package/src/index.ts +148 -1
  315. package/src/logging/Logger.ts +152 -0
  316. package/src/plugins/Plugin.ts +42 -0
  317. package/src/plugins/analysis/DatabaseAnalyzer.ts +14 -8
  318. package/src/plugins/analysis/ExpressAnalyzer.ts +29 -19
  319. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +22 -21
  320. package/src/plugins/analysis/FetchAnalyzer.ts +39 -16
  321. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
  322. package/src/plugins/analysis/JSASTAnalyzer.ts +1483 -503
  323. package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
  324. package/src/plugins/analysis/RustAnalyzer.ts +15 -10
  325. package/src/plugins/analysis/SQLiteAnalyzer.ts +10 -7
  326. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
  327. package/src/plugins/analysis/SocketIOAnalyzer.ts +31 -22
  328. package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
  329. package/src/plugins/analysis/ast/GraphBuilder.ts +439 -327
  330. package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
  331. package/src/plugins/analysis/ast/types.ts +209 -6
  332. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
  333. package/src/plugins/analysis/ast/utils/index.ts +12 -0
  334. package/src/plugins/analysis/ast/utils/location.ts +103 -0
  335. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +11 -8
  336. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +909 -83
  337. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
  338. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +159 -93
  339. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +12 -8
  340. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
  341. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +37 -17
  342. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
  343. package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
  344. package/src/plugins/discovery/WorkspaceDiscovery.ts +177 -0
  345. package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
  346. package/src/plugins/discovery/workspaces/detector.ts +63 -0
  347. package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
  348. package/src/plugins/discovery/workspaces/index.ts +23 -0
  349. package/src/plugins/discovery/workspaces/parsers.ts +99 -0
  350. package/src/plugins/enrichment/AliasTracker.ts +14 -8
  351. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +14 -7
  352. package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
  353. package/src/plugins/enrichment/MethodCallResolver.ts +18 -12
  354. package/src/plugins/enrichment/MountPointResolver.ts +8 -3
  355. package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
  356. package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
  357. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +149 -12
  358. package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
  359. package/src/plugins/indexing/JSModuleIndexer.ts +74 -34
  360. package/src/plugins/indexing/RustModuleIndexer.ts +5 -4
  361. package/src/plugins/validation/CallResolverValidator.ts +8 -7
  362. package/src/plugins/validation/DataFlowValidator.ts +16 -12
  363. package/src/plugins/validation/EvalBanValidator.ts +17 -16
  364. package/src/plugins/validation/GraphConnectivityValidator.ts +19 -23
  365. package/src/plugins/validation/NodeCreationValidator.ts +554 -0
  366. package/src/plugins/validation/SQLInjectionValidator.ts +61 -15
  367. package/src/plugins/validation/ShadowingDetector.ts +6 -5
  368. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
  369. package/src/plugins/vcs/GitPlugin.ts +40 -12
  370. package/src/plugins/vcs/VCSPlugin.ts +7 -5
  371. package/src/storage/backends/RFDBServerBackend.ts +43 -29
  372. package/src/validation/PathValidator.ts +1 -1
  373. package/dist/core/AnalysisWorker.d.ts +0 -14
  374. package/dist/core/AnalysisWorker.d.ts.map +0 -1
  375. package/dist/core/AnalysisWorker.js +0 -307
  376. package/dist/core/ParallelAnalyzer.d.ts +0 -120
  377. package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
  378. package/dist/core/ParallelAnalyzer.js +0 -331
  379. package/dist/core/QueueWorker.d.ts +0 -12
  380. package/dist/core/QueueWorker.d.ts.map +0 -1
  381. package/dist/core/QueueWorker.js +0 -567
  382. package/dist/core/RFDBClient.d.ts +0 -179
  383. package/dist/core/RFDBClient.d.ts.map +0 -1
  384. package/dist/core/RFDBClient.js +0 -429
  385. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
  386. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
  387. package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
  388. package/src/core/AnalysisWorker.ts +0 -410
  389. package/src/core/ParallelAnalyzer.ts +0 -476
  390. package/src/core/QueueWorker.ts +0 -780
  391. package/src/plugins/indexing/ServiceDetector.ts +0 -230
@@ -0,0 +1,50 @@
1
+ /**
2
+ * DiagnosticWriter - Writes diagnostics to .grafema/diagnostics.log
3
+ *
4
+ * Writes diagnostics in JSON lines format (one JSON object per line).
5
+ * This format is:
6
+ * - Easy to parse line-by-line
7
+ * - Appendable without reading entire file
8
+ * - Compatible with streaming tools (grep, jq, etc.)
9
+ *
10
+ * Usage:
11
+ * const writer = new DiagnosticWriter();
12
+ * await writer.write(collector, '/project/.grafema');
13
+ */
14
+
15
+ import { writeFileSync, existsSync, mkdirSync } from 'fs';
16
+ import { join, dirname } from 'path';
17
+
18
+ import type { DiagnosticCollector } from './DiagnosticCollector.js';
19
+
20
+ /**
21
+ * DiagnosticWriter - writes diagnostics.log file
22
+ */
23
+ export class DiagnosticWriter {
24
+ /**
25
+ * Write all diagnostics to .grafema/diagnostics.log
26
+ *
27
+ * Creates the directory if it doesn't exist.
28
+ * Overwrites existing file.
29
+ */
30
+ async write(collector: DiagnosticCollector, grafemaDir: string): Promise<void> {
31
+ const logPath = this.getLogPath(grafemaDir);
32
+
33
+ // Create directory if it doesn't exist
34
+ const dir = dirname(logPath);
35
+ if (!existsSync(dir)) {
36
+ mkdirSync(dir, { recursive: true });
37
+ }
38
+
39
+ // Write diagnostics as JSON lines
40
+ const content = collector.toDiagnosticsLog();
41
+ writeFileSync(logPath, content, 'utf-8');
42
+ }
43
+
44
+ /**
45
+ * Get the path to the diagnostics.log file
46
+ */
47
+ getLogPath(grafemaDir: string): string {
48
+ return join(grafemaDir, 'diagnostics.log');
49
+ }
50
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Diagnostics - Error collection, reporting, and logging
3
+ *
4
+ * This module provides the diagnostics infrastructure for Grafema:
5
+ * - DiagnosticCollector: Collects errors from plugin execution
6
+ * - DiagnosticReporter: Formats diagnostics for output (text/json/csv)
7
+ * - DiagnosticWriter: Writes diagnostics.log file
8
+ */
9
+
10
+ export { DiagnosticCollector } from './DiagnosticCollector.js';
11
+ export type { Diagnostic, DiagnosticInput } from './DiagnosticCollector.js';
12
+
13
+ export { DiagnosticReporter } from './DiagnosticReporter.js';
14
+ export type { ReportOptions, SummaryStats } from './DiagnosticReporter.js';
15
+
16
+ export { DiagnosticWriter } from './DiagnosticWriter.js';
@@ -0,0 +1,174 @@
1
+ /**
2
+ * GrafemaError - Error hierarchy for Grafema
3
+ *
4
+ * All errors extend the native JavaScript Error class for compatibility
5
+ * with PluginResult.errors[] (Error[]).
6
+ *
7
+ * Error types:
8
+ * - ConfigError: Configuration parsing/validation errors (fatal)
9
+ * - FileAccessError: File system access errors (error)
10
+ * - LanguageError: Unsupported language/parsing errors (warning)
11
+ * - DatabaseError: RFDB database errors (fatal)
12
+ * - PluginError: Plugin execution errors (error)
13
+ * - AnalysisError: Analysis/timeout errors (error)
14
+ */
15
+
16
+ import type { PluginPhase } from '@grafema/types';
17
+
18
+ /**
19
+ * Context for error reporting
20
+ */
21
+ export interface ErrorContext {
22
+ filePath?: string;
23
+ lineNumber?: number;
24
+ phase?: PluginPhase;
25
+ plugin?: string;
26
+ [key: string]: unknown;
27
+ }
28
+
29
+ /**
30
+ * JSON representation of GrafemaError
31
+ */
32
+ export interface GrafemaErrorJSON {
33
+ code: string;
34
+ severity: 'fatal' | 'error' | 'warning';
35
+ message: string;
36
+ context: ErrorContext;
37
+ suggestion?: string;
38
+ }
39
+
40
+ /**
41
+ * Abstract base class for all Grafema errors.
42
+ *
43
+ * Extends native Error for compatibility with PluginResult.errors[].
44
+ */
45
+ export abstract class GrafemaError extends Error {
46
+ abstract readonly code: string;
47
+ abstract readonly severity: 'fatal' | 'error' | 'warning';
48
+ readonly context: ErrorContext;
49
+ readonly suggestion?: string;
50
+
51
+ constructor(message: string, context: ErrorContext = {}, suggestion?: string) {
52
+ super(message);
53
+ this.name = this.constructor.name;
54
+ this.context = context;
55
+ this.suggestion = suggestion;
56
+
57
+ // Ensure proper prototype chain for instanceof checks
58
+ Object.setPrototypeOf(this, new.target.prototype);
59
+
60
+ // Capture stack trace (V8 specific)
61
+ if (Error.captureStackTrace) {
62
+ Error.captureStackTrace(this, this.constructor);
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Serialize error to JSON for diagnostics.log
68
+ */
69
+ toJSON(): GrafemaErrorJSON {
70
+ return {
71
+ code: this.code,
72
+ severity: this.severity,
73
+ message: this.message,
74
+ context: this.context,
75
+ suggestion: this.suggestion,
76
+ };
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Configuration error - config.json parsing, validation, missing required fields
82
+ *
83
+ * Severity: fatal (always)
84
+ * Codes: ERR_CONFIG_INVALID, ERR_CONFIG_MISSING_FIELD
85
+ */
86
+ export class ConfigError extends GrafemaError {
87
+ readonly code: string;
88
+ readonly severity = 'fatal' as const;
89
+
90
+ constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
91
+ super(message, context, suggestion);
92
+ this.code = code;
93
+ }
94
+ }
95
+
96
+ /**
97
+ * File access error - unreadable files, missing git, permissions
98
+ *
99
+ * Severity: error (default)
100
+ * Codes: ERR_FILE_UNREADABLE, ERR_GIT_NOT_FOUND, ERR_GIT_ACCESS_DENIED
101
+ */
102
+ export class FileAccessError extends GrafemaError {
103
+ readonly code: string;
104
+ readonly severity = 'error' as const;
105
+
106
+ constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
107
+ super(message, context, suggestion);
108
+ this.code = code;
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Language error - unsupported file type, unparseable syntax
114
+ *
115
+ * Severity: warning (always)
116
+ * Codes: ERR_UNSUPPORTED_LANG, ERR_PARSE_FAILURE
117
+ */
118
+ export class LanguageError extends GrafemaError {
119
+ readonly code: string;
120
+ readonly severity = 'warning' as const;
121
+
122
+ constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
123
+ super(message, context, suggestion);
124
+ this.code = code;
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Database error - RFDB connection, corruption, lock
130
+ *
131
+ * Severity: fatal (always)
132
+ * Codes: ERR_DATABASE_LOCKED, ERR_DATABASE_CORRUPTED
133
+ */
134
+ export class DatabaseError extends GrafemaError {
135
+ readonly code: string;
136
+ readonly severity = 'fatal' as const;
137
+
138
+ constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
139
+ super(message, context, suggestion);
140
+ this.code = code;
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Plugin error - plugin execution failed, dependency missing
146
+ *
147
+ * Severity: error (default)
148
+ * Codes: ERR_PLUGIN_FAILED, ERR_PLUGIN_DEPENDENCY_MISSING
149
+ */
150
+ export class PluginError extends GrafemaError {
151
+ readonly code: string;
152
+ readonly severity = 'error' as const;
153
+
154
+ constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
155
+ super(message, context, suggestion);
156
+ this.code = code;
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Analysis error - internal analyzer failure, timeout
162
+ *
163
+ * Severity: error (default)
164
+ * Codes: ERR_ANALYSIS_TIMEOUT, ERR_ANALYSIS_INTERNAL
165
+ */
166
+ export class AnalysisError extends GrafemaError {
167
+ readonly code: string;
168
+ readonly severity = 'error' as const;
169
+
170
+ constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
171
+ super(message, context, suggestion);
172
+ this.code = code;
173
+ }
174
+ }
package/src/index.ts CHANGED
@@ -2,6 +2,30 @@
2
2
  * @grafema/core - Core analysis engine for GraphDD
3
3
  */
4
4
 
5
+ // Error types
6
+ export {
7
+ GrafemaError,
8
+ ConfigError,
9
+ FileAccessError,
10
+ LanguageError,
11
+ DatabaseError,
12
+ PluginError,
13
+ AnalysisError,
14
+ } from './errors/GrafemaError.js';
15
+ export type { ErrorContext, GrafemaErrorJSON } from './errors/GrafemaError.js';
16
+
17
+ // Logging
18
+ export { Logger, ConsoleLogger, createLogger } from './logging/Logger.js';
19
+ export type { LogLevel } from './logging/Logger.js';
20
+
21
+ // Diagnostics
22
+ export { DiagnosticCollector, DiagnosticReporter, DiagnosticWriter } from './diagnostics/index.js';
23
+ export type { Diagnostic, DiagnosticInput, ReportOptions, SummaryStats } from './diagnostics/index.js';
24
+
25
+ // Config
26
+ export { loadConfig, DEFAULT_CONFIG } from './config/index.js';
27
+ export type { GrafemaConfig } from './config/index.js';
28
+
5
29
  // Main orchestrator
6
30
  export { Orchestrator } from './Orchestrator.js';
7
31
  export type {
@@ -30,9 +54,50 @@ export { RFDBServerBackend } from './storage/backends/RFDBServerBackend.js';
30
54
  // Core utilities
31
55
  export { NodeFactory } from './core/NodeFactory.js';
32
56
  export { Profiler } from './core/Profiler.js';
57
+ export {
58
+ computeSemanticId,
59
+ parseSemanticId,
60
+ computeDiscriminator
61
+ } from './core/SemanticId.js';
62
+ export type {
63
+ Location,
64
+ ScopeContext,
65
+ SemanticIdOptions,
66
+ ParsedSemanticId,
67
+ LocatedItem
68
+ } from './core/SemanticId.js';
69
+ export { ScopeTracker } from './core/ScopeTracker.js';
70
+ export type { ScopeEntry, CountedScopeResult } from './core/ScopeTracker.js';
33
71
  export { AnalysisQueue } from './core/AnalysisQueue.js';
72
+ export { ASTWorkerPool, type ModuleInfo as ASTModuleInfo, type ParseResult, type ASTWorkerPoolStats } from './core/ASTWorkerPool.js';
34
73
  export { GuaranteeManager } from './core/GuaranteeManager.js';
35
74
  export type { GuaranteeGraph } from './core/GuaranteeManager.js';
75
+ export { clearFileNodesIfNeeded, clearServiceNodeIfExists } from './core/FileNodeManager.js';
76
+ export { CoverageAnalyzer } from './core/CoverageAnalyzer.js';
77
+ export type { CoverageResult } from './core/CoverageAnalyzer.js';
78
+
79
+ // Hash utilities
80
+ export { calculateFileHash, calculateFileHashAsync, calculateContentHash } from './core/HashUtils.js';
81
+
82
+ // Type validation and path validation
83
+ export {
84
+ levenshtein,
85
+ checkTypoAgainstKnownTypes,
86
+ resetKnownNodeTypes,
87
+ getKnownNodeTypes
88
+ } from './storage/backends/typeValidation.js';
89
+ export { PathValidator } from './validation/PathValidator.js';
90
+ export type { PathValidationResult, EndpointDiff } from './validation/PathValidator.js';
91
+
92
+ // Version management
93
+ export { VersionManager, versionManager } from './core/VersionManager.js';
94
+ export type { VersionedNode, VersionConstants, EnrichOptions, ModifiedNodeInfo, ChangesSummary, ClassifyChangesResult } from './core/VersionManager.js';
95
+
96
+ // Freshness checking and incremental reanalysis
97
+ export { GraphFreshnessChecker } from './core/GraphFreshnessChecker.js';
98
+ export type { FreshnessGraph, FreshnessResult, StaleModule } from './core/GraphFreshnessChecker.js';
99
+ export { IncrementalReanalyzer } from './core/IncrementalReanalyzer.js';
100
+ export type { ReanalysisOptions, ReanalysisProgress, ReanalysisResult } from './core/IncrementalReanalyzer.js';
36
101
 
37
102
  // API
38
103
  export { GraphAPI } from './api/GraphAPI.js';
@@ -42,13 +107,64 @@ export type { GuaranteeGraphBackend } from './api/GuaranteeAPI.js';
42
107
  // Node kinds
43
108
  export { isGuaranteeType } from './core/nodes/NodeKind.js';
44
109
 
110
+ // Issue nodes (detected problems)
111
+ export { IssueNode, type IssueNodeRecord, type IssueSeverity, type IssueType } from './core/nodes/IssueNode.js';
112
+
113
+ // Node contracts
114
+ export { FunctionNode } from './core/nodes/FunctionNode.js';
115
+ export { CallSiteNode } from './core/nodes/CallSiteNode.js';
116
+ export { MethodCallNode } from './core/nodes/MethodCallNode.js';
117
+ export { ScopeNode } from './core/nodes/ScopeNode.js';
118
+ export { ClassNode } from './core/nodes/ClassNode.js';
119
+ export { MethodNode } from './core/nodes/MethodNode.js';
120
+ export { ExportNode } from './core/nodes/ExportNode.js';
121
+ export { VariableDeclarationNode } from './core/nodes/VariableDeclarationNode.js';
122
+ export { ExternalModuleNode } from './core/nodes/ExternalModuleNode.js';
123
+ export { NetworkRequestNode } from './core/nodes/NetworkRequestNode.js';
124
+ export { InterfaceNode, type InterfacePropertyRecord } from './core/nodes/InterfaceNode.js';
125
+ export { TypeNode } from './core/nodes/TypeNode.js';
126
+ export { EnumNode, type EnumMemberRecord } from './core/nodes/EnumNode.js';
127
+ export { DecoratorNode, type DecoratorTargetType } from './core/nodes/DecoratorNode.js';
128
+ export { ExpressionNode, type ExpressionNodeOptions } from './core/nodes/ExpressionNode.js';
129
+ export { ArgumentExpressionNode, type ArgumentExpressionNodeRecord, type ArgumentExpressionNodeOptions } from './core/nodes/ArgumentExpressionNode.js';
130
+
131
+ // AST Visitors (for advanced usage)
132
+ export {
133
+ ASTVisitor,
134
+ ImportExportVisitor,
135
+ VariableVisitor,
136
+ FunctionVisitor,
137
+ ClassVisitor,
138
+ CallExpressionVisitor,
139
+ TypeScriptVisitor
140
+ } from './plugins/analysis/ast/visitors/index.js';
141
+ export type {
142
+ VisitorModule,
143
+ VisitorCollections,
144
+ VisitorHandlers,
145
+ VisitorHandler,
146
+ VariableInfo,
147
+ ExtractVariableNamesCallback,
148
+ TrackVariableAssignmentCallback,
149
+ AnalyzeFunctionBodyCallback
150
+ } from './plugins/analysis/ast/visitors/index.js';
151
+
152
+ // AST Location utilities (REG-122)
153
+ export {
154
+ getNodeLocation,
155
+ getLine,
156
+ getColumn,
157
+ getEndLocation,
158
+ UNKNOWN_LOCATION
159
+ } from './plugins/analysis/ast/utils/location.js';
160
+ export type { NodeLocation } from './plugins/analysis/ast/utils/location.js';
161
+
45
162
  // === PLUGINS ===
46
163
 
47
164
  // Indexing plugins
48
165
  export { JSModuleIndexer } from './plugins/indexing/JSModuleIndexer.js';
49
166
  export { IncrementalModuleIndexer } from './plugins/indexing/IncrementalModuleIndexer.js';
50
167
  export { RustModuleIndexer } from './plugins/indexing/RustModuleIndexer.js';
51
- export { ServiceDetector } from './plugins/indexing/ServiceDetector.js';
52
168
 
53
169
  // Analysis plugins
54
170
  export { JSASTAnalyzer } from './plugins/analysis/JSASTAnalyzer.js';
@@ -83,11 +199,42 @@ export { ShadowingDetector } from './plugins/validation/ShadowingDetector.js';
83
199
  export { GraphConnectivityValidator } from './plugins/validation/GraphConnectivityValidator.js';
84
200
  export { DataFlowValidator } from './plugins/validation/DataFlowValidator.js';
85
201
  export { TypeScriptDeadCodeValidator } from './plugins/validation/TypeScriptDeadCodeValidator.js';
202
+ export { NodeCreationValidator } from './plugins/validation/NodeCreationValidator.js';
86
203
 
87
204
  // Discovery plugins
88
205
  export { SimpleProjectDiscovery } from './plugins/discovery/SimpleProjectDiscovery.js';
89
206
  export { DiscoveryPlugin } from './plugins/discovery/DiscoveryPlugin.js';
90
207
  export { MonorepoServiceDiscovery } from './plugins/discovery/MonorepoServiceDiscovery.js';
208
+ export { WorkspaceDiscovery } from './plugins/discovery/WorkspaceDiscovery.js';
209
+ export { resolveSourceEntrypoint } from './plugins/discovery/resolveSourceEntrypoint.js';
210
+ export type { PackageJsonForResolution } from './plugins/discovery/resolveSourceEntrypoint.js';
211
+
212
+ // Workspace detection utilities
213
+ export {
214
+ detectWorkspaceType,
215
+ parsePnpmWorkspace,
216
+ parseNpmWorkspace,
217
+ parseLernaConfig,
218
+ resolveWorkspacePackages
219
+ } from './plugins/discovery/workspaces/index.js';
220
+ export type {
221
+ WorkspaceType,
222
+ WorkspaceDetectionResult,
223
+ WorkspaceConfig,
224
+ WorkspacePackage
225
+ } from './plugins/discovery/workspaces/index.js';
226
+
227
+ // VCS plugins
228
+ export { GitPlugin } from './plugins/vcs/GitPlugin.js';
229
+ export { VCSPlugin, VCSPluginFactory, FileStatus } from './plugins/vcs/VCSPlugin.js';
230
+ export type {
231
+ VCSConfig,
232
+ VCSPluginMetadata,
233
+ ChangedFile,
234
+ FileDiff,
235
+ DiffHunk,
236
+ } from './plugins/vcs/VCSPlugin.js';
237
+ export type { CommitInfo } from './plugins/vcs/GitPlugin.js';
91
238
 
92
239
  // Re-export types for convenience
93
240
  export type * from '@grafema/types';
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Logger - Lightweight logging for Grafema
3
+ *
4
+ * Features:
5
+ * - 5 log levels: silent, errors, warnings, info, debug
6
+ * - Context support for structured logging
7
+ * - No external dependencies
8
+ * - Safe handling of circular references
9
+ *
10
+ * Usage:
11
+ * const logger = createLogger('info');
12
+ * logger.info('Processing files', { count: 150 });
13
+ */
14
+
15
+ /**
16
+ * Log level type
17
+ */
18
+ export type LogLevel = 'silent' | 'errors' | 'warnings' | 'info' | 'debug';
19
+
20
+ /**
21
+ * Logger interface
22
+ */
23
+ export interface Logger {
24
+ error(message: string, context?: Record<string, unknown>): void;
25
+ warn(message: string, context?: Record<string, unknown>): void;
26
+ info(message: string, context?: Record<string, unknown>): void;
27
+ debug(message: string, context?: Record<string, unknown>): void;
28
+ trace(message: string, context?: Record<string, unknown>): void;
29
+ }
30
+
31
+ /**
32
+ * Log level priorities (higher = more verbose)
33
+ */
34
+ const LOG_LEVEL_PRIORITY: Record<LogLevel, number> = {
35
+ silent: 0,
36
+ errors: 1,
37
+ warnings: 2,
38
+ info: 3,
39
+ debug: 4,
40
+ };
41
+
42
+ /**
43
+ * Minimum level required for each method
44
+ */
45
+ const METHOD_LEVELS = {
46
+ error: LOG_LEVEL_PRIORITY.errors,
47
+ warn: LOG_LEVEL_PRIORITY.warnings,
48
+ info: LOG_LEVEL_PRIORITY.info,
49
+ debug: LOG_LEVEL_PRIORITY.debug,
50
+ trace: LOG_LEVEL_PRIORITY.debug,
51
+ };
52
+
53
+ /**
54
+ * Safe JSON stringify that handles circular references
55
+ */
56
+ function safeStringify(obj: unknown): string {
57
+ const seen = new WeakSet();
58
+ return JSON.stringify(obj, (_key, value) => {
59
+ if (typeof value === 'object' && value !== null) {
60
+ if (seen.has(value)) {
61
+ return '[Circular]';
62
+ }
63
+ seen.add(value);
64
+ }
65
+ return value;
66
+ });
67
+ }
68
+
69
+ /**
70
+ * Format log message with optional context
71
+ */
72
+ function formatMessage(message: string, context?: Record<string, unknown>): string {
73
+ if (!context || Object.keys(context).length === 0) {
74
+ return message;
75
+ }
76
+ try {
77
+ return `${message} ${safeStringify(context)}`;
78
+ } catch {
79
+ return `${message} [context serialization failed]`;
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Console-based Logger implementation
85
+ *
86
+ * Respects log level threshold - methods below threshold are no-ops.
87
+ */
88
+ export class ConsoleLogger implements Logger {
89
+ private readonly level: LogLevel;
90
+ private readonly priority: number;
91
+
92
+ constructor(logLevel: LogLevel = 'info') {
93
+ this.level = logLevel;
94
+ this.priority = LOG_LEVEL_PRIORITY[logLevel];
95
+ }
96
+
97
+ private shouldLog(methodLevel: number): boolean {
98
+ return this.priority >= methodLevel;
99
+ }
100
+
101
+ error(message: string, context?: Record<string, unknown>): void {
102
+ if (!this.shouldLog(METHOD_LEVELS.error)) return;
103
+ try {
104
+ console.error(formatMessage(`[ERROR] ${message}`, context));
105
+ } catch {
106
+ console.log(`[ERROR] ${message} [logging failed]`);
107
+ }
108
+ }
109
+
110
+ warn(message: string, context?: Record<string, unknown>): void {
111
+ if (!this.shouldLog(METHOD_LEVELS.warn)) return;
112
+ try {
113
+ console.warn(formatMessage(`[WARN] ${message}`, context));
114
+ } catch {
115
+ console.log(`[WARN] ${message} [logging failed]`);
116
+ }
117
+ }
118
+
119
+ info(message: string, context?: Record<string, unknown>): void {
120
+ if (!this.shouldLog(METHOD_LEVELS.info)) return;
121
+ try {
122
+ console.info(formatMessage(`[INFO] ${message}`, context));
123
+ } catch {
124
+ console.log(`[INFO] ${message} [logging failed]`);
125
+ }
126
+ }
127
+
128
+ debug(message: string, context?: Record<string, unknown>): void {
129
+ if (!this.shouldLog(METHOD_LEVELS.debug)) return;
130
+ try {
131
+ console.debug(formatMessage(`[DEBUG] ${message}`, context));
132
+ } catch {
133
+ console.log(`[DEBUG] ${message} [logging failed]`);
134
+ }
135
+ }
136
+
137
+ trace(message: string, context?: Record<string, unknown>): void {
138
+ if (!this.shouldLog(METHOD_LEVELS.trace)) return;
139
+ try {
140
+ console.debug(formatMessage(`[TRACE] ${message}`, context));
141
+ } catch {
142
+ console.log(`[TRACE] ${message} [logging failed]`);
143
+ }
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Create a Logger instance with the specified log level
149
+ */
150
+ export function createLogger(level: LogLevel): Logger {
151
+ return new ConsoleLogger(level);
152
+ }
@@ -14,6 +14,7 @@ import type {
14
14
  PluginResult,
15
15
  IPlugin,
16
16
  NodeFilter,
17
+ Logger,
17
18
  } from '@grafema/types';
18
19
  import type { NodeRecord } from '@grafema/types';
19
20
 
@@ -71,4 +72,45 @@ export abstract class Plugin implements IPlugin {
71
72
  }
72
73
  return modules;
73
74
  }
75
+
76
+ /**
77
+ * Get a logger from context with console fallback for backward compatibility.
78
+ */
79
+ protected log(context: PluginContext): Logger {
80
+ if (context.logger) {
81
+ return context.logger;
82
+ }
83
+
84
+ // Fallback to console for backward compatibility
85
+ const safeStringify = (obj: Record<string, unknown>): string => {
86
+ try {
87
+ const seen = new WeakSet();
88
+ return JSON.stringify(obj, (_key, value) => {
89
+ if (typeof value === 'object' && value !== null) {
90
+ if (seen.has(value)) return '[Circular]';
91
+ seen.add(value);
92
+ }
93
+ return value;
94
+ });
95
+ } catch {
96
+ return '[serialization failed]';
97
+ }
98
+ };
99
+
100
+ const format = (msg: string, ctx?: Record<string, unknown>) =>
101
+ ctx ? `${msg} ${safeStringify(ctx)}` : msg;
102
+
103
+ return {
104
+ error: (msg: string, ctx?: Record<string, unknown>) =>
105
+ console.error(`[ERROR] ${format(msg, ctx)}`),
106
+ warn: (msg: string, ctx?: Record<string, unknown>) =>
107
+ console.warn(`[WARN] ${format(msg, ctx)}`),
108
+ info: (msg: string, ctx?: Record<string, unknown>) =>
109
+ console.log(`[INFO] ${format(msg, ctx)}`),
110
+ debug: (msg: string, ctx?: Record<string, unknown>) =>
111
+ console.debug(`[DEBUG] ${format(msg, ctx)}`),
112
+ trace: (msg: string, ctx?: Record<string, unknown>) =>
113
+ console.debug(`[TRACE] ${format(msg, ctx)}`),
114
+ };
115
+ }
74
116
  }