@grafema/core 0.1.1-alpha → 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 (319) hide show
  1. package/dist/Orchestrator.d.ts +7 -0
  2. package/dist/Orchestrator.d.ts.map +1 -1
  3. package/dist/Orchestrator.js +25 -3
  4. package/dist/config/ConfigLoader.d.ts +18 -0
  5. package/dist/config/ConfigLoader.d.ts.map +1 -1
  6. package/dist/config/ConfigLoader.js +65 -3
  7. package/dist/core/FileExplainer.d.ts +101 -0
  8. package/dist/core/FileExplainer.d.ts.map +1 -0
  9. package/dist/core/FileExplainer.js +139 -0
  10. package/dist/core/NodeFactory.d.ts +44 -5
  11. package/dist/core/NodeFactory.d.ts.map +1 -1
  12. package/dist/core/NodeFactory.js +52 -7
  13. package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -1
  14. package/dist/core/nodes/ArrayLiteralNode.js +4 -2
  15. package/dist/core/nodes/BranchNode.d.ts +41 -0
  16. package/dist/core/nodes/BranchNode.d.ts.map +1 -0
  17. package/dist/core/nodes/BranchNode.js +82 -0
  18. package/dist/core/nodes/CallSiteNode.d.ts +2 -2
  19. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
  20. package/dist/core/nodes/CallSiteNode.js +9 -5
  21. package/dist/core/nodes/CaseNode.d.ts +43 -0
  22. package/dist/core/nodes/CaseNode.d.ts.map +1 -0
  23. package/dist/core/nodes/CaseNode.js +81 -0
  24. package/dist/core/nodes/ClassNode.d.ts +2 -2
  25. package/dist/core/nodes/ClassNode.d.ts.map +1 -1
  26. package/dist/core/nodes/ClassNode.js +8 -4
  27. package/dist/core/nodes/ConstantNode.d.ts +2 -2
  28. package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
  29. package/dist/core/nodes/ConstantNode.js +6 -4
  30. package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
  31. package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
  32. package/dist/core/nodes/ConstructorCallNode.js +171 -0
  33. package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
  34. package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
  35. package/dist/core/nodes/DatabaseQueryNode.js +5 -2
  36. package/dist/core/nodes/DecoratorNode.d.ts +2 -2
  37. package/dist/core/nodes/DecoratorNode.d.ts.map +1 -1
  38. package/dist/core/nodes/DecoratorNode.js +5 -3
  39. package/dist/core/nodes/EnumNode.d.ts +2 -2
  40. package/dist/core/nodes/EnumNode.d.ts.map +1 -1
  41. package/dist/core/nodes/EnumNode.js +5 -3
  42. package/dist/core/nodes/EventListenerNode.d.ts +4 -4
  43. package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
  44. package/dist/core/nodes/EventListenerNode.js +7 -4
  45. package/dist/core/nodes/ExportNode.d.ts +2 -2
  46. package/dist/core/nodes/ExportNode.d.ts.map +1 -1
  47. package/dist/core/nodes/ExportNode.js +8 -4
  48. package/dist/core/nodes/ExpressionNode.d.ts +2 -2
  49. package/dist/core/nodes/ExpressionNode.d.ts.map +1 -1
  50. package/dist/core/nodes/ExpressionNode.js +6 -4
  51. package/dist/core/nodes/ExternalModuleNode.d.ts +4 -0
  52. package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -1
  53. package/dist/core/nodes/ExternalModuleNode.js +10 -2
  54. package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
  55. package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
  56. package/dist/core/nodes/HttpRequestNode.js +7 -4
  57. package/dist/core/nodes/ImportNode.d.ts +10 -2
  58. package/dist/core/nodes/ImportNode.d.ts.map +1 -1
  59. package/dist/core/nodes/ImportNode.js +21 -4
  60. package/dist/core/nodes/InterfaceNode.d.ts +2 -2
  61. package/dist/core/nodes/InterfaceNode.d.ts.map +1 -1
  62. package/dist/core/nodes/InterfaceNode.js +5 -3
  63. package/dist/core/nodes/LiteralNode.d.ts +2 -2
  64. package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
  65. package/dist/core/nodes/LiteralNode.js +6 -4
  66. package/dist/core/nodes/MethodCallNode.d.ts +2 -2
  67. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
  68. package/dist/core/nodes/MethodCallNode.js +9 -5
  69. package/dist/core/nodes/MethodNode.d.ts +2 -2
  70. package/dist/core/nodes/MethodNode.d.ts.map +1 -1
  71. package/dist/core/nodes/MethodNode.js +8 -4
  72. package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -1
  73. package/dist/core/nodes/ObjectLiteralNode.js +4 -2
  74. package/dist/core/nodes/ParameterNode.d.ts +2 -2
  75. package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
  76. package/dist/core/nodes/ParameterNode.js +5 -3
  77. package/dist/core/nodes/TypeNode.d.ts +2 -2
  78. package/dist/core/nodes/TypeNode.d.ts.map +1 -1
  79. package/dist/core/nodes/TypeNode.js +5 -3
  80. package/dist/core/nodes/VariableDeclarationNode.d.ts +2 -2
  81. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
  82. package/dist/core/nodes/VariableDeclarationNode.js +9 -5
  83. package/dist/core/nodes/index.d.ts +3 -0
  84. package/dist/core/nodes/index.d.ts.map +1 -1
  85. package/dist/core/nodes/index.js +3 -0
  86. package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
  87. package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
  88. package/dist/data/builtins/BuiltinRegistry.js +110 -0
  89. package/dist/data/builtins/definitions.d.ts +28 -0
  90. package/dist/data/builtins/definitions.d.ts.map +1 -0
  91. package/dist/data/builtins/definitions.js +250 -0
  92. package/dist/data/builtins/index.d.ts +10 -0
  93. package/dist/data/builtins/index.d.ts.map +1 -0
  94. package/dist/data/builtins/index.js +8 -0
  95. package/dist/data/builtins/jsGlobals.d.ts +18 -0
  96. package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
  97. package/dist/data/builtins/jsGlobals.js +26 -0
  98. package/dist/data/builtins/types.d.ts +34 -0
  99. package/dist/data/builtins/types.d.ts.map +1 -0
  100. package/dist/data/builtins/types.js +7 -0
  101. package/dist/data/globals/definitions.d.ts +27 -0
  102. package/dist/data/globals/definitions.d.ts.map +1 -0
  103. package/dist/data/globals/definitions.js +117 -0
  104. package/dist/data/globals/index.d.ts +36 -0
  105. package/dist/data/globals/index.d.ts.map +1 -0
  106. package/dist/data/globals/index.js +52 -0
  107. package/dist/diagnostics/DiagnosticReporter.d.ts +23 -0
  108. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -1
  109. package/dist/diagnostics/DiagnosticReporter.js +88 -0
  110. package/dist/diagnostics/index.d.ts +1 -1
  111. package/dist/diagnostics/index.d.ts.map +1 -1
  112. package/dist/errors/GrafemaError.d.ts +43 -0
  113. package/dist/errors/GrafemaError.d.ts.map +1 -1
  114. package/dist/errors/GrafemaError.js +50 -0
  115. package/dist/index.d.ts +17 -1
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +17 -1
  118. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  119. package/dist/plugins/analysis/DatabaseAnalyzer.js +3 -2
  120. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  121. package/dist/plugins/analysis/ExpressAnalyzer.js +3 -1
  122. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
  123. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
  124. package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
  125. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  126. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +53 -18
  127. package/dist/plugins/analysis/FetchAnalyzer.d.ts +40 -0
  128. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  129. package/dist/plugins/analysis/FetchAnalyzer.js +163 -15
  130. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +157 -26
  131. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  132. package/dist/plugins/analysis/JSASTAnalyzer.js +2418 -191
  133. package/dist/plugins/analysis/RustAnalyzer.js +4 -4
  134. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  135. package/dist/plugins/analysis/SQLiteAnalyzer.js +4 -2
  136. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
  137. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  138. package/dist/plugins/analysis/SocketIOAnalyzer.js +91 -7
  139. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +173 -0
  140. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  141. package/dist/plugins/analysis/ast/GraphBuilder.js +1256 -65
  142. package/dist/plugins/analysis/ast/types.d.ts +294 -0
  143. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  144. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +5 -1
  145. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  146. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +1 -0
  147. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  148. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +12 -1
  149. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +10 -0
  150. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  151. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +62 -0
  152. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
  153. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
  154. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +101 -0
  155. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +16 -1
  156. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  157. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +233 -39
  158. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -1
  159. package/dist/plugins/discovery/WorkspaceDiscovery.js +9 -4
  160. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  161. package/dist/plugins/enrichment/AliasTracker.js +16 -1
  162. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
  163. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
  164. package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
  165. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
  166. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
  167. package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
  168. package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
  169. package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
  170. package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
  171. package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
  172. package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
  173. package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
  174. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
  175. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  176. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +64 -20
  177. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  178. package/dist/plugins/enrichment/MethodCallResolver.js +15 -1
  179. package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
  180. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  181. package/dist/plugins/enrichment/MountPointResolver.js +172 -151
  182. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
  183. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
  184. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
  185. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +5 -27
  186. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  187. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +62 -139
  188. package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
  189. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  190. package/dist/plugins/indexing/JSModuleIndexer.js +58 -0
  191. package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
  192. package/dist/plugins/indexing/RustModuleIndexer.js +4 -4
  193. package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
  194. package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
  195. package/dist/plugins/validation/BrokenImportValidator.js +249 -0
  196. package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
  197. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  198. package/dist/plugins/validation/CallResolverValidator.js +101 -76
  199. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
  200. package/dist/plugins/validation/DataFlowValidator.js +49 -41
  201. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  202. package/dist/plugins/validation/GraphConnectivityValidator.js +25 -1
  203. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  204. package/dist/plugins/validation/SQLInjectionValidator.js +2 -3
  205. package/dist/queries/findCallsInFunction.d.ts +52 -0
  206. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  207. package/dist/queries/findCallsInFunction.js +135 -0
  208. package/dist/queries/findContainingFunction.d.ts +45 -0
  209. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  210. package/dist/queries/findContainingFunction.js +54 -0
  211. package/dist/queries/index.d.ts +14 -0
  212. package/dist/queries/index.d.ts.map +1 -0
  213. package/dist/queries/index.js +11 -0
  214. package/dist/queries/traceValues.d.ts +70 -0
  215. package/dist/queries/traceValues.d.ts.map +1 -0
  216. package/dist/queries/traceValues.js +299 -0
  217. package/dist/queries/types.d.ts +163 -0
  218. package/dist/queries/types.d.ts.map +1 -0
  219. package/dist/queries/types.js +9 -0
  220. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  221. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  222. package/dist/schema/GraphSchemaExtractor.js +124 -0
  223. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  224. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  225. package/dist/schema/InterfaceSchemaExtractor.js +112 -0
  226. package/dist/schema/index.d.ts +5 -0
  227. package/dist/schema/index.d.ts.map +1 -0
  228. package/dist/schema/index.js +2 -0
  229. package/dist/storage/backends/RFDBServerBackend.d.ts +12 -18
  230. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  231. package/dist/storage/backends/RFDBServerBackend.js +41 -52
  232. package/dist/storage/backends/typeValidation.d.ts.map +1 -1
  233. package/dist/storage/backends/typeValidation.js +1 -0
  234. package/package.json +3 -3
  235. package/src/Orchestrator.ts +35 -3
  236. package/src/config/ConfigLoader.ts +94 -3
  237. package/src/core/FileExplainer.ts +179 -0
  238. package/src/core/NodeFactory.ts +72 -8
  239. package/src/core/nodes/ArrayLiteralNode.ts +3 -2
  240. package/src/core/nodes/BranchNode.ts +113 -0
  241. package/src/core/nodes/CallSiteNode.ts +7 -5
  242. package/src/core/nodes/CaseNode.ts +123 -0
  243. package/src/core/nodes/ClassNode.ts +6 -4
  244. package/src/core/nodes/ConstantNode.ts +5 -4
  245. package/src/core/nodes/ConstructorCallNode.ts +217 -0
  246. package/src/core/nodes/DatabaseQueryNode.ts +5 -1
  247. package/src/core/nodes/DecoratorNode.ts +4 -3
  248. package/src/core/nodes/EnumNode.ts +4 -3
  249. package/src/core/nodes/EventListenerNode.ts +7 -4
  250. package/src/core/nodes/ExportNode.ts +6 -4
  251. package/src/core/nodes/ExpressionNode.ts +5 -4
  252. package/src/core/nodes/ExternalModuleNode.ts +11 -2
  253. package/src/core/nodes/HttpRequestNode.ts +7 -4
  254. package/src/core/nodes/ImportNode.ts +31 -4
  255. package/src/core/nodes/InterfaceNode.ts +4 -3
  256. package/src/core/nodes/LiteralNode.ts +5 -4
  257. package/src/core/nodes/MethodCallNode.ts +7 -5
  258. package/src/core/nodes/MethodNode.ts +6 -4
  259. package/src/core/nodes/ObjectLiteralNode.ts +3 -2
  260. package/src/core/nodes/ParameterNode.ts +4 -3
  261. package/src/core/nodes/TypeNode.ts +4 -3
  262. package/src/core/nodes/VariableDeclarationNode.ts +7 -5
  263. package/src/core/nodes/index.ts +3 -0
  264. package/src/data/builtins/BuiltinRegistry.ts +124 -0
  265. package/src/data/builtins/definitions.ts +267 -0
  266. package/src/data/builtins/index.ts +10 -0
  267. package/src/data/builtins/jsGlobals.ts +28 -0
  268. package/src/data/builtins/types.ts +36 -0
  269. package/src/data/globals/definitions.ts +156 -0
  270. package/src/data/globals/index.ts +66 -0
  271. package/src/diagnostics/DiagnosticReporter.ts +120 -0
  272. package/src/diagnostics/index.ts +1 -1
  273. package/src/errors/GrafemaError.ts +65 -0
  274. package/src/index.ts +45 -0
  275. package/src/plugins/analysis/DatabaseAnalyzer.ts +4 -2
  276. package/src/plugins/analysis/ExpressAnalyzer.ts +5 -1
  277. package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
  278. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +57 -18
  279. package/src/plugins/analysis/FetchAnalyzer.ts +204 -16
  280. package/src/plugins/analysis/JSASTAnalyzer.ts +2958 -260
  281. package/src/plugins/analysis/RustAnalyzer.ts +4 -4
  282. package/src/plugins/analysis/SQLiteAnalyzer.ts +5 -2
  283. package/src/plugins/analysis/SocketIOAnalyzer.ts +121 -7
  284. package/src/plugins/analysis/ast/GraphBuilder.ts +1578 -70
  285. package/src/plugins/analysis/ast/types.ts +387 -0
  286. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +8 -0
  287. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +16 -1
  288. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +77 -2
  289. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +112 -1
  290. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +272 -47
  291. package/src/plugins/discovery/WorkspaceDiscovery.ts +11 -4
  292. package/src/plugins/enrichment/AliasTracker.ts +22 -1
  293. package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
  294. package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
  295. package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
  296. package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
  297. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +70 -20
  298. package/src/plugins/enrichment/MethodCallResolver.ts +21 -1
  299. package/src/plugins/enrichment/MountPointResolver.ts +206 -198
  300. package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
  301. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +67 -184
  302. package/src/plugins/indexing/JSModuleIndexer.ts +66 -0
  303. package/src/plugins/indexing/RustModuleIndexer.ts +4 -4
  304. package/src/plugins/validation/BrokenImportValidator.ts +325 -0
  305. package/src/plugins/validation/CallResolverValidator.ts +129 -109
  306. package/src/plugins/validation/DataFlowValidator.ts +75 -58
  307. package/src/plugins/validation/GraphConnectivityValidator.ts +39 -1
  308. package/src/plugins/validation/SQLInjectionValidator.ts +2 -5
  309. package/src/queries/README.md +46 -0
  310. package/src/queries/findCallsInFunction.ts +206 -0
  311. package/src/queries/findContainingFunction.ts +83 -0
  312. package/src/queries/index.ts +23 -0
  313. package/src/queries/traceValues.ts +398 -0
  314. package/src/queries/types.ts +187 -0
  315. package/src/schema/GraphSchemaExtractor.ts +177 -0
  316. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  317. package/src/schema/index.ts +5 -0
  318. package/src/storage/backends/RFDBServerBackend.ts +58 -70
  319. package/src/storage/backends/typeValidation.ts +1 -0
