@grafema/core 0.1.0-alpha.5 → 0.2.0-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/README.md +0 -1
  2. package/dist/Orchestrator.d.ts +31 -2
  3. package/dist/Orchestrator.d.ts.map +1 -1
  4. package/dist/Orchestrator.js +222 -27
  5. package/dist/config/ConfigLoader.d.ts +90 -0
  6. package/dist/config/ConfigLoader.d.ts.map +1 -0
  7. package/dist/config/ConfigLoader.js +249 -0
  8. package/dist/config/index.d.ts +6 -0
  9. package/dist/config/index.d.ts.map +1 -0
  10. package/dist/config/index.js +4 -0
  11. package/dist/core/ASTWorker.d.ts +11 -36
  12. package/dist/core/ASTWorker.d.ts.map +1 -1
  13. package/dist/core/ASTWorker.js +93 -99
  14. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  15. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  16. package/dist/core/CoverageAnalyzer.js +198 -0
  17. package/dist/core/FileExplainer.d.ts +101 -0
  18. package/dist/core/FileExplainer.d.ts.map +1 -0
  19. package/dist/core/FileExplainer.js +139 -0
  20. package/dist/core/FileNodeManager.d.ts +40 -0
  21. package/dist/core/FileNodeManager.d.ts.map +1 -0
  22. package/dist/core/FileNodeManager.js +84 -0
  23. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  24. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  25. package/dist/core/GraphFreshnessChecker.js +101 -0
  26. package/dist/core/HashUtils.d.ts +24 -0
  27. package/dist/core/HashUtils.d.ts.map +1 -0
  28. package/dist/core/HashUtils.js +45 -0
  29. package/dist/core/IncrementalReanalyzer.d.ts +36 -0
  30. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  31. package/dist/core/IncrementalReanalyzer.js +132 -0
  32. package/dist/core/NodeFactory.d.ts +266 -19
  33. package/dist/core/NodeFactory.d.ts.map +1 -1
  34. package/dist/core/NodeFactory.js +256 -21
  35. package/dist/core/ScopeTracker.d.ts +84 -0
  36. package/dist/core/ScopeTracker.d.ts.map +1 -0
  37. package/dist/core/ScopeTracker.js +116 -0
  38. package/dist/core/SemanticId.d.ts +90 -0
  39. package/dist/core/SemanticId.d.ts.map +1 -0
  40. package/dist/core/SemanticId.js +115 -0
  41. package/dist/core/VersionManager.d.ts.map +1 -1
  42. package/dist/core/VersionManager.js +3 -2
  43. package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
  44. package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
  45. package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
  46. package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
  47. package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
  48. package/dist/core/nodes/ArrayLiteralNode.js +43 -0
  49. package/dist/core/nodes/BranchNode.d.ts +41 -0
  50. package/dist/core/nodes/BranchNode.d.ts.map +1 -0
  51. package/dist/core/nodes/BranchNode.js +82 -0
  52. package/dist/core/nodes/CallSiteNode.d.ts +30 -2
  53. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
  54. package/dist/core/nodes/CallSiteNode.js +54 -4
  55. package/dist/core/nodes/CaseNode.d.ts +43 -0
  56. package/dist/core/nodes/CaseNode.d.ts.map +1 -0
  57. package/dist/core/nodes/CaseNode.js +81 -0
  58. package/dist/core/nodes/ClassNode.d.ts +34 -2
  59. package/dist/core/nodes/ClassNode.d.ts.map +1 -1
  60. package/dist/core/nodes/ClassNode.js +52 -4
  61. package/dist/core/nodes/ConstantNode.d.ts +2 -2
  62. package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
  63. package/dist/core/nodes/ConstantNode.js +6 -4
  64. package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
  65. package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
  66. package/dist/core/nodes/ConstructorCallNode.js +171 -0
  67. package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
  68. package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
  69. package/dist/core/nodes/DatabaseQueryNode.js +5 -2
  70. package/dist/core/nodes/DecoratorNode.d.ts +42 -0
  71. package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
  72. package/dist/core/nodes/DecoratorNode.js +64 -0
  73. package/dist/core/nodes/EnumNode.d.ts +42 -0
  74. package/dist/core/nodes/EnumNode.d.ts.map +1 -0
  75. package/dist/core/nodes/EnumNode.js +56 -0
  76. package/dist/core/nodes/EventListenerNode.d.ts +4 -4
  77. package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
  78. package/dist/core/nodes/EventListenerNode.js +7 -4
  79. package/dist/core/nodes/ExportNode.d.ts +38 -2
  80. package/dist/core/nodes/ExportNode.d.ts.map +1 -1
  81. package/dist/core/nodes/ExportNode.js +54 -4
  82. package/dist/core/nodes/ExpressionNode.d.ts +97 -0
  83. package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
  84. package/dist/core/nodes/ExpressionNode.js +180 -0
  85. package/dist/core/nodes/ExternalModuleNode.d.ts +32 -0
  86. package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
  87. package/dist/core/nodes/ExternalModuleNode.js +49 -0
  88. package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
  89. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
  90. package/dist/core/nodes/ExternalStdioNode.js +15 -8
  91. package/dist/core/nodes/FunctionNode.d.ts +36 -0
  92. package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
  93. package/dist/core/nodes/FunctionNode.js +80 -1
  94. package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
  95. package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
  96. package/dist/core/nodes/HttpRequestNode.js +7 -4
  97. package/dist/core/nodes/ImportNode.d.ts +28 -6
  98. package/dist/core/nodes/ImportNode.d.ts.map +1 -1
  99. package/dist/core/nodes/ImportNode.js +43 -8
  100. package/dist/core/nodes/InterfaceNode.d.ts +46 -0
  101. package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
  102. package/dist/core/nodes/InterfaceNode.js +57 -0
  103. package/dist/core/nodes/IssueNode.d.ts +73 -0
  104. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  105. package/dist/core/nodes/IssueNode.js +129 -0
  106. package/dist/core/nodes/LiteralNode.d.ts +2 -2
  107. package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
  108. package/dist/core/nodes/LiteralNode.js +6 -4
  109. package/dist/core/nodes/MethodCallNode.d.ts +32 -2
  110. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
  111. package/dist/core/nodes/MethodCallNode.js +57 -4
  112. package/dist/core/nodes/MethodNode.d.ts +34 -2
  113. package/dist/core/nodes/MethodNode.d.ts.map +1 -1
  114. package/dist/core/nodes/MethodNode.js +55 -3
  115. package/dist/core/nodes/ModuleNode.d.ts +31 -0
  116. package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
  117. package/dist/core/nodes/ModuleNode.js +37 -0
  118. package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
  119. package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
  120. package/dist/core/nodes/NetworkRequestNode.js +65 -0
  121. package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
  122. package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
  123. package/dist/core/nodes/ObjectLiteralNode.js +43 -0
  124. package/dist/core/nodes/ParameterNode.d.ts +2 -2
  125. package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
  126. package/dist/core/nodes/ParameterNode.js +5 -3
  127. package/dist/core/nodes/ScopeNode.d.ts +31 -0
  128. package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
  129. package/dist/core/nodes/ScopeNode.js +49 -0
  130. package/dist/core/nodes/TypeNode.d.ts +36 -0
  131. package/dist/core/nodes/TypeNode.d.ts.map +1 -0
  132. package/dist/core/nodes/TypeNode.js +55 -0
  133. package/dist/core/nodes/VariableDeclarationNode.d.ts +29 -2
  134. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
  135. package/dist/core/nodes/VariableDeclarationNode.js +48 -4
  136. package/dist/core/nodes/index.d.ts +15 -1
  137. package/dist/core/nodes/index.d.ts.map +1 -1
  138. package/dist/core/nodes/index.js +17 -0
  139. package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
  140. package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
  141. package/dist/data/builtins/BuiltinRegistry.js +110 -0
  142. package/dist/data/builtins/definitions.d.ts +28 -0
  143. package/dist/data/builtins/definitions.d.ts.map +1 -0
  144. package/dist/data/builtins/definitions.js +250 -0
  145. package/dist/data/builtins/index.d.ts +10 -0
  146. package/dist/data/builtins/index.d.ts.map +1 -0
  147. package/dist/data/builtins/index.js +8 -0
  148. package/dist/data/builtins/jsGlobals.d.ts +18 -0
  149. package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
  150. package/dist/data/builtins/jsGlobals.js +26 -0
  151. package/dist/data/builtins/types.d.ts +34 -0
  152. package/dist/data/builtins/types.d.ts.map +1 -0
  153. package/dist/data/builtins/types.js +7 -0
  154. package/dist/data/globals/definitions.d.ts +27 -0
  155. package/dist/data/globals/definitions.d.ts.map +1 -0
  156. package/dist/data/globals/definitions.js +117 -0
  157. package/dist/data/globals/index.d.ts +36 -0
  158. package/dist/data/globals/index.d.ts.map +1 -0
  159. package/dist/data/globals/index.js +52 -0
  160. package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
  161. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  162. package/dist/diagnostics/DiagnosticCollector.js +129 -0
  163. package/dist/diagnostics/DiagnosticReporter.d.ts +100 -0
  164. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  165. package/dist/diagnostics/DiagnosticReporter.js +247 -0
  166. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  167. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  168. package/dist/diagnostics/DiagnosticWriter.js +43 -0
  169. package/dist/diagnostics/index.d.ts +14 -0
  170. package/dist/diagnostics/index.d.ts.map +1 -0
  171. package/dist/diagnostics/index.js +11 -0
  172. package/dist/errors/GrafemaError.d.ts +161 -0
  173. package/dist/errors/GrafemaError.d.ts.map +1 -0
  174. package/dist/errors/GrafemaError.js +181 -0
  175. package/dist/index.d.ts +73 -1
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +70 -1
  178. package/dist/logging/Logger.d.ts +48 -0
  179. package/dist/logging/Logger.d.ts.map +1 -0
  180. package/dist/logging/Logger.js +134 -0
  181. package/dist/plugins/Plugin.d.ts +5 -1
  182. package/dist/plugins/Plugin.d.ts.map +1 -1
  183. package/dist/plugins/Plugin.js +33 -0
  184. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  185. package/dist/plugins/analysis/DatabaseAnalyzer.js +14 -6
  186. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  187. package/dist/plugins/analysis/ExpressAnalyzer.js +29 -19
  188. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
  189. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
  190. package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
  191. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  192. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +71 -29
  193. package/dist/plugins/analysis/FetchAnalyzer.d.ts +41 -0
  194. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  195. package/dist/plugins/analysis/FetchAnalyzer.js +187 -19
  196. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
  197. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  198. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
  199. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +313 -19
  200. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  201. package/dist/plugins/analysis/JSASTAnalyzer.js +3430 -503
  202. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  203. package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
  204. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  205. package/dist/plugins/analysis/RustAnalyzer.js +16 -11
  206. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  207. package/dist/plugins/analysis/SQLiteAnalyzer.js +11 -7
  208. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  209. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
  210. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
  211. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  212. package/dist/plugins/analysis/SocketIOAnalyzer.js +117 -21
  213. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  214. package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
  215. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +207 -4
  216. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  217. package/dist/plugins/analysis/ast/GraphBuilder.js +1527 -316
  218. package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
  219. package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
  220. package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
  221. package/dist/plugins/analysis/ast/types.d.ts +470 -5
  222. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  223. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
  224. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
  225. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
  226. package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
  227. package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
  228. package/dist/plugins/analysis/ast/utils/index.js +5 -0
  229. package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
  230. package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
  231. package/dist/plugins/analysis/ast/utils/location.js +78 -0
  232. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +14 -5
  233. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  234. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
  235. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +100 -9
  236. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  237. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +674 -125
  238. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
  239. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  240. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
  241. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +14 -1
  242. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  243. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +190 -63
  244. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
  245. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
  246. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +112 -8
  247. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
  248. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  249. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
  250. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +20 -2
  251. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  252. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +243 -45
  253. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  254. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
  255. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
  256. package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
  257. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
  258. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
  259. package/dist/plugins/discovery/WorkspaceDiscovery.js +141 -0
  260. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
  261. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
  262. package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
  263. package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
  264. package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
  265. package/dist/plugins/discovery/workspaces/detector.js +49 -0
  266. package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
  267. package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
  268. package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
  269. package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
  270. package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
  271. package/dist/plugins/discovery/workspaces/index.js +8 -0
  272. package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
  273. package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
  274. package/dist/plugins/discovery/workspaces/parsers.js +80 -0
  275. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  276. package/dist/plugins/enrichment/AliasTracker.js +29 -8
  277. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
  278. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
  279. package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
  280. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
  281. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
  282. package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
  283. package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
  284. package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
  285. package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
  286. package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
  287. package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
  288. package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
  289. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
  290. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  291. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +78 -27
  292. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  293. package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
  294. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  295. package/dist/plugins/enrichment/MethodCallResolver.js +33 -13
  296. package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
  297. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  298. package/dist/plugins/enrichment/MountPointResolver.js +173 -147
  299. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
  300. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
  301. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
  302. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  303. package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
  304. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  305. package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
  306. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +22 -27
  307. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  308. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +185 -143
  309. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  310. package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
  311. package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
  312. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  313. package/dist/plugins/indexing/JSModuleIndexer.js +121 -31
  314. package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
  315. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  316. package/dist/plugins/indexing/RustModuleIndexer.js +8 -7
  317. package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
  318. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
  319. package/dist/plugins/indexing/ServiceDetector.js +28 -15
  320. package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
  321. package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
  322. package/dist/plugins/validation/BrokenImportValidator.js +249 -0
  323. package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
  324. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  325. package/dist/plugins/validation/CallResolverValidator.js +103 -77
  326. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
  327. package/dist/plugins/validation/DataFlowValidator.js +62 -49
  328. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
  329. package/dist/plugins/validation/EvalBanValidator.js +17 -16
  330. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  331. package/dist/plugins/validation/GraphConnectivityValidator.js +44 -24
  332. package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
  333. package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
  334. package/dist/plugins/validation/NodeCreationValidator.js +415 -0
  335. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  336. package/dist/plugins/validation/SQLInjectionValidator.js +61 -19
  337. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
  338. package/dist/plugins/validation/ShadowingDetector.js +6 -5
  339. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
  340. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
  341. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
  342. package/dist/plugins/vcs/GitPlugin.js +10 -12
  343. package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
  344. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
  345. package/dist/plugins/vcs/VCSPlugin.js +5 -5
  346. package/dist/queries/findCallsInFunction.d.ts +52 -0
  347. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  348. package/dist/queries/findCallsInFunction.js +135 -0
  349. package/dist/queries/findContainingFunction.d.ts +45 -0
  350. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  351. package/dist/queries/findContainingFunction.js +54 -0
  352. package/dist/queries/index.d.ts +14 -0
  353. package/dist/queries/index.d.ts.map +1 -0
  354. package/dist/queries/index.js +11 -0
  355. package/dist/queries/traceValues.d.ts +70 -0
  356. package/dist/queries/traceValues.d.ts.map +1 -0
  357. package/dist/queries/traceValues.js +299 -0
  358. package/dist/queries/types.d.ts +163 -0
  359. package/dist/queries/types.d.ts.map +1 -0
  360. package/dist/queries/types.js +9 -0
  361. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  362. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  363. package/dist/schema/GraphSchemaExtractor.js +124 -0
  364. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  365. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  366. package/dist/schema/InterfaceSchemaExtractor.js +112 -0
  367. package/dist/schema/index.d.ts +5 -0
  368. package/dist/schema/index.d.ts.map +1 -0
  369. package/dist/schema/index.js +2 -0
  370. package/dist/storage/backends/RFDBServerBackend.d.ts +21 -34
  371. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  372. package/dist/storage/backends/RFDBServerBackend.js +72 -62
  373. package/dist/storage/backends/typeValidation.d.ts.map +1 -1
  374. package/dist/storage/backends/typeValidation.js +1 -0
  375. package/dist/validation/PathValidator.d.ts +1 -2
  376. package/dist/validation/PathValidator.d.ts.map +1 -1
  377. package/package.json +3 -3
  378. package/src/Orchestrator.ts +272 -27
  379. package/src/config/ConfigLoader.ts +354 -0
  380. package/src/config/index.ts +5 -0
  381. package/src/core/ASTWorker.ts +143 -139
  382. package/src/core/CoverageAnalyzer.ts +243 -0
  383. package/src/core/FileExplainer.ts +179 -0
  384. package/src/core/FileNodeManager.ts +100 -0
  385. package/src/core/GraphFreshnessChecker.ts +143 -0
  386. package/src/core/HashUtils.ts +48 -0
  387. package/src/core/IncrementalReanalyzer.ts +192 -0
  388. package/src/core/NodeFactory.ts +470 -23
  389. package/src/core/ScopeTracker.ts +154 -0
  390. package/src/core/SemanticId.ts +192 -0
  391. package/src/core/VersionManager.ts +3 -2
  392. package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
  393. package/src/core/nodes/ArrayLiteralNode.ts +66 -0
  394. package/src/core/nodes/BranchNode.ts +113 -0
  395. package/src/core/nodes/CallSiteNode.ts +64 -4
  396. package/src/core/nodes/CaseNode.ts +123 -0
  397. package/src/core/nodes/ClassNode.ts +67 -4
  398. package/src/core/nodes/ConstantNode.ts +5 -4
  399. package/src/core/nodes/ConstructorCallNode.ts +217 -0
  400. package/src/core/nodes/DatabaseQueryNode.ts +5 -1
  401. package/src/core/nodes/DecoratorNode.ts +92 -0
  402. package/src/core/nodes/EnumNode.ts +87 -0
  403. package/src/core/nodes/EventListenerNode.ts +7 -4
  404. package/src/core/nodes/ExportNode.ts +74 -4
  405. package/src/core/nodes/ExpressionNode.ts +232 -0
  406. package/src/core/nodes/ExternalModuleNode.ts +65 -0
  407. package/src/core/nodes/ExternalStdioNode.ts +17 -9
  408. package/src/core/nodes/FunctionNode.ts +101 -1
  409. package/src/core/nodes/HttpRequestNode.ts +7 -4
  410. package/src/core/nodes/ImportNode.ts +62 -13
  411. package/src/core/nodes/InterfaceNode.ts +92 -0
  412. package/src/core/nodes/IssueNode.ts +177 -0
  413. package/src/core/nodes/LiteralNode.ts +5 -4
  414. package/src/core/nodes/MethodCallNode.ts +70 -4
  415. package/src/core/nodes/MethodNode.ts +68 -3
  416. package/src/core/nodes/ModuleNode.ts +50 -0
  417. package/src/core/nodes/NetworkRequestNode.ts +77 -0
  418. package/src/core/nodes/ObjectLiteralNode.ts +66 -0
  419. package/src/core/nodes/ParameterNode.ts +4 -3
  420. package/src/core/nodes/ScopeNode.ts +65 -0
  421. package/src/core/nodes/TypeNode.ts +79 -0
  422. package/src/core/nodes/VariableDeclarationNode.ts +58 -4
  423. package/src/core/nodes/index.ts +21 -1
  424. package/src/data/builtins/BuiltinRegistry.ts +124 -0
  425. package/src/data/builtins/definitions.ts +267 -0
  426. package/src/data/builtins/index.ts +10 -0
  427. package/src/data/builtins/jsGlobals.ts +28 -0
  428. package/src/data/builtins/types.ts +36 -0
  429. package/src/data/globals/definitions.ts +156 -0
  430. package/src/data/globals/index.ts +66 -0
  431. package/src/diagnostics/DiagnosticCollector.ts +163 -0
  432. package/src/diagnostics/DiagnosticReporter.ts +324 -0
  433. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  434. package/src/diagnostics/index.ts +16 -0
  435. package/src/errors/GrafemaError.ts +239 -0
  436. package/src/index.ts +193 -1
  437. package/src/logging/Logger.ts +152 -0
  438. package/src/plugins/Plugin.ts +42 -0
  439. package/src/plugins/analysis/DatabaseAnalyzer.ts +16 -8
  440. package/src/plugins/analysis/ExpressAnalyzer.ts +33 -19
  441. package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
  442. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +76 -36
  443. package/src/plugins/analysis/FetchAnalyzer.ts +232 -21
  444. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
  445. package/src/plugins/analysis/JSASTAnalyzer.ts +4265 -587
  446. package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
  447. package/src/plugins/analysis/RustAnalyzer.ts +16 -11
  448. package/src/plugins/analysis/SQLiteAnalyzer.ts +13 -7
  449. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
  450. package/src/plugins/analysis/SocketIOAnalyzer.ts +151 -28
  451. package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
  452. package/src/plugins/analysis/ast/GraphBuilder.ts +1947 -327
  453. package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
  454. package/src/plugins/analysis/ast/types.ts +596 -6
  455. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
  456. package/src/plugins/analysis/ast/utils/index.ts +12 -0
  457. package/src/plugins/analysis/ast/utils/location.ts +103 -0
  458. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +19 -8
  459. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +924 -83
  460. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
  461. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +234 -93
  462. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +124 -9
  463. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
  464. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +294 -49
  465. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
  466. package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
  467. package/src/plugins/discovery/WorkspaceDiscovery.ts +184 -0
  468. package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
  469. package/src/plugins/discovery/workspaces/detector.ts +63 -0
  470. package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
  471. package/src/plugins/discovery/workspaces/index.ts +23 -0
  472. package/src/plugins/discovery/workspaces/parsers.ts +99 -0
  473. package/src/plugins/enrichment/AliasTracker.ts +35 -8
  474. package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
  475. package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
  476. package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
  477. package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
  478. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +84 -27
  479. package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
  480. package/src/plugins/enrichment/MethodCallResolver.ts +39 -13
  481. package/src/plugins/enrichment/MountPointResolver.ts +208 -195
  482. package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
  483. package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
  484. package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
  485. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +209 -189
  486. package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
  487. package/src/plugins/indexing/JSModuleIndexer.ts +140 -34
  488. package/src/plugins/indexing/RustModuleIndexer.ts +8 -7
  489. package/src/plugins/validation/BrokenImportValidator.ts +325 -0
  490. package/src/plugins/validation/CallResolverValidator.ts +131 -110
  491. package/src/plugins/validation/DataFlowValidator.ts +88 -67
  492. package/src/plugins/validation/EvalBanValidator.ts +17 -16
  493. package/src/plugins/validation/GraphConnectivityValidator.ts +58 -24
  494. package/src/plugins/validation/NodeCreationValidator.ts +554 -0
  495. package/src/plugins/validation/SQLInjectionValidator.ts +63 -20
  496. package/src/plugins/validation/ShadowingDetector.ts +6 -5
  497. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
  498. package/src/plugins/vcs/GitPlugin.ts +40 -12
  499. package/src/plugins/vcs/VCSPlugin.ts +7 -5
  500. package/src/queries/README.md +46 -0
  501. package/src/queries/findCallsInFunction.ts +206 -0
  502. package/src/queries/findContainingFunction.ts +83 -0
  503. package/src/queries/index.ts +23 -0
  504. package/src/queries/traceValues.ts +398 -0
  505. package/src/queries/types.ts +187 -0
  506. package/src/schema/GraphSchemaExtractor.ts +177 -0
  507. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  508. package/src/schema/index.ts +5 -0
  509. package/src/storage/backends/RFDBServerBackend.ts +100 -98
  510. package/src/storage/backends/typeValidation.ts +1 -0
  511. package/src/validation/PathValidator.ts +1 -1
  512. package/dist/core/AnalysisWorker.d.ts +0 -14
  513. package/dist/core/AnalysisWorker.d.ts.map +0 -1
  514. package/dist/core/AnalysisWorker.js +0 -307
  515. package/dist/core/ParallelAnalyzer.d.ts +0 -120
  516. package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
  517. package/dist/core/ParallelAnalyzer.js +0 -331
  518. package/dist/core/QueueWorker.d.ts +0 -12
  519. package/dist/core/QueueWorker.d.ts.map +0 -1
  520. package/dist/core/QueueWorker.js +0 -567
  521. package/dist/core/RFDBClient.d.ts +0 -179
  522. package/dist/core/RFDBClient.d.ts.map +0 -1
  523. package/dist/core/RFDBClient.js +0 -429
  524. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
  525. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
  526. package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
  527. package/src/core/AnalysisWorker.ts +0 -410
  528. package/src/core/ParallelAnalyzer.ts +0 -476
  529. package/src/core/QueueWorker.ts +0 -780
  530. package/src/plugins/indexing/ServiceDetector.ts +0 -230
