@grafema/core 0.1.0-alpha.5 → 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 +3 -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,62 @@
1
+ /**
2
+ * DecoratorNode - contract for DECORATOR node
3
+ *
4
+ * Represents TypeScript/JavaScript decorators applied to
5
+ * classes, methods, properties, or parameters.
6
+ *
7
+ * ID format: {file}:DECORATOR:{name}:{line}:{column}
8
+ * Example: /src/services/UserService.ts:DECORATOR:Injectable:5:0
9
+ */
10
+ export class DecoratorNode {
11
+ static TYPE = 'DECORATOR';
12
+ static REQUIRED = ['name', 'file', 'line', 'targetId', 'targetType'];
13
+ static OPTIONAL = ['column', 'arguments'];
14
+ /**
15
+ * Create DECORATOR node
16
+ *
17
+ * @param name - Decorator name
18
+ * @param file - File path
19
+ * @param line - Line number
20
+ * @param column - Column position
21
+ * @param targetId - ID of decorated element
22
+ * @param targetType - Type of decorated element
23
+ * @param options - Optional decorator properties
24
+ * @returns DecoratorNodeRecord
25
+ */
26
+ static create(name, file, line, column, targetId, targetType, options = {}) {
27
+ if (!name)
28
+ throw new Error('DecoratorNode.create: name is required');
29
+ if (!file)
30
+ throw new Error('DecoratorNode.create: file is required');
31
+ if (!line)
32
+ throw new Error('DecoratorNode.create: line is required');
33
+ if (!targetId)
34
+ throw new Error('DecoratorNode.create: targetId is required');
35
+ if (!targetType)
36
+ throw new Error('DecoratorNode.create: targetType is required');
37
+ return {
38
+ id: `${file}:DECORATOR:${name}:${line}:${column}`,
39
+ type: this.TYPE,
40
+ name,
41
+ file,
42
+ line,
43
+ column: column || 0,
44
+ arguments: options.arguments || [],
45
+ targetId,
46
+ targetType
47
+ };
48
+ }
49
+ static validate(node) {
50
+ const errors = [];
51
+ if (node.type !== this.TYPE) {
52
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
53
+ }
54
+ const nodeRecord = node;
55
+ for (const field of this.REQUIRED) {
56
+ if (!nodeRecord[field]) {
57
+ errors.push(`Missing required field: ${field}`);
58
+ }
59
+ }
60
+ return errors;
61
+ }
62
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * EnumNode - contract for ENUM node
3
+ *
4
+ * Represents TypeScript enum declarations.
5
+ *
6
+ * ID format: {file}:ENUM:{name}:{line}
7
+ * Example: /src/types.ts:ENUM:Status:20
8
+ */
9
+ import type { BaseNodeRecord } from '@grafema/types';
10
+ interface EnumMemberRecord {
11
+ name: string;
12
+ value?: string | number;
13
+ }
14
+ interface EnumNodeRecord extends BaseNodeRecord {
15
+ type: 'ENUM';
16
+ column: number;
17
+ isConst: boolean;
18
+ members: EnumMemberRecord[];
19
+ }
20
+ interface EnumNodeOptions {
21
+ isConst?: boolean;
22
+ members?: EnumMemberRecord[];
23
+ }
24
+ export declare class EnumNode {
25
+ static readonly TYPE: "ENUM";
26
+ static readonly REQUIRED: readonly ["name", "file", "line"];
27
+ static readonly OPTIONAL: readonly ["column", "isConst", "members"];
28
+ /**
29
+ * Create ENUM node
30
+ *
31
+ * @param name - Enum name
32
+ * @param file - File path
33
+ * @param line - Line number
34
+ * @param column - Column position
35
+ * @param options - Optional enum properties
36
+ * @returns EnumNodeRecord
37
+ */
38
+ static create(name: string, file: string, line: number, column: number, options?: EnumNodeOptions): EnumNodeRecord;
39
+ static validate(node: EnumNodeRecord): string[];
40
+ }
41
+ export type { EnumNodeRecord, EnumMemberRecord };
42
+ //# sourceMappingURL=EnumNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnumNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/EnumNode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,UAAU,cAAe,SAAQ,cAAc;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,qBAAa,QAAQ;IACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAEvC,MAAM,CAAC,QAAQ,CAAC,QAAQ,oCAAqC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,4CAA6C;IAErE;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,cAAc;IAiBjB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE;CAgBhD;AAED,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * EnumNode - contract for ENUM node
3
+ *
4
+ * Represents TypeScript enum declarations.
5
+ *
6
+ * ID format: {file}:ENUM:{name}:{line}
7
+ * Example: /src/types.ts:ENUM:Status:20
8
+ */
9
+ export class EnumNode {
10
+ static TYPE = 'ENUM';
11
+ static REQUIRED = ['name', 'file', 'line'];
12
+ static OPTIONAL = ['column', 'isConst', 'members'];
13
+ /**
14
+ * Create ENUM node
15
+ *
16
+ * @param name - Enum name
17
+ * @param file - File path
18
+ * @param line - Line number
19
+ * @param column - Column position
20
+ * @param options - Optional enum properties
21
+ * @returns EnumNodeRecord
22
+ */
23
+ static create(name, file, line, column, options = {}) {
24
+ if (!name)
25
+ throw new Error('EnumNode.create: name is required');
26
+ if (!file)
27
+ throw new Error('EnumNode.create: file is required');
28
+ if (!line)
29
+ throw new Error('EnumNode.create: line is required');
30
+ return {
31
+ id: `${file}:ENUM:${name}:${line}`,
32
+ type: this.TYPE,
33
+ name,
34
+ file,
35
+ line,
36
+ column: column || 0,
37
+ isConst: options.isConst || false,
38
+ members: options.members || []
39
+ };
40
+ }
41
+ static validate(node) {
42
+ const errors = [];
43
+ if (node.type !== this.TYPE) {
44
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
45
+ }
46
+ const nodeRecord = node;
47
+ for (const field of this.REQUIRED) {
48
+ if (!nodeRecord[field]) {
49
+ errors.push(`Missing required field: ${field}`);
50
+ }
51
+ }
52
+ return errors;
53
+ }
54
+ }
@@ -1,25 +1,61 @@
1
1
  /**
2
2
  * ExportNode - contract for EXPORT node
3
+ *
4
+ * Supports two creation modes:
5
+ * 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
6
+ * 2. create() - LEGACY: Uses line-based IDs for backward compatibility
7
+ *
8
+ * Semantic ID format: {file}->global->EXPORT->{exportedName}
9
+ * Example: src/utils.js->global->EXPORT->formatDate
3
10
  */
4
11
  import type { BaseNodeRecord } from '@grafema/types';
12
+ import { type ScopeContext, type Location } from '../SemanticId.js';
5
13
  type ExportKind = 'value' | 'type';
14
+ type ExportType = 'default' | 'named' | 'all';
6
15
  interface ExportNodeRecord extends BaseNodeRecord {
7
16
  type: 'EXPORT';
8
17
  column: number;
9
18
  exportKind: ExportKind;
10
19
  local: string;
11
20
  default: boolean;
21
+ source?: string;
22
+ exportType?: ExportType;
12
23
  }
13
24
  interface ExportNodeOptions {
14
25
  exportKind?: ExportKind;
15
26
  local?: string;
16
27
  default?: boolean;
28
+ source?: string;
29
+ exportType?: ExportType;
30
+ }
31
+ /**
32
+ * Options for createWithContext
33
+ */
34
+ interface ExportContextOptions {
35
+ exportKind?: ExportKind;
36
+ local?: string;
37
+ default?: boolean;
38
+ source?: string;
39
+ exportType?: ExportType;
17
40
  }
18
41
  export declare class ExportNode {
19
42
  static readonly TYPE: "EXPORT";
20
43
  static readonly REQUIRED: readonly ["name", "file", "line"];
21
- static readonly OPTIONAL: readonly ["column", "exportKind", "local", "default"];
44
+ static readonly OPTIONAL: readonly ["column", "exportKind", "local", "default", "source", "exportType"];
22
45
  static create(name: string, file: string, line: number, column: number, options?: ExportNodeOptions): ExportNodeRecord;
46
+ /**
47
+ * Create EXPORT node with semantic ID (NEW API)
48
+ *
49
+ * Uses ScopeContext from ScopeTracker for stable identifiers.
50
+ * Export names are unique within module, so no discriminator needed.
51
+ *
52
+ * @param name - Exported name (as visible to importers)
53
+ * @param context - Scope context from ScopeTracker.getContext()
54
+ * @param location - Source location { line, column }
55
+ * @param options - Optional export properties
56
+ * @returns ExportNodeRecord with semantic ID
57
+ */
58
+ static createWithContext(name: string, context: ScopeContext, location: Partial<Location>, options?: ExportContextOptions): ExportNodeRecord;
23
59
  static validate(node: ExportNodeRecord): string[];
24
60
  }
25
61
  export type { ExportNodeRecord, ExportKind };
@@ -1 +1 @@
1
- {"version":3,"file":"ExportNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ExportNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,KAAK,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnC,UAAU,gBAAiB,SAAQ,cAAc;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAEzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,oCAAqC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,wDAAyD;IAEjF,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB;IAkBnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE;CAgBlD;AAED,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"ExportNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ExportNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvF,KAAK,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnC,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;AAE9C,UAAU,gBAAiB,SAAQ,cAAc;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,UAAU,oBAAoB;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAEzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,oCAAqC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,gFAAiF;IAEzG,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB;IAoBnB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC3B,OAAO,GAAE,oBAAyB,GACjC,gBAAgB;IAwBnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE;CAgBlD;AAED,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC"}
@@ -1,10 +1,18 @@
1
1
  /**
2
2
  * ExportNode - contract for EXPORT node
3
+ *
4
+ * Supports two creation modes:
5
+ * 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
6
+ * 2. create() - LEGACY: Uses line-based IDs for backward compatibility
7
+ *
8
+ * Semantic ID format: {file}->global->EXPORT->{exportedName}
9
+ * Example: src/utils.js->global->EXPORT->formatDate
3
10
  */
11
+ import { computeSemanticId } from '../SemanticId.js';
4
12
  export class ExportNode {
5
13
  static TYPE = 'EXPORT';
6
14
  static REQUIRED = ['name', 'file', 'line'];
7
- static OPTIONAL = ['column', 'exportKind', 'local', 'default'];
15
+ static OPTIONAL = ['column', 'exportKind', 'local', 'default', 'source', 'exportType'];
8
16
  static create(name, file, line, column, options = {}) {
9
17
  if (!name)
10
18
  throw new Error('ExportNode.create: name is required');
@@ -21,7 +29,45 @@ export class ExportNode {
21
29
  column: column || 0,
22
30
  exportKind: options.exportKind || 'value',
23
31
  local: options.local || name,
24
- default: options.default || false
32
+ default: options.default || false,
33
+ ...(options.source !== undefined && { source: options.source }),
34
+ ...(options.exportType !== undefined && { exportType: options.exportType })
35
+ };
36
+ }
37
+ /**
38
+ * Create EXPORT node with semantic ID (NEW API)
39
+ *
40
+ * Uses ScopeContext from ScopeTracker for stable identifiers.
41
+ * Export names are unique within module, so no discriminator needed.
42
+ *
43
+ * @param name - Exported name (as visible to importers)
44
+ * @param context - Scope context from ScopeTracker.getContext()
45
+ * @param location - Source location { line, column }
46
+ * @param options - Optional export properties
47
+ * @returns ExportNodeRecord with semantic ID
48
+ */
49
+ static createWithContext(name, context, location, options = {}) {
50
+ // Validate required fields
51
+ if (!name)
52
+ throw new Error('ExportNode.createWithContext: name is required');
53
+ if (!context.file)
54
+ throw new Error('ExportNode.createWithContext: file is required');
55
+ if (location.line === undefined)
56
+ throw new Error('ExportNode.createWithContext: line is required');
57
+ // Compute semantic ID
58
+ const id = computeSemanticId(this.TYPE, name, context);
59
+ return {
60
+ id,
61
+ type: this.TYPE,
62
+ name,
63
+ file: context.file,
64
+ line: location.line,
65
+ column: location.column ?? 0,
66
+ exportKind: options.exportKind || 'value',
67
+ local: options.local || name,
68
+ default: options.default || false,
69
+ ...(options.source !== undefined && { source: options.source }),
70
+ ...(options.exportType !== undefined && { exportType: options.exportType })
25
71
  };
26
72
  }
27
73
  static validate(node) {
@@ -0,0 +1,97 @@
1
+ /**
2
+ * ExpressionNode - contract for EXPRESSION node
3
+ *
4
+ * Represents complex expressions for data flow tracking
5
+ * (MemberExpression, BinaryExpression, LogicalExpression, etc.)
6
+ *
7
+ * ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
8
+ * Example: /src/app.ts:EXPRESSION:MemberExpression:25:10
9
+ */
10
+ import type { BaseNodeRecord } from '@grafema/types';
11
+ interface ExpressionNodeRecord extends BaseNodeRecord {
12
+ type: 'EXPRESSION';
13
+ column: number;
14
+ expressionType: string;
15
+ object?: string;
16
+ property?: string;
17
+ computed?: boolean;
18
+ computedPropertyVar?: string;
19
+ operator?: string;
20
+ path?: string;
21
+ baseName?: string;
22
+ propertyPath?: string[];
23
+ arrayIndex?: number;
24
+ }
25
+ interface ExpressionNodeOptions {
26
+ object?: string;
27
+ property?: string;
28
+ computed?: boolean;
29
+ computedPropertyVar?: string;
30
+ operator?: string;
31
+ path?: string;
32
+ baseName?: string;
33
+ propertyPath?: string[];
34
+ arrayIndex?: number;
35
+ }
36
+ export declare class ExpressionNode {
37
+ static readonly TYPE: "EXPRESSION";
38
+ static readonly REQUIRED: readonly ["expressionType", "file", "line"];
39
+ static readonly OPTIONAL: readonly ["column", "object", "property", "computed", "computedPropertyVar", "operator", "path", "baseName", "propertyPath", "arrayIndex"];
40
+ /**
41
+ * Create EXPRESSION node
42
+ *
43
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
44
+ * @param file - File path
45
+ * @param line - Line number
46
+ * @param column - Column position
47
+ * @param options - Optional expression properties
48
+ * @returns ExpressionNodeRecord
49
+ */
50
+ static create(expressionType: string, file: string, line: number, column: number, options?: ExpressionNodeOptions): ExpressionNodeRecord;
51
+ /**
52
+ * Compute name from expression properties
53
+ *
54
+ * Naming conventions:
55
+ * - MemberExpression: "object.property"
56
+ * - BinaryExpression: "<BinaryExpression>"
57
+ * - LogicalExpression: "<LogicalExpression>"
58
+ * - ConditionalExpression: "<ternary>"
59
+ * - TemplateLiteral: "<template>"
60
+ * - Other: expressionType
61
+ */
62
+ private static _computeName;
63
+ /**
64
+ * Generate EXPRESSION node ID without creating the full node
65
+ *
66
+ * Used by JSASTAnalyzer when creating assignment metadata.
67
+ * The full node is created later by GraphBuilder.
68
+ *
69
+ * ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
70
+ *
71
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
72
+ * @param file - File path
73
+ * @param line - Line number
74
+ * @param column - Column position
75
+ * @returns Generated ID string in colon format
76
+ */
77
+ static generateId(expressionType: string, file: string, line: number, column: number): string;
78
+ /**
79
+ * Create EXPRESSION node from assignment metadata
80
+ *
81
+ * Used by GraphBuilder when processing variableAssignments.
82
+ * The ID is provided from upstream (generated by JSASTAnalyzer).
83
+ *
84
+ * @param expressionType - Type of expression
85
+ * @param file - File path
86
+ * @param line - Line number
87
+ * @param column - Column position
88
+ * @param options - Must include id; optional: expression properties
89
+ * @returns ExpressionNodeRecord
90
+ */
91
+ static createFromMetadata(expressionType: string, file: string, line: number, column: number, options: ExpressionNodeOptions & {
92
+ id: string;
93
+ }): ExpressionNodeRecord;
94
+ static validate(node: ExpressionNodeRecord): string[];
95
+ }
96
+ export type { ExpressionNodeRecord, ExpressionNodeOptions };
97
+ //# sourceMappingURL=ExpressionNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpressionNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ExpressionNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,oBAAqB,SAAQ,cAAc;IACnD,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IAEvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,qBAAqB;IAE7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IAE7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,8CAA+C;IACvE,MAAM,CAAC,QAAQ,CAAC,QAAQ,6IAGb;IAEX;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,CACX,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,oBAAoB;IA6BvB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAqB3B;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,UAAU,CACf,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,MAAM;IAIT;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,kBAAkB,CACvB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,qBAAqB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAC9C,oBAAoB;IAsCvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,EAAE;CAiBtD;AAED,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * ExpressionNode - contract for EXPRESSION node
3
+ *
4
+ * Represents complex expressions for data flow tracking
5
+ * (MemberExpression, BinaryExpression, LogicalExpression, etc.)
6
+ *
7
+ * ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
8
+ * Example: /src/app.ts:EXPRESSION:MemberExpression:25:10
9
+ */
10
+ export class ExpressionNode {
11
+ static TYPE = 'EXPRESSION';
12
+ static REQUIRED = ['expressionType', 'file', 'line'];
13
+ static OPTIONAL = [
14
+ 'column', 'object', 'property', 'computed', 'computedPropertyVar',
15
+ 'operator', 'path', 'baseName', 'propertyPath', 'arrayIndex'
16
+ ];
17
+ /**
18
+ * Create EXPRESSION node
19
+ *
20
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
21
+ * @param file - File path
22
+ * @param line - Line number
23
+ * @param column - Column position
24
+ * @param options - Optional expression properties
25
+ * @returns ExpressionNodeRecord
26
+ */
27
+ static create(expressionType, file, line, column, options = {}) {
28
+ if (!expressionType)
29
+ throw new Error('ExpressionNode.create: expressionType is required');
30
+ if (!file)
31
+ throw new Error('ExpressionNode.create: file is required');
32
+ if (!line)
33
+ throw new Error('ExpressionNode.create: line is required');
34
+ const node = {
35
+ id: `${file}:EXPRESSION:${expressionType}:${line}:${column}`,
36
+ type: this.TYPE,
37
+ name: this._computeName(expressionType, options),
38
+ file,
39
+ line,
40
+ column: column || 0,
41
+ expressionType
42
+ };
43
+ // Add optional fields if present
44
+ if (options.object !== undefined)
45
+ node.object = options.object;
46
+ if (options.property !== undefined)
47
+ node.property = options.property;
48
+ if (options.computed !== undefined)
49
+ node.computed = options.computed;
50
+ if (options.computedPropertyVar !== undefined)
51
+ node.computedPropertyVar = options.computedPropertyVar;
52
+ if (options.operator !== undefined)
53
+ node.operator = options.operator;
54
+ if (options.path !== undefined)
55
+ node.path = options.path;
56
+ if (options.baseName !== undefined)
57
+ node.baseName = options.baseName;
58
+ if (options.propertyPath !== undefined)
59
+ node.propertyPath = options.propertyPath;
60
+ if (options.arrayIndex !== undefined)
61
+ node.arrayIndex = options.arrayIndex;
62
+ return node;
63
+ }
64
+ /**
65
+ * Compute name from expression properties
66
+ *
67
+ * Naming conventions:
68
+ * - MemberExpression: "object.property"
69
+ * - BinaryExpression: "<BinaryExpression>"
70
+ * - LogicalExpression: "<LogicalExpression>"
71
+ * - ConditionalExpression: "<ternary>"
72
+ * - TemplateLiteral: "<template>"
73
+ * - Other: expressionType
74
+ */
75
+ static _computeName(expressionType, options) {
76
+ if (options.path) {
77
+ return options.path;
78
+ }
79
+ if (options.object && options.property) {
80
+ return `${options.object}.${options.property}`;
81
+ }
82
+ // Special naming for non-MemberExpression types
83
+ switch (expressionType) {
84
+ case 'BinaryExpression':
85
+ case 'LogicalExpression':
86
+ return `<${expressionType}>`;
87
+ case 'ConditionalExpression':
88
+ return '<ternary>';
89
+ case 'TemplateLiteral':
90
+ return '<template>';
91
+ default:
92
+ return expressionType;
93
+ }
94
+ }
95
+ /**
96
+ * Generate EXPRESSION node ID without creating the full node
97
+ *
98
+ * Used by JSASTAnalyzer when creating assignment metadata.
99
+ * The full node is created later by GraphBuilder.
100
+ *
101
+ * ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
102
+ *
103
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
104
+ * @param file - File path
105
+ * @param line - Line number
106
+ * @param column - Column position
107
+ * @returns Generated ID string in colon format
108
+ */
109
+ static generateId(expressionType, file, line, column) {
110
+ return `${file}:EXPRESSION:${expressionType}:${line}:${column}`;
111
+ }
112
+ /**
113
+ * Create EXPRESSION node from assignment metadata
114
+ *
115
+ * Used by GraphBuilder when processing variableAssignments.
116
+ * The ID is provided from upstream (generated by JSASTAnalyzer).
117
+ *
118
+ * @param expressionType - Type of expression
119
+ * @param file - File path
120
+ * @param line - Line number
121
+ * @param column - Column position
122
+ * @param options - Must include id; optional: expression properties
123
+ * @returns ExpressionNodeRecord
124
+ */
125
+ static createFromMetadata(expressionType, file, line, column, options) {
126
+ if (!options.id) {
127
+ throw new Error('ExpressionNode.createFromMetadata: id is required');
128
+ }
129
+ // Validate ID format - must use colon format
130
+ if (!options.id.includes(':EXPRESSION:')) {
131
+ throw new Error(`ExpressionNode.createFromMetadata: Invalid ID format "${options.id}". ` +
132
+ `Expected format: {file}:EXPRESSION:{type}:{line}:{column}`);
133
+ }
134
+ // Create base node structure
135
+ const node = {
136
+ id: options.id, // Use provided ID (from upstream)
137
+ type: this.TYPE,
138
+ name: this._computeName(expressionType, options),
139
+ file,
140
+ line,
141
+ column: column || 0,
142
+ expressionType
143
+ };
144
+ // Add optional fields if present (same logic as create())
145
+ if (options.object !== undefined)
146
+ node.object = options.object;
147
+ if (options.property !== undefined)
148
+ node.property = options.property;
149
+ if (options.computed !== undefined)
150
+ node.computed = options.computed;
151
+ if (options.computedPropertyVar !== undefined)
152
+ node.computedPropertyVar = options.computedPropertyVar;
153
+ if (options.operator !== undefined)
154
+ node.operator = options.operator;
155
+ if (options.path !== undefined)
156
+ node.path = options.path;
157
+ if (options.baseName !== undefined)
158
+ node.baseName = options.baseName;
159
+ if (options.propertyPath !== undefined)
160
+ node.propertyPath = options.propertyPath;
161
+ if (options.arrayIndex !== undefined)
162
+ node.arrayIndex = options.arrayIndex;
163
+ return node;
164
+ }
165
+ static validate(node) {
166
+ const errors = [];
167
+ if (node.type !== this.TYPE) {
168
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
169
+ }
170
+ if (!node.expressionType) {
171
+ errors.push('Missing required field: expressionType');
172
+ }
173
+ if (!node.file) {
174
+ errors.push('Missing required field: file');
175
+ }
176
+ return errors;
177
+ }
178
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * ExternalModuleNode - contract for EXTERNAL_MODULE node
3
+ *
4
+ * Represents external npm packages or Node.js built-in modules
5
+ * that are imported but not analyzed.
6
+ *
7
+ * ID format: EXTERNAL_MODULE:{source}
8
+ * Example: EXTERNAL_MODULE:lodash, EXTERNAL_MODULE:@tanstack/react-query
9
+ */
10
+ import type { BaseNodeRecord } from '@grafema/types';
11
+ interface ExternalModuleNodeRecord extends BaseNodeRecord {
12
+ type: 'EXTERNAL_MODULE';
13
+ }
14
+ export declare class ExternalModuleNode {
15
+ static readonly TYPE: "EXTERNAL_MODULE";
16
+ static readonly REQUIRED: readonly ["name"];
17
+ static readonly OPTIONAL: readonly [];
18
+ /**
19
+ * Create EXTERNAL_MODULE node
20
+ *
21
+ * @param source - Module name (e.g., 'lodash', '@tanstack/react-query', 'node:fs')
22
+ * @returns ExternalModuleNodeRecord
23
+ */
24
+ static create(source: string): ExternalModuleNodeRecord;
25
+ static validate(node: ExternalModuleNodeRecord): string[];
26
+ }
27
+ export type { ExternalModuleNodeRecord };
28
+ //# sourceMappingURL=ExternalModuleNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalModuleNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ExternalModuleNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,wBAAyB,SAAQ,cAAc;IACvD,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAU;IAElD,MAAM,CAAC,QAAQ,CAAC,QAAQ,oBAAqB;IAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAe;IAEvC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB;IAYvD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,EAAE;CAa1D;AAED,YAAY,EAAE,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ExternalModuleNode - contract for EXTERNAL_MODULE node
3
+ *
4
+ * Represents external npm packages or Node.js built-in modules
5
+ * that are imported but not analyzed.
6
+ *
7
+ * ID format: EXTERNAL_MODULE:{source}
8
+ * Example: EXTERNAL_MODULE:lodash, EXTERNAL_MODULE:@tanstack/react-query
9
+ */
10
+ export class ExternalModuleNode {
11
+ static TYPE = 'EXTERNAL_MODULE';
12
+ static REQUIRED = ['name'];
13
+ static OPTIONAL = [];
14
+ /**
15
+ * Create EXTERNAL_MODULE node
16
+ *
17
+ * @param source - Module name (e.g., 'lodash', '@tanstack/react-query', 'node:fs')
18
+ * @returns ExternalModuleNodeRecord
19
+ */
20
+ static create(source) {
21
+ if (!source)
22
+ throw new Error('ExternalModuleNode.create: source is required');
23
+ return {
24
+ id: `EXTERNAL_MODULE:${source}`,
25
+ type: this.TYPE,
26
+ name: source,
27
+ file: '',
28
+ line: 0
29
+ };
30
+ }
31
+ static validate(node) {
32
+ const errors = [];
33
+ if (node.type !== this.TYPE) {
34
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
35
+ }
36
+ if (!node.name) {
37
+ errors.push('Missing required field: name');
38
+ }
39
+ return errors;
40
+ }
41
+ }