@@ -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
+ }
@@ -14,6 +14,21 @@
14
14
 
15
15
  import type { Diagnostic, DiagnosticCollector } from './DiagnosticCollector.js';
16
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
+
17
32
  /**
18
33
  * Report output options
19
34
  */
@@ -34,6 +49,23 @@ export interface SummaryStats {
34
49
  info: number;
35
50
  }
36
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
+
37
69
  /**
38
70
  * DiagnosticReporter - formats diagnostics for different output formats
39
71
  */
@@ -80,6 +112,51 @@ export class DiagnosticReporter {
80
112
  return parts.join(', ');
81
113
  }
82
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
+
83
160
  /**
84
161
  * Get diagnostic statistics by severity.
85
162
  */
@@ -94,6 +171,49 @@ export class DiagnosticReporter {
94
171
  };
95
172
  }
96
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
+
97
217
  /**
98
218
  * Generate human-readable text report.
99
219
  */
@@ -11,6 +11,6 @@ export { DiagnosticCollector } from './DiagnosticCollector.js';
11
11
  export type { Diagnostic, DiagnosticInput } from './DiagnosticCollector.js';
12
12
 
13
13
  export { DiagnosticReporter } from './DiagnosticReporter.js';
14
- export type { ReportOptions, SummaryStats } from './DiagnosticReporter.js';
14
+ export type { ReportOptions, SummaryStats, CategoryCount, CategorizedSummaryStats } from './DiagnosticReporter.js';
15
15
 
