@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
@@ -5,6 +5,7 @@
5
5
  import { readFileSync, existsSync } from 'fs';
6
6
  import { join, resolve, dirname, relative, basename } from 'path';
7
7
  import { createHash } from 'crypto';
8
+ import { minimatch } from 'minimatch';
8
9
  import { Plugin, createErrorResult } from '../Plugin.js';
9
10
  // @ts-expect-error - no type declarations for node-source-walk
10
11
  import Walker from 'node-source-walk';
@@ -25,6 +26,10 @@ export class JSModuleIndexer extends Plugin {
25
26
  cache;
26
27
  testPatterns;
27
28
  markTestFiles;
29
+ // Include/exclude pattern filtering (REG-185)
30
+ includePatterns;
31
+ excludePatterns;
32
+ projectPath = '';
28
33
  constructor() {
29
34
  super();
30
35
  this.walker = new Walker({
@@ -42,6 +47,39 @@ export class JSModuleIndexer extends Plugin {
42
47
  return false;
43
48
  return this.testPatterns.some(pattern => pattern.test(filePath));
44
49
  }
50
+ /**
51
+ * Check if a file should be skipped based on include/exclude patterns.
52
+ *
53
+ * Logic:
54
+ * 1. If file matches any exclude pattern -> SKIP
55
+ * 2. If include patterns specified AND file doesn't match any -> SKIP
56
+ * 3. Otherwise -> PROCESS
57
+ *
58
+ * @param absolutePath - Absolute path to the file
59
+ * @returns true if file should be skipped, false if it should be processed
60
+ */
61
+ shouldSkipFile(absolutePath) {
62
+ // Normalize to relative path for pattern matching
63
+ const relativePath = relative(this.projectPath, absolutePath).replace(/\\/g, '/');
64
+ // Check exclude patterns first (if any match, skip)
65
+ if (this.excludePatterns && this.excludePatterns.length > 0) {
66
+ for (const pattern of this.excludePatterns) {
67
+ if (minimatch(relativePath, pattern, { dot: true })) {
68
+ return true; // Excluded
69
+ }
70
+ }
71
+ }
72
+ // Check include patterns (if specified, file must match at least one)
73
+ if (this.includePatterns && this.includePatterns.length > 0) {
74
+ for (const pattern of this.includePatterns) {
75
+ if (minimatch(relativePath, pattern, { dot: true })) {
76
+ return false; // Included
77
+ }
78
+ }
79
+ return true; // Include specified but file didn't match any
80
+ }
81
+ return false; // No filtering, process file
82
+ }
45
83
  get metadata() {
46
84
  return {
47
85
  name: 'JSModuleIndexer',
@@ -171,6 +209,19 @@ export class JSModuleIndexer extends Plugin {
171
209
  const service = manifest?.service ?? { id: '', name: '', path: '' };
172
210
  // Collect parse errors to report (REG-147)
173
211
  const parseErrors = [];
212
+ // Store projectPath for shouldSkipFile()
213
+ this.projectPath = projectPath;
214
+ // Read include/exclude patterns from config (REG-185)
215
+ const orchConfig = config;
216
+ this.includePatterns = orchConfig?.include;
217
+ this.excludePatterns = orchConfig?.exclude;
218
+ // Log if patterns are configured
219
+ if (this.includePatterns || this.excludePatterns) {
220
+ logger.info('File filtering enabled', {
221
+ include: this.includePatterns?.length ?? 0,
222
+ exclude: this.excludePatterns?.length ?? 0,
223
+ });
224
+ }
174
225
  // Check config for test file marking
175
226
  if (config?.analysis?.tests?.markTestFiles === false) {
176
227
  this.markTestFiles = false;
@@ -197,6 +248,13 @@ export class JSModuleIndexer extends Plugin {
197
248
  const PROGRESS_INTERVAL = 10; // Report every N files
198
249
  while (stack.length > 0 && visited.size < MAX_MODULES) {
199
250
  const { file: currentFile, depth } = stack.pop();
251
+ // Check if file should be skipped based on include/exclude patterns (REG-185)
252
+ if (this.shouldSkipFile(currentFile)) {
253
+ logger.debug('Skipping file (filtered by patterns)', {
254
+ file: currentFile.replace(projectPath, '')
255
+ });
256
+ continue; // Don't process, don't follow imports
257
+ }
200
258
  // Report progress every PROGRESS_INTERVAL files
201
259
  if (onProgress && visited.size - lastProgressReport >= PROGRESS_INTERVAL) {
202
260
  onProgress({
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * RustModuleIndexer - plugin for indexing Rust modules
3
- * Discovers .rs files in rust-engine/src/ directory
3
+ * Discovers .rs files in packages/rfdb-server/src/ directory
4
4
  */
5
5
  import { Plugin } from '../Plugin.js';
6
6
  import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * RustModuleIndexer - plugin for indexing Rust modules
3
- * Discovers .rs files in rust-engine/src/ directory
3
+ * Discovers .rs files in packages/rfdb-server/src/ directory
4
4
  */
5
5
  import { readFileSync, existsSync, readdirSync, statSync } from 'fs';
6
6
  import { resolve, relative, basename, join } from 'path';
@@ -89,10 +89,10 @@ export class RustModuleIndexer extends Plugin {
89
89
  // Cast manifest to expected shape
90
90
  const typedManifest = manifest;
91
91
  const { projectPath } = typedManifest;
92
- // Find rust-engine/src directory
93
- const rustRoot = resolve(projectPath, 'rust-engine/src');
92
+ // Find packages/rfdb-server/src directory
93
+ const rustRoot = resolve(projectPath, 'packages/rfdb-server/src');
94
94
  if (!existsSync(rustRoot)) {
95
- logger.info('rust-engine/src not found, skipping');
95
+ logger.info('packages/rfdb-server/src not found, skipping');
96
96
  return createSuccessResult({ nodes: 0, edges: 0 }, { skipped: true });
97
97
  }
98
98
  // Discover all .rs files recursively
@@ -0,0 +1,31 @@
1
+ /**
2
+ * BrokenImportValidator - detects broken imports and undefined symbols (REG-261)
3
+ *
4
+ * This VALIDATION plugin queries the graph (built by ANALYSIS and ENRICHMENT phases)
5
+ * to detect:
6
+ *
7
+ * 1. ERR_BROKEN_IMPORT: Named/default import references non-existent export
8
+ * - IMPORT node with relative source but no IMPORTS_FROM edge
9
+ * - Skips: external (npm) imports, namespace imports, type-only imports
10
+ *
11
+ * 2. ERR_UNDEFINED_SYMBOL: Symbol used but not defined, imported, or global
12
+ * - CALL node without CALLS edge
13
+ * - Not a method call (no `object` property)
14
+ * - Not a local definition (FUNCTION/CLASS/VARIABLE in same file)
15
+ * - Not an import (IMPORT with matching local name)
16
+ * - Not a known global (console, setTimeout, etc.)
17
+ *
18
+ * Architecture follows existing validator patterns:
19
+ * - Phase: VALIDATION
20
+ * - Priority: 85 (after enrichment, before general validators)
21
+ * - Returns: ValidationError[] collected via DiagnosticCollector
22
+ */
23
+ import { Plugin } from '../Plugin.js';
24
+ import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
25
+ export declare class BrokenImportValidator extends Plugin {
26
+ private globalsRegistry;
27
+ constructor(config?: Record<string, unknown>);
28
+ get metadata(): PluginMetadata;
29
+ execute(context: PluginContext): Promise<PluginResult>;
30
+ }
31
+ //# sourceMappingURL=BrokenImportValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrokenImportValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/BrokenImportValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAqChF,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,OAAO,CAAC,eAAe,CAAkB;gBAE7B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAWhD,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA4O7D"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * BrokenImportValidator - detects broken imports and undefined symbols (REG-261)
3
+ *
4
+ * This VALIDATION plugin queries the graph (built by ANALYSIS and ENRICHMENT phases)
5
+ * to detect:
6
+ *
7
+ * 1. ERR_BROKEN_IMPORT: Named/default import references non-existent export
8
+ * - IMPORT node with relative source but no IMPORTS_FROM edge
9
+ * - Skips: external (npm) imports, namespace imports, type-only imports
10
+ *
11
+ * 2. ERR_UNDEFINED_SYMBOL: Symbol used but not defined, imported, or global
12
+ * - CALL node without CALLS edge
13
+ * - Not a method call (no `object` property)
14
+ * - Not a local definition (FUNCTION/CLASS/VARIABLE in same file)
15
+ * - Not an import (IMPORT with matching local name)
16
+ * - Not a known global (console, setTimeout, etc.)
17
+ *
18
+ * Architecture follows existing validator patterns:
19
+ * - Phase: VALIDATION
20
+ * - Priority: 85 (after enrichment, before general validators)
21
+ * - Returns: ValidationError[] collected via DiagnosticCollector
22
+ */
23
+ import { Plugin, createSuccessResult } from '../Plugin.js';
24
+ import { ValidationError } from '../../errors/GrafemaError.js';
25
+ import { GlobalsRegistry } from '../../data/globals/index.js';
26
+ // === CONSTANTS ===
27
+ const ERROR_CODES = {
28
+ BROKEN_IMPORT: 'ERR_BROKEN_IMPORT',
29
+ UNDEFINED_SYMBOL: 'ERR_UNDEFINED_SYMBOL',
30
+ };
31
+ // Types that represent local definitions
32
+ const DEFINITION_TYPES = new Set([
33
+ 'FUNCTION',
34
+ 'CLASS',
35
+ 'VARIABLE_DECLARATION',
36
+ 'CONSTANT',
37
+ 'PARAMETER',
38
+ ]);
39
+ // === PLUGIN CLASS ===
40
+ export class BrokenImportValidator extends Plugin {
41
+ globalsRegistry;
42
+ constructor(config = {}) {
43
+ super(config);
44
+ this.globalsRegistry = new GlobalsRegistry();
45
+ // Allow custom globals from config
46
+ const customGlobals = config.customGlobals;
47
+ if (customGlobals) {
48
+ this.globalsRegistry.addCustomGlobals(customGlobals);
49
+ }
50
+ }
51
+ get metadata() {
52
+ return {
53
+ name: 'BrokenImportValidator',
54
+ phase: 'VALIDATION',
55
+ priority: 85, // After enrichment plugins, before general validators
56
+ creates: {
57
+ nodes: [],
58
+ edges: []
59
+ },
60
+ dependencies: ['ImportExportLinker', 'FunctionCallResolver']
61
+ };
62
+ }
63
+ async execute(context) {
64
+ const { graph, onProgress } = context;
65
+ const logger = this.log(context);
66
+ logger.info('Starting broken import validation');
67
+ const startTime = Date.now();
68
+ const errors = [];
69
+ const stats = {
70
+ importsChecked: 0,
71
+ brokenImports: 0,
72
+ callsChecked: 0,
73
+ undefinedSymbols: 0,
74
+ skipped: {
75
+ externalImports: 0,
76
+ namespaceImports: 0,
77
+ typeOnlyImports: 0,
78
+ methodCalls: 0,
79
+ alreadyResolved: 0,
80
+ localDefinitions: 0,
81
+ imports: 0,
82
+ globals: 0,
83
+ },
84
+ };
85
+ // === Step 1: Build indexes ===
86
+ // Index: file -> Set<name> for local definitions
87
+ const definitionsByFile = new Map();
88
+ for await (const node of graph.queryNodes({})) {
89
+ if (!DEFINITION_TYPES.has(node.type))
90
+ continue;
91
+ if (!node.file || !node.name)
92
+ continue;
93
+ if (!definitionsByFile.has(node.file)) {
94
+ definitionsByFile.set(node.file, new Set());
95
+ }
96
+ definitionsByFile.get(node.file).add(node.name);
97
+ }
98
+ logger.debug('Indexed definitions', { files: definitionsByFile.size });
99
+ // Index: file:local -> ImportNode
100
+ const importsByFile = new Map();
101
+ const allImports = [];
102
+ for await (const node of graph.queryNodes({ nodeType: 'IMPORT' })) {
103
+ const imp = node;
104
+ if (!imp.file)
105
+ continue;
106
+ allImports.push(imp);
107
+ // Index by local name for undefined symbol checking
108
+ const localName = imp.local || imp.name;
109
+ if (localName) {
110
+ if (!importsByFile.has(imp.file)) {
111
+ importsByFile.set(imp.file, new Map());
112
+ }
113
+ importsByFile.get(imp.file).set(localName, imp);
114
+ }
115
+ }
116
+ logger.debug('Indexed imports', { count: allImports.length });
117
+ // === Step 2: Check for broken imports ===
118
+ for (const imp of allImports) {
119
+ stats.importsChecked++;
120
+ // Progress reporting
121
+ if (onProgress && stats.importsChecked % 100 === 0) {
122
+ onProgress({
123
+ phase: 'validation',
124
+ currentPlugin: 'BrokenImportValidator',
125
+ message: `Checking imports ${stats.importsChecked}/${allImports.length}`,
126
+ totalFiles: allImports.length,
127
+ processedFiles: stats.importsChecked
128
+ });
129
+ }
130
+ // Skip external (npm) imports - only check relative imports
131
+ const isRelative = imp.source &&
132
+ (imp.source.startsWith('./') || imp.source.startsWith('../'));
133
+ if (!isRelative) {
134
+ stats.skipped.externalImports++;
135
+ continue;
136
+ }
137
+ // Skip namespace imports - they link to MODULE, not EXPORT
138
+ if (imp.importType === 'namespace') {
139
+ stats.skipped.namespaceImports++;
140
+ continue;
141
+ }
142
+ // Skip type-only imports (TypeScript) - erased at compile time
143
+ if (imp.importBinding === 'type') {
144
+ stats.skipped.typeOnlyImports++;
145
+ continue;
146
+ }
147
+ // Check for IMPORTS_FROM edge
148
+ const importsFromEdges = await graph.getOutgoingEdges(imp.id, ['IMPORTS_FROM']);
149
+ if (importsFromEdges.length === 0) {
150
+ // No IMPORTS_FROM edge = broken import
151
+ const importedName = imp.imported || imp.local || imp.name;
152
+ errors.push(new ValidationError(`Import "${importedName}" from "${imp.source}" - export doesn't exist`, ERROR_CODES.BROKEN_IMPORT, {
153
+ filePath: imp.file,
154
+ lineNumber: imp.line,
155
+ phase: 'VALIDATION',
156
+ plugin: 'BrokenImportValidator',
157
+ importedName,
158
+ source: imp.source,
159
+ importType: imp.importType,
160
+ }, `Check if "${importedName}" is exported from "${imp.source}"`, 'error'));
161
+ stats.brokenImports++;
162
+ }
163
+ }
164
+ logger.debug('Broken imports found', { count: stats.brokenImports });
165
+ // === Step 3: Check for undefined symbols ===
166
+ const callsToCheck = [];
167
+ for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
168
+ const call = node;
169
+ // Skip method calls (have object attribute)
170
+ if (call.object) {
171
+ stats.skipped.methodCalls++;
172
+ continue;
173
+ }
174
+ // Skip if already has CALLS edge (resolved)
175
+ const callsEdges = await graph.getOutgoingEdges(call.id, ['CALLS']);
176
+ if (callsEdges.length > 0) {
177
+ stats.skipped.alreadyResolved++;
178
+ continue;
179
+ }
180
+ callsToCheck.push(call);
181
+ }
182
+ logger.debug('Unresolved calls to check', { count: callsToCheck.length });
183
+ for (const call of callsToCheck) {
184
+ stats.callsChecked++;
185
+ const calledName = call.name;
186
+ const file = call.file;
187
+ if (!calledName || !file)
188
+ continue;
189
+ // Check 1: Is it a local definition?
190
+ const fileDefinitions = definitionsByFile.get(file);
191
+ if (fileDefinitions?.has(calledName)) {
192
+ stats.skipped.localDefinitions++;
193
+ continue;
194
+ }
195
+ // Check 2: Is it imported? (even if broken, that's a different error)
196
+ const fileImports = importsByFile.get(file);
197
+ if (fileImports?.has(calledName)) {
198
+ stats.skipped.imports++;
199
+ continue;
200
+ }
201
+ // Check 3: Is it a global?
202
+ if (this.globalsRegistry.isGlobal(calledName)) {
203
+ stats.skipped.globals++;
204
+ continue;
205
+ }
206
+ // Symbol is undefined
207
+ errors.push(new ValidationError(`"${calledName}" is used but not defined or imported`, ERROR_CODES.UNDEFINED_SYMBOL, {
208
+ filePath: file,
209
+ lineNumber: call.line,
210
+ phase: 'VALIDATION',
211
+ plugin: 'BrokenImportValidator',
212
+ symbol: calledName,
213
+ }, `Add an import for "${calledName}" or define it locally`, 'warning' // Warning severity - might be a false positive
214
+ ));
215
+ stats.undefinedSymbols++;
216
+ }
217
+ // === Step 4: Summary ===
218
+ const totalTime = ((Date.now() - startTime) / 1000).toFixed(2);
219
+ const summary = {
220
+ importsChecked: stats.importsChecked,
221
+ brokenImports: stats.brokenImports,
222
+ callsChecked: stats.callsChecked,
223
+ undefinedSymbols: stats.undefinedSymbols,
224
+ skipped: stats.skipped,
225
+ totalIssues: stats.brokenImports + stats.undefinedSymbols,
226
+ time: `${totalTime}s`,
227
+ };
228
+ logger.info('Validation complete', summary);
229
+ if (errors.length > 0) {
230
+ logger.warn('Issues found', {
231
+ brokenImports: stats.brokenImports,
232
+ undefinedSymbols: stats.undefinedSymbols,
233
+ });
234
+ // Log first few errors for visibility
235
+ for (const error of errors.slice(0, 5)) {
236
+ if (error.code === ERROR_CODES.BROKEN_IMPORT) {
237
+ logger.error(`[${error.code}] ${error.message}`);
238
+ }
239
+ else {
240
+ logger.warn(`[${error.code}] ${error.message}`);
241
+ }
242
+ }
243
+ if (errors.length > 5) {
244
+ logger.debug(`... and ${errors.length - 5} more issues`);
245
+ }
246
+ }
247
+ return createSuccessResult({ nodes: 0, edges: 0 }, { summary }, errors);
248
+ }
249
+ }
@@ -1,14 +1,14 @@
1
1
  /**
2
- * CallResolverValidator - проверяет что все вызовы функций ссылаются на определения
2
+ * CallResolverValidator - validates function call resolution (REG-227)
3
3
  *
4
- * Использует Datalog для декларативной проверки гарантии:
5
- * "Все внутренние вызовы функций (CALL_SITE) должны иметь CALLS ребро к FUNCTION"
4
+ * Checks that all function calls are properly resolved:
5
+ * - Internal calls: CALLS edge to FUNCTION node
6
+ * - External calls: CALLS edge to EXTERNAL_MODULE node
7
+ * - Builtin calls: recognized by name (no edge needed)
8
+ * - Unresolved: no edge, not builtin -> WARNING
6
9
  *
7
- * ПРАВИЛО (Datalog):
8
- * violation(X) :- node(X, "CALL"), \+ attr(X, "object", _), \+ edge(X, _, "CALLS").
9
- *
10
- * Это находит CALL узлы без "object" метаданных (т.е. CALL_SITE, не METHOD_CALL),
11
- * которые не имеют CALLS ребра к определению функции.
10
+ * This validator runs AFTER FunctionCallResolver and ExternalCallResolver
11
+ * to verify resolution quality and report issues.
12
12
  */
13
13
  import { Plugin } from '../Plugin.js';
14
14
  import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
@@ -16,8 +16,19 @@ export declare class CallResolverValidator extends Plugin {
16
16
  get metadata(): PluginMetadata;
17
17
  execute(context: PluginContext): Promise<PluginResult>;
18
18
  /**
19
- * Подсчитывает статистику по вызовам
19
+ * Determine the resolution type for a CALL node.
20
+ *
21
+ * Resolution priority:
22
+ * 1. Method call (has 'object' attribute) -> 'method'
23
+ * 2. Has CALLS edge to FUNCTION -> 'internal'
24
+ * 3. Has CALLS edge to EXTERNAL_MODULE -> 'external'
25
+ * 4. Name in JS_GLOBAL_FUNCTIONS -> 'builtin'
26
+ * 5. Otherwise -> 'unresolved'
27
+ */
28
+ private determineResolutionType;
29
+ /**
30
+ * Create a warning for an unresolved call.
20
31
  */
21
- private countMethodCalls;
32
+ private createWarning;
22
33
  }
23
34
  //# sourceMappingURL=CallResolverValidator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallResolverValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/CallResolverValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA2ChF,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAwE5D;;OAEG;YACW,gBAAgB;CAyB/B"}
1
+ {"version":3,"file":"CallResolverValidator.d.ts","sourceRoot":"","sources":["../../../src/plugins/validation/CallResolverValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8BhF,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgE5D;;;;;;;;;OASG;YACW,uBAAuB;IAuCrC;;OAEG;IACH,OAAO,CAAC,aAAa;CAgBtB"}