@@ -0,0 +1,92 @@
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
+
11
+ import type { BaseNodeRecord } from '@grafema/types';
12
+
13
+ type DecoratorTargetType = 'CLASS' | 'METHOD' | 'PROPERTY' | 'PARAMETER';
14
+
15
+ interface DecoratorNodeRecord extends BaseNodeRecord {
16
+ type: 'DECORATOR';
17
+ column: number;
18
+ arguments: unknown[];
19
+ targetId: string;
20
+ targetType: DecoratorTargetType;
21
+ }
22
+
23
+ interface DecoratorNodeOptions {
24
+ arguments?: unknown[];
25
+ }
26
+
27
+ export class DecoratorNode {
28
+ static readonly TYPE = 'DECORATOR' as const;
29
+
30
+ static readonly REQUIRED = ['name', 'file', 'line', 'column', 'targetId', 'targetType'] as const;
31
+ static readonly OPTIONAL = ['arguments'] as const;
32
+
33
+ /**
34
+ * Create DECORATOR node
35
+ *
36
+ * @param name - Decorator name
37
+ * @param file - File path
38
+ * @param line - Line number
39
+ * @param column - Column position
40
+ * @param targetId - ID of decorated element
41
+ * @param targetType - Type of decorated element
42
+ * @param options - Optional decorator properties
43
+ * @returns DecoratorNodeRecord
44
+ */
45
+ static create(
46
+ name: string,
47
+ file: string,
48
+ line: number,
49
+ column: number,
50
+ targetId: string,
51
+ targetType: DecoratorTargetType,
52
+ options: DecoratorNodeOptions = {}
53
+ ): DecoratorNodeRecord {
54
+ if (!name) throw new Error('DecoratorNode.create: name is required');
55
+ if (!file) throw new Error('DecoratorNode.create: file is required');
56
+ if (!line) throw new Error('DecoratorNode.create: line is required');
57
+ if (column === undefined) throw new Error('DecoratorNode.create: column is required');
58
+ if (!targetId) throw new Error('DecoratorNode.create: targetId is required');
59
+ if (!targetType) throw new Error('DecoratorNode.create: targetType is required');
60
+
61
+ return {
62
+ id: `${file}:DECORATOR:${name}:${line}:${column}`,
63
+ type: this.TYPE,
64
+ name,
65
+ file,
66
+ line,
67
+ column,
68
+ arguments: options.arguments || [],
69
+ targetId,
70
+ targetType
71
+ };
72
+ }
73
+
74
+ static validate(node: DecoratorNodeRecord): string[] {
75
+ const errors: string[] = [];
76
+
77
+ if (node.type !== this.TYPE) {
78
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
79
+ }
80
+
81
+ const nodeRecord = node as unknown as Record<string, unknown>;
82
+ for (const field of this.REQUIRED) {
83
+ if (!nodeRecord[field]) {
84
+ errors.push(`Missing required field: ${field}`);
85
+ }
86
+ }
87
+
88
+ return errors;
89
+ }
90
+ }
91
+
92
+ export type { DecoratorNodeRecord, DecoratorTargetType };
@@ -0,0 +1,87 @@
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
+
10
+ import type { BaseNodeRecord } from '@grafema/types';
11
+
12
+ interface EnumMemberRecord {
13
+ name: string;
14
+ value?: string | number;
15
+ }
16
+
17
+ interface EnumNodeRecord extends BaseNodeRecord {
18
+ type: 'ENUM';
19
+ column: number;
20
+ isConst: boolean;
21
+ members: EnumMemberRecord[];
22
+ }
23
+
24
+ interface EnumNodeOptions {
25
+ isConst?: boolean;
26
+ members?: EnumMemberRecord[];
27
+ }
28
+
29
+ export class EnumNode {
30
+ static readonly TYPE = 'ENUM' as const;
31
+
32
+ static readonly REQUIRED = ['name', 'file', 'line', 'column'] as const;
33
+ static readonly OPTIONAL = ['isConst', 'members'] as const;
34
+
35
+ /**
36
+ * Create ENUM node
37
+ *
38
+ * @param name - Enum name
39
+ * @param file - File path
40
+ * @param line - Line number
41
+ * @param column - Column position
42
+ * @param options - Optional enum properties
43
+ * @returns EnumNodeRecord
44
+ */
45
+ static create(
46
+ name: string,
47
+ file: string,
48
+ line: number,
49
+ column: number,
50
+ options: EnumNodeOptions = {}
51
+ ): EnumNodeRecord {
52
+ if (!name) throw new Error('EnumNode.create: name is required');
53
+ if (!file) throw new Error('EnumNode.create: file is required');
54
+ if (!line) throw new Error('EnumNode.create: line is required');
55
+ if (column === undefined) throw new Error('EnumNode.create: column is required');
56
+
57
+ return {
58
+ id: `${file}:ENUM:${name}:${line}`,
59
+ type: this.TYPE,
60
+ name,
61
+ file,
62
+ line,
63
+ column,
64
+ isConst: options.isConst || false,
65
+ members: options.members || []
66
+ };
67
+ }
68
+
69
+ static validate(node: EnumNodeRecord): string[] {
70
+ const errors: string[] = [];
71
+
72
+ if (node.type !== this.TYPE) {
73
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
74
+ }
75
+
76
+ const nodeRecord = node as unknown as Record<string, unknown>;
77
+ for (const field of this.REQUIRED) {
78
+ if (!nodeRecord[field]) {
79
+ errors.push(`Missing required field: ${field}`);
80
+ }
81
+ }
82
+
83
+ return errors;
84
+ }
85
+ }
86
+
87
+ export type { EnumNodeRecord, EnumMemberRecord };
@@ -6,13 +6,13 @@ import type { BaseNodeRecord } from '@grafema/types';
6
6
 