16
16
  export { DiagnosticWriter } from './DiagnosticWriter.js';
@@ -172,3 +172,68 @@ export class AnalysisError extends GrafemaError {
172
172
  this.code = code;
173
173
  }
174
174
  }
175
+
176
+ /**
177
+ * Validation error - issues found by validators during VALIDATION phase
178
+ *
179
+ * Unlike other error classes, ValidationError has CONFIGURABLE severity because
180
+ * validators report issues of varying importance:
181
+ * - warning: informational issues (unresolved calls, missing assignments)
182
+ * - error: problems that may indicate bugs (broken references)
183
+ * - fatal: critical issues that should fail the analysis
184
+ *
185
+ * Codes:
186
+ * - ERR_UNRESOLVED_CALL: function call doesn't resolve to definition
187
+ * - ERR_DISCONNECTED_NODES: graph nodes not connected to root
188
+ * - ERR_DISCONNECTED_NODE: individual disconnected node
189
+ * - ERR_MISSING_ASSIGNMENT: variable has no ASSIGNED_FROM edge
190
+ * - ERR_BROKEN_REFERENCE: reference to non-existent node
191
+ * - ERR_NO_LEAF_NODE: data flow doesn't reach leaf node
192
+ */
193
+ export class ValidationError extends GrafemaError {
194
+ readonly code: string;
195
+ readonly severity: 'fatal' | 'error' | 'warning';
196
+
197
+ constructor(
198
+ message: string,
199
+ code: string,
200
+ context: ErrorContext = {},
201
+ suggestion?: string,
202
+ severity: 'fatal' | 'error' | 'warning' = 'warning'
203
+ ) {
204
+ super(message, context, suggestion);
205
+ this.code = code;
206
+ this.severity = severity;
207
+ }
208
+ }
209
+
210
+ /**
211
+ * Strict mode error - reported when strictMode=true and an enricher
212
+ * cannot resolve a reference.
213
+ *
214
+ * Unlike other errors, StrictModeError is used to collect issues that
215
+ * would normally be silently skipped. All collected StrictModeErrors
216
+ * cause analysis to fail after the ENRICHMENT phase completes.
217
+ *
218
+ * Severity: fatal (always)
219
+ * Codes:
220
+ * - STRICT_UNRESOLVED_METHOD: Method call cannot be resolved to definition
221
+ * - STRICT_UNRESOLVED_CALL: Function call cannot be resolved to definition
222
+ * - STRICT_UNRESOLVED_ARGUMENT: Argument cannot be linked to parameter
223
+ * - STRICT_ALIAS_DEPTH_EXCEEDED: Alias chain too deep (potential cycle)
224
+ * - STRICT_BROKEN_IMPORT: Import/re-export chain broken
225
+ */
226
+ export class StrictModeError extends GrafemaError {
227
+ readonly code: string;
228
+ readonly severity = 'fatal' as const;
229
+
230
+ constructor(
231
+ message: string,
232
+ code: string,
233
+ context: ErrorContext = {},
234
+ suggestion?: string
235
+ ) {
236
+ super(message, context, suggestion);
237
+ this.code = code;
238
+ }
239
+ }
package/src/index.ts CHANGED
@@ -11,6 +11,8 @@ export {
11
11
  DatabaseError,
12
12
  PluginError,
13
13
  AnalysisError,
14
+ ValidationError,
15
+ StrictModeError,
14
16
  } from './errors/GrafemaError.js';
