@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,154 @@
1
+ /**
2
+ * ScopeTracker - Track scope hierarchy during AST traversal
3
+ *
4
+ * Maintains the current scope path and provides counters for:
5
+ * - Counted scopes (if#0, try#1, etc.)
6
+ * - Item counters (CALL, LITERAL, etc.)
7
+ * - Sibling tracking (anonymous[0], anonymous[1], etc.)
8
+ *
9
+ * Used with SemanticId to generate stable identifiers.
10
+ */
11
+
12
+ import type { ScopeContext } from './SemanticId.js';
13
+
14
+ /**
15
+ * Entry in the scope stack
16
+ */
17
+ export interface ScopeEntry {
18
+ name: string;
19
+ type: string;
20
+ counter?: number;
21
+ }
22
+
23
+ /**
24
+ * Result of entering a counted scope
25
+ */
26
+ export interface CountedScopeResult {
27
+ name: string;
28
+ discriminator: number;
29
+ }
30
+
31
+ /**
32
+ * ScopeTracker - Manages scope hierarchy and counters during AST traversal
33
+ */
34
+ export class ScopeTracker {
35
+ /** Source file path */
36
+ readonly file: string;
37
+
38
+ /** Current scope stack */
39
+ private scopeStack: ScopeEntry[] = [];
40
+
41
+ /** Counters for various purposes (scoped by scope path) */
42
+ private counters: Map<string, number> = new Map();
43
+
44
+ constructor(file: string) {
45
+ this.file = file;
46
+ }
47
+
48
+ // === Scope Management ===
49
+
50
+ /**
51
+ * Enter a named scope (function, class, etc.)
52
+ */
53
+ enterScope(name: string, type: string): void {
54
+ this.scopeStack.push({ name, type });
55
+ }
56
+
57
+ /**
58
+ * Enter a counted scope (if, try, for, etc.)
59
+ * Automatically assigns a discriminator.
60
+ */
61
+ enterCountedScope(type: string): CountedScopeResult {
62
+ const key = this.counterKey(type);
63
+ const n = this.counters.get(key) || 0;
64
+ this.counters.set(key, n + 1);
65
+
66
+ const name = `${type}#${n}`;
67
+ this.scopeStack.push({ name, type, counter: n });
68
+ return { name, discriminator: n };
69
+ }
70
+
71
+ /**
72
+ * Exit the current scope
73
+ */
74
+ exitScope(): void {
75
+ this.scopeStack.pop();
76
+ }
77
+
78
+ // === ID Generation ===
79
+
80
+ /**
81
+ * Get current scope context for semantic ID generation
82
+ */
83
+ getContext(): ScopeContext {
84
+ return {
85
+ file: this.file,
86
+ scopePath: this.scopeStack.map(s => s.name)
87
+ };
88
+ }
89
+
90
+ /**
91
+ * Get scope path as string (for display/debugging)
92
+ */
93
+ getScopePath(): string {
94
+ if (this.scopeStack.length === 0) return 'global';
95
+ return this.scopeStack.map(s => s.name).join('->');
96
+ }
97
+
98
+ /**
99
+ * Get the innermost enclosing scope of a specific type.
100
+ * Searches from innermost to outermost.
101
+ *
102
+ * @param scopeType - Type to search for ('CLASS', 'FUNCTION', etc.)
103
+ * @returns The scope entry name if found, undefined otherwise
104
+ */
105
+ getEnclosingScope(scopeType: string): string | undefined {
106
+ // Search from end (innermost) to start (outermost)
107
+ for (let i = this.scopeStack.length - 1; i >= 0; i--) {
108
+ if (this.scopeStack[i].type === scopeType) {
109
+ return this.scopeStack[i].name;
110
+ }
111
+ }
112
+ return undefined;
113
+ }
114
+
115
+ // === Counter Management ===
116
+
117
+ /**
118
+ * Get next counter for item type within current scope.
119
+ * Used for CALL, LITERAL, etc. that need #N discriminators.
120
+ */
121
+ getItemCounter(itemType: string): number {
122
+ const key = this.counterKey(itemType);
123
+ const n = this.counters.get(key) || 0;
124
+ this.counters.set(key, n + 1);
125
+ return n;
126
+ }
127
+
128
+ /**
129
+ * Get current count without incrementing.
130
+ * Used to check for collisions.
131
+ */
132
+ peekItemCounter(itemType: string): number {
133
+ return this.counters.get(this.counterKey(itemType)) || 0;
134
+ }
135
+
136
+ // === Sibling Tracking ===
137
+
138
+ /**
139
+ * Track siblings by name within current scope.
140
+ * Used for anonymous functions: anonymous[0], anonymous[1]
141
+ */
142
+ getSiblingIndex(name: string): number {
143
+ const key = `${this.getScopePath()}:sibling:${name}`;
144
+ const n = this.counters.get(key) || 0;
145
+ this.counters.set(key, n + 1);
146
+ return n;
147
+ }
148
+
149
+ // === Private ===
150
+
151
+ private counterKey(itemType: string): string {
152
+ return `${this.getScopePath()}:${itemType}`;
153
+ }
154
+ }
@@ -0,0 +1,192 @@
1
+ /**
2
+ * SemanticId - Stable identifiers for code elements
3
+ *
4
+ * Semantic IDs provide stable identifiers for code elements that don't change
5
+ * when unrelated code is added/removed (no line numbers in IDs).
6
+ *
7
+ * Format: {file}->{scope_path}->{type}->{name}[#discriminator]
8
+ *
9
+ * Examples:
10
+ * src/app.js->global->FUNCTION->processData
11
+ * src/app.js->UserService->METHOD->login
12
+ * src/app.js->getUser->if#0->CALL->console.log#0
13
+ *
14
+ * Special formats:
15
+ * Singletons: net:stdio->__stdio__
16
+ * External modules: EXTERNAL_MODULE->lodash
17
+ */
18
+
19
+ /**
20
+ * Location in source file
21
+ */
22
+ export interface Location {
23
+ line: number;
24
+ column: number;
25
+ endLine?: number;
26
+ endColumn?: number;
27
+ }
28
+
29
+ /**
30
+ * Scope context for semantic ID generation
31
+ */
32
+ export interface ScopeContext {
33
+ /** Source file path */
34
+ file: string;
35
+ /** Array of scope names, e.g. ['MyClass', 'myMethod', 'if#1'] */
36
+ scopePath: string[];
37
+ }
38
+
39
+ /**
40
+ * Options for semantic ID generation
41
+ */
42
+ export interface SemanticIdOptions {
43
+ /** Counter for disambiguation (#N) */
44
+ discriminator?: number;
45
+ /** Context string for special cases ([context]) */
46
+ context?: string;
47
+ }
48
+
49
+ /**
50
+ * Parsed semantic ID components
51
+ */
52
+ export interface ParsedSemanticId {
53
+ file: string;
54
+ scopePath: string[];
55
+ type: string;
56
+ name: string;
57
+ discriminator?: number;
58
+ context?: string;
59
+ }
60
+
61
+ /**
62
+ * Item with name and location for discriminator computation
63
+ */
64
+ export interface LocatedItem {
65
+ name: string;
66
+ location: Location;
67
+ }
68
+
69
+ /**
70
+ * Compute semantic ID for any node type.
71
+ *
72
+ * @param type - Node type (FUNCTION, CALL, VARIABLE, etc.)
73
+ * @param name - Node name
74
+ * @param context - Scope context from ScopeTracker
75
+ * @param options - Optional discriminator or context
76
+ * @returns Semantic ID string
77
+ */
78
+ export function computeSemanticId(
79
+ type: string,
80
+ name: string,
81
+ context: ScopeContext,
82
+ options?: SemanticIdOptions
83
+ ): string {
84
+ const { file, scopePath } = context;
85
+ const scope = scopePath.length > 0 ? scopePath.join('->') : 'global';
86
+
87
+ let id = `${file}->${scope}->${type}->${name}`;
88
+
89
+ if (options?.discriminator !== undefined) {
90
+ id += `#${options.discriminator}`;
91
+ } else if (options?.context) {
92
+ id += `[${options.context}]`;
93
+ }
94
+
95
+ return id;
96
+ }
97
+
98
+ /**
99
+ * Parse semantic ID back to components.
100
+ *
101
+ * @param id - Semantic ID to parse
102
+ * @returns Parsed components or null if invalid
103
+ */
104
+ export function parseSemanticId(id: string): ParsedSemanticId | null {
105
+ // Handle singletons
106
+ if (id.startsWith('net:stdio') || id.startsWith('net:request')) {
107
+ const [prefix, name] = id.split('->');
108
+ return {
109
+ file: '',
110
+ scopePath: [prefix],
111
+ type: 'SINGLETON',
112
+ name,
113
+ discriminator: undefined
114
+ };
115
+ }
116
+
117
+ if (id.startsWith('EXTERNAL_MODULE')) {
118
+ const [, name] = id.split('->');
119
+ return {
120
+ file: '',
121
+ scopePath: [],
122
+ type: 'EXTERNAL_MODULE',
123
+ name,
124
+ discriminator: undefined
125
+ };
126
+ }
127
+
128
+ const parts = id.split('->');
129
+ if (parts.length < 4) return null;
130
+
131
+ const file = parts[0];
132
+ const type = parts[parts.length - 2];
133
+ let name = parts[parts.length - 1];
134
+ const scopePath = parts.slice(1, -2);
135
+
136
+ // Parse discriminator or context
137
+ let discriminator: number | undefined;
138
+ let context: string | undefined;
139
+
140
+ const hashMatch = name.match(/^(.+)#(\d+)$/);
141
+ if (hashMatch) {
142
+ name = hashMatch[1];
143
+ discriminator = parseInt(hashMatch[2], 10);
144
+ }
145
+
146
+ const bracketMatch = name.match(/^(.+)\[(.+)\]$/);
147
+ if (bracketMatch) {
148
+ name = bracketMatch[1];
149
+ context = bracketMatch[2];
150
+ }
151
+
152
+ return { file, scopePath, type, name, discriminator, context };
153
+ }
154
+
155
+ /**
156
+ * Compute discriminator for items with same name in same scope.
157
+ * Uses line/column for stable ordering.
158
+ *
159
+ * @param items - All items in scope
160
+ * @param targetName - Name to find discriminator for
161
+ * @param targetLocation - Location of target item
162
+ * @returns Discriminator (0-based index among same-named items)
163
+ */
164
+ export function computeDiscriminator(
165
+ items: LocatedItem[],
166
+ targetName: string,
167
+ targetLocation: Location
168
+ ): number {
169
+ // Filter items with same name
170
+ const sameNameItems = items.filter(item => item.name === targetName);
171
+
172
+ if (sameNameItems.length <= 1) {
173
+ return 0;
174
+ }
175
+
176
+ // Sort by line, then by column for stable ordering
177
+ sameNameItems.sort((a, b) => {
178
+ if (a.location.line !== b.location.line) {
179
+ return a.location.line - b.location.line;
180
+ }
181
+ return a.location.column - b.location.column;
182
+ });
183
+
184
+ // Find index of target
185
+ const index = sameNameItems.findIndex(
186
+ item =>
187
+ item.location.line === targetLocation.line &&
188
+ item.location.column === targetLocation.column
189
+ );
190
+
191
+ return index >= 0 ? index : 0;
192
+ }
@@ -170,9 +170,10 @@ export class VersionManager {
170
170
  return `${type}:${name}:${file}:${line || 0}`;
171
171
  }
172
172
 
173
- // Для MODULE - только file
173
+ // Для MODULE - use semantic ID format with name (relative path)
174
174
  if (type === 'MODULE') {
175
- return `MODULE:${file}`;
175
+ // name stores the relative path for MODULE nodes
176
+ return `${name}->global->MODULE->module`;
176
177
  }
177
178
 
178
179
  // Для SERVICE - используем имя или file
@@ -0,0 +1,89 @@
1
+ /**
2
+ * ArgumentExpressionNode - EXPRESSION node with call argument context
3
+ *
4
+ * Extends ExpressionNode with fields tracking which call and argument position
5
+ * this expression appears in. Used for argument data flow tracking.
6
+ *
7
+ * ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
8
+ * With counter: {file}:EXPRESSION:{expressionType}:{line}:{column}:{counter}
9
+ *
10
+ * Example: /src/app.ts:EXPRESSION:BinaryExpression:25:10
11
+ *
12
+ * Note: Uses counter suffix since same expression at same position can appear
13
+ * multiple times in different argument contexts.
14
+ */
15
+
16
+ import { ExpressionNode, type ExpressionNodeRecord, type ExpressionNodeOptions } from './ExpressionNode.js';
17
+
18
+ interface ArgumentExpressionNodeRecord extends ExpressionNodeRecord {
19
+ parentCallId: string;
20
+ argIndex: number;
21
+ }
22
+
23
+ interface ArgumentExpressionNodeOptions extends ExpressionNodeOptions {
24
+ parentCallId: string;
25
+ argIndex: number;
26
+ counter?: number;
27
+ }
28
+
29
+ export class ArgumentExpressionNode {
30
+ // Inherit TYPE from ExpressionNode
31
+ static readonly TYPE = ExpressionNode.TYPE;
32
+ static readonly REQUIRED: readonly string[] = [...ExpressionNode.REQUIRED, 'parentCallId', 'argIndex'];
33
+ static readonly OPTIONAL: readonly string[] = [...ExpressionNode.OPTIONAL, 'counter'];
34
+
35
+ /**
36
+ * Create EXPRESSION node with argument context
37
+ *
38
+ * @param expressionType - Type of expression (BinaryExpression, LogicalExpression, etc.)
39
+ * @param file - File path
40
+ * @param line - Line number
41
+ * @param column - Column position
42
+ * @param options - Required: parentCallId, argIndex; Optional: expression properties, counter
43
+ * @returns ArgumentExpressionNodeRecord
44
+ */
45
+ static create(
46
+ expressionType: string,
47
+ file: string,
48
+ line: number,
49
+ column: number,
50
+ options: ArgumentExpressionNodeOptions
51
+ ): ArgumentExpressionNodeRecord {
52
+ if (!options.parentCallId) {
53
+ throw new Error('ArgumentExpressionNode.create: parentCallId is required');
54
+ }
55
+ if (options.argIndex === undefined) {
56
+ throw new Error('ArgumentExpressionNode.create: argIndex is required');
57
+ }
58
+
59
+ // Create base EXPRESSION node using parent class
60
+ const baseNode = ExpressionNode.create(expressionType, file, line, column, options);
61
+
62
+ // Override ID with counter suffix (since same location can have multiple expressions)
63
+ const counter = options.counter !== undefined ? `:${options.counter}` : '';
64
+ const id = `${file}:EXPRESSION:${expressionType}:${line}:${column}${counter}`;
65
+
66
+ return {
67
+ ...baseNode,
68
+ id,
69
+ parentCallId: options.parentCallId,
70
+ argIndex: options.argIndex
71
+ };
72
+ }
73
+
74
+ static validate(node: ArgumentExpressionNodeRecord): string[] {
75
+ const errors = ExpressionNode.validate(node);
76
+
77
+ if (!node.parentCallId) {
78
+ errors.push('Missing required field: parentCallId');
79
+ }
80
+
81
+ if (node.argIndex === undefined) {
82
+ errors.push('Missing required field: argIndex');
83
+ }
84
+
85
+ return errors;
86
+ }
87
+ }
88
+
89
+ export type { ArgumentExpressionNodeRecord, ArgumentExpressionNodeOptions };
@@ -0,0 +1,66 @@
1
+ /**
2
+ * ArrayLiteralNode - contract for ARRAY_LITERAL node
3
+ *
4
+ * Represents an array literal expression: [elem1, elem2, ...]
5
+ * Used for tracking data flow through array construction.
6
+ */
7
+
8
+ import type { BaseNodeRecord } from '@grafema/types';
9
+
10
+ interface ArrayLiteralNodeRecord extends BaseNodeRecord {
11
+ type: 'ARRAY_LITERAL';
12
+ column: number;
13
+ parentCallId?: string;
14
+ argIndex?: number;
15
+ }
16
+
17
+ interface ArrayLiteralNodeOptions {
18
+ parentCallId?: string;
19
+ argIndex?: number;
20
+ counter?: number;
21
+ }
22
+
23
+ export class ArrayLiteralNode {
24
+ static readonly TYPE = 'ARRAY_LITERAL' as const;
25
+
26
+ static readonly REQUIRED = ['file', 'line', 'column'] as const;
27
+ static readonly OPTIONAL = ['parentCallId', 'argIndex'] as const;
28
+
29
+ static create(
30
+ file: string,
31
+ line: number,
32
+ column: number,
33
+ options: ArrayLiteralNodeOptions = {}
34
+ ): ArrayLiteralNodeRecord {
35
+ if (!file) throw new Error('ArrayLiteralNode.create: file is required');
36
+ if (line === undefined) throw new Error('ArrayLiteralNode.create: line is required');
37
+ if (column === undefined) throw new Error('ArrayLiteralNode.create: column is required');
38
+
39
+ const counter = options.counter !== undefined ? `:${options.counter}` : '';
40
+ const argSuffix = options.argIndex !== undefined ? `arg${options.argIndex}` : 'arr';
41
+ const id = `ARRAY_LITERAL#${argSuffix}#${file}#${line}:${column}${counter}`;
42
+
43
+ return {
44
+ id,
45
+ type: this.TYPE,
46
+ name: `<array>`,
47
+ file,
48
+ line,
49
+ column,
50
+ parentCallId: options.parentCallId,
51
+ argIndex: options.argIndex
52
+ };
53
+ }
54
+
55
+ static validate(node: ArrayLiteralNodeRecord): string[] {
56
+ const errors: string[] = [];
57
+ if (node.type !== this.TYPE) errors.push(`Expected type ${this.TYPE}`);
58
+ const nodeRecord = node as unknown as Record<string, unknown>;
59
+ for (const field of this.REQUIRED) {
60
+ if (nodeRecord[field] === undefined) errors.push(`Missing: ${field}`);
61
+ }
62
+ return errors;
63
+ }
64
+ }
65
+
66
+ export type { ArrayLiteralNodeRecord, ArrayLiteralNodeOptions };
@@ -0,0 +1,113 @@
1
+ /**
2
+ * BranchNode - contract for BRANCH node
3
+ *
4
+ * Represents control flow branching (switch statements).
5
+ * Future: if statements, ternary expressions.
6
+ *
7
+ * ID format (legacy): {file}:BRANCH:{branchType}:{line}:{counter}
8
+ * Semantic ID format: {file}->{scope_path}->BRANCH->switch#N
9
+ */
10
+
11
+ import type { BaseNodeRecord } from '@grafema/types';
12
+ import { computeSemanticId, type ScopeContext, type Location } from '../SemanticId.js';
13
+
14
+ interface BranchNodeRecord extends BaseNodeRecord {
15
+ type: 'BRANCH';
16
+ column: number;
17
+ branchType: 'switch' | 'if' | 'ternary';
18
+ parentScopeId?: string;
19
+ }
20
+
21
+ interface BranchNodeOptions {
22
+ parentScopeId?: string;
23
+ counter?: number;
24
+ }
25
+
26
+ interface BranchContextOptions {
27
+ discriminator: number;
28
+ parentScopeId?: string;
29
+ }
30
+
31
+ export class BranchNode {
32
+ static readonly TYPE = 'BRANCH' as const;
33
+ static readonly REQUIRED = ['branchType', 'file', 'line', 'column'] as const;
34
+ static readonly OPTIONAL = ['parentScopeId'] as const;
35
+
36
+ /**
37
+ * Create BRANCH node (legacy ID)
38
+ */
39
+ static create(
40
+ branchType: 'switch' | 'if' | 'ternary',
41
+ file: string,
42
+ line: number,
43
+ column: number,
44
+ options: BranchNodeOptions = {}
45
+ ): BranchNodeRecord {
46
+ // Validation
47
+ if (!branchType) throw new Error('BranchNode.create: branchType is required');
48
+ if (!file) throw new Error('BranchNode.create: file is required');
49
+ if (line === undefined) throw new Error('BranchNode.create: line is required');
50
+ if (column === undefined) throw new Error('BranchNode.create: column is required');
51
+
52
+ const counter = options.counter !== undefined ? `:${options.counter}` : '';
53
+ const id = `${file}:BRANCH:${branchType}:${line}${counter}`;
54
+
55
+ return {
56
+ id,
57
+ type: this.TYPE,
58
+ name: branchType,
59
+ file,
60
+ line,
61
+ column,
62
+ branchType,
63
+ parentScopeId: options.parentScopeId
64
+ };
65
+ }
66
+
67
+ /**
68
+ * Create BRANCH node with semantic ID (NEW API)
69
+ */
70
+ static createWithContext(
71
+ branchType: 'switch' | 'if' | 'ternary',
72
+ context: ScopeContext,
73
+ location: Partial<Location>,
74
+ options: BranchContextOptions
75
+ ): BranchNodeRecord {
76
+ if (!branchType) throw new Error('BranchNode.createWithContext: branchType is required');
77
+ if (!context.file) throw new Error('BranchNode.createWithContext: file is required');
78
+ if (location.line === undefined) throw new Error('BranchNode.createWithContext: line is required');
79
+ if (location.column === undefined) throw new Error('BranchNode.createWithContext: column is required');
80
+ if (options.discriminator === undefined) throw new Error('BranchNode.createWithContext: discriminator is required');
81
+
82
+ const id = computeSemanticId('BRANCH', branchType, context, {
83
+ discriminator: options.discriminator
84
+ });
85
+
86
+ return {
87
+ id,
88
+ type: this.TYPE,
89
+ name: `${branchType}#${options.discriminator}`,
90
+ file: context.file,
91
+ line: location.line,
92
+ column: location.column,
93
+ branchType,
94
+ parentScopeId: options.parentScopeId
95
+ };
96
+ }
97
+
98
+ static validate(node: BranchNodeRecord): string[] {
99
+ const errors: string[] = [];
100
+ if (node.type !== this.TYPE) {
101
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
102
+ }
103
+ if (!node.branchType) {
104
+ errors.push('Missing required field: branchType');
105
+ }
106
+ if (!node.file) {
107
+ errors.push('Missing required field: file');
108
+ }
109
+ return errors;
110
+ }
111
+ }
112
+
113
+ export type { BranchNodeRecord };