@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
@@ -1,8 +1,16 @@
1
1
  /**
2
2
  * CallSiteNode - contract for CALL_SITE node
3
+ *
4
+ * Supports two creation modes:
5
+ * 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
6
+ * 2. create() - LEGACY: Uses line-based IDs for backward compatibility
7
+ *
8
+ * Semantic ID format: {file}->{scope_path}->CALL->{calleeName}#N
9
+ * Example: src/app.js->handler->CALL->console.log#0
3
10
  */
4
11
 
5
12
  import type { BaseNodeRecord } from '@grafema/types';
13
+ import { computeSemanticId, type ScopeContext, type Location } from '../SemanticId.js';
6
14
 
7
15
  interface CallSiteNodeRecord extends BaseNodeRecord {
8
16
  type: 'CALL_SITE';
@@ -16,11 +24,19 @@ interface CallSiteNodeOptions {
16
24
  counter?: number;
17
25
  }
18
26
 
27
+ /**
28
+ * Options for createWithContext
29
+ */
30
+ interface CallSiteContextOptions {
31
+ discriminator: number;
32
+ parentScopeId?: string;
33
+ }
34
+
19
35
  export class CallSiteNode {
20
36
  static readonly TYPE = 'CALL_SITE' as const;
21
37
 
22
- static readonly REQUIRED = ['name', 'file', 'line'] as const;
23
- static readonly OPTIONAL = ['column', 'parentScopeId', 'targetFunctionName'] as const;
38
+ static readonly REQUIRED = ['name', 'file', 'line', 'column'] as const;
39
+ static readonly OPTIONAL = ['parentScopeId', 'targetFunctionName'] as const;
24
40
 
25
41
  /**
26
42
  * Create CALL_SITE node
@@ -35,9 +51,10 @@ export class CallSiteNode {
35
51
  if (!targetName) throw new Error('CallSiteNode.create: targetName is required');
36
52
  if (!file) throw new Error('CallSiteNode.create: file is required');
37
53
  if (line === undefined) throw new Error('CallSiteNode.create: line is required');
54
+ if (column === undefined) throw new Error('CallSiteNode.create: column is required');
38
55
 
39
56
  const counter = options.counter !== undefined ? `:${options.counter}` : '';
40
- const id = `${file}:CALL_SITE:${targetName}:${line}:${column || 0}${counter}`;
57
+ const id = `${file}:CALL_SITE:${targetName}:${line}:${column}${counter}`;
41
58
 
42
59
  return {
43
60
  id,
@@ -45,7 +62,50 @@ export class CallSiteNode {
45
62
  name: targetName,
46
63
  file,
47
64
  line,
48
- column: column || 0,
65
+ column,
66
+ parentScopeId: options.parentScopeId,
67
+ targetFunctionName: targetName
68
+ };
69
+ }
70
+
71
+ /**
72
+ * Create CALL_SITE node with semantic ID (NEW API)
73
+ *
74
+ * Uses ScopeContext from ScopeTracker for stable identifiers.
75
+ * Requires discriminator for multiple calls to same function within scope.
76
+ *
77
+ * @param targetName - Name of called function (e.g., 'console.log', 'db.query')
78
+ * @param context - Scope context from ScopeTracker.getContext()
79
+ * @param location - Source location { line, column }
80
+ * @param options - Options including required discriminator
81
+ * @returns CallSiteNodeRecord with semantic ID
82
+ */
83
+ static createWithContext(
84
+ targetName: string,
85
+ context: ScopeContext,
86
+ location: Partial<Location>,
87
+ options: CallSiteContextOptions
88
+ ): CallSiteNodeRecord {
89
+ // Validate required fields
90
+ if (!targetName) throw new Error('CallSiteNode.createWithContext: targetName is required');
91
+ if (!context.file) throw new Error('CallSiteNode.createWithContext: file is required');
92
+ if (location.line === undefined) throw new Error('CallSiteNode.createWithContext: line is required');
93
+ if (location.column === undefined) throw new Error('CallSiteNode.createWithContext: column is required');
94
+ if (options.discriminator === undefined) throw new Error('CallSiteNode.createWithContext: discriminator is required');
95
+
96
+ // Compute semantic ID with discriminator
97
+ // Use 'CALL' as the type for cleaner IDs (matches spec)
98
+ const id = computeSemanticId('CALL', targetName, context, {
99
+ discriminator: options.discriminator
100
+ });
101
+
102
+ return {
103
+ id,
104
+ type: this.TYPE,
105
+ name: targetName,
106
+ file: context.file,
107
+ line: location.line,
108
+ column: location.column,
49
109
  parentScopeId: options.parentScopeId,
50
110
  targetFunctionName: targetName
51
111
  };
@@ -0,0 +1,123 @@
1
+ /**
2
+ * CaseNode - contract for CASE node
3
+ *
4
+ * Represents a case clause in a switch statement.
5
+ *
6
+ * ID format (legacy): {file}:CASE:{value}:{line}:{counter}
7
+ * Semantic ID format: {file}->{scope_path}->CASE->{value}#N
8
+ */
9
+
10
+ import type { BaseNodeRecord } from '@grafema/types';
11
+ import { computeSemanticId, type ScopeContext, type Location } from '../SemanticId.js';
12
+
13
+ interface CaseNodeRecord extends BaseNodeRecord {
14
+ type: 'CASE';
15
+ column: number;
16
+ value: unknown;
17
+ isDefault: boolean;
18
+ fallsThrough: boolean;
19
+ isEmpty: boolean;
20
+ parentBranchId?: string;
21
+ }
22
+
23
+ interface CaseNodeOptions {
24
+ parentBranchId?: string;
25
+ counter?: number;
26
+ }
27
+
28
+ interface CaseContextOptions {
29
+ discriminator: number;
30
+ parentBranchId?: string;
31
+ }
32
+
33
+ export class CaseNode {
34
+ static readonly TYPE = 'CASE' as const;
35
+ static readonly REQUIRED = ['file', 'line', 'column'] as const;
36
+ static readonly OPTIONAL = ['value', 'isDefault', 'fallsThrough', 'isEmpty', 'parentBranchId'] as const;
37
+
38
+ /**
39
+ * Create CASE node (legacy ID)
40
+ */
41
+ static create(
42
+ value: unknown,
43
+ isDefault: boolean,
44
+ fallsThrough: boolean,
45
+ isEmpty: boolean,
46
+ file: string,
47
+ line: number,
48
+ column: number,
49
+ options: CaseNodeOptions = {}
50
+ ): CaseNodeRecord {
51
+ if (!file) throw new Error('CaseNode.create: file is required');
52
+ if (line === undefined) throw new Error('CaseNode.create: line is required');
53
+ if (column === undefined) throw new Error('CaseNode.create: column is required');
54
+
55
+ const valueName = isDefault ? 'default' : String(value);
56
+ const counter = options.counter !== undefined ? `:${options.counter}` : '';
57
+ const id = `${file}:CASE:${valueName}:${line}${counter}`;
58
+
59
+ return {
60
+ id,
61
+ type: this.TYPE,
62
+ name: isDefault ? 'default' : `case ${String(value)}`,
63
+ file,
64
+ line,
65
+ column,
66
+ value,
67
+ isDefault,
68
+ fallsThrough,
69
+ isEmpty,
70
+ parentBranchId: options.parentBranchId
71
+ };
72
+ }
73
+
74
+ /**
75
+ * Create CASE node with semantic ID (NEW API)
76
+ */
77
+ static createWithContext(
78
+ value: unknown,
79
+ isDefault: boolean,
80
+ fallsThrough: boolean,
81
+ isEmpty: boolean,
82
+ context: ScopeContext,
83
+ location: Partial<Location>,
84
+ options: CaseContextOptions
85
+ ): CaseNodeRecord {
86
+ if (!context.file) throw new Error('CaseNode.createWithContext: file is required');
87
+ if (location.line === undefined) throw new Error('CaseNode.createWithContext: line is required');
88
+ if (location.column === undefined) throw new Error('CaseNode.createWithContext: column is required');
89
+ if (options.discriminator === undefined) throw new Error('CaseNode.createWithContext: discriminator is required');
90
+
91
+ const valueName = isDefault ? 'default' : String(value);
92
+ const id = computeSemanticId('CASE', valueName, context, {
93
+ discriminator: options.discriminator
94
+ });
95
+
96
+ return {
97
+ id,
98
+ type: this.TYPE,
99
+ name: isDefault ? 'default' : `case ${String(value)}`,
100
+ file: context.file,
101
+ line: location.line,
102
+ column: location.column,
103
+ value,
104
+ isDefault,
105
+ fallsThrough,
106
+ isEmpty,
107
+ parentBranchId: options.parentBranchId
108
+ };
109
+ }
110
+
111
+ static validate(node: CaseNodeRecord): string[] {
112
+ const errors: string[] = [];
113
+ if (node.type !== this.TYPE) {
114
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
115
+ }
116
+ if (!node.file) {
117
+ errors.push('Missing required field: file');
118
+ }
119
+ return errors;
120
+ }
121
+ }
122
+
123
+ export type { CaseNodeRecord };
@@ -1,8 +1,16 @@
1
1
  /**
2
2
  * ClassNode - contract for CLASS node
3
+ *
4
+ * Supports two creation modes:
5
+ * 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
6
+ * 2. create() - LEGACY: Uses line-based IDs for backward compatibility
7
+ *
8
+ * Semantic ID format: {file}->{scope_path}->CLASS->{name}
9
+ * Example: src/models/User.js->global->CLASS->User
3
10
  */
4
11
 
5
12
  import type { BaseNodeRecord } from '@grafema/types';
13
+ import { computeSemanticId, type ScopeContext, type Location } from '../SemanticId.js';
6
14
 
7
15
  interface ClassNodeRecord extends BaseNodeRecord {
8
16
  type: 'CLASS';
@@ -10,19 +18,31 @@ interface ClassNodeRecord extends BaseNodeRecord {
10
18
  exported: boolean;
11
19
  superClass?: string;
12
20
  methods: string[];
21
+ isInstantiationRef?: boolean;
13
22
  }
14
23
 
15
24
  interface ClassNodeOptions {
16
25
  exported?: boolean;
17
26
  superClass?: string;
18
27
  methods?: string[];
28
+ isInstantiationRef?: boolean;
29
+ }
30
+
31
+ /**
32
+ * Options for createWithContext
33
+ */
34
+ interface ClassContextOptions {
35
+ exported?: boolean;
36
+ superClass?: string;
37
+ methods?: string[];
38
+ isInstantiationRef?: boolean;
19
39
  }
20
40
 
21
41
  export class ClassNode {
22
42
  static readonly TYPE = 'CLASS' as const;
23
43
 
24
- static readonly REQUIRED = ['name', 'file', 'line'] as const;
25
- static readonly OPTIONAL = ['column', 'exported', 'superClass', 'methods'] as const;
44
+ static readonly REQUIRED = ['name', 'file', 'line', 'column'] as const;
45
+ static readonly OPTIONAL = ['exported', 'superClass', 'methods', 'isInstantiationRef'] as const;
26
46
 
27
47
  static create(
28
48
  name: string,
@@ -34,6 +54,7 @@ export class ClassNode {
34
54
  if (!name) throw new Error('ClassNode.create: name is required');
35
55
  if (!file) throw new Error('ClassNode.create: file is required');
36
56
  if (!line) throw new Error('ClassNode.create: line is required');
57
+ if (column === undefined) throw new Error('ClassNode.create: column is required');
37
58
 
38
59
  return {
39
60
  id: `${file}:CLASS:${name}:${line}`,
@@ -41,10 +62,52 @@ export class ClassNode {
41
62
  name,
42
63
  file,
43
64
  line,
44
- column: column || 0,
65
+ column,
66
+ exported: options.exported || false,
67
+ superClass: options.superClass,
68
+ methods: options.methods || [],
69
+ ...(options.isInstantiationRef !== undefined && { isInstantiationRef: options.isInstantiationRef })
70
+ };
71
+ }
72
+
73
+ /**
74
+ * Create CLASS node with semantic ID (NEW API)
75
+ *
76
+ * Uses ScopeContext from ScopeTracker for stable identifiers.
77
+ * Class names are unique within scope, so no discriminator needed.
78
+ *
79
+ * @param name - Class name
80
+ * @param context - Scope context from ScopeTracker.getContext()
81
+ * @param location - Source location { line, column }
82
+ * @param options - Optional class properties
83
+ * @returns ClassNodeRecord with semantic ID
84
+ */
85
+ static createWithContext(
86
+ name: string,
87
+ context: ScopeContext,
88
+ location: Partial<Location>,
89
+ options: ClassContextOptions = {}
90
+ ): ClassNodeRecord {
91
+ // Validate required fields
92
+ if (!name) throw new Error('ClassNode.createWithContext: name is required');
93
+ if (!context.file) throw new Error('ClassNode.createWithContext: file is required');
94
+ if (location.line === undefined) throw new Error('ClassNode.createWithContext: line is required');
95
+ if (location.column === undefined) throw new Error('ClassNode.createWithContext: column is required');
96
+
97
+ // Compute semantic ID
98
+ const id = computeSemanticId(this.TYPE, name, context);
99
+
100
+ return {
101
+ id,
102
+ type: this.TYPE,
103
+ name,
104
+ file: context.file,
105
+ line: location.line,
106
+ column: location.column,
45
107
  exported: options.exported || false,
46
108
  superClass: options.superClass,
47
- methods: options.methods || []
109
+ methods: options.methods || [],
110
+ ...(options.isInstantiationRef !== undefined && { isInstantiationRef: options.isInstantiationRef })
48
111
  };
49
112
  }
50
113
 
@@ -20,8 +20,8 @@ interface ConstantNodeOptions {
20
20
  export class ConstantNode {
21
21
  static readonly TYPE = 'CONSTANT' as const;
22
22
 
23
- static readonly REQUIRED = ['name', 'file', 'line'] as const;
24
- static readonly OPTIONAL = ['column', 'value', 'parentScopeId'] as const;
23
+ static readonly REQUIRED = ['name', 'file', 'line', 'column'] as const;
24
+ static readonly OPTIONAL = ['value', 'parentScopeId'] as const;
25
25
 
26
26
  static create(
27
27
  name: string,
@@ -33,9 +33,10 @@ export class ConstantNode {
33
33
  if (!name) throw new Error('ConstantNode.create: name is required');
34
34
  if (!file) throw new Error('ConstantNode.create: file is required');
35
35
  if (line === undefined) throw new Error('ConstantNode.create: line is required');
36
+ if (column === undefined) throw new Error('ConstantNode.create: column is required');
36
37
 
37
38
  const counter = options.counter !== undefined ? `:${options.counter}` : '';
38
- const id = `${file}:CONSTANT:${name}:${line}:${column || 0}${counter}`;
39
+ const id = `${file}:CONSTANT:${name}:${line}:${column}${counter}`;
39
40
 
40
41
  return {
41
42
  id,
@@ -43,7 +44,7 @@ export class ConstantNode {
43
44
  name,
44
45
  file,
45
46
  line,
46
- column: column || 0,
47
+ column,
47
48
  value: options.value,
48
49
  parentScopeId: options.parentScopeId
49
50
  };
@@ -0,0 +1,217 @@
1
+ /**
2
+ * ConstructorCallNode - contract for CONSTRUCTOR_CALL node
3
+ *
4
+ * Represents a `new ClassName()` expression in code.
5
+ * Used for data flow: VARIABLE --ASSIGNED_FROM--> CONSTRUCTOR_CALL
6
+ *
7
+ * ID format: {file}:CONSTRUCTOR_CALL:{className}:{line}:{column}
8
+ * Example: src/app.js:CONSTRUCTOR_CALL:Date:42:10
9
+ */
10
+
11
+ import type { BaseNodeRecord } from '@grafema/types';
12
+
13
+ interface ConstructorCallNodeRecord extends BaseNodeRecord {
14
+ type: 'CONSTRUCTOR_CALL';
15
+ className: string;
16
+ isBuiltin: boolean;
17
+ column: number;
18
+ }
19
+
20
+ interface ConstructorCallNodeOptions {
21
+ counter?: number;
22
+ }
23
+
24
+ /**
25
+ * List of built-in JavaScript constructors
26
+ * These are globally available and don't require imports
27
+ */
28
+ const BUILTIN_CONSTRUCTORS = new Set([
29
+ // Fundamental objects
30
+ 'Object',
31
+ 'Function',
32
+ 'Boolean',
33
+ 'Symbol',
34
+
35
+ // Error types
36
+ 'Error',
37
+ 'EvalError',
38
+ 'RangeError',
39
+ 'ReferenceError',
40
+ 'SyntaxError',
41
+ 'TypeError',
42
+ 'URIError',
43
+ 'AggregateError',
44
+
45
+ // Numbers and dates
46
+ 'Number',
47
+ 'BigInt',
48
+ 'Math',
49
+ 'Date',
50
+
51
+ // Text processing
52
+ 'String',
53
+ 'RegExp',
54
+
55
+ // Indexed collections
56
+ 'Array',
57
+ 'Int8Array',
58
+ 'Uint8Array',
59
+ 'Uint8ClampedArray',
60
+ 'Int16Array',
61
+ 'Uint16Array',
62
+ 'Int32Array',
63
+ 'Uint32Array',
64
+ 'Float32Array',
65
+ 'Float64Array',
66
+ 'BigInt64Array',
67
+ 'BigUint64Array',
68
+
69
+ // Keyed collections
70
+ 'Map',
71
+ 'Set',
72
+ 'WeakMap',
73
+ 'WeakSet',
74
+ 'WeakRef',
75
+
76
+ // Structured data
77
+ 'ArrayBuffer',
78
+ 'SharedArrayBuffer',
79
+ 'DataView',
80
+ 'Atomics',
81
+ 'JSON',
82
+
83
+ // Control abstraction
84
+ 'Promise',
85
+ 'Generator',
86
+ 'GeneratorFunction',
87
+ 'AsyncFunction',
88
+ 'AsyncGenerator',
89
+ 'AsyncGeneratorFunction',
90
+
91
+ // Reflection
92
+ 'Reflect',
93
+ 'Proxy',
94
+
95
+ // Internationalization
96
+ 'Intl',
97
+
98
+ // Web APIs (commonly used)
99
+ 'URL',
100
+ 'URLSearchParams',
101
+ 'Headers',
102
+ 'Request',
103
+ 'Response',
104
+ 'FormData',
105
+ 'Blob',
106
+ 'File',
107
+ 'FileReader',
108
+ 'AbortController',
109
+ 'TextEncoder',
110
+ 'TextDecoder',
111
+ 'Event',
112
+ 'CustomEvent',
113
+ 'EventTarget',
114
+ 'WebSocket',
115
+ 'Worker',
116
+ 'MessageChannel',
117
+ 'MessagePort',
118
+ 'BroadcastChannel',
119
+ 'ReadableStream',
120
+ 'WritableStream',
121
+ 'TransformStream',
122
+ 'CompressionStream',
123
+ 'DecompressionStream',
124
+ ]);
125
+
126
+ export class ConstructorCallNode {
127
+ static readonly TYPE = 'CONSTRUCTOR_CALL' as const;
128
+
129
+ static readonly REQUIRED = ['name', 'file', 'line', 'column', 'className', 'isBuiltin'] as const;
130
+ static readonly OPTIONAL = [] as const;
131
+
132
+ /**
133
+ * Check if a class name is a built-in JavaScript constructor
134
+ */
135
+ static isBuiltinConstructor(className: string): boolean {
136
+ return BUILTIN_CONSTRUCTORS.has(className);
137
+ }
138
+
139
+ /**
140
+ * Generate ID for CONSTRUCTOR_CALL node
141
+ *
142
+ * @param className - Name of the constructor
143
+ * @param file - File path
144
+ * @param line - Line number
145
+ * @param column - Column position
146
+ * @param options - Optional counter for disambiguation
147
+ */
148
+ static generateId(
149
+ className: string,
150
+ file: string,
151
+ line: number,
152
+ column: number,
153
+ options: ConstructorCallNodeOptions = {}
154
+ ): string {
155
+ const counter = options.counter !== undefined ? `:${options.counter}` : '';
156
+ return `${file}:CONSTRUCTOR_CALL:${className}:${line}:${column}${counter}`;
157
+ }
158
+
159
+ /**
160
+ * Create CONSTRUCTOR_CALL node
161
+ *
162
+ * @param className - Name of the constructor (e.g., 'Date', 'MyClass')
163
+ * @param file - File path
164
+ * @param line - Line number
165
+ * @param column - Column position
166
+ * @param options - Optional counter for disambiguation
167
+ */
168
+ static create(
169
+ className: string,
170
+ file: string,
171
+ line: number,
172
+ column: number,
173
+ options: ConstructorCallNodeOptions = {}
174
+ ): ConstructorCallNodeRecord {
175
+ if (!className) throw new Error('ConstructorCallNode.create: className is required');
176
+ if (!file) throw new Error('ConstructorCallNode.create: file is required');
177
+ if (line === undefined) throw new Error('ConstructorCallNode.create: line is required');
178
+ if (column === undefined) throw new Error('ConstructorCallNode.create: column is required');
179
+
180
+ const id = this.generateId(className, file, line, column, options);
181
+ const isBuiltin = this.isBuiltinConstructor(className);
182
+
183
+ return {
184
+ id,
185
+ type: this.TYPE,
186
+ name: `new ${className}()`,
187
+ className,
188
+ isBuiltin,
189
+ file,
190
+ line,
191
+ column
192
+ };
193
+ }
194
+
195
+ static validate(node: ConstructorCallNodeRecord): string[] {
196
+ const errors: string[] = [];
197
+
198
+ if (node.type !== this.TYPE) {
199
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
200
+ }
201
+
202
+ const nodeRecord = node as unknown as Record<string, unknown>;
203
+ for (const field of this.REQUIRED) {
204
+ if (nodeRecord[field] === undefined || nodeRecord[field] === null) {
205
+ errors.push(`Missing required field: ${field}`);
206
+ }
207
+ }
208
+
209
+ if (typeof node.isBuiltin !== 'boolean') {
210
+ errors.push('isBuiltin must be a boolean');
211
+ }
212
+
213
+ return errors;
214
+ }
215
+ }
216
+
217
+ export type { ConstructorCallNodeRecord };
@@ -6,6 +6,7 @@ import type { BaseNodeRecord } from '@grafema/types';
6
6
 
7
7
  interface DatabaseQueryNodeRecord extends BaseNodeRecord {
8
8
  type: 'DATABASE_QUERY';
9
+ column: number;
9
10
  query?: string;
10
11
  operation: string;
11
12
  parentScopeId?: string;
@@ -18,7 +19,7 @@ interface DatabaseQueryNodeOptions {
18
19
  export class DatabaseQueryNode {
19
20
  static readonly TYPE = 'DATABASE_QUERY' as const;
20
21
 
21
- static readonly REQUIRED = ['name', 'file', 'line'] as const;
22
+ static readonly REQUIRED = ['name', 'file', 'line', 'column'] as const;
22
23
  static readonly OPTIONAL = ['query', 'operation', 'parentScopeId'] as const;
23
24
 
24
25
  static create(
@@ -26,10 +27,12 @@ export class DatabaseQueryNode {
26
27
  operation: string | undefined,
27
28
  file: string,
28
29
  line: number,
30
+ column: number,
29
31
  options: DatabaseQueryNodeOptions = {}
30
32
  ): DatabaseQueryNodeRecord {
31
33
  if (!file) throw new Error('DatabaseQueryNode.create: file is required');
32
34
  if (line === undefined) throw new Error('DatabaseQueryNode.create: line is required');
35
+ if (column === undefined) throw new Error('DatabaseQueryNode.create: column is required');
33
36
 
34
37
  const name = query || `${operation || 'QUERY'}`;
35
38
  const id = `${file}:DATABASE_QUERY:${name}:${line}`;
@@ -42,6 +45,7 @@ export class DatabaseQueryNode {
42
45
  operation: operation || 'UNKNOWN',
43
46
  file,
44
47
  line,
48
+ column,
45
49
  parentScopeId: options.parentScopeId
46
50
  };
47
51
  }