15
17
  export type { ErrorContext, GrafemaErrorJSON } from './errors/GrafemaError.js';
16
18
 
@@ -75,6 +77,8 @@ export type { GuaranteeGraph } from './core/GuaranteeManager.js';
75
77
  export { clearFileNodesIfNeeded, clearServiceNodeIfExists } from './core/FileNodeManager.js';
76
78
  export { CoverageAnalyzer } from './core/CoverageAnalyzer.js';
77
79
  export type { CoverageResult } from './core/CoverageAnalyzer.js';
80
+ export { FileExplainer } from './core/FileExplainer.js';
81
+ export type { FileExplainResult, EnhancedNode } from './core/FileExplainer.js';
78
82
 
79
83
  // Hash utilities
80
84
  export { calculateFileHash, calculateFileHashAsync, calculateContentHash } from './core/HashUtils.js';
@@ -169,6 +173,7 @@ export { RustModuleIndexer } from './plugins/indexing/RustModuleIndexer.js';
169
173
  // Analysis plugins
170
174
  export { JSASTAnalyzer } from './plugins/analysis/JSASTAnalyzer.js';
171
175
  export { ExpressRouteAnalyzer } from './plugins/analysis/ExpressRouteAnalyzer.js';
176
+ export { ExpressResponseAnalyzer } from './plugins/analysis/ExpressResponseAnalyzer.js';
172
177
  export { ExpressAnalyzer } from './plugins/analysis/ExpressAnalyzer.js';
