@grafema/core 0.1.0-alpha.5 → 0.1.1-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/README.md +0 -1
  2. package/dist/Orchestrator.d.ts +24 -2
  3. package/dist/Orchestrator.d.ts.map +1 -1
  4. package/dist/Orchestrator.js +197 -24
  5. package/dist/config/ConfigLoader.d.ts +72 -0
  6. package/dist/config/ConfigLoader.d.ts.map +1 -0
  7. package/dist/config/ConfigLoader.js +187 -0
  8. package/dist/config/index.d.ts +6 -0
  9. package/dist/config/index.d.ts.map +1 -0
  10. package/dist/config/index.js +4 -0
  11. package/dist/core/ASTWorker.d.ts +11 -36
  12. package/dist/core/ASTWorker.d.ts.map +1 -1
  13. package/dist/core/ASTWorker.js +93 -99
  14. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  15. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  16. package/dist/core/CoverageAnalyzer.js +198 -0
  17. package/dist/core/FileNodeManager.d.ts +40 -0
  18. package/dist/core/FileNodeManager.d.ts.map +1 -0
  19. package/dist/core/FileNodeManager.js +84 -0
  20. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  21. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  22. package/dist/core/GraphFreshnessChecker.js +101 -0
  23. package/dist/core/HashUtils.d.ts +24 -0
  24. package/dist/core/HashUtils.d.ts.map +1 -0
  25. package/dist/core/HashUtils.js +45 -0
  26. package/dist/core/IncrementalReanalyzer.d.ts +36 -0
  27. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  28. package/dist/core/IncrementalReanalyzer.js +132 -0
  29. package/dist/core/NodeFactory.d.ts +225 -17
  30. package/dist/core/NodeFactory.d.ts.map +1 -1
  31. package/dist/core/NodeFactory.js +208 -18
  32. package/dist/core/ScopeTracker.d.ts +84 -0
  33. package/dist/core/ScopeTracker.d.ts.map +1 -0
  34. package/dist/core/ScopeTracker.js +116 -0
  35. package/dist/core/SemanticId.d.ts +90 -0
  36. package/dist/core/SemanticId.d.ts.map +1 -0
  37. package/dist/core/SemanticId.js +115 -0
  38. package/dist/core/VersionManager.d.ts.map +1 -1
  39. package/dist/core/VersionManager.js +3 -2
  40. package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
  41. package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
  42. package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
  43. package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
  44. package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
  45. package/dist/core/nodes/ArrayLiteralNode.js +41 -0
  46. package/dist/core/nodes/CallSiteNode.d.ts +28 -0
  47. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
  48. package/dist/core/nodes/CallSiteNode.js +46 -0
  49. package/dist/core/nodes/ClassNode.d.ts +33 -1
  50. package/dist/core/nodes/ClassNode.d.ts.map +1 -1
  51. package/dist/core/nodes/ClassNode.js +46 -2
  52. package/dist/core/nodes/DecoratorNode.d.ts +42 -0
  53. package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
  54. package/dist/core/nodes/DecoratorNode.js +62 -0
  55. package/dist/core/nodes/EnumNode.d.ts +42 -0
  56. package/dist/core/nodes/EnumNode.d.ts.map +1 -0
  57. package/dist/core/nodes/EnumNode.js +54 -0
  58. package/dist/core/nodes/ExportNode.d.ts +37 -1
  59. package/dist/core/nodes/ExportNode.d.ts.map +1 -1
  60. package/dist/core/nodes/ExportNode.js +48 -2
  61. package/dist/core/nodes/ExpressionNode.d.ts +97 -0
  62. package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
  63. package/dist/core/nodes/ExpressionNode.js +178 -0
  64. package/dist/core/nodes/ExternalModuleNode.d.ts +28 -0
  65. package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
  66. package/dist/core/nodes/ExternalModuleNode.js +41 -0
  67. package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
  68. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
  69. package/dist/core/nodes/ExternalStdioNode.js +15 -8
  70. package/dist/core/nodes/FunctionNode.d.ts +36 -0
  71. package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
  72. package/dist/core/nodes/FunctionNode.js +80 -1
  73. package/dist/core/nodes/ImportNode.d.ts +19 -5
  74. package/dist/core/nodes/ImportNode.d.ts.map +1 -1
  75. package/dist/core/nodes/ImportNode.js +23 -5
  76. package/dist/core/nodes/InterfaceNode.d.ts +46 -0
  77. package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
  78. package/dist/core/nodes/InterfaceNode.js +55 -0
  79. package/dist/core/nodes/IssueNode.d.ts +73 -0
  80. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  81. package/dist/core/nodes/IssueNode.js +129 -0
  82. package/dist/core/nodes/MethodCallNode.d.ts +30 -0
  83. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
  84. package/dist/core/nodes/MethodCallNode.js +49 -0
  85. package/dist/core/nodes/MethodNode.d.ts +32 -0
  86. package/dist/core/nodes/MethodNode.d.ts.map +1 -1
  87. package/dist/core/nodes/MethodNode.js +48 -0
  88. package/dist/core/nodes/ModuleNode.d.ts +31 -0
  89. package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
  90. package/dist/core/nodes/ModuleNode.js +37 -0
  91. package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
  92. package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
  93. package/dist/core/nodes/NetworkRequestNode.js +65 -0
  94. package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
  95. package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
  96. package/dist/core/nodes/ObjectLiteralNode.js +41 -0
  97. package/dist/core/nodes/ScopeNode.d.ts +31 -0
  98. package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
  99. package/dist/core/nodes/ScopeNode.js +49 -0
  100. package/dist/core/nodes/TypeNode.d.ts +36 -0
  101. package/dist/core/nodes/TypeNode.d.ts.map +1 -0
  102. package/dist/core/nodes/TypeNode.js +53 -0
  103. package/dist/core/nodes/VariableDeclarationNode.d.ts +27 -0
  104. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
  105. package/dist/core/nodes/VariableDeclarationNode.js +40 -0
  106. package/dist/core/nodes/index.d.ts +12 -1
  107. package/dist/core/nodes/index.d.ts.map +1 -1
  108. package/dist/core/nodes/index.js +14 -0
  109. package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
  110. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  111. package/dist/diagnostics/DiagnosticCollector.js +129 -0
  112. package/dist/diagnostics/DiagnosticReporter.d.ts +77 -0
  113. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  114. package/dist/diagnostics/DiagnosticReporter.js +159 -0
  115. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  116. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  117. package/dist/diagnostics/DiagnosticWriter.js +43 -0
  118. package/dist/diagnostics/index.d.ts +14 -0
  119. package/dist/diagnostics/index.d.ts.map +1 -0
  120. package/dist/diagnostics/index.js +11 -0
  121. package/dist/errors/GrafemaError.d.ts +118 -0
  122. package/dist/errors/GrafemaError.d.ts.map +1 -0
  123. package/dist/errors/GrafemaError.js +131 -0
  124. package/dist/index.d.ts +57 -1
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +54 -1
  127. package/dist/logging/Logger.d.ts +48 -0
  128. package/dist/logging/Logger.d.ts.map +1 -0
  129. package/dist/logging/Logger.js +134 -0
  130. package/dist/plugins/Plugin.d.ts +5 -1
  131. package/dist/plugins/Plugin.d.ts.map +1 -1
  132. package/dist/plugins/Plugin.js +33 -0
  133. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  134. package/dist/plugins/analysis/DatabaseAnalyzer.js +13 -6
  135. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  136. package/dist/plugins/analysis/ExpressAnalyzer.js +27 -19
  137. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  138. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +21 -14
  139. package/dist/plugins/analysis/FetchAnalyzer.d.ts +1 -0
  140. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  141. package/dist/plugins/analysis/FetchAnalyzer.js +34 -14
  142. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
  143. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  144. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
  145. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +180 -17
  146. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  147. package/dist/plugins/analysis/JSASTAnalyzer.js +1171 -471
  148. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  149. package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
  150. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  151. package/dist/plugins/analysis/RustAnalyzer.js +15 -10
  152. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  153. package/dist/plugins/analysis/SQLiteAnalyzer.js +9 -7
  154. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  155. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
  156. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  157. package/dist/plugins/analysis/SocketIOAnalyzer.js +27 -15
  158. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  159. package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
  160. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +34 -4
  161. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  162. package/dist/plugins/analysis/ast/GraphBuilder.js +318 -298
  163. package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
  164. package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
  165. package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
  166. package/dist/plugins/analysis/ast/types.d.ts +176 -5
  167. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  168. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
  169. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
  170. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
  171. package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
  172. package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
  173. package/dist/plugins/analysis/ast/utils/index.js +5 -0
  174. package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
  175. package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
  176. package/dist/plugins/analysis/ast/utils/location.js +78 -0
  177. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +9 -4
  178. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  179. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
  180. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +99 -9
  181. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  182. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +663 -125
  183. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
  184. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  185. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
  186. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +4 -1
  187. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  188. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +128 -63
  189. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
  190. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +11 -8
  191. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
  192. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  193. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
  194. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +4 -1
  195. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  196. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +17 -13
  197. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  198. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
  199. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
  200. package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
  201. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
  202. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
  203. package/dist/plugins/discovery/WorkspaceDiscovery.js +136 -0
  204. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
  205. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
  206. package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
  207. package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
  208. package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
  209. package/dist/plugins/discovery/workspaces/detector.js +49 -0
  210. package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
  211. package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
  212. package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
  213. package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
  214. package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
  215. package/dist/plugins/discovery/workspaces/index.js +8 -0
  216. package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
  217. package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
  218. package/dist/plugins/discovery/workspaces/parsers.js +80 -0
  219. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  220. package/dist/plugins/enrichment/AliasTracker.js +14 -8
  221. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  222. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +14 -7
  223. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  224. package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
  225. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  226. package/dist/plugins/enrichment/MethodCallResolver.js +18 -12
  227. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  228. package/dist/plugins/enrichment/MountPointResolver.js +8 -3
  229. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  230. package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
  231. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  232. package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
  233. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +17 -0
  234. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  235. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +129 -10
  236. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  237. package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
  238. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  239. package/dist/plugins/indexing/JSModuleIndexer.js +63 -31
  240. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  241. package/dist/plugins/indexing/RustModuleIndexer.js +5 -4
  242. package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
  243. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
  244. package/dist/plugins/indexing/ServiceDetector.js +28 -15
  245. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  246. package/dist/plugins/validation/CallResolverValidator.js +8 -7
  247. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
  248. package/dist/plugins/validation/DataFlowValidator.js +17 -12
  249. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
  250. package/dist/plugins/validation/EvalBanValidator.js +17 -16
  251. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  252. package/dist/plugins/validation/GraphConnectivityValidator.js +19 -23
  253. package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
  254. package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
  255. package/dist/plugins/validation/NodeCreationValidator.js +415 -0
  256. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  257. package/dist/plugins/validation/SQLInjectionValidator.js +59 -16
  258. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
  259. package/dist/plugins/validation/ShadowingDetector.js +6 -5
  260. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
  261. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
  262. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
  263. package/dist/plugins/vcs/GitPlugin.js +10 -12
  264. package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
  265. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
  266. package/dist/plugins/vcs/VCSPlugin.js +5 -5
  267. package/dist/storage/backends/RFDBServerBackend.d.ts +10 -17
  268. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  269. package/dist/storage/backends/RFDBServerBackend.js +31 -10
  270. package/dist/validation/PathValidator.d.ts +1 -2
  271. package/dist/validation/PathValidator.d.ts.map +1 -1
  272. package/package.json +3 -3
  273. package/src/Orchestrator.ts +237 -24
  274. package/src/config/ConfigLoader.ts +263 -0
  275. package/src/config/index.ts +5 -0
  276. package/src/core/ASTWorker.ts +143 -139
  277. package/src/core/CoverageAnalyzer.ts +243 -0
  278. package/src/core/FileNodeManager.ts +100 -0
  279. package/src/core/GraphFreshnessChecker.ts +143 -0
  280. package/src/core/HashUtils.ts +48 -0
  281. package/src/core/IncrementalReanalyzer.ts +192 -0
  282. package/src/core/NodeFactory.ts +401 -18
  283. package/src/core/ScopeTracker.ts +154 -0
  284. package/src/core/SemanticId.ts +192 -0
  285. package/src/core/VersionManager.ts +3 -2
  286. package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
  287. package/src/core/nodes/ArrayLiteralNode.ts +65 -0
  288. package/src/core/nodes/CallSiteNode.ts +58 -0
  289. package/src/core/nodes/ClassNode.ts +63 -2
  290. package/src/core/nodes/DecoratorNode.ts +91 -0
  291. package/src/core/nodes/EnumNode.ts +86 -0
  292. package/src/core/nodes/ExportNode.ts +70 -2
  293. package/src/core/nodes/ExpressionNode.ts +231 -0
  294. package/src/core/nodes/ExternalModuleNode.ts +56 -0
  295. package/src/core/nodes/ExternalStdioNode.ts +17 -9
  296. package/src/core/nodes/FunctionNode.ts +101 -1
  297. package/src/core/nodes/ImportNode.ts +32 -10
  298. package/src/core/nodes/InterfaceNode.ts +91 -0
  299. package/src/core/nodes/IssueNode.ts +177 -0
  300. package/src/core/nodes/MethodCallNode.ts +64 -0
  301. package/src/core/nodes/MethodNode.ts +63 -0
  302. package/src/core/nodes/ModuleNode.ts +50 -0
  303. package/src/core/nodes/NetworkRequestNode.ts +77 -0
  304. package/src/core/nodes/ObjectLiteralNode.ts +65 -0
  305. package/src/core/nodes/ScopeNode.ts +65 -0
  306. package/src/core/nodes/TypeNode.ts +78 -0
  307. package/src/core/nodes/VariableDeclarationNode.ts +52 -0
  308. package/src/core/nodes/index.ts +18 -1
  309. package/src/diagnostics/DiagnosticCollector.ts +163 -0
  310. package/src/diagnostics/DiagnosticReporter.ts +204 -0
  311. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  312. package/src/diagnostics/index.ts +16 -0
  313. package/src/errors/GrafemaError.ts +174 -0
  314. package/src/index.ts +148 -1
  315. package/src/logging/Logger.ts +152 -0
  316. package/src/plugins/Plugin.ts +42 -0
  317. package/src/plugins/analysis/DatabaseAnalyzer.ts +14 -8
  318. package/src/plugins/analysis/ExpressAnalyzer.ts +29 -19
  319. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +22 -21
  320. package/src/plugins/analysis/FetchAnalyzer.ts +39 -16
  321. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
  322. package/src/plugins/analysis/JSASTAnalyzer.ts +1483 -503
  323. package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
  324. package/src/plugins/analysis/RustAnalyzer.ts +15 -10
  325. package/src/plugins/analysis/SQLiteAnalyzer.ts +10 -7
  326. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
  327. package/src/plugins/analysis/SocketIOAnalyzer.ts +31 -22
  328. package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
  329. package/src/plugins/analysis/ast/GraphBuilder.ts +439 -327
  330. package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
  331. package/src/plugins/analysis/ast/types.ts +209 -6
  332. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
  333. package/src/plugins/analysis/ast/utils/index.ts +12 -0
  334. package/src/plugins/analysis/ast/utils/location.ts +103 -0
  335. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +11 -8
  336. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +909 -83
  337. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
  338. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +159 -93
  339. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +12 -8
  340. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
  341. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +37 -17
  342. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
  343. package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
  344. package/src/plugins/discovery/WorkspaceDiscovery.ts +177 -0
  345. package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
  346. package/src/plugins/discovery/workspaces/detector.ts +63 -0
  347. package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
  348. package/src/plugins/discovery/workspaces/index.ts +23 -0
  349. package/src/plugins/discovery/workspaces/parsers.ts +99 -0
  350. package/src/plugins/enrichment/AliasTracker.ts +14 -8
  351. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +14 -7
  352. package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
  353. package/src/plugins/enrichment/MethodCallResolver.ts +18 -12
  354. package/src/plugins/enrichment/MountPointResolver.ts +8 -3
  355. package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
  356. package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
  357. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +149 -12
  358. package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
  359. package/src/plugins/indexing/JSModuleIndexer.ts +74 -34
  360. package/src/plugins/indexing/RustModuleIndexer.ts +5 -4
  361. package/src/plugins/validation/CallResolverValidator.ts +8 -7
  362. package/src/plugins/validation/DataFlowValidator.ts +16 -12
  363. package/src/plugins/validation/EvalBanValidator.ts +17 -16
  364. package/src/plugins/validation/GraphConnectivityValidator.ts +19 -23
  365. package/src/plugins/validation/NodeCreationValidator.ts +554 -0
  366. package/src/plugins/validation/SQLInjectionValidator.ts +61 -15
  367. package/src/plugins/validation/ShadowingDetector.ts +6 -5
  368. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
  369. package/src/plugins/vcs/GitPlugin.ts +40 -12
  370. package/src/plugins/vcs/VCSPlugin.ts +7 -5
  371. package/src/storage/backends/RFDBServerBackend.ts +43 -29
  372. package/src/validation/PathValidator.ts +1 -1
  373. package/dist/core/AnalysisWorker.d.ts +0 -14
  374. package/dist/core/AnalysisWorker.d.ts.map +0 -1
  375. package/dist/core/AnalysisWorker.js +0 -307
  376. package/dist/core/ParallelAnalyzer.d.ts +0 -120
  377. package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
  378. package/dist/core/ParallelAnalyzer.js +0 -331
  379. package/dist/core/QueueWorker.d.ts +0 -12
  380. package/dist/core/QueueWorker.d.ts.map +0 -1
  381. package/dist/core/QueueWorker.js +0 -567
  382. package/dist/core/RFDBClient.d.ts +0 -179
  383. package/dist/core/RFDBClient.d.ts.map +0 -1
  384. package/dist/core/RFDBClient.js +0 -429
  385. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
  386. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
  387. package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
  388. package/src/core/AnalysisWorker.ts +0 -410
  389. package/src/core/ParallelAnalyzer.ts +0 -476
  390. package/src/core/QueueWorker.ts +0 -780
  391. package/src/plugins/indexing/ServiceDetector.ts +0 -230
