@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
  * MethodCallNode - contract for METHOD_CALL 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->{object.method}#N
9
+ * Example: src/app.js->handler->CALL->db.query#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 MethodCallNodeRecord extends BaseNodeRecord {
8
16
  type: 'METHOD_CALL';
@@ -19,11 +27,20 @@ interface MethodCallNodeOptions {
19
27
  counter?: number;
20
28
  }
21
29
 
30
+ /**
31
+ * Options for createWithContext
32
+ */
33
+ interface MethodCallContextOptions {
34
+ discriminator: number;
35
+ parentScopeId?: string;
36
+ args?: unknown[];
37
+ }
38
+
22
39
  export class MethodCallNode {
23
40
  static readonly TYPE = 'METHOD_CALL' as const;
24
41
 
25
- static readonly REQUIRED = ['name', 'file', 'line', 'args'] as const;
26
- static readonly OPTIONAL = ['object', 'method', 'column', 'parentScopeId'] as const;
42
+ static readonly REQUIRED = ['name', 'file', 'line', 'column', 'args'] as const;
43
+ static readonly OPTIONAL = ['object', 'method', 'parentScopeId'] as const;
27
44
 
28
45
  /**
29
46
  * Create METHOD_CALL node
@@ -39,10 +56,11 @@ export class MethodCallNode {
39
56
  if (!methodName) throw new Error('MethodCallNode.create: methodName is required');
40
57
  if (!file) throw new Error('MethodCallNode.create: file is required');
41
58
  if (line === undefined) throw new Error('MethodCallNode.create: line is required');
59
+ if (column === undefined) throw new Error('MethodCallNode.create: column is required');
42
60
 
43
61
  const fullName = objectName ? `${objectName}.${methodName}` : methodName;
44
62
  const counter = options.counter !== undefined ? `:${options.counter}` : '';
45
- const id = `${file}:METHOD_CALL:${fullName}:${line}:${column || 0}${counter}`;
63
+ const id = `${file}:METHOD_CALL:${fullName}:${line}:${column}${counter}`;
46
64
 
47
65
  return {
48
66
  id,
@@ -52,7 +70,55 @@ export class MethodCallNode {
52
70
  method: methodName,
53
71
  file,
54
72
  line,
55
- column: column || 0,
73
+ column,
74
+ parentScopeId: options.parentScopeId,
75
+ args: options.args || []
76
+ };
77
+ }
78
+
79
+ /**
80
+ * Create METHOD_CALL node with semantic ID (NEW API)
81
+ *
82
+ * Uses ScopeContext from ScopeTracker for stable identifiers.
83
+ * Requires discriminator for multiple calls to same method within scope.
84
+ *
85
+ * @param objectName - Object name (can be undefined for bare function calls)
86
+ * @param methodName - Method name
87
+ * @param context - Scope context from ScopeTracker.getContext()
88
+ * @param location - Source location { line, column }
89
+ * @param options - Options including required discriminator
90
+ * @returns MethodCallNodeRecord with semantic ID
91
+ */
92
+ static createWithContext(
93
+ objectName: string | undefined,
94
+ methodName: string,
95
+ context: ScopeContext,
96
+ location: Partial<Location>,
97
+ options: MethodCallContextOptions
98
+ ): MethodCallNodeRecord {
99
+ // Validate required fields
100
+ if (!methodName) throw new Error('MethodCallNode.createWithContext: methodName is required');
101
+ if (!context.file) throw new Error('MethodCallNode.createWithContext: file is required');
102
+ if (location.line === undefined) throw new Error('MethodCallNode.createWithContext: line is required');
103
+ if (location.column === undefined) throw new Error('MethodCallNode.createWithContext: column is required');
104
+ if (options.discriminator === undefined) throw new Error('MethodCallNode.createWithContext: discriminator is required');
105
+
106
+ const fullName = objectName ? `${objectName}.${methodName}` : methodName;
107
+
108
+ // Compute semantic ID with discriminator
109
+ const id = computeSemanticId('CALL', fullName, context, {
110
+ discriminator: options.discriminator
111
+ });
112
+
113
+ return {
114
+ id,
115
+ type: this.TYPE,
116
+ name: fullName,
117
+ object: objectName,
118
+ method: methodName,
119
+ file: context.file,
120
+ line: location.line,
121
+ column: location.column,
56
122
  parentScopeId: options.parentScopeId,
57
123
  args: options.args || []
58
124
  };
@@ -1,8 +1,16 @@
1
1
  /**
2
2
  * MethodNode - contract for METHOD node (class method)
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}->{className}->METHOD->{name}
9
+ * Example: src/services/UserService.js->UserService->METHOD->login
3
10
  */
4
11
 
5
12
  import type { BaseNodeRecord } from '@grafema/types';
13
+ import { computeSemanticId, type ScopeContext, type Location } from '../SemanticId.js';
6
14
 
7
15
  type MethodKind = 'method' | 'get' | 'set' | 'constructor';
8
16
 
@@ -23,11 +31,21 @@ interface MethodNodeOptions {
23
31
  kind?: MethodKind;
24
32
  }
25
33
 
34
+ /**
35
+ * Options for createWithContext
36
+ */
37
+ interface MethodContextOptions {
38
+ async?: boolean;
39
+ generator?: boolean;
40
+ static?: boolean;
41
+ kind?: MethodKind;
42
+ }
43
+
26
44
  export class MethodNode {
27
45
  static readonly TYPE = 'METHOD' as const;
28
46
 
29
- static readonly REQUIRED = ['name', 'file', 'line', 'className'] as const;
30
- static readonly OPTIONAL = ['column', 'async', 'generator', 'static', 'kind'] as const;
47
+ static readonly REQUIRED = ['name', 'file', 'line', 'column', 'className'] as const;
48
+ static readonly OPTIONAL = ['async', 'generator', 'static', 'kind'] as const;
31
49
 
32
50
  static create(
33
51
  name: string,
@@ -40,6 +58,7 @@ export class MethodNode {
40
58
  if (!name) throw new Error('MethodNode.create: name is required');
41
59
  if (!file) throw new Error('MethodNode.create: file is required');
42
60
  if (!line) throw new Error('MethodNode.create: line is required');
61
+ if (column === undefined) throw new Error('MethodNode.create: column is required');
43
62
  if (!className) throw new Error('MethodNode.create: className is required');
44
63
 
45
64
  return {
@@ -48,7 +67,53 @@ export class MethodNode {
48
67
  name,
49
68
  file,
50
69
  line,
51
- column: column || 0,
70
+ column,
71
+ className,
72
+ async: options.async || false,
73
+ generator: options.generator || false,
74
+ static: options.static || false,
75
+ kind: options.kind || 'method'
76
+ };
77
+ }
78
+
79
+ /**
80
+ * Create METHOD node with semantic ID (NEW API)
81
+ *
82
+ * Uses ScopeContext from ScopeTracker for stable identifiers.
83
+ * Method names are unique within class, so no discriminator needed.
84
+ * Context should include the class in scopePath.
85
+ *
86
+ * @param name - Method name
87
+ * @param className - Name of the class containing this method
88
+ * @param context - Scope context from ScopeTracker.getContext() (should be inside class)
89
+ * @param location - Source location { line, column }
90
+ * @param options - Optional method properties
91
+ * @returns MethodNodeRecord with semantic ID
92
+ */
93
+ static createWithContext(
94
+ name: string,
95
+ className: string,
96
+ context: ScopeContext,
97
+ location: Partial<Location>,
98
+ options: MethodContextOptions = {}
99
+ ): MethodNodeRecord {
100
+ // Validate required fields
101
+ if (!name) throw new Error('MethodNode.createWithContext: name is required');
102
+ if (!className) throw new Error('MethodNode.createWithContext: className is required');
103
+ if (!context.file) throw new Error('MethodNode.createWithContext: file is required');
104
+ if (location.line === undefined) throw new Error('MethodNode.createWithContext: line is required');
105
+ if (location.column === undefined) throw new Error('MethodNode.createWithContext: column is required');
106
+
107
+ // Compute semantic ID
108
+ const id = computeSemanticId(this.TYPE, name, context);
109
+
110
+ return {
111
+ id,
112
+ type: this.TYPE,
113
+ name,
114
+ file: context.file,
115
+ line: location.line,
116
+ column: location.column,
52
117
  className,
53
118
  async: options.async || false,
54
119
  generator: options.generator || false,
@@ -1,9 +1,19 @@
1
1
  /**
2
2
  * ModuleNode - contract for MODULE node
3
+ *
4
+ * Supports two creation modes:
5
+ * 1. createWithContext() - NEW: Uses ScopeContext for semantic IDs
6
+ * 2. create() - LEGACY: Uses hash-based IDs for backward compatibility
7
+ *
8
+ * Semantic ID format: {file}->global->MODULE->module
9
+ * Example: src/index.js->global->MODULE->module
10
+ *
11
+ * Each file has exactly one MODULE node. The name in the ID is always "module".
3
12
  */
4
13
 
5
14
  import { createHash } from 'crypto';
6
15
  import type { BaseNodeRecord } from '@grafema/types';
16
+ import { computeSemanticId, type ScopeContext } from '../SemanticId.js';
7
17
 
8
18
  interface ModuleNodeRecord extends BaseNodeRecord {
9
19
  type: 'MODULE';
@@ -15,6 +25,14 @@ interface ModuleNodeOptions {
15
25
  isTest?: boolean;
16
26
  }
17
27
 
28
+ /**
29
+ * Options for createWithContext
30
+ */
31
+ interface ModuleContextOptions {
32
+ contentHash?: string;
33
+ isTest?: boolean;
34
+ }
35
+
18
36
  export class ModuleNode {
19
37
  static readonly TYPE = 'MODULE' as const;
20
38
 
@@ -49,6 +67,38 @@ export class ModuleNode {
49
67
  };
50
68
  }
51
69
 
70
+ /**
71
+ * Create MODULE node with semantic ID (NEW API)
72
+ *
73
+ * Uses ScopeContext for stable identifiers that don't change
74
+ * when file content changes (unlike hash-based IDs).
75
+ *
76
+ * Each file has exactly one MODULE node.
77
+ * The name in the semantic ID is always "module".
78
+ *
79
+ * @param context - Scope context with file path (relative to project root)
80
+ * @param options - Optional contentHash and isTest flag
81
+ * @returns ModuleNodeRecord with semantic ID
82
+ */
83
+ static createWithContext(
84
+ context: ScopeContext,
85
+ options: ModuleContextOptions = {}
86
+ ): ModuleNodeRecord {
87
+ if (!context.file) throw new Error('ModuleNode.createWithContext: file is required in context');
88
+
89
+ const id = computeSemanticId(this.TYPE, 'module', context);
90
+
91
+ return {
92
+ id,
93
+ type: this.TYPE,
94
+ name: context.file,
95
+ file: context.file,
96
+ line: 0,
97
+ contentHash: options.contentHash || '',
98
+ isTest: options.isTest || false
99
+ };
100
+ }
101
+
52
102
  static _hashPath(path: string): string {
53
103
  return createHash('md5').update(path).digest('hex').substring(0, 12);
54
104
  }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * NetworkRequestNode - contract for net:request singleton node
3
+ *
4
+ * Represents the external network as a system resource.
5
+ * All HTTP_REQUEST nodes connect to this singleton via CALLS edges.
6
+ *
7
+ * This is NOT the same as HttpRequestNode (type: HTTP_REQUEST), which represents
8
+ * individual HTTP request call sites in source code.
9
+ *
10
+ * Architectural role:
11
+ * - net:request is a singleton representing external network (like net:stdio for console I/O)
12
+ * - HTTP_REQUEST nodes are call sites that connect to this singleton via CALLS edges
13
+ *
14
+ * Example graph structure:
15
+ * ```
16
+ * /app/api.ts:HTTP_REQUEST:GET:15:0 --CALLS--> net:request#__network__
17
+ * /app/service.ts:HTTP_REQUEST:POST:42:0 --CALLS--> net:request#__network__
18
+ * ```
19
+ */
20
+
21
+ import type { BaseNodeRecord } from '@grafema/types';
22
+
23
+ interface NetworkRequestNodeRecord extends BaseNodeRecord {
24
+ type: 'net:request';
25
+ }
26
+
27
+ export class NetworkRequestNode {
28
+ static readonly TYPE = 'net:request' as const;
29
+ static readonly SINGLETON_ID = 'net:request#__network__';
30
+
31
+ static readonly REQUIRED = ['name', 'file'] as const;
32
+ static readonly OPTIONAL = [] as const;
33
+
34
+ /**
35
+ * Create net:request singleton node
36
+ *
37
+ * This node represents the external network as a system resource.
38
+ * All HTTP_REQUEST nodes connect to this singleton via CALLS edges.
39
+ *
40
+ * Should be created once per graph. GraphBuilder and ExpressAnalyzer
41
+ * use singleton deduplication to ensure only one instance exists.
42
+ *
43
+ * @returns NetworkRequestNodeRecord - singleton node
44
+ */
45
+ static create(): NetworkRequestNodeRecord {
46
+ return {
47
+ id: this.SINGLETON_ID,
48
+ type: this.TYPE,
49
+ name: '__network__',
50
+ file: '__builtin__',
51
+ line: 0
52
+ };
53
+ }
54
+
55
+ /**
56
+ * Validate net:request node structure
57
+ *
58
+ * Ensures:
59
+ * - type is net:request (NOT NET_REQUEST)
60
+ * - id matches SINGLETON_ID
61
+ *
62
+ * @param node - Node to validate
63
+ * @returns Array of error messages (empty if valid)
64
+ */
65
+ static validate(node: NetworkRequestNodeRecord): string[] {
66
+ const errors: string[] = [];
67
+ if (node.type !== this.TYPE) {
68
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
69
+ }
70
+ if (node.id !== this.SINGLETON_ID) {
71
+ errors.push(`Invalid singleton ID: expected ${this.SINGLETON_ID}, got ${node.id}`);
72
+ }
73
+ return errors;
74
+ }
75
+ }
76
+
77
+ export type { NetworkRequestNodeRecord };
@@ -0,0 +1,66 @@
1
+ /**
2
+ * ObjectLiteralNode - contract for OBJECT_LITERAL node
3
+ *
4
+ * Represents an object literal expression: { key: value, ... }
5
+ * Used for tracking data flow through object construction.
6
+ */
7
+
8
+ import type { BaseNodeRecord } from '@grafema/types';
9
+
10
+ interface ObjectLiteralNodeRecord extends BaseNodeRecord {
11
+ type: 'OBJECT_LITERAL';
12
+ column: number;
13
+ parentCallId?: string;
14
+ argIndex?: number;
15
+ }
16
+
17
+ interface ObjectLiteralNodeOptions {
18
+ parentCallId?: string;
19
+ argIndex?: number;
20
+ counter?: number;
21
+ }
22
+
23
+ export class ObjectLiteralNode {
24
+ static readonly TYPE = 'OBJECT_LITERAL' as const;
25
+
26
+ static readonly REQUIRED = ['file', 'line', 'column'] as const;
27
+ static readonly OPTIONAL = ['parentCallId', 'argIndex'] as const;
28
+
29
+ static create(
30
+ file: string,
31
+ line: number,
32
+ column: number,
33
+ options: ObjectLiteralNodeOptions = {}
34
+ ): ObjectLiteralNodeRecord {
35
+ if (!file) throw new Error('ObjectLiteralNode.create: file is required');
36
+ if (line === undefined) throw new Error('ObjectLiteralNode.create: line is required');
37
+ if (column === undefined) throw new Error('ObjectLiteralNode.create: column is required');
38
+
39
+ const counter = options.counter !== undefined ? `:${options.counter}` : '';
40
+ const argSuffix = options.argIndex !== undefined ? `arg${options.argIndex}` : 'obj';
41
+ const id = `OBJECT_LITERAL#${argSuffix}#${file}#${line}:${column}${counter}`;
42
+
43
+ return {
44
+ id,
45
+ type: this.TYPE,
46
+ name: `<object>`,
47
+ file,
48
+ line,
49
+ column,
50
+ parentCallId: options.parentCallId,
51
+ argIndex: options.argIndex
52
+ };
53
+ }
54
+
55
+ static validate(node: ObjectLiteralNodeRecord): string[] {
56
+ const errors: string[] = [];
57
+ if (node.type !== this.TYPE) errors.push(`Expected type ${this.TYPE}`);
58
+ const nodeRecord = node as unknown as Record<string, unknown>;
59
+ for (const field of this.REQUIRED) {
60
+ if (nodeRecord[field] === undefined) errors.push(`Missing: ${field}`);
61
+ }
62
+ return errors;
63
+ }
64
+ }
65
+
66
+ export type { ObjectLiteralNodeRecord, ObjectLiteralNodeOptions };
@@ -22,8 +22,8 @@ interface ParameterNodeOptions {
22
22
  export class ParameterNode {
23
23
  static readonly TYPE = 'PARAMETER' as const;
24
24
 
25
- static readonly REQUIRED = ['name', 'file', 'line', 'functionId'] as const;
26
- static readonly OPTIONAL = ['column', 'index', 'defaultValue', 'rest'] as const;
25
+ static readonly REQUIRED = ['name', 'file', 'line', 'column', 'functionId'] as const;
26
+ static readonly OPTIONAL = ['index', 'defaultValue', 'rest'] as const;
27
27
 
28
28
  static create(
29
29
  name: string,
@@ -36,6 +36,7 @@ export class ParameterNode {
36
36
  if (!name) throw new Error('ParameterNode.create: name is required');
37
37
  if (!file) throw new Error('ParameterNode.create: file is required');
38
38
  if (!line) throw new Error('ParameterNode.create: line is required');
39
+ if (column === undefined) throw new Error('ParameterNode.create: column is required');
39
40
  if (!functionId) throw new Error('ParameterNode.create: functionId is required');
40
41
 
41
42
  return {
@@ -44,7 +45,7 @@ export class ParameterNode {
44
45
  name,
45
46
  file,
46
47
  line,
47
- column: column || 0,
48
+ column,
48
49
  functionId,
49
50
  index: options.index || 0,
50
51
  defaultValue: options.defaultValue,
@@ -1,8 +1,16 @@
1
1
  /**
2
2
  * ScopeNode - contract for SCOPE 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}->SCOPE->{scopeType}#N
9
+ * Example: src/app.js->handler->SCOPE->if#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 ScopeNodeRecord extends BaseNodeRecord {
8
16
  type: 'SCOPE';
@@ -22,6 +30,17 @@ interface ScopeNodeOptions {
22
30
  counter?: number;
23
31
  }
24
32
 
33
+ /**
34
+ * Options for createWithContext
35
+ */
36
+ interface ScopeContextOptions {
37
+ discriminator: number;
38
+ conditional?: boolean;
39
+ parentScopeId?: string;
40
+ parentFunctionId?: string;
41
+ capturesFrom?: string[];
42
+ }
43
+
25
44
  export class ScopeNode {
26
45
  static readonly TYPE = 'SCOPE' as const;
27
46
 
@@ -59,6 +78,52 @@ export class ScopeNode {
59
78
  };
60
79
  }
61
80
 
81
+ /**
82
+ * Create SCOPE node with semantic ID (NEW API)
83
+ *
84
+ * Uses ScopeContext from ScopeTracker for stable identifiers.
85
+ * Requires discriminator for multiple scopes of same type within parent scope.
86
+ *
87
+ * @param scopeType - Type of scope (if, else, try, catch, finally, for, while, switch)
88
+ * @param context - Scope context from ScopeTracker.getContext()
89
+ * @param location - Source location { line }
90
+ * @param options - Options including required discriminator
91
+ * @returns ScopeNodeRecord with semantic ID
92
+ */
93
+ static createWithContext(
94
+ scopeType: string,
95
+ context: ScopeContext,
96
+ location: Partial<Location>,
97
+ options: ScopeContextOptions
98
+ ): ScopeNodeRecord {
99
+ // Validate required fields
100
+ if (!scopeType) throw new Error('ScopeNode.createWithContext: scopeType is required');
101
+ if (!context.file) throw new Error('ScopeNode.createWithContext: file is required');
102
+ if (location.line === undefined) throw new Error('ScopeNode.createWithContext: line is required');
103
+ if (options.discriminator === undefined) throw new Error('ScopeNode.createWithContext: discriminator is required');
104
+
105
+ // Compute semantic ID with discriminator
106
+ const id = computeSemanticId('SCOPE', scopeType, context, {
107
+ discriminator: options.discriminator
108
+ });
109
+
110
+ // Name includes the discriminator for display purposes
111
+ const name = `${scopeType}#${options.discriminator}`;
112
+
113
+ return {
114
+ id,
115
+ type: this.TYPE,
116
+ scopeType,
117
+ name,
118
+ file: context.file,
119
+ line: location.line,
120
+ conditional: options.conditional || false,
121
+ parentScopeId: options.parentScopeId,
122
+ parentFunctionId: options.parentFunctionId,
123
+ capturesFrom: options.capturesFrom
124
+ };
125
+ }
126
+
62
127
  static validate(node: ScopeNodeRecord): string[] {
63
128
  const errors: string[] = [];
64
129
 
@@ -0,0 +1,79 @@
1
+ /**
2
+ * TypeNode - contract for TYPE node
3
+ *
4
+ * Represents TypeScript type alias declarations.
5
+ *
6
+ * ID format: {file}:TYPE:{name}:{line}
7
+ * Example: /src/types.ts:TYPE:UserId:10
8
+ */
9
+
10
+ import type { BaseNodeRecord } from '@grafema/types';
11
+
12
+ interface TypeNodeRecord extends BaseNodeRecord {
13
+ type: 'TYPE';
14
+ column: number;
15
+ aliasOf?: string;
16
+ }
17
+
18
+ interface TypeNodeOptions {
19
+ aliasOf?: string;
20
+ }
21
+
22
+ export class TypeNode {
23
+ static readonly TYPE = 'TYPE' as const;
24
+
25
+ static readonly REQUIRED = ['name', 'file', 'line', 'column'] as const;
26
+ static readonly OPTIONAL = ['aliasOf'] as const;
27
+
28
+ /**
29
+ * Create TYPE node
30
+ *
31
+ * @param name - Type alias name
32
+ * @param file - File path
33
+ * @param line - Line number
34
+ * @param column - Column position
35
+ * @param options - Optional type properties
36
+ * @returns TypeNodeRecord
37
+ */
38
+ static create(
39
+ name: string,
40
+ file: string,
41
+ line: number,
42
+ column: number,
43
+ options: TypeNodeOptions = {}
44
+ ): TypeNodeRecord {
45
+ if (!name) throw new Error('TypeNode.create: name is required');
46
+ if (!file) throw new Error('TypeNode.create: file is required');
47
+ if (!line) throw new Error('TypeNode.create: line is required');
48
+ if (column === undefined) throw new Error('TypeNode.create: column is required');
49
+
50
+ return {
51
+ id: `${file}:TYPE:${name}:${line}`,
52
+ type: this.TYPE,
53
+ name,
54
+ file,
55
+ line,
56
+ column,
57
+ aliasOf: options.aliasOf
58
+ };
59
+ }
60
+
61
+ static validate(node: TypeNodeRecord): string[] {
62
+ const errors: string[] = [];
63
+
64
+ if (node.type !== this.TYPE) {
65
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
66
+ }
67
+
68
+ const nodeRecord = node as unknown as Record<string, unknown>;
69
+ for (const field of this.REQUIRED) {
70
+ if (!nodeRecord[field]) {
71
+ errors.push(`Missing required field: ${field}`);
72
+ }
73
+ }
74
+
75
+ return errors;
76
+ }
77
+ }
78
+
79
+ export type { TypeNodeRecord };