173
178
  export { SocketIOAnalyzer } from './plugins/analysis/SocketIOAnalyzer.js';
174
179
  export { DatabaseAnalyzer } from './plugins/analysis/DatabaseAnalyzer.js';
@@ -182,6 +187,7 @@ export { IncrementalAnalysisPlugin } from './plugins/analysis/IncrementalAnalysi
182
187
 
183
188
  // Enrichment plugins
184
189
  export { MethodCallResolver } from './plugins/enrichment/MethodCallResolver.js';
190
+ export { ArgumentParameterLinker } from './plugins/enrichment/ArgumentParameterLinker.js';
185
191
  export { AliasTracker } from './plugins/enrichment/AliasTracker.js';
186
192
  export { ValueDomainAnalyzer } from './plugins/enrichment/ValueDomainAnalyzer.js';
187
193
  export { MountPointResolver } from './plugins/enrichment/MountPointResolver.js';
@@ -189,7 +195,18 @@ export { PrefixEvaluator } from './plugins/enrichment/PrefixEvaluator.js';
189
195
  export { InstanceOfResolver } from './plugins/enrichment/InstanceOfResolver.js';
190
196
  export { HTTPConnectionEnricher } from './plugins/enrichment/HTTPConnectionEnricher.js';
191
197
  export { ImportExportLinker } from './plugins/enrichment/ImportExportLinker.js';