@@ -10,22 +10,23 @@
10
10
  */
11
11
  import { createHash } from 'crypto';
12
12
  import { basename, relative } from 'path';
13
- import { ServiceNode, EntrypointNode, ModuleNode, FunctionNode, ScopeNode, CallSiteNode, MethodCallNode, VariableDeclarationNode, ConstantNode, LiteralNode, ExternalStdioNode, EventListenerNode, HttpRequestNode, DatabaseQueryNode, } from './nodes/index.js';
13
+ import { ServiceNode, EntrypointNode, ModuleNode, FunctionNode, ScopeNode, CallSiteNode, MethodCallNode, VariableDeclarationNode, ConstantNode, LiteralNode, ObjectLiteralNode, ArrayLiteralNode, ExternalStdioNode, NetworkRequestNode, EventListenerNode, HttpRequestNode, DatabaseQueryNode, ImportNode, ClassNode, ExportNode, ExternalModuleNode, InterfaceNode, TypeNode, EnumNode, DecoratorNode, ExpressionNode, ArgumentExpressionNode, IssueNode, } from './nodes/index.js';
14
+ import { brandNode } from '@grafema/types';
14
15
  export class NodeFactory {
15
16
  /**
16
17
  * Create SERVICE node
17
18
  */
18
19
  static createService(name, projectPath, options = {}) {
19
- return ServiceNode.create(name, projectPath, options);
20
+ return brandNode(ServiceNode.create(name, projectPath, options));
20
21
  }
21
22
  /**
22
23
  * Create ENTRYPOINT node
23
24
  */
24
25
  static createEntrypoint(file, entrypointType, options = {}) {
25
- return EntrypointNode.create(file, entrypointType, options);
26
+ return brandNode(EntrypointNode.create(file, entrypointType, options));
26
27
  }
27
28
  /**
28
- * Create MODULE node
29
+ * Create MODULE node (LEGACY)
29
30
  */
30
31
  static createModule(filePath, projectPath, options = {}) {
31
32
  if (!filePath)
@@ -34,73 +35,246 @@ export class NodeFactory {
34
35
  throw new Error('NodeFactory.createModule: projectPath is required');
35
36
  const contentHash = options.contentHash || this._hashFile(filePath);
36
37
  const relativePath = relative(projectPath, filePath) || basename(filePath);
37
- return ModuleNode.create(filePath, relativePath, contentHash, options);
38
+ return brandNode(ModuleNode.create(filePath, relativePath, contentHash, options));
39
+ }
40
+ /**
41
+ * Create MODULE node with semantic ID (NEW API)
42
+ *
43
+ * Uses ScopeContext for stable identifiers.
44
+ *
45
+ * @param context - Scope context with file path (relative to project root)
46
+ * @param options - Optional contentHash and isTest flag
47
+ * @returns ModuleNodeRecord with semantic ID
48
+ */
49
+ static createModuleWithContext(context, options = {}) {
50
+ return brandNode(ModuleNode.createWithContext(context, options));
38
51
  }
39
52
  /**
40
53
  * Create FUNCTION node
41
54
  */
42
55
  static createFunction(name, file, line, column, options = {}) {
43
- return FunctionNode.create(name, file, line, column, options);
56
+ return brandNode(FunctionNode.create(name, file, line, column, options));
44
57
  }
45
58
  /**
46
59
  * Create SCOPE node
47
60
  */
48
61
  static createScope(scopeType, file, line, options = {}) {
49
- return ScopeNode.create(scopeType, file, line, options);
62
+ return brandNode(ScopeNode.create(scopeType, file, line, options));
50
63
  }
51
64
  /**
52
65
  * Create CALL_SITE node
53
66
  */
54
67
  static createCallSite(targetName, file, line, column, options = {}) {
55
- return CallSiteNode.create(targetName, file, line, column, options);
68
+ return brandNode(CallSiteNode.create(targetName, file, line, column, options));
56
69
  }
57
70
  /**
58
71
  * Create METHOD_CALL node
59
72
  */
60
73
  static createMethodCall(objectName, methodName, file, line, column, options = {}) {
61
- return MethodCallNode.create(objectName, methodName, file, line, column, options);
74
+ return brandNode(MethodCallNode.create(objectName, methodName, file, line, column, options));
62
75
  }
63
76
  /**
64
77
  * Create VARIABLE_DECLARATION node
65
78
  */
66
79
  static createVariableDeclaration(name, file, line, column, options = {}) {
67
- return VariableDeclarationNode.create(name, file, line, column, options);
80
+ return brandNode(VariableDeclarationNode.create(name, file, line, column, options));
68
81
  }
69
82
  /**
70
83
  * Create CONSTANT node
71
84
  */
72
85
  static createConstant(name, file, line, column, options = {}) {
73
- return ConstantNode.create(name, file, line, column, options);
86
+ return brandNode(ConstantNode.create(name, file, line, column, options));
74
87
  }
75
88
  /**
76
89
  * Create LITERAL node
77
90
  */
78
91
  static createLiteral(value, file, line, column, options = {}) {
79
- return LiteralNode.create(value, file, line, column, options);
92
+ return brandNode(LiteralNode.create(value, file, line, column, options));
93
+ }
94
+ /**
95
+ * Create OBJECT_LITERAL node
96
+ */
97
+ static createObjectLiteral(file, line, column, options = {}) {
98
+ return brandNode(ObjectLiteralNode.create(file, line, column, options));
99
+ }
100
+ /**
101
+ * Create ARRAY_LITERAL node
102
+ */
103
+ static createArrayLiteral(file, line, column, options = {}) {
104
+ return brandNode(ArrayLiteralNode.create(file, line, column, options));
80
105
  }
81
106
  /**
82
107
  * Create EXTERNAL_STDIO node (singleton)
83
108
  */
84
109
  static createExternalStdio() {
85
- return ExternalStdioNode.create();
110
+ return brandNode(ExternalStdioNode.create());
111
+ }
112
+ /**
113
+ * Create net:request singleton node
114
+ *
115
+ * This node represents the external network as a system resource.
116
+ * Should be created once per graph.
117
+ *
118
+ * All HTTP_REQUEST nodes connect to this singleton via CALLS edges.
119
+ *
120
+ * @returns NetworkRequestNodeRecord - singleton node
121
+ */
122
+ static createNetworkRequest() {
123
+ return brandNode(NetworkRequestNode.create());
86
124
  }
87
125
  /**
88
126
  * Create EVENT_LISTENER node
89
127
  */
90
128
  static createEventListener(eventName, objectName, file, line, options = {}) {
91
- return EventListenerNode.create(eventName, objectName, file, line, options);
129
+ return brandNode(EventListenerNode.create(eventName, objectName, file, line, options));
92
130
  }
93
131
  /**
94
132
  * Create HTTP_REQUEST node
95
133
  */
96
134
  static createHttpRequest(url, method, file, line, options = {}) {
97
- return HttpRequestNode.create(url, method, file, line, options);
135
+ return brandNode(HttpRequestNode.create(url, method, file, line, options));
98
136
  }
99
137
  /**
100
138
  * Create DATABASE_QUERY node
101
139
  */
102
140
  static createDatabaseQuery(query, operation, file, line, options = {}) {
103
- return DatabaseQueryNode.create(query, operation, file, line, options);
141
+ return brandNode(DatabaseQueryNode.create(query, operation, file, line, options));
142
+ }
143
+ /**
144
+ * Create IMPORT node
145
+ *
146
+ * ImportNode automatically detects importType from imported field:
147
+ * - imported === 'default' → importType: 'default'
148
+ * - imported === '*' → importType: 'namespace'
149
+ * - anything else → importType: 'named'
150
+ *
151
+ * @param name - Local binding name (how it's used in this file)
152
+ * @param file - Absolute file path
153
+ * @param line - Line number (for debugging, not part of ID)
154
+ * @param column - Column position (0 if unavailable)
155
+ * @param source - Source module (e.g., 'react', './utils')
156
+ * @param options - Optional fields
157
+ * @returns ImportNodeRecord
158
+ */
159
+ static createImport(name, file, line, column, source, options = {}) {
160
+ return brandNode(ImportNode.create(name, file, line, column, source, options));
161
+ }
162
+ /**
163
+ * Create CLASS node
164
+ */
165
+ static createClass(name, file, line, column, options = {}) {
166
+ return brandNode(ClassNode.create(name, file, line, column, options));
167
+ }
168
+ /**
169
+ * Create EXPORT node
170
+ */
171
+ static createExport(name, file, line, column, options = {}) {
172
+ return brandNode(ExportNode.create(name, file, line, column, options));
173
+ }
174
+ /**
175
+ * Create EXTERNAL_MODULE node
176
+ *
177
+ * Represents external npm packages or Node.js built-in modules.
178
+ * Uses singleton pattern - same source always produces same ID.
179
+ *
180
+ * @param source - Module name (e.g., 'lodash', '@tanstack/react-query', 'node:fs')
181
+ */
182
+ static createExternalModule(source) {
183
+ return brandNode(ExternalModuleNode.create(source));
184
+ }
185
+ /**
186
+ * Create INTERFACE node
187
+ */
188
+ static createInterface(name, file, line, column, options = {}) {
189
+ return brandNode(InterfaceNode.create(name, file, line, column, options));
190
+ }
191
+ /**
192
+ * Create TYPE node
193
+ */
194
+ static createType(name, file, line, column, options = {}) {
195
+ return brandNode(TypeNode.create(name, file, line, column, options));
196
+ }
197
+ /**
198
+ * Create ENUM node
199
+ */
200
+ static createEnum(name, file, line, column, options = {}) {
201
+ return brandNode(EnumNode.create(name, file, line, column, options));
202
+ }
203
+ /**
204
+ * Create DECORATOR node
205
+ */
206
+ static createDecorator(name, file, line, column, targetId, targetType, options = {}) {
207
+ return brandNode(DecoratorNode.create(name, file, line, column, targetId, targetType, options));
208
+ }
209
+ /**
210
+ * Create EXPRESSION node
211
+ */
212
+ static createExpression(expressionType, file, line, column, options = {}) {
213
+ return brandNode(ExpressionNode.create(expressionType, file, line, column, options));
214
+ }
215
+ /**
216
+ * Generate EXPRESSION node ID without creating the full node
217
+ *
218
+ * Used by JSASTAnalyzer when creating assignment metadata.
219
+ * The full node is created later by GraphBuilder.
220
+ *
221
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
222
+ * @param file - File path
223
+ * @param line - Line number
224
+ * @param column - Column position
225
+ * @returns Generated ID string in colon format
226
+ */
227
+ static generateExpressionId(expressionType, file, line, column) {
228
+ return ExpressionNode.generateId(expressionType, file, line, column);
229
+ }
230
+ /**
231
+ * Create EXPRESSION node from assignment metadata
232
+ *
233
+ * Used by GraphBuilder when processing variableAssignments.
234
+ * The ID is provided from upstream (generated by JSASTAnalyzer).
235
+ *
236
+ * @param expressionType - Type of expression
237
+ * @param file - File path
238
+ * @param line - Line number
239
+ * @param column - Column position
240
+ * @param options - Must include id; optional: expression properties
241
+ */
242
+ static createExpressionFromMetadata(expressionType, file, line, column, options) {
243
+ return brandNode(ExpressionNode.createFromMetadata(expressionType, file, line, column, options));
244
+ }
245
+ /**
246
+ * Create EXPRESSION node with argument context
247
+ *
248
+ * Used when EXPRESSION appears as a call argument and we need to track
249
+ * which call and argument position for data flow analysis.
250
+ *
251
+ * @param expressionType - Type of expression (BinaryExpression, LogicalExpression, etc.)
252
+ * @param file - File path
253
+ * @param line - Line number
254
+ * @param column - Column position
255
+ * @param options - Required: parentCallId, argIndex; Optional: expression properties, counter
256
+ * @returns ArgumentExpressionNodeRecord
257
+ */
258
+ static createArgumentExpression(expressionType, file, line, column, options) {
259
+ return brandNode(ArgumentExpressionNode.create(expressionType, file, line, column, options));
260
+ }
261
+ /**
262
+ * Create ISSUE node
263
+ *
264
+ * Issues represent detected problems in the codebase.
265
+ * Used by validation plugins to persist findings in the graph.
266
+ *
267
+ * @param category - Issue category (security, performance, style, smell)
268
+ * @param severity - error | warning | info
269
+ * @param message - Human-readable description
270
+ * @param plugin - Name of the plugin that detected this issue
271
+ * @param file - File path where issue was detected
272
+ * @param line - Line number
273
+ * @param column - Column number (optional)
274
+ * @param options - Optional context data
275
+ */
276
+ static createIssue(category, severity, message, plugin, file, line, column = 0, options = {}) {
277
+ return brandNode(IssueNode.create(category, severity, message, plugin, file, line, column, options));
104
278
  }
105
279
  /**
106
280
  * Validate node by its type
@@ -117,11 +291,27 @@ export class NodeFactory {
117
291
  'VARIABLE_DECLARATION': VariableDeclarationNode,
118
292
  'CONSTANT': ConstantNode,
119
293
  'LITERAL': LiteralNode,
120
- 'EXTERNAL_STDIO': ExternalStdioNode,
294
+ 'OBJECT_LITERAL': ObjectLiteralNode,
295
+ 'ARRAY_LITERAL': ArrayLiteralNode,
296
+ 'net:stdio': ExternalStdioNode,
297
+ 'net:request': NetworkRequestNode,
121
298
  'EVENT_LISTENER': EventListenerNode,
122
299
  'HTTP_REQUEST': HttpRequestNode,
123
- 'DATABASE_QUERY': DatabaseQueryNode
300
+ 'DATABASE_QUERY': DatabaseQueryNode,
301
+ 'IMPORT': ImportNode,
302
+ 'CLASS': ClassNode,
303
+ 'EXPORT': ExportNode,
304
+ 'EXTERNAL_MODULE': ExternalModuleNode,
305
+ 'INTERFACE': InterfaceNode,
306
+ 'TYPE': TypeNode,
307
+ 'ENUM': EnumNode,
308
+ 'DECORATOR': DecoratorNode,
309
+ 'EXPRESSION': ExpressionNode
124
310
  };
311
+ // Handle issue:* types dynamically
312
+ if (IssueNode.isIssueType(node.type)) {
313
+ return IssueNode.validate(node);
314
+ }
125
315
  const validator = validators[node.type];
126
316
  if (!validator) {
127
317
  return [`Unknown node type: ${node.type}`];
@@ -0,0 +1,84 @@
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
+ import type { ScopeContext } from './SemanticId.js';
12
+ /**
13
+ * Entry in the scope stack
14
+ */
15
+ export interface ScopeEntry {
16
+ name: string;
17
+ type: string;
18
+ counter?: number;
19
+ }
20
+ /**
21
+ * Result of entering a counted scope
22
+ */
23
+ export interface CountedScopeResult {
24
+ name: string;
25
+ discriminator: number;
26
+ }
27
+ /**
28
+ * ScopeTracker - Manages scope hierarchy and counters during AST traversal
29
+ */
30
+ export declare class ScopeTracker {
31
+ /** Source file path */
32
+ readonly file: string;
33
+ /** Current scope stack */
34
+ private scopeStack;
35
+ /** Counters for various purposes (scoped by scope path) */
36
+ private counters;
37
+ constructor(file: string);
38
+ /**
39
+ * Enter a named scope (function, class, etc.)
40
+ */
41
+ enterScope(name: string, type: string): void;
42
+ /**
43
+ * Enter a counted scope (if, try, for, etc.)
44
+ * Automatically assigns a discriminator.
45
+ */
46
+ enterCountedScope(type: string): CountedScopeResult;
47
+ /**
48
+ * Exit the current scope
49
+ */
50
+ exitScope(): void;
51
+ /**
52
+ * Get current scope context for semantic ID generation
53
+ */
54
+ getContext(): ScopeContext;
55
+ /**
56
+ * Get scope path as string (for display/debugging)
57
+ */
58
+ getScopePath(): string;
59
+ /**
60
+ * Get the innermost enclosing scope of a specific type.
61
+ * Searches from innermost to outermost.
62
+ *
63
+ * @param scopeType - Type to search for ('CLASS', 'FUNCTION', etc.)
64
+ * @returns The scope entry name if found, undefined otherwise
65
+ */
66
+ getEnclosingScope(scopeType: string): string | undefined;
67
+ /**
68
+ * Get next counter for item type within current scope.
69
+ * Used for CALL, LITERAL, etc. that need #N discriminators.
70
+ */
71
+ getItemCounter(itemType: string): number;
72
+ /**
73
+ * Get current count without incrementing.
74
+ * Used to check for collisions.
75
+ */
76
+ peekItemCounter(itemType: string): number;
77
+ /**
78
+ * Track siblings by name within current scope.
79
+ * Used for anonymous functions: anonymous[0], anonymous[1]
80
+ */
81
+ getSiblingIndex(name: string): number;
82
+ private counterKey;
83
+ }
84
+ //# sourceMappingURL=ScopeTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopeTracker.d.ts","sourceRoot":"","sources":["../../src/core/ScopeTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,0BAA0B;IAC1B,OAAO,CAAC,UAAU,CAAoB;IAEtC,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAkC;gBAEtC,IAAI,EAAE,MAAM;IAMxB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5C;;;OAGG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB;IAUnD;;OAEG;IACH,SAAS,IAAI,IAAI;IAMjB;;OAEG;IACH,UAAU,IAAI,YAAY;IAO1B;;OAEG;IACH,YAAY,IAAI,MAAM;IAKtB;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAYxD;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOxC;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMzC;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASrC,OAAO,CAAC,UAAU;CAGnB"}
@@ -0,0 +1,116 @@
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
+ * ScopeTracker - Manages scope hierarchy and counters during AST traversal
13
+ */
14
+ export class ScopeTracker {
15
+ /** Source file path */
16
+ file;
17
+ /** Current scope stack */
18
+ scopeStack = [];
19
+ /** Counters for various purposes (scoped by scope path) */
20
+ counters = new Map();
21
+ constructor(file) {
22
+ this.file = file;
23
+ }
24
+ // === Scope Management ===
25
+ /**
26
+ * Enter a named scope (function, class, etc.)
27
+ */
28
+ enterScope(name, type) {
29
+ this.scopeStack.push({ name, type });
30
+ }
31
+ /**
32
+ * Enter a counted scope (if, try, for, etc.)
33
+ * Automatically assigns a discriminator.
34
+ */
35
+ enterCountedScope(type) {
36
+ const key = this.counterKey(type);
37
+ const n = this.counters.get(key) || 0;
38
+ this.counters.set(key, n + 1);
39
+ const name = `${type}#${n}`;
40
+ this.scopeStack.push({ name, type, counter: n });
41
+ return { name, discriminator: n };
42
+ }
43
+ /**
44
+ * Exit the current scope
45
+ */
46
+ exitScope() {
47
+ this.scopeStack.pop();
48
+ }
49
+ // === ID Generation ===
50
+ /**
51
+ * Get current scope context for semantic ID generation
52
+ */
53
+ getContext() {
54
+ return {
55
+ file: this.file,
56
+ scopePath: this.scopeStack.map(s => s.name)
57
+ };
58
+ }
59
+ /**
60
+ * Get scope path as string (for display/debugging)
61
+ */
62
+ getScopePath() {
63
+ if (this.scopeStack.length === 0)
64
+ return 'global';
65
+ return this.scopeStack.map(s => s.name).join('->');
66
+ }
67
+ /**
68
+ * Get the innermost enclosing scope of a specific type.
69
+ * Searches from innermost to outermost.
70
+ *
71
+ * @param scopeType - Type to search for ('CLASS', 'FUNCTION', etc.)
72
+ * @returns The scope entry name if found, undefined otherwise
73
+ */
74
+ getEnclosingScope(scopeType) {
75
+ // Search from end (innermost) to start (outermost)
76
+ for (let i = this.scopeStack.length - 1; i >= 0; i--) {
77
+ if (this.scopeStack[i].type === scopeType) {
78
+ return this.scopeStack[i].name;
79
+ }
80
+ }
81
+ return undefined;
82
+ }
83
+ // === Counter Management ===
84
+ /**
85
+ * Get next counter for item type within current scope.
86
+ * Used for CALL, LITERAL, etc. that need #N discriminators.
87
+ */
88
+ getItemCounter(itemType) {
89
+ const key = this.counterKey(itemType);
90
+ const n = this.counters.get(key) || 0;
91
+ this.counters.set(key, n + 1);
92
+ return n;
93
+ }
94
+ /**
95
+ * Get current count without incrementing.
96
+ * Used to check for collisions.
97
+ */
98
+ peekItemCounter(itemType) {
99
+ return this.counters.get(this.counterKey(itemType)) || 0;
100
+ }
101
+ // === Sibling Tracking ===
102
+ /**
103
+ * Track siblings by name within current scope.
104
+ * Used for anonymous functions: anonymous[0], anonymous[1]
105
+ */
106
+ getSiblingIndex(name) {
107
+ const key = `${this.getScopePath()}:sibling:${name}`;
108
+ const n = this.counters.get(key) || 0;
109
+ this.counters.set(key, n + 1);
110
+ return n;
111
+ }
112
+ // === Private ===
113
+ counterKey(itemType) {
114
+ return `${this.getScopePath()}:${itemType}`;
115
+ }
116
+ }
@@ -0,0 +1,90 @@
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
+ * Location in source file
20
+ */
21
+ export interface Location {
22
+ line: number;
23
+ column: number;
24
+ endLine?: number;
25
+ endColumn?: number;
26
+ }
27
+ /**
28
+ * Scope context for semantic ID generation
29
+ */
30
+ export interface ScopeContext {
31
+ /** Source file path */
32
+ file: string;
33
+ /** Array of scope names, e.g. ['MyClass', 'myMethod', 'if#1'] */
34
+ scopePath: string[];
35
+ }
36
+ /**
37
+ * Options for semantic ID generation
38
+ */
39
+ export interface SemanticIdOptions {
40
+ /** Counter for disambiguation (#N) */
41
+ discriminator?: number;
42
+ /** Context string for special cases ([context]) */
43
+ context?: string;
44
+ }
45
+ /**
46
+ * Parsed semantic ID components
47
+ */
48
+ export interface ParsedSemanticId {
49
+ file: string;
50
+ scopePath: string[];
51
+ type: string;
52
+ name: string;
53
+ discriminator?: number;
54
+ context?: string;
55
+ }
56
+ /**
57
+ * Item with name and location for discriminator computation
58
+ */
59
+ export interface LocatedItem {
60
+ name: string;
61
+ location: Location;
62
+ }
63
+ /**
64
+ * Compute semantic ID for any node type.
65
+ *
66
+ * @param type - Node type (FUNCTION, CALL, VARIABLE, etc.)
67
+ * @param name - Node name
68
+ * @param context - Scope context from ScopeTracker
69
+ * @param options - Optional discriminator or context
70
+ * @returns Semantic ID string
71
+ */
72
+ export declare function computeSemanticId(type: string, name: string, context: ScopeContext, options?: SemanticIdOptions): string;
73
+ /**
74
+ * Parse semantic ID back to components.
75
+ *
76
+ * @param id - Semantic ID to parse
77
+ * @returns Parsed components or null if invalid
78
+ */
79
+ export declare function parseSemanticId(id: string): ParsedSemanticId | null;
80
+ /**
81
+ * Compute discriminator for items with same name in same scope.
82
+ * Uses line/column for stable ordering.
83
+ *
84
+ * @param items - All items in scope
85
+ * @param targetName - Name to find discriminator for
86
+ * @param targetLocation - Location of target item
87
+ * @returns Discriminator (0-based index among same-named items)
88
+ */
89
+ export declare function computeDiscriminator(items: LocatedItem[], targetName: string, targetLocation: Location): number;
90
+ //# sourceMappingURL=SemanticId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticId.d.ts","sourceRoot":"","sources":["../../src/core/SemanticId.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM,CAaR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAiDnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAAE,EACpB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,QAAQ,GACvB,MAAM,CAwBR"}