7
7
  interface EventListenerNodeRecord extends BaseNodeRecord {
8
8
  type: 'EVENT_LISTENER';
9
+ column: number;
9
10
  object?: string;
10
11
  parentScopeId?: string;
11
12
  callbackArg?: string;
12
13
  }
13
14
 
14
15
  interface EventListenerNodeOptions {
15
- column?: number;
16
16
  parentScopeId?: string;
17
17
  callbackArg?: string;
18
18
  counter?: number;
@@ -21,22 +21,24 @@ interface EventListenerNodeOptions {
21
21
  export class EventListenerNode {
22
22
  static readonly TYPE = 'EVENT_LISTENER' as const;
23
23
 
24
- static readonly REQUIRED = ['name', 'file', 'line'] as const;
25
- static readonly OPTIONAL = ['object', 'column', 'parentScopeId', 'callbackArg'] as const;
24
+ static readonly REQUIRED = ['name', 'file', 'line', 'column'] as const;
25
+ static readonly OPTIONAL = ['object', 'parentScopeId', 'callbackArg'] as const;
26
26
 
27
27
  static create(
28
28
  eventName: string,
29
29
  objectName: string | undefined,
30
30
  file: string,
31
31
  line: number,
32
+ column: number,
32
33
  options: EventListenerNodeOptions = {}
33
34
  ): EventListenerNodeRecord {
34
35
  if (!eventName) throw new Error('EventListenerNode.create: eventName is required');
35
36
  if (!file) throw new Error('EventListenerNode.create: file is required');
36
37
  if (line === undefined) throw new Error('EventListenerNode.create: line is required');
38
+ if (column === undefined) throw new Error('EventListenerNode.create: column is required');
37
39
 
38
40
  const counter = options.counter !== undefined ? `:${options.counter}` : '';
39
- const id = `${file}:EVENT_LISTENER:${eventName}:${line}:${options.column || 0}${counter}`;
41
+ const id = `${file}:EVENT_LISTENER:${eventName}:${line}:${column}${counter}`;
40
42
 
41
43
  return {
42
44
  id,
@@ -45,6 +47,7 @@ export class EventListenerNode {
45
47
  object: objectName,
46
48
  file,
47
49
  line,
50
+ column,
48
51
  parentScopeId: options.parentScopeId,
49
52
  callbackArg: options.callbackArg
50
53
  };
@@ -1,30 +1,55 @@
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
 
5
12
  import type { BaseNodeRecord } from '@grafema/types';
13
+ import { computeSemanticId, type ScopeContext, type Location } from '../SemanticId.js';
6
14
 
7
15
  type ExportKind = 'value' | 'type';
8
16
 
17
+ type ExportType = 'default' | 'named' | 'all';
18
+
9
19
  interface ExportNodeRecord extends BaseNodeRecord {
10
20
  type: 'EXPORT';
11
21
  column: number;
12
22
  exportKind: ExportKind;
13
23
  local: string;
14
24
  default: boolean;
25
+ source?: string;
26
+ exportType?: ExportType;
15
27
  }
16
28
 
17
29
  interface ExportNodeOptions {
18
30
  exportKind?: ExportKind;
19
31
  local?: string;
20
32
  default?: boolean;
33
+ source?: string;
34
+ exportType?: ExportType;
35
+ }
36
+
37
+ /**
38
+ * Options for createWithContext
39
+ */
40
+ interface ExportContextOptions {
41
+ exportKind?: ExportKind;
42
+ local?: string;
43
+ default?: boolean;
44
+ source?: string;
45
+ exportType?: ExportType;
21
46
  }
22
47
 
23
48
  export class ExportNode {
24
49
  static readonly TYPE = 'EXPORT' as const;
25
50
 
26
- static readonly REQUIRED = ['name', 'file', 'line'] as const;
27
- static readonly OPTIONAL = ['column', 'exportKind', 'local', 'default'] as const;
51
+ static readonly REQUIRED = ['name', 'file', 'line', 'column'] as const;
52
+ static readonly OPTIONAL = ['exportKind', 'local', 'default', 'source', 'exportType'] as const;
28
53
 
29
54
  static create(
30
55
  name: string,
@@ -36,6 +61,7 @@ export class ExportNode {
36
61
  if (!name) throw new Error('ExportNode.create: name is required');
37
62
  if (!file) throw new Error('ExportNode.create: file is required');
38
63
  if (!line) throw new Error('ExportNode.create: line is required');
64
+ if (column === undefined) throw new Error('ExportNode.create: column is required');
39
65
 
40
66
  return {
41
67
  id: `${file}:EXPORT:${name}:${line}`,
@@ -43,10 +69,54 @@ export class ExportNode {
43
69
  name,
44
70
  file,
45
71
  line,
46
- column: column || 0,
72
+ column,
73
+ exportKind: options.exportKind || 'value',
74
+ local: options.local || name,
75
+ default: options.default || false,
76
+ ...(options.source !== undefined && { source: options.source }),
77
+ ...(options.exportType !== undefined && { exportType: options.exportType })
78
+ };
79
+ }
80
+
81
+ /**
82
+ * Create EXPORT node with semantic ID (NEW API)
83
+ *
84
+ * Uses ScopeContext from ScopeTracker for stable identifiers.
85
+ * Export names are unique within module, so no discriminator needed.
86
+ *
87
+ * @param name - Exported name (as visible to importers)
88
+ * @param context - Scope context from ScopeTracker.getContext()
89
+ * @param location - Source location { line, column }
90
+ * @param options - Optional export properties
91
+ * @returns ExportNodeRecord with semantic ID
92
+ */
93
+ static createWithContext(
94
+ name: string,
95
+ context: ScopeContext,
96
+ location: Partial<Location>,
97
+ options: ExportContextOptions = {}
98
+ ): ExportNodeRecord {
99
+ // Validate required fields
100
+ if (!name) throw new Error('ExportNode.createWithContext: name is required');
101
+ if (!context.file) throw new Error('ExportNode.createWithContext: file is required');
102
+ if (location.line === undefined) throw new Error('ExportNode.createWithContext: line is required');
103
+ if (location.column === undefined) throw new Error('ExportNode.createWithContext: column is required');
104
+
105
+ // Compute semantic ID
106
+ const id = computeSemanticId(this.TYPE, name, context);
107
+
108
+ return {
109
+ id,
110
+ type: this.TYPE,
111
+ name,
112
+ file: context.file,
113
+ line: location.line,
114
+ column: location.column,
47
115
  exportKind: options.exportKind || 'value',
48
116
  local: options.local || name,
49
- default: options.default || false
117
+ default: options.default || false,
118
+ ...(options.source !== undefined && { source: options.source }),
119
+ ...(options.exportType !== undefined && { exportType: options.exportType })
50
120
  };
51
121
  }
52
122
 
@@ -0,0 +1,232 @@
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
+
11
+ import type { BaseNodeRecord } from '@grafema/types';
12
+
13
+ interface ExpressionNodeRecord extends BaseNodeRecord {
14
+ type: 'EXPRESSION';
15
+ column: number;
16
+ expressionType: string;
17
+ // MemberExpression fields
18
+ object?: string;
19
+ property?: string;
20
+ computed?: boolean;
21
+ computedPropertyVar?: string;
22
+ // Binary/Logical expression fields
23
+ operator?: string;
24
+ // Tracking fields
25
+ path?: string;
26
+ baseName?: string;
27
+ propertyPath?: string[];
28
+ arrayIndex?: number;
29
+ }
30
+
31
+ interface ExpressionNodeOptions {
32
+ // MemberExpression
33
+ object?: string;
34
+ property?: string;
35
+ computed?: boolean;
36
+ computedPropertyVar?: string;
37
+ // Binary/Logical
38
+ operator?: string;
39
+ // Tracking
40
+ path?: string;
41
+ baseName?: string;
42
+ propertyPath?: string[];
43
+ arrayIndex?: number;
44
+ }
45
+
46
+ export class ExpressionNode {
47
+ static readonly TYPE = 'EXPRESSION' as const;
48
+
49
+ static readonly REQUIRED = ['expressionType', 'file', 'line', 'column'] as const;
50
+ static readonly OPTIONAL = [
51
+ 'object', 'property', 'computed', 'computedPropertyVar',
52
+ 'operator', 'path', 'baseName', 'propertyPath', 'arrayIndex'
53
+ ] as const;
54
+
55
+ /**
56
+ * Create EXPRESSION node
57
+ *
58
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
59
+ * @param file - File path
60
+ * @param line - Line number
61
+ * @param column - Column position
62
+ * @param options - Optional expression properties
63
+ * @returns ExpressionNodeRecord
64
+ */
65
+ static create(
66
+ expressionType: string,
67
+ file: string,
68
+ line: number,
69
+ column: number,
70
+ options: ExpressionNodeOptions = {}
71
+ ): ExpressionNodeRecord {
72
+ if (!expressionType) throw new Error('ExpressionNode.create: expressionType is required');
73
+ if (!file) throw new Error('ExpressionNode.create: file is required');
74
+ if (!line) throw new Error('ExpressionNode.create: line is required');
75
+ if (column === undefined) throw new Error('ExpressionNode.create: column is required');
76
+
77
+ const node: ExpressionNodeRecord = {
78
+ id: `${file}:EXPRESSION:${expressionType}:${line}:${column}`,
79
+ type: this.TYPE,
80
+ name: this._computeName(expressionType, options),
81
+ file,
82
+ line,
83
+ column,
84
+ expressionType
85
+ };
86
+
87
+ // Add optional fields if present
88
+ if (options.object !== undefined) node.object = options.object;
89
+ if (options.property !== undefined) node.property = options.property;
90
+ if (options.computed !== undefined) node.computed = options.computed;
91
+ if (options.computedPropertyVar !== undefined) node.computedPropertyVar = options.computedPropertyVar;
92
+ if (options.operator !== undefined) node.operator = options.operator;
93
+ if (options.path !== undefined) node.path = options.path;
94
+ if (options.baseName !== undefined) node.baseName = options.baseName;
95
+ if (options.propertyPath !== undefined) node.propertyPath = options.propertyPath;
96
+ if (options.arrayIndex !== undefined) node.arrayIndex = options.arrayIndex;
97
+
98
+ return node;
99
+ }
100
+
101
+ /**
102
+ * Compute name from expression properties
103
+ *
104
+ * Naming conventions:
105
+ * - MemberExpression: "object.property"
106
+ * - BinaryExpression: "<BinaryExpression>"
107
+ * - LogicalExpression: "<LogicalExpression>"
108
+ * - ConditionalExpression: "<ternary>"
109
+ * - TemplateLiteral: "<template>"
110
+ * - Other: expressionType
111
+ */
112
+ private static _computeName(expressionType: string, options: ExpressionNodeOptions): string {
113
+ if (options.path) {
114
+ return options.path;
115
+ }
116
+ if (options.object && options.property) {
117
+ return `${options.object}.${options.property}`;
118
+ }
119
+ // Special naming for non-MemberExpression types
120
+ switch (expressionType) {
121
+ case 'BinaryExpression':
122
+ case 'LogicalExpression':
123
+ return `<${expressionType}>`;
124
+ case 'ConditionalExpression':
125
+ return '<ternary>';
126
+ case 'TemplateLiteral':
127
+ return '<template>';
128
+ default:
129
+ return expressionType;
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Generate EXPRESSION node ID without creating the full node
135
+ *
136
+ * Used by JSASTAnalyzer when creating assignment metadata.
137
+ * The full node is created later by GraphBuilder.
138
+ *
139
+ * ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
140
+ *
141
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
142
+ * @param file - File path
143
+ * @param line - Line number
144
+ * @param column - Column position
145
+ * @returns Generated ID string in colon format
146
+ */
147
+ static generateId(
148
+ expressionType: string,
149
+ file: string,
150
+ line: number,
151
+ column: number
152
+ ): string {
153
+ return `${file}:EXPRESSION:${expressionType}:${line}:${column}`;
154
+ }
155
+
156
+ /**
157
+ * Create EXPRESSION node from assignment metadata
158
+ *
159
+ * Used by GraphBuilder when processing variableAssignments.
160
+ * The ID is provided from upstream (generated by JSASTAnalyzer).
161
+ *
162
+ * @param expressionType - Type of expression
163
+ * @param file - File path
164
+ * @param line - Line number
165
+ * @param column - Column position
166
+ * @param options - Must include id; optional: expression properties
167
+ * @returns ExpressionNodeRecord
168
+ */
169
+ static createFromMetadata(
170
+ expressionType: string,
171
+ file: string,
172
+ line: number,
173
+ column: number,
174
+ options: ExpressionNodeOptions & { id: string }
175
+ ): ExpressionNodeRecord {
176
+ if (!options.id) {
177
+ throw new Error('ExpressionNode.createFromMetadata: id is required');
178
+ }
179
+
180
+ // Validate ID format - must use colon format
181
+ if (!options.id.includes(':EXPRESSION:')) {
182
+ throw new Error(
183
+ `ExpressionNode.createFromMetadata: Invalid ID format "${options.id}". ` +
184
+ `Expected format: {file}:EXPRESSION:{type}:{line}:{column}`
185
+ );
186
+ }
187
+
188
+ // Create base node structure
189
+ const node: ExpressionNodeRecord = {
190
+ id: options.id, // Use provided ID (from upstream)
191
+ type: this.TYPE,
192
+ name: this._computeName(expressionType, options),
193
+ file,
194
+ line,
195
+ column,
196
+ expressionType
197
+ };
198
+
199
+ // Add optional fields if present (same logic as create())
200
+ if (options.object !== undefined) node.object = options.object;
201
+ if (options.property !== undefined) node.property = options.property;
202
+ if (options.computed !== undefined) node.computed = options.computed;
203
+ if (options.computedPropertyVar !== undefined) node.computedPropertyVar = options.computedPropertyVar;
204
+ if (options.operator !== undefined) node.operator = options.operator;
205
+ if (options.path !== undefined) node.path = options.path;
206
+ if (options.baseName !== undefined) node.baseName = options.baseName;
207
+ if (options.propertyPath !== undefined) node.propertyPath = options.propertyPath;
208
+ if (options.arrayIndex !== undefined) node.arrayIndex = options.arrayIndex;
209
+
210
+ return node;
211
+ }
212
+
213
+ static validate(node: ExpressionNodeRecord): string[] {
214
+ const errors: string[] = [];
215
+
216
+ if (node.type !== this.TYPE) {
217
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
218
+ }
219
+
220
+ if (!node.expressionType) {
221
+ errors.push('Missing required field: expressionType');
222
+ }
223
+
224
+ if (!node.file) {
225
+ errors.push('Missing required field: file');
226
+ }
227
+
228
+ return errors;
229
+ }
230
+ }
231
+
232
+ export type { ExpressionNodeRecord, ExpressionNodeOptions };
@@ -0,0 +1,65 @@
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
+
11
+ import type { BaseNodeRecord } from '@grafema/types';
12
+
13
+ interface ExternalModuleNodeRecord extends BaseNodeRecord {
14
+ type: 'EXTERNAL_MODULE';
15
+ }
16
+
17
+ export class ExternalModuleNode {
18
+ static readonly TYPE = 'EXTERNAL_MODULE' as const;
19
+
20
+ static readonly REQUIRED = ['name'] as const;
21
+ static readonly OPTIONAL = [] as const;
22
+
23
+ /**
24
+ * Create EXTERNAL_MODULE node
25
+ *
26
+ * Normalizes node: prefix for Node.js builtins:
27
+ * - 'node:fs' -> 'fs'
28
+ * - 'node:path' -> 'path'
29
+ *
30
+ * @param source - Module name (e.g., 'lodash', '@tanstack/react-query', 'node:fs')
31
+ * @returns ExternalModuleNodeRecord
32
+ */
33
+ static create(source: string): ExternalModuleNodeRecord {
34
+ if (!source) throw new Error('ExternalModuleNode.create: source is required');
35
+
36
+ // Normalize node: prefix for Node.js builtins
37
+ const normalizedSource = source.startsWith('node:')
38
+ ? source.slice(5)
39
+ : source;
40
+
41
+ return {
42
+ id: `EXTERNAL_MODULE:${normalizedSource}`,
43
+ type: this.TYPE,
44
+ name: normalizedSource,
45
+ file: '',
46
+ line: 0
47
+ };
48
+ }
49
+
50
+ static validate(node: ExternalModuleNodeRecord): string[] {
51
+ const errors: string[] = [];
52
+
53
+ if (node.type !== this.TYPE) {
54
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
55
+ }
56
+
57
+ if (!node.name) {
58
+ errors.push('Missing required field: name');
59
+ }
60
+
61
+ return errors;
62
+ }
63
+ }
64
+
65
+ export type { ExternalModuleNodeRecord };
@@ -1,19 +1,26 @@
1
1
  /**
2
- * ExternalStdioNode - contract for EXTERNAL_STDIO node (singleton)
2
+ * ExternalStdioNode - contract for net:stdio node (singleton)
3
+ *
4
+ * Represents standard I/O streams (console.log, console.error, etc.)
5
+ * Singleton node - only one instance per graph.
6
+ *
7
+ * Uses namespaced type 'net:stdio' for semantic grouping - AI agents
8
+ * can query all I/O-related nodes via 'net:*' pattern.
3
9
  */
4
10
 
5
11
  import type { BaseNodeRecord } from '@grafema/types';
6
12
 
7
13
  interface ExternalStdioNodeRecord extends BaseNodeRecord {
8
- type: 'EXTERNAL_STDIO';
14
+ type: 'net:stdio';
15
+ description?: string;
9
16
  }
10
17
 
11
18
  export class ExternalStdioNode {
12
- static readonly TYPE = 'EXTERNAL_STDIO' as const;
13
- static readonly SINGLETON_ID = 'EXTERNAL_STDIO:__stdio__';
19
+ static readonly TYPE = 'net:stdio' as const;
20
+ static readonly SINGLETON_ID = 'net:stdio#__stdio__';
14
21
 
15
- static readonly REQUIRED = ['name', 'file'] as const;
16
- static readonly OPTIONAL = [] as const;
22
+ static readonly REQUIRED = ['name'] as const;
23
+ static readonly OPTIONAL = ['description'] as const;
17
24
 
18
25
  static create(): ExternalStdioNodeRecord {
19
26
  return {
@@ -21,14 +28,15 @@ export class ExternalStdioNode {
21
28
  type: this.TYPE,
22
29
  name: '__stdio__',
23
30
  file: '__builtin__',
24
- line: 0
31
+ line: 0,
32
+ description: 'Standard input/output stream'
25
33
  };
26
34
  }
27
35
 
28
36
  static validate(node: ExternalStdioNodeRecord): string[] {
29
37
  const errors: string[] = [];
30
- if (node.type !== this.TYPE) errors.push(`Expected type ${this.TYPE}`);
31
- if (node.id !== this.SINGLETON_ID) errors.push(`Invalid singleton ID`);
38
+ if (node.type !== this.TYPE) errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
39
+ if (node.id !== this.SINGLETON_ID) errors.push(`Invalid singleton ID: ${node.id}, expected ${this.SINGLETON_ID}`);
32
40
  return errors;
33
41
  }
34
42
  }