198
+ export { FunctionCallResolver } from './plugins/enrichment/FunctionCallResolver.js';
192
199
  export { RustFFIEnricher } from './plugins/enrichment/RustFFIEnricher.js';
200
+ export { NodejsBuiltinsResolver } from './plugins/enrichment/NodejsBuiltinsResolver.js';
201
+ export { ExternalCallResolver } from './plugins/enrichment/ExternalCallResolver.js';
202
+ export { ClosureCaptureEnricher } from './plugins/enrichment/ClosureCaptureEnricher.js';
203
+
204
+ // Builtin registry
205
+ export { BuiltinRegistry } from './data/builtins/index.js';
206
+ export type { BuiltinFunctionDef, BuiltinModuleDef, SecurityCategory } from './data/builtins/index.js';
207
+
208
+ // Globals registry
209
+ export { GlobalsRegistry, ALL_GLOBALS } from './data/globals/index.js';
193
210
 
194
211
  // Validation plugins
195
212
  export { CallResolverValidator } from './plugins/validation/CallResolverValidator.js';
@@ -200,6 +217,7 @@ export { GraphConnectivityValidator } from './plugins/validation/GraphConnectivi
200
217
  export { DataFlowValidator } from './plugins/validation/DataFlowValidator.js';
201
218
  export { TypeScriptDeadCodeValidator } from './plugins/validation/TypeScriptDeadCodeValidator.js';
202
219
  export { NodeCreationValidator } from './plugins/validation/NodeCreationValidator.js';
220
+ export { BrokenImportValidator } from './plugins/validation/BrokenImportValidator.js';
203
221
 
204
222
  // Discovery plugins
205
223
  export { SimpleProjectDiscovery } from './plugins/discovery/SimpleProjectDiscovery.js';
@@ -236,5 +254,32 @@ export type {
236
254
  } from './plugins/vcs/VCSPlugin.js';
237
255
  export type { CommitInfo } from './plugins/vcs/GitPlugin.js';
238
256
 
257
+ // Schema extraction
258
+ export { InterfaceSchemaExtractor, GraphSchemaExtractor } from './schema/index.js';
259
+ export type {
260
+ InterfaceSchema,
261
+ PropertySchema,
262
+ ExtractOptions,
263
+ GraphSchema,
264
+ NodeTypeSchema,
265
+ EdgeTypeSchema,
266
+ GraphExtractOptions,
267
+ } from './schema/index.js';
268
+
269
+ // Graph Query Utilities
270
+ export { findCallsInFunction, findContainingFunction, traceValues, aggregateValues, NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS } from './queries/index.js';
271
+ export type {
272
+ CallInfo,
273
+ CallerInfo,
274
+ FindCallsOptions,
275
+ TracedValue,
276
+ ValueSource,
277
+ UnknownReason,
278
+ TraceValuesOptions,
279
+ ValueSetResult,
280
+ TraceValuesGraphBackend,
281
+ NondeterministicPattern,
282
+ } from './queries/index.js';
283
+
239
284
  // Re-export types for convenience
240
285
  export type * from '@grafema/types';
@@ -11,7 +11,7 @@ import type { NodePath } from '@babel/traverse';
11
11
  import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
12
12
  import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
13
13
  import type { NodeRecord } from '@grafema/types';
14
- import { getLine } from './ast/utils/location.js';
14
+ import { getLine, getColumn } from './ast/utils/location.js';
15
15
 
16
16
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
17
  const traverse = (traverseModule as any).default || traverseModule;
@@ -30,6 +30,7 @@ interface DatabaseQueryNode {
30
30
  method: string;
31
31
  file: string;
32
32
  line: number;
33
+ column: number;
33
34
  }
34
35
 
35
36
  /**
@@ -224,7 +225,8 @@ export class DatabaseAnalyzer extends Plugin {
224
225
  object: objectName,
225
226
  method: methodName,
226
227
  file: module.file!,
227
- line: getLine(node)
228
+ line: getLine(node),
229
+ column: getColumn(node)
228
230
  });
229
231
  }
230
232
  }
@@ -13,7 +13,7 @@ import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
13
13
  import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
14
14
  import type { NodeRecord } from '@grafema/types';
15
15
  import { NetworkRequestNode } from '../../core/nodes/NetworkRequestNode.js';
16
- import { getLine } from './ast/utils/location.js';
16
+ import { getLine, getColumn } from './ast/utils/location.js';
17
17
 
18
18
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
19
  const traverse = (traverseModule as any).default || traverseModule;
@@ -29,6 +29,7 @@ interface EndpointNode {
29
29
  localPath: string;
30
30
  file: string;
31
31
  line: number;
32
+ column: number;
32
33
  mountedOn: string;
33
34
  }
34
35
 
@@ -43,6 +44,7 @@ interface MountPointNode {
43
44
  targetVariable: string | null;
44
45
  file: string;
45
46
  line: number;
47
+ column: number;
46
48
  mountedOn: string;
47
49
  }
48
50
 
@@ -210,6 +212,7 @@ export class ExpressAnalyzer extends Plugin {
210
212
  localPath: routePath,
211
213
  file: module.file!,
212
214
  line: getLine(node),
215
+ column: getColumn(node),
213
216
  mountedOn: objectName
214
217
  });
215
218
  }
@@ -287,6 +290,7 @@ export class ExpressAnalyzer extends Plugin {
287
290
  targetVariable: targetVariable,
288
291
  file: module.file!,
289
292
  line: getLine(node),
293
+ column: getColumn(node),
290
294
  mountedOn: objectName
291
295
  });
292
296
  }