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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/README.md +0 -1
  2. package/dist/Orchestrator.d.ts +31 -2
  3. package/dist/Orchestrator.d.ts.map +1 -1
  4. package/dist/Orchestrator.js +222 -27
  5. package/dist/config/ConfigLoader.d.ts +90 -0
  6. package/dist/config/ConfigLoader.d.ts.map +1 -0
  7. package/dist/config/ConfigLoader.js +249 -0
  8. package/dist/config/index.d.ts +6 -0
  9. package/dist/config/index.d.ts.map +1 -0
  10. package/dist/config/index.js +4 -0
  11. package/dist/core/ASTWorker.d.ts +11 -36
  12. package/dist/core/ASTWorker.d.ts.map +1 -1
  13. package/dist/core/ASTWorker.js +93 -99
  14. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  15. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  16. package/dist/core/CoverageAnalyzer.js +198 -0
  17. package/dist/core/FileExplainer.d.ts +101 -0
  18. package/dist/core/FileExplainer.d.ts.map +1 -0
  19. package/dist/core/FileExplainer.js +139 -0
  20. package/dist/core/FileNodeManager.d.ts +40 -0
  21. package/dist/core/FileNodeManager.d.ts.map +1 -0
  22. package/dist/core/FileNodeManager.js +84 -0
  23. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  24. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  25. package/dist/core/GraphFreshnessChecker.js +101 -0
  26. package/dist/core/HashUtils.d.ts +24 -0
  27. package/dist/core/HashUtils.d.ts.map +1 -0
  28. package/dist/core/HashUtils.js +45 -0
  29. package/dist/core/IncrementalReanalyzer.d.ts +36 -0
  30. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  31. package/dist/core/IncrementalReanalyzer.js +132 -0
  32. package/dist/core/NodeFactory.d.ts +266 -19
  33. package/dist/core/NodeFactory.d.ts.map +1 -1
  34. package/dist/core/NodeFactory.js +256 -21
  35. package/dist/core/ScopeTracker.d.ts +84 -0
  36. package/dist/core/ScopeTracker.d.ts.map +1 -0
  37. package/dist/core/ScopeTracker.js +116 -0
  38. package/dist/core/SemanticId.d.ts +90 -0
  39. package/dist/core/SemanticId.d.ts.map +1 -0
  40. package/dist/core/SemanticId.js +115 -0
  41. package/dist/core/VersionManager.d.ts.map +1 -1
  42. package/dist/core/VersionManager.js +3 -2
  43. package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
  44. package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
  45. package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
  46. package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
  47. package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
  48. package/dist/core/nodes/ArrayLiteralNode.js +43 -0
  49. package/dist/core/nodes/BranchNode.d.ts +41 -0
  50. package/dist/core/nodes/BranchNode.d.ts.map +1 -0
  51. package/dist/core/nodes/BranchNode.js +82 -0
  52. package/dist/core/nodes/CallSiteNode.d.ts +30 -2
  53. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
  54. package/dist/core/nodes/CallSiteNode.js +54 -4
  55. package/dist/core/nodes/CaseNode.d.ts +43 -0
  56. package/dist/core/nodes/CaseNode.d.ts.map +1 -0
  57. package/dist/core/nodes/CaseNode.js +81 -0
  58. package/dist/core/nodes/ClassNode.d.ts +34 -2
  59. package/dist/core/nodes/ClassNode.d.ts.map +1 -1
  60. package/dist/core/nodes/ClassNode.js +52 -4
  61. package/dist/core/nodes/ConstantNode.d.ts +2 -2
  62. package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
  63. package/dist/core/nodes/ConstantNode.js +6 -4
  64. package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
  65. package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
  66. package/dist/core/nodes/ConstructorCallNode.js +171 -0
  67. package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
  68. package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
  69. package/dist/core/nodes/DatabaseQueryNode.js +5 -2
  70. package/dist/core/nodes/DecoratorNode.d.ts +42 -0
  71. package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
  72. package/dist/core/nodes/DecoratorNode.js +64 -0
  73. package/dist/core/nodes/EnumNode.d.ts +42 -0
  74. package/dist/core/nodes/EnumNode.d.ts.map +1 -0
  75. package/dist/core/nodes/EnumNode.js +56 -0
  76. package/dist/core/nodes/EventListenerNode.d.ts +4 -4
  77. package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
  78. package/dist/core/nodes/EventListenerNode.js +7 -4
  79. package/dist/core/nodes/ExportNode.d.ts +38 -2
  80. package/dist/core/nodes/ExportNode.d.ts.map +1 -1
  81. package/dist/core/nodes/ExportNode.js +54 -4
  82. package/dist/core/nodes/ExpressionNode.d.ts +97 -0
  83. package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
  84. package/dist/core/nodes/ExpressionNode.js +180 -0
  85. package/dist/core/nodes/ExternalModuleNode.d.ts +32 -0
  86. package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
  87. package/dist/core/nodes/ExternalModuleNode.js +49 -0
  88. package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
  89. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
  90. package/dist/core/nodes/ExternalStdioNode.js +15 -8
  91. package/dist/core/nodes/FunctionNode.d.ts +36 -0
  92. package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
  93. package/dist/core/nodes/FunctionNode.js +80 -1
  94. package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
  95. package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
  96. package/dist/core/nodes/HttpRequestNode.js +7 -4
  97. package/dist/core/nodes/ImportNode.d.ts +28 -6
  98. package/dist/core/nodes/ImportNode.d.ts.map +1 -1
  99. package/dist/core/nodes/ImportNode.js +43 -8
  100. package/dist/core/nodes/InterfaceNode.d.ts +46 -0
  101. package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
  102. package/dist/core/nodes/InterfaceNode.js +57 -0
  103. package/dist/core/nodes/IssueNode.d.ts +73 -0
  104. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  105. package/dist/core/nodes/IssueNode.js +129 -0
  106. package/dist/core/nodes/LiteralNode.d.ts +2 -2
  107. package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
  108. package/dist/core/nodes/LiteralNode.js +6 -4
  109. package/dist/core/nodes/MethodCallNode.d.ts +32 -2
  110. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
  111. package/dist/core/nodes/MethodCallNode.js +57 -4
  112. package/dist/core/nodes/MethodNode.d.ts +34 -2
  113. package/dist/core/nodes/MethodNode.d.ts.map +1 -1
  114. package/dist/core/nodes/MethodNode.js +55 -3
  115. package/dist/core/nodes/ModuleNode.d.ts +31 -0
  116. package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
  117. package/dist/core/nodes/ModuleNode.js +37 -0
  118. package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
  119. package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
  120. package/dist/core/nodes/NetworkRequestNode.js +65 -0
  121. package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
  122. package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
  123. package/dist/core/nodes/ObjectLiteralNode.js +43 -0
  124. package/dist/core/nodes/ParameterNode.d.ts +2 -2
  125. package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
  126. package/dist/core/nodes/ParameterNode.js +5 -3
  127. package/dist/core/nodes/ScopeNode.d.ts +31 -0
  128. package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
  129. package/dist/core/nodes/ScopeNode.js +49 -0
  130. package/dist/core/nodes/TypeNode.d.ts +36 -0
  131. package/dist/core/nodes/TypeNode.d.ts.map +1 -0
  132. package/dist/core/nodes/TypeNode.js +55 -0
  133. package/dist/core/nodes/VariableDeclarationNode.d.ts +29 -2
  134. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
  135. package/dist/core/nodes/VariableDeclarationNode.js +48 -4
  136. package/dist/core/nodes/index.d.ts +15 -1
  137. package/dist/core/nodes/index.d.ts.map +1 -1
  138. package/dist/core/nodes/index.js +17 -0
  139. package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
  140. package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
  141. package/dist/data/builtins/BuiltinRegistry.js +110 -0
  142. package/dist/data/builtins/definitions.d.ts +28 -0
  143. package/dist/data/builtins/definitions.d.ts.map +1 -0
  144. package/dist/data/builtins/definitions.js +250 -0
  145. package/dist/data/builtins/index.d.ts +10 -0
  146. package/dist/data/builtins/index.d.ts.map +1 -0
  147. package/dist/data/builtins/index.js +8 -0
  148. package/dist/data/builtins/jsGlobals.d.ts +18 -0
  149. package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
  150. package/dist/data/builtins/jsGlobals.js +26 -0
  151. package/dist/data/builtins/types.d.ts +34 -0
  152. package/dist/data/builtins/types.d.ts.map +1 -0
  153. package/dist/data/builtins/types.js +7 -0
  154. package/dist/data/globals/definitions.d.ts +27 -0
  155. package/dist/data/globals/definitions.d.ts.map +1 -0
  156. package/dist/data/globals/definitions.js +117 -0
  157. package/dist/data/globals/index.d.ts +36 -0
  158. package/dist/data/globals/index.d.ts.map +1 -0
  159. package/dist/data/globals/index.js +52 -0
  160. package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
  161. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  162. package/dist/diagnostics/DiagnosticCollector.js +129 -0
  163. package/dist/diagnostics/DiagnosticReporter.d.ts +100 -0
  164. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  165. package/dist/diagnostics/DiagnosticReporter.js +247 -0
  166. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  167. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  168. package/dist/diagnostics/DiagnosticWriter.js +43 -0
  169. package/dist/diagnostics/index.d.ts +14 -0
  170. package/dist/diagnostics/index.d.ts.map +1 -0
  171. package/dist/diagnostics/index.js +11 -0
  172. package/dist/errors/GrafemaError.d.ts +161 -0
  173. package/dist/errors/GrafemaError.d.ts.map +1 -0
  174. package/dist/errors/GrafemaError.js +181 -0
  175. package/dist/index.d.ts +73 -1
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +70 -1
  178. package/dist/logging/Logger.d.ts +48 -0
  179. package/dist/logging/Logger.d.ts.map +1 -0
  180. package/dist/logging/Logger.js +134 -0
  181. package/dist/plugins/Plugin.d.ts +5 -1
  182. package/dist/plugins/Plugin.d.ts.map +1 -1
  183. package/dist/plugins/Plugin.js +33 -0
  184. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
  185. package/dist/plugins/analysis/DatabaseAnalyzer.js +14 -6
  186. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
  187. package/dist/plugins/analysis/ExpressAnalyzer.js +29 -19
  188. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
  189. package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
  190. package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
  191. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
  192. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +71 -29
  193. package/dist/plugins/analysis/FetchAnalyzer.d.ts +41 -0
  194. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
  195. package/dist/plugins/analysis/FetchAnalyzer.js +187 -19
  196. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
  197. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
  198. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
  199. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +313 -19
  200. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
  201. package/dist/plugins/analysis/JSASTAnalyzer.js +3430 -503
  202. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
  203. package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
  204. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
  205. package/dist/plugins/analysis/RustAnalyzer.js +16 -11
  206. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
  207. package/dist/plugins/analysis/SQLiteAnalyzer.js +11 -7
  208. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
  209. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
  210. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
  211. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
  212. package/dist/plugins/analysis/SocketIOAnalyzer.js +117 -21
  213. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
  214. package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
  215. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +207 -4
  216. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
  217. package/dist/plugins/analysis/ast/GraphBuilder.js +1527 -316
  218. package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
  219. package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
  220. package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
  221. package/dist/plugins/analysis/ast/types.d.ts +470 -5
  222. package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
  223. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
  224. package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
  225. package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
  226. package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
  227. package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
  228. package/dist/plugins/analysis/ast/utils/index.js +5 -0
  229. package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
  230. package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
  231. package/dist/plugins/analysis/ast/utils/location.js +78 -0
  232. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +14 -5
  233. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
  234. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
  235. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +100 -9
  236. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
  237. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +674 -125
  238. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
  239. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
  240. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
  241. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +14 -1
  242. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
  243. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +190 -63
  244. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
  245. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
  246. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +112 -8
  247. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
  248. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
  249. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
  250. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +20 -2
  251. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
  252. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +243 -45
  253. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
  254. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
  255. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
  256. package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
  257. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
  258. package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
  259. package/dist/plugins/discovery/WorkspaceDiscovery.js +141 -0
  260. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
  261. package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
  262. package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
  263. package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
  264. package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
  265. package/dist/plugins/discovery/workspaces/detector.js +49 -0
  266. package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
  267. package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
  268. package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
  269. package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
  270. package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
  271. package/dist/plugins/discovery/workspaces/index.js +8 -0
  272. package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
  273. package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
  274. package/dist/plugins/discovery/workspaces/parsers.js +80 -0
  275. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
  276. package/dist/plugins/enrichment/AliasTracker.js +29 -8
  277. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
  278. package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
  279. package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
  280. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
  281. package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
  282. package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
  283. package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
  284. package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
  285. package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
  286. package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
  287. package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
  288. package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
  289. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
  290. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
  291. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +78 -27
  292. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
  293. package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
  294. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
  295. package/dist/plugins/enrichment/MethodCallResolver.js +33 -13
  296. package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
  297. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
  298. package/dist/plugins/enrichment/MountPointResolver.js +173 -147
  299. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
  300. package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
  301. package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
  302. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
  303. package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
  304. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
  305. package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
  306. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +22 -27
  307. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
  308. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +185 -143
  309. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
  310. package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
  311. package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
  312. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
  313. package/dist/plugins/indexing/JSModuleIndexer.js +121 -31
  314. package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
  315. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
  316. package/dist/plugins/indexing/RustModuleIndexer.js +8 -7
  317. package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
  318. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
  319. package/dist/plugins/indexing/ServiceDetector.js +28 -15
  320. package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
  321. package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
  322. package/dist/plugins/validation/BrokenImportValidator.js +249 -0
  323. package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
  324. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
  325. package/dist/plugins/validation/CallResolverValidator.js +103 -77
  326. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
  327. package/dist/plugins/validation/DataFlowValidator.js +62 -49
  328. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
  329. package/dist/plugins/validation/EvalBanValidator.js +17 -16
  330. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
  331. package/dist/plugins/validation/GraphConnectivityValidator.js +44 -24
  332. package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
  333. package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
  334. package/dist/plugins/validation/NodeCreationValidator.js +415 -0
  335. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
  336. package/dist/plugins/validation/SQLInjectionValidator.js +61 -19
  337. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
  338. package/dist/plugins/validation/ShadowingDetector.js +6 -5
  339. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
  340. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
  341. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
  342. package/dist/plugins/vcs/GitPlugin.js +10 -12
  343. package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
  344. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
  345. package/dist/plugins/vcs/VCSPlugin.js +5 -5
  346. package/dist/queries/findCallsInFunction.d.ts +52 -0
  347. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  348. package/dist/queries/findCallsInFunction.js +135 -0
  349. package/dist/queries/findContainingFunction.d.ts +45 -0
  350. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  351. package/dist/queries/findContainingFunction.js +54 -0
  352. package/dist/queries/index.d.ts +14 -0
  353. package/dist/queries/index.d.ts.map +1 -0
  354. package/dist/queries/index.js +11 -0
  355. package/dist/queries/traceValues.d.ts +70 -0
  356. package/dist/queries/traceValues.d.ts.map +1 -0
  357. package/dist/queries/traceValues.js +299 -0
  358. package/dist/queries/types.d.ts +163 -0
  359. package/dist/queries/types.d.ts.map +1 -0
  360. package/dist/queries/types.js +9 -0
  361. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  362. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  363. package/dist/schema/GraphSchemaExtractor.js +124 -0
  364. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  365. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  366. package/dist/schema/InterfaceSchemaExtractor.js +112 -0
  367. package/dist/schema/index.d.ts +5 -0
  368. package/dist/schema/index.d.ts.map +1 -0
  369. package/dist/schema/index.js +2 -0
  370. package/dist/storage/backends/RFDBServerBackend.d.ts +21 -34
  371. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
  372. package/dist/storage/backends/RFDBServerBackend.js +72 -62
  373. package/dist/storage/backends/typeValidation.d.ts.map +1 -1
  374. package/dist/storage/backends/typeValidation.js +1 -0
  375. package/dist/validation/PathValidator.d.ts +1 -2
  376. package/dist/validation/PathValidator.d.ts.map +1 -1
  377. package/package.json +3 -3
  378. package/src/Orchestrator.ts +272 -27
  379. package/src/config/ConfigLoader.ts +354 -0
  380. package/src/config/index.ts +5 -0
  381. package/src/core/ASTWorker.ts +143 -139
  382. package/src/core/CoverageAnalyzer.ts +243 -0
  383. package/src/core/FileExplainer.ts +179 -0
  384. package/src/core/FileNodeManager.ts +100 -0
  385. package/src/core/GraphFreshnessChecker.ts +143 -0
  386. package/src/core/HashUtils.ts +48 -0
  387. package/src/core/IncrementalReanalyzer.ts +192 -0
  388. package/src/core/NodeFactory.ts +470 -23
  389. package/src/core/ScopeTracker.ts +154 -0
  390. package/src/core/SemanticId.ts +192 -0
  391. package/src/core/VersionManager.ts +3 -2
  392. package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
  393. package/src/core/nodes/ArrayLiteralNode.ts +66 -0
  394. package/src/core/nodes/BranchNode.ts +113 -0
  395. package/src/core/nodes/CallSiteNode.ts +64 -4
  396. package/src/core/nodes/CaseNode.ts +123 -0
  397. package/src/core/nodes/ClassNode.ts +67 -4
  398. package/src/core/nodes/ConstantNode.ts +5 -4
  399. package/src/core/nodes/ConstructorCallNode.ts +217 -0
  400. package/src/core/nodes/DatabaseQueryNode.ts +5 -1
  401. package/src/core/nodes/DecoratorNode.ts +92 -0
  402. package/src/core/nodes/EnumNode.ts +87 -0
  403. package/src/core/nodes/EventListenerNode.ts +7 -4
  404. package/src/core/nodes/ExportNode.ts +74 -4
  405. package/src/core/nodes/ExpressionNode.ts +232 -0
  406. package/src/core/nodes/ExternalModuleNode.ts +65 -0
  407. package/src/core/nodes/ExternalStdioNode.ts +17 -9
  408. package/src/core/nodes/FunctionNode.ts +101 -1
  409. package/src/core/nodes/HttpRequestNode.ts +7 -4
  410. package/src/core/nodes/ImportNode.ts +62 -13
  411. package/src/core/nodes/InterfaceNode.ts +92 -0
  412. package/src/core/nodes/IssueNode.ts +177 -0
  413. package/src/core/nodes/LiteralNode.ts +5 -4
  414. package/src/core/nodes/MethodCallNode.ts +70 -4
  415. package/src/core/nodes/MethodNode.ts +68 -3
  416. package/src/core/nodes/ModuleNode.ts +50 -0
  417. package/src/core/nodes/NetworkRequestNode.ts +77 -0
  418. package/src/core/nodes/ObjectLiteralNode.ts +66 -0
  419. package/src/core/nodes/ParameterNode.ts +4 -3
  420. package/src/core/nodes/ScopeNode.ts +65 -0
  421. package/src/core/nodes/TypeNode.ts +79 -0
  422. package/src/core/nodes/VariableDeclarationNode.ts +58 -4
  423. package/src/core/nodes/index.ts +21 -1
  424. package/src/data/builtins/BuiltinRegistry.ts +124 -0
  425. package/src/data/builtins/definitions.ts +267 -0
  426. package/src/data/builtins/index.ts +10 -0
  427. package/src/data/builtins/jsGlobals.ts +28 -0
  428. package/src/data/builtins/types.ts +36 -0
  429. package/src/data/globals/definitions.ts +156 -0
  430. package/src/data/globals/index.ts +66 -0
  431. package/src/diagnostics/DiagnosticCollector.ts +163 -0
  432. package/src/diagnostics/DiagnosticReporter.ts +324 -0
  433. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  434. package/src/diagnostics/index.ts +16 -0
  435. package/src/errors/GrafemaError.ts +239 -0
  436. package/src/index.ts +193 -1
  437. package/src/logging/Logger.ts +152 -0
  438. package/src/plugins/Plugin.ts +42 -0
  439. package/src/plugins/analysis/DatabaseAnalyzer.ts +16 -8
  440. package/src/plugins/analysis/ExpressAnalyzer.ts +33 -19
  441. package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
  442. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +76 -36
  443. package/src/plugins/analysis/FetchAnalyzer.ts +232 -21
  444. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
  445. package/src/plugins/analysis/JSASTAnalyzer.ts +4265 -587
  446. package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
  447. package/src/plugins/analysis/RustAnalyzer.ts +16 -11
  448. package/src/plugins/analysis/SQLiteAnalyzer.ts +13 -7
  449. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
  450. package/src/plugins/analysis/SocketIOAnalyzer.ts +151 -28
  451. package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
  452. package/src/plugins/analysis/ast/GraphBuilder.ts +1947 -327
  453. package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
  454. package/src/plugins/analysis/ast/types.ts +596 -6
  455. package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
  456. package/src/plugins/analysis/ast/utils/index.ts +12 -0
  457. package/src/plugins/analysis/ast/utils/location.ts +103 -0
  458. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +19 -8
  459. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +924 -83
  460. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
  461. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +234 -93
  462. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +124 -9
  463. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
  464. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +294 -49
  465. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
  466. package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
  467. package/src/plugins/discovery/WorkspaceDiscovery.ts +184 -0
  468. package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
  469. package/src/plugins/discovery/workspaces/detector.ts +63 -0
  470. package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
  471. package/src/plugins/discovery/workspaces/index.ts +23 -0
  472. package/src/plugins/discovery/workspaces/parsers.ts +99 -0
  473. package/src/plugins/enrichment/AliasTracker.ts +35 -8
  474. package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
  475. package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
  476. package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
  477. package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
  478. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +84 -27
  479. package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
  480. package/src/plugins/enrichment/MethodCallResolver.ts +39 -13
  481. package/src/plugins/enrichment/MountPointResolver.ts +208 -195
  482. package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
  483. package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
  484. package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
  485. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +209 -189
  486. package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
  487. package/src/plugins/indexing/JSModuleIndexer.ts +140 -34
  488. package/src/plugins/indexing/RustModuleIndexer.ts +8 -7
  489. package/src/plugins/validation/BrokenImportValidator.ts +325 -0
  490. package/src/plugins/validation/CallResolverValidator.ts +131 -110
  491. package/src/plugins/validation/DataFlowValidator.ts +88 -67
  492. package/src/plugins/validation/EvalBanValidator.ts +17 -16
  493. package/src/plugins/validation/GraphConnectivityValidator.ts +58 -24
  494. package/src/plugins/validation/NodeCreationValidator.ts +554 -0
  495. package/src/plugins/validation/SQLInjectionValidator.ts +63 -20
  496. package/src/plugins/validation/ShadowingDetector.ts +6 -5
  497. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
  498. package/src/plugins/vcs/GitPlugin.ts +40 -12
  499. package/src/plugins/vcs/VCSPlugin.ts +7 -5
  500. package/src/queries/README.md +46 -0
  501. package/src/queries/findCallsInFunction.ts +206 -0
  502. package/src/queries/findContainingFunction.ts +83 -0
  503. package/src/queries/index.ts +23 -0
  504. package/src/queries/traceValues.ts +398 -0
  505. package/src/queries/types.ts +187 -0
  506. package/src/schema/GraphSchemaExtractor.ts +177 -0
  507. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  508. package/src/schema/index.ts +5 -0
  509. package/src/storage/backends/RFDBServerBackend.ts +100 -98
  510. package/src/storage/backends/typeValidation.ts +1 -0
  511. package/src/validation/PathValidator.ts +1 -1
  512. package/dist/core/AnalysisWorker.d.ts +0 -14
  513. package/dist/core/AnalysisWorker.d.ts.map +0 -1
  514. package/dist/core/AnalysisWorker.js +0 -307
  515. package/dist/core/ParallelAnalyzer.d.ts +0 -120
  516. package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
  517. package/dist/core/ParallelAnalyzer.js +0 -331
  518. package/dist/core/QueueWorker.d.ts +0 -12
  519. package/dist/core/QueueWorker.d.ts.map +0 -1
  520. package/dist/core/QueueWorker.js +0 -567
  521. package/dist/core/RFDBClient.d.ts +0 -179
  522. package/dist/core/RFDBClient.d.ts.map +0 -1
  523. package/dist/core/RFDBClient.js +0 -429
  524. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
  525. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
  526. package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
  527. package/src/core/AnalysisWorker.ts +0 -410
  528. package/src/core/ParallelAnalyzer.ts +0 -476
  529. package/src/core/QueueWorker.ts +0 -780
  530. package/src/plugins/indexing/ServiceDetector.ts +0 -230
@@ -0,0 +1,64 @@
1
+ /**
2
+ * DecoratorNode - contract for DECORATOR node
3
+ *
4
+ * Represents TypeScript/JavaScript decorators applied to
5
+ * classes, methods, properties, or parameters.
6
+ *
7
+ * ID format: {file}:DECORATOR:{name}:{line}:{column}
8
+ * Example: /src/services/UserService.ts:DECORATOR:Injectable:5:0
9
+ */
10
+ export class DecoratorNode {
11
+ static TYPE = 'DECORATOR';
12
+ static REQUIRED = ['name', 'file', 'line', 'column', 'targetId', 'targetType'];
13
+ static OPTIONAL = ['arguments'];
14
+ /**
15
+ * Create DECORATOR node
16
+ *
17
+ * @param name - Decorator name
18
+ * @param file - File path
19
+ * @param line - Line number
20
+ * @param column - Column position
21
+ * @param targetId - ID of decorated element
22
+ * @param targetType - Type of decorated element
23
+ * @param options - Optional decorator properties
24
+ * @returns DecoratorNodeRecord
25
+ */
26
+ static create(name, file, line, column, targetId, targetType, options = {}) {
27
+ if (!name)
28
+ throw new Error('DecoratorNode.create: name is required');
29
+ if (!file)
30
+ throw new Error('DecoratorNode.create: file is required');
31
+ if (!line)
32
+ throw new Error('DecoratorNode.create: line is required');
33
+ if (column === undefined)
34
+ throw new Error('DecoratorNode.create: column is required');
35
+ if (!targetId)
36
+ throw new Error('DecoratorNode.create: targetId is required');
37
+ if (!targetType)
38
+ throw new Error('DecoratorNode.create: targetType is required');
39
+ return {
40
+ id: `${file}:DECORATOR:${name}:${line}:${column}`,
41
+ type: this.TYPE,
42
+ name,
43
+ file,
44
+ line,
45
+ column,
46
+ arguments: options.arguments || [],
47
+ targetId,
48
+ targetType
49
+ };
50
+ }
51
+ static validate(node) {
52
+ const errors = [];
53
+ if (node.type !== this.TYPE) {
54
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
55
+ }
56
+ const nodeRecord = node;
57
+ for (const field of this.REQUIRED) {
58
+ if (!nodeRecord[field]) {
59
+ errors.push(`Missing required field: ${field}`);
60
+ }
61
+ }
62
+ return errors;
63
+ }
64
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * EnumNode - contract for ENUM node
3
+ *
4
+ * Represents TypeScript enum declarations.
5
+ *
6
+ * ID format: {file}:ENUM:{name}:{line}
7
+ * Example: /src/types.ts:ENUM:Status:20
8
+ */
9
+ import type { BaseNodeRecord } from '@grafema/types';
10
+ interface EnumMemberRecord {
11
+ name: string;
12
+ value?: string | number;
13
+ }
14
+ interface EnumNodeRecord extends BaseNodeRecord {
15
+ type: 'ENUM';
16
+ column: number;
17
+ isConst: boolean;
18
+ members: EnumMemberRecord[];
19
+ }
20
+ interface EnumNodeOptions {
21
+ isConst?: boolean;
22
+ members?: EnumMemberRecord[];
23
+ }
24
+ export declare class EnumNode {
25
+ static readonly TYPE: "ENUM";
26
+ static readonly REQUIRED: readonly ["name", "file", "line", "column"];
27
+ static readonly OPTIONAL: readonly ["isConst", "members"];
28
+ /**
29
+ * Create ENUM node
30
+ *
31
+ * @param name - Enum name
32
+ * @param file - File path
33
+ * @param line - Line number
34
+ * @param column - Column position
35
+ * @param options - Optional enum properties
36
+ * @returns EnumNodeRecord
37
+ */
38
+ static create(name: string, file: string, line: number, column: number, options?: EnumNodeOptions): EnumNodeRecord;
39
+ static validate(node: EnumNodeRecord): string[];
40
+ }
41
+ export type { EnumNodeRecord, EnumMemberRecord };
42
+ //# sourceMappingURL=EnumNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnumNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/EnumNode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,UAAU,cAAe,SAAQ,cAAc;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,qBAAa,QAAQ;IACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAEvC,MAAM,CAAC,QAAQ,CAAC,QAAQ,8CAA+C;IACvE,MAAM,CAAC,QAAQ,CAAC,QAAQ,kCAAmC;IAE3D;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,cAAc;IAkBjB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE;CAgBhD;AAED,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * EnumNode - contract for ENUM node
3
+ *
4
+ * Represents TypeScript enum declarations.
5
+ *
6
+ * ID format: {file}:ENUM:{name}:{line}
7
+ * Example: /src/types.ts:ENUM:Status:20
8
+ */
9
+ export class EnumNode {
10
+ static TYPE = 'ENUM';
11
+ static REQUIRED = ['name', 'file', 'line', 'column'];
12
+ static OPTIONAL = ['isConst', 'members'];
13
+ /**
14
+ * Create ENUM node
15
+ *
16
+ * @param name - Enum name
17
+ * @param file - File path
18
+ * @param line - Line number
19
+ * @param column - Column position
20
+ * @param options - Optional enum properties
21
+ * @returns EnumNodeRecord
22
+ */
23
+ static create(name, file, line, column, options = {}) {
24
+ if (!name)
25
+ throw new Error('EnumNode.create: name is required');
26
+ if (!file)
27
+ throw new Error('EnumNode.create: file is required');
28
+ if (!line)
29
+ throw new Error('EnumNode.create: line is required');
30
+ if (column === undefined)
31
+ throw new Error('EnumNode.create: column is required');
32
+ return {
33
+ id: `${file}:ENUM:${name}:${line}`,
34
+ type: this.TYPE,
35
+ name,
36
+ file,
37
+ line,
38
+ column,
39
+ isConst: options.isConst || false,
40
+ members: options.members || []
41
+ };
42
+ }
43
+ static validate(node) {
44
+ const errors = [];
45
+ if (node.type !== this.TYPE) {
46
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
47
+ }
48
+ const nodeRecord = node;
49
+ for (const field of this.REQUIRED) {
50
+ if (!nodeRecord[field]) {
51
+ errors.push(`Missing required field: ${field}`);
52
+ }
53
+ }
54
+ return errors;
55
+ }
56
+ }
@@ -4,21 +4,21 @@
4
4
  import type { BaseNodeRecord } from '@grafema/types';
5
5
  interface EventListenerNodeRecord extends BaseNodeRecord {
6
6
  type: 'EVENT_LISTENER';
7
+ column: number;
7
8
  object?: string;
8
9
  parentScopeId?: string;
9
10
  callbackArg?: string;
10
11
  }
11
12
  interface EventListenerNodeOptions {
12
- column?: number;
13
13
  parentScopeId?: string;
14
14
  callbackArg?: string;
15
15
  counter?: number;
16
16
  }
17
17
  export declare class EventListenerNode {
18
18
  static readonly TYPE: "EVENT_LISTENER";
19
- static readonly REQUIRED: readonly ["name", "file", "line"];
20
- static readonly OPTIONAL: readonly ["object", "column", "parentScopeId", "callbackArg"];
21
- static create(eventName: string, objectName: string | undefined, file: string, line: number, options?: EventListenerNodeOptions): EventListenerNodeRecord;
19
+ static readonly REQUIRED: readonly ["name", "file", "line", "column"];
20
+ static readonly OPTIONAL: readonly ["object", "parentScopeId", "callbackArg"];
21
+ static create(eventName: string, objectName: string | undefined, file: string, line: number, column: number, options?: EventListenerNodeOptions): EventListenerNodeRecord;
22
22
  static validate(node: EventListenerNodeRecord): string[];
23
23
  }
24
24
  export type { EventListenerNodeRecord };
@@ -1 +1 @@
1
- {"version":3,"file":"EventListenerNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/EventListenerNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,uBAAwB,SAAQ,cAAc;IACtD,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;IAEjD,MAAM,CAAC,QAAQ,CAAC,QAAQ,oCAAqC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,gEAAiE;IAEzF,MAAM,CAAC,MAAM,CACX,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,wBAA6B,GACrC,uBAAuB;IAoB1B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,EAAE;CASzD;AAED,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"EventListenerNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/EventListenerNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,uBAAwB,SAAQ,cAAc;IACtD,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;IAEjD,MAAM,CAAC,QAAQ,CAAC,QAAQ,8CAA+C;IACvE,MAAM,CAAC,QAAQ,CAAC,QAAQ,sDAAuD;IAE/E,MAAM,CAAC,MAAM,CACX,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,wBAA6B,GACrC,uBAAuB;IAsB1B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,EAAE;CASzD;AAED,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
@@ -3,17 +3,19 @@
3
3
  */
4
4
  export class EventListenerNode {
5
5
  static TYPE = 'EVENT_LISTENER';
6
- static REQUIRED = ['name', 'file', 'line'];
7
- static OPTIONAL = ['object', 'column', 'parentScopeId', 'callbackArg'];
8
- static create(eventName, objectName, file, line, options = {}) {
6
+ static REQUIRED = ['name', 'file', 'line', 'column'];
7
+ static OPTIONAL = ['object', 'parentScopeId', 'callbackArg'];
8
+ static create(eventName, objectName, file, line, column, options = {}) {
9
9
  if (!eventName)
10
10
  throw new Error('EventListenerNode.create: eventName is required');
11
11
  if (!file)
12
12
  throw new Error('EventListenerNode.create: file is required');
13
13
  if (line === undefined)
14
14
  throw new Error('EventListenerNode.create: line is required');
15
+ if (column === undefined)
16
+ throw new Error('EventListenerNode.create: column is required');
15
17
  const counter = options.counter !== undefined ? `:${options.counter}` : '';
16
- const id = `${file}:EVENT_LISTENER:${eventName}:${line}:${options.column || 0}${counter}`;
18
+ const id = `${file}:EVENT_LISTENER:${eventName}:${line}:${column}${counter}`;
17
19
  return {
18
20
  id,
19
21
  type: this.TYPE,
@@ -21,6 +23,7 @@ export class EventListenerNode {
21
23
  object: objectName,
22
24
  file,
23
25
  line,
26
+ column,
24
27
  parentScopeId: options.parentScopeId,
25
28
  callbackArg: options.callbackArg
26
29
  };
@@ -1,25 +1,61 @@
1
1
  /**
2
2
  * ExportNode - contract for EXPORT node
3
+ *
4
+ * Supports two creation modes:
5
+ * 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
6
+ * 2. create() - LEGACY: Uses line-based IDs for backward compatibility
7
+ *
8
+ * Semantic ID format: {file}->global->EXPORT->{exportedName}
9
+ * Example: src/utils.js->global->EXPORT->formatDate
3
10
  */
4
11
  import type { BaseNodeRecord } from '@grafema/types';
12
+ import { type ScopeContext, type Location } from '../SemanticId.js';
5
13
  type ExportKind = 'value' | 'type';
14
+ type ExportType = 'default' | 'named' | 'all';
6
15
  interface ExportNodeRecord extends BaseNodeRecord {
7
16
  type: 'EXPORT';
8
17
  column: number;
9
18
  exportKind: ExportKind;
10
19
  local: string;
11
20
  default: boolean;
21
+ source?: string;
22
+ exportType?: ExportType;
12
23
  }
13
24
  interface ExportNodeOptions {
14
25
  exportKind?: ExportKind;
15
26
  local?: string;
16
27
  default?: boolean;
28
+ source?: string;
29
+ exportType?: ExportType;
30
+ }
31
+ /**
32
+ * Options for createWithContext
33
+ */
34
+ interface ExportContextOptions {
35
+ exportKind?: ExportKind;
36
+ local?: string;
37
+ default?: boolean;
38
+ source?: string;
39
+ exportType?: ExportType;
17
40
  }
18
41
  export declare class ExportNode {
19
42
  static readonly TYPE: "EXPORT";
20
- static readonly REQUIRED: readonly ["name", "file", "line"];
21
- static readonly OPTIONAL: readonly ["column", "exportKind", "local", "default"];
43
+ static readonly REQUIRED: readonly ["name", "file", "line", "column"];
44
+ static readonly OPTIONAL: readonly ["exportKind", "local", "default", "source", "exportType"];
22
45
  static create(name: string, file: string, line: number, column: number, options?: ExportNodeOptions): ExportNodeRecord;
46
+ /**
47
+ * Create EXPORT node with semantic ID (NEW API)
48
+ *
49
+ * Uses ScopeContext from ScopeTracker for stable identifiers.
50
+ * Export names are unique within module, so no discriminator needed.
51
+ *
52
+ * @param name - Exported name (as visible to importers)
53
+ * @param context - Scope context from ScopeTracker.getContext()
54
+ * @param location - Source location { line, column }
55
+ * @param options - Optional export properties
56
+ * @returns ExportNodeRecord with semantic ID
57
+ */
58
+ static createWithContext(name: string, context: ScopeContext, location: Partial<Location>, options?: ExportContextOptions): ExportNodeRecord;
23
59
  static validate(node: ExportNodeRecord): string[];
24
60
  }
25
61
  export type { ExportNodeRecord, ExportKind };
@@ -1 +1 @@
1
- {"version":3,"file":"ExportNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ExportNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,KAAK,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnC,UAAU,gBAAiB,SAAQ,cAAc;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAEzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,oCAAqC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,wDAAyD;IAEjF,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB;IAkBnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE;CAgBlD;AAED,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"ExportNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ExportNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvF,KAAK,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnC,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;AAE9C,UAAU,gBAAiB,SAAQ,cAAc;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,UAAU,oBAAoB;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAEzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,8CAA+C;IACvE,MAAM,CAAC,QAAQ,CAAC,QAAQ,sEAAuE;IAE/F,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB;IAqBnB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC3B,OAAO,GAAE,oBAAyB,GACjC,gBAAgB;IAyBnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE;CAgBlD;AAED,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC"}
@@ -1,10 +1,18 @@
1
1
  /**
2
2
  * ExportNode - contract for EXPORT node
3
+ *
4
+ * Supports two creation modes:
5
+ * 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
6
+ * 2. create() - LEGACY: Uses line-based IDs for backward compatibility
7
+ *
8
+ * Semantic ID format: {file}->global->EXPORT->{exportedName}
9
+ * Example: src/utils.js->global->EXPORT->formatDate
3
10
  */
11
+ import { computeSemanticId } from '../SemanticId.js';
4
12
  export class ExportNode {
5
13
  static TYPE = 'EXPORT';
6
- static REQUIRED = ['name', 'file', 'line'];
7
- static OPTIONAL = ['column', 'exportKind', 'local', 'default'];
14
+ static REQUIRED = ['name', 'file', 'line', 'column'];
15
+ static OPTIONAL = ['exportKind', 'local', 'default', 'source', 'exportType'];
8
16
  static create(name, file, line, column, options = {}) {
9
17
  if (!name)
10
18
  throw new Error('ExportNode.create: name is required');
@@ -12,16 +20,58 @@ export class ExportNode {
12
20
  throw new Error('ExportNode.create: file is required');
13
21
  if (!line)
14
22
  throw new Error('ExportNode.create: line is required');
23
+ if (column === undefined)
24
+ throw new Error('ExportNode.create: column is required');
15
25
  return {
16
26
  id: `${file}:EXPORT:${name}:${line}`,
17
27
  type: this.TYPE,
18
28
  name,
19
29
  file,
20
30
  line,
21
- column: column || 0,
31
+ column,
22
32
  exportKind: options.exportKind || 'value',
23
33
  local: options.local || name,
24
- default: options.default || false
34
+ default: options.default || false,
35
+ ...(options.source !== undefined && { source: options.source }),
36
+ ...(options.exportType !== undefined && { exportType: options.exportType })
37
+ };
38
+ }
39
+ /**
40
+ * Create EXPORT node with semantic ID (NEW API)
41
+ *
42
+ * Uses ScopeContext from ScopeTracker for stable identifiers.
43
+ * Export names are unique within module, so no discriminator needed.
44
+ *
45
+ * @param name - Exported name (as visible to importers)
46
+ * @param context - Scope context from ScopeTracker.getContext()
47
+ * @param location - Source location { line, column }
48
+ * @param options - Optional export properties
49
+ * @returns ExportNodeRecord with semantic ID
50
+ */
51
+ static createWithContext(name, context, location, options = {}) {
52
+ // Validate required fields
53
+ if (!name)
54
+ throw new Error('ExportNode.createWithContext: name is required');
55
+ if (!context.file)
56
+ throw new Error('ExportNode.createWithContext: file is required');
57
+ if (location.line === undefined)
58
+ throw new Error('ExportNode.createWithContext: line is required');
59
+ if (location.column === undefined)
60
+ throw new Error('ExportNode.createWithContext: column is required');
61
+ // Compute semantic ID
62
+ const id = computeSemanticId(this.TYPE, name, context);
63
+ return {
64
+ id,
65
+ type: this.TYPE,
66
+ name,
67
+ file: context.file,
68
+ line: location.line,
69
+ column: location.column,
70
+ exportKind: options.exportKind || 'value',
71
+ local: options.local || name,
72
+ default: options.default || false,
73
+ ...(options.source !== undefined && { source: options.source }),
74
+ ...(options.exportType !== undefined && { exportType: options.exportType })
25
75
  };
26
76
  }
27
77
  static validate(node) {
@@ -0,0 +1,97 @@
1
+ /**
2
+ * ExpressionNode - contract for EXPRESSION node
3
+ *
4
+ * Represents complex expressions for data flow tracking
5
+ * (MemberExpression, BinaryExpression, LogicalExpression, etc.)
6
+ *
7
+ * ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
8
+ * Example: /src/app.ts:EXPRESSION:MemberExpression:25:10
9
+ */
10
+ import type { BaseNodeRecord } from '@grafema/types';
11
+ interface ExpressionNodeRecord extends BaseNodeRecord {
12
+ type: 'EXPRESSION';
13
+ column: number;
14
+ expressionType: string;
15
+ object?: string;
16
+ property?: string;
17
+ computed?: boolean;
18
+ computedPropertyVar?: string;
19
+ operator?: string;
20
+ path?: string;
21
+ baseName?: string;
22
+ propertyPath?: string[];
23
+ arrayIndex?: number;
24
+ }
25
+ interface ExpressionNodeOptions {
26
+ object?: string;
27
+ property?: string;
28
+ computed?: boolean;
29
+ computedPropertyVar?: string;
30
+ operator?: string;
31
+ path?: string;
32
+ baseName?: string;
33
+ propertyPath?: string[];
34
+ arrayIndex?: number;
35
+ }
36
+ export declare class ExpressionNode {
37
+ static readonly TYPE: "EXPRESSION";
38
+ static readonly REQUIRED: readonly ["expressionType", "file", "line", "column"];
39
+ static readonly OPTIONAL: readonly ["object", "property", "computed", "computedPropertyVar", "operator", "path", "baseName", "propertyPath", "arrayIndex"];
40
+ /**
41
+ * Create EXPRESSION node
42
+ *
43
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
44
+ * @param file - File path
45
+ * @param line - Line number
46
+ * @param column - Column position
47
+ * @param options - Optional expression properties
48
+ * @returns ExpressionNodeRecord
49
+ */
50
+ static create(expressionType: string, file: string, line: number, column: number, options?: ExpressionNodeOptions): ExpressionNodeRecord;
51
+ /**
52
+ * Compute name from expression properties
53
+ *
54
+ * Naming conventions:
55
+ * - MemberExpression: "object.property"
56
+ * - BinaryExpression: "<BinaryExpression>"
57
+ * - LogicalExpression: "<LogicalExpression>"
58
+ * - ConditionalExpression: "<ternary>"
59
+ * - TemplateLiteral: "<template>"
60
+ * - Other: expressionType
61
+ */
62
+ private static _computeName;
63
+ /**
64
+ * Generate EXPRESSION node ID without creating the full node
65
+ *
66
+ * Used by JSASTAnalyzer when creating assignment metadata.
67
+ * The full node is created later by GraphBuilder.
68
+ *
69
+ * ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
70
+ *
71
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
72
+ * @param file - File path
73
+ * @param line - Line number
74
+ * @param column - Column position
75
+ * @returns Generated ID string in colon format
76
+ */
77
+ static generateId(expressionType: string, file: string, line: number, column: number): string;
78
+ /**
79
+ * Create EXPRESSION node from assignment metadata
80
+ *
81
+ * Used by GraphBuilder when processing variableAssignments.
82
+ * The ID is provided from upstream (generated by JSASTAnalyzer).
83
+ *
84
+ * @param expressionType - Type of expression
85
+ * @param file - File path
86
+ * @param line - Line number
87
+ * @param column - Column position
88
+ * @param options - Must include id; optional: expression properties
89
+ * @returns ExpressionNodeRecord
90
+ */
91
+ static createFromMetadata(expressionType: string, file: string, line: number, column: number, options: ExpressionNodeOptions & {
92
+ id: string;
93
+ }): ExpressionNodeRecord;
94
+ static validate(node: ExpressionNodeRecord): string[];
95
+ }
96
+ export type { ExpressionNodeRecord, ExpressionNodeOptions };
97
+ //# sourceMappingURL=ExpressionNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpressionNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ExpressionNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,oBAAqB,SAAQ,cAAc;IACnD,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IAEvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,qBAAqB;IAE7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IAE7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,wDAAyD;IACjF,MAAM,CAAC,QAAQ,CAAC,QAAQ,mIAGb;IAEX;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,CACX,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,oBAAoB;IA8BvB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAqB3B;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,UAAU,CACf,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,MAAM;IAIT;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,kBAAkB,CACvB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,qBAAqB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAC9C,oBAAoB;IAsCvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,EAAE;CAiBtD;AAED,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * ExpressionNode - contract for EXPRESSION node
3
+ *
4
+ * Represents complex expressions for data flow tracking
5
+ * (MemberExpression, BinaryExpression, LogicalExpression, etc.)
6
+ *
7
+ * ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
8
+ * Example: /src/app.ts:EXPRESSION:MemberExpression:25:10
9
+ */
10
+ export class ExpressionNode {
11
+ static TYPE = 'EXPRESSION';
12
+ static REQUIRED = ['expressionType', 'file', 'line', 'column'];
13
+ static OPTIONAL = [
14
+ 'object', 'property', 'computed', 'computedPropertyVar',
15
+ 'operator', 'path', 'baseName', 'propertyPath', 'arrayIndex'
16
+ ];
17
+ /**
18
+ * Create EXPRESSION node
19
+ *
20
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
21
+ * @param file - File path
22
+ * @param line - Line number
23
+ * @param column - Column position
24
+ * @param options - Optional expression properties
25
+ * @returns ExpressionNodeRecord
26
+ */
27
+ static create(expressionType, file, line, column, options = {}) {
28
+ if (!expressionType)
29
+ throw new Error('ExpressionNode.create: expressionType is required');
30
+ if (!file)
31
+ throw new Error('ExpressionNode.create: file is required');
32
+ if (!line)
33
+ throw new Error('ExpressionNode.create: line is required');
34
+ if (column === undefined)
35
+ throw new Error('ExpressionNode.create: column is required');
36
+ const node = {
37
+ id: `${file}:EXPRESSION:${expressionType}:${line}:${column}`,
38
+ type: this.TYPE,
39
+ name: this._computeName(expressionType, options),
40
+ file,
41
+ line,
42
+ column,
43
+ expressionType
44
+ };
45
+ // Add optional fields if present
46
+ if (options.object !== undefined)
47
+ node.object = options.object;
48
+ if (options.property !== undefined)
49
+ node.property = options.property;
50
+ if (options.computed !== undefined)
51
+ node.computed = options.computed;
52
+ if (options.computedPropertyVar !== undefined)
53
+ node.computedPropertyVar = options.computedPropertyVar;
54
+ if (options.operator !== undefined)
55
+ node.operator = options.operator;
56
+ if (options.path !== undefined)
57
+ node.path = options.path;
58
+ if (options.baseName !== undefined)
59
+ node.baseName = options.baseName;
60
+ if (options.propertyPath !== undefined)
61
+ node.propertyPath = options.propertyPath;
62
+ if (options.arrayIndex !== undefined)
63
+ node.arrayIndex = options.arrayIndex;
64
+ return node;
65
+ }
66
+ /**
67
+ * Compute name from expression properties
68
+ *
69
+ * Naming conventions:
70
+ * - MemberExpression: "object.property"
71
+ * - BinaryExpression: "<BinaryExpression>"
72
+ * - LogicalExpression: "<LogicalExpression>"
73
+ * - ConditionalExpression: "<ternary>"
74
+ * - TemplateLiteral: "<template>"
75
+ * - Other: expressionType
76
+ */
77
+ static _computeName(expressionType, options) {
78
+ if (options.path) {
79
+ return options.path;
80
+ }
81
+ if (options.object && options.property) {
82
+ return `${options.object}.${options.property}`;
83
+ }
84
+ // Special naming for non-MemberExpression types
85
+ switch (expressionType) {
86
+ case 'BinaryExpression':
87
+ case 'LogicalExpression':
88
+ return `<${expressionType}>`;
89
+ case 'ConditionalExpression':
90
+ return '<ternary>';
91
+ case 'TemplateLiteral':
92
+ return '<template>';
93
+ default:
94
+ return expressionType;
95
+ }
96
+ }
97
+ /**
98
+ * Generate EXPRESSION node ID without creating the full node
99
+ *
100
+ * Used by JSASTAnalyzer when creating assignment metadata.
101
+ * The full node is created later by GraphBuilder.
102
+ *
103
+ * ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
104
+ *
105
+ * @param expressionType - Type of expression (MemberExpression, BinaryExpression, etc.)
106
+ * @param file - File path
107
+ * @param line - Line number
108
+ * @param column - Column position
109
+ * @returns Generated ID string in colon format
110
+ */
111
+ static generateId(expressionType, file, line, column) {
112
+ return `${file}:EXPRESSION:${expressionType}:${line}:${column}`;
113
+ }
114
+ /**
115
+ * Create EXPRESSION node from assignment metadata
116
+ *
117
+ * Used by GraphBuilder when processing variableAssignments.
118
+ * The ID is provided from upstream (generated by JSASTAnalyzer).
119
+ *
120
+ * @param expressionType - Type of expression
121
+ * @param file - File path
122
+ * @param line - Line number
123
+ * @param column - Column position
124
+ * @param options - Must include id; optional: expression properties
125
+ * @returns ExpressionNodeRecord
126
+ */
127
+ static createFromMetadata(expressionType, file, line, column, options) {
128
+ if (!options.id) {
129
+ throw new Error('ExpressionNode.createFromMetadata: id is required');
130
+ }
131
+ // Validate ID format - must use colon format
132
+ if (!options.id.includes(':EXPRESSION:')) {
133
+ throw new Error(`ExpressionNode.createFromMetadata: Invalid ID format "${options.id}". ` +
134
+ `Expected format: {file}:EXPRESSION:{type}:{line}:{column}`);
135
+ }
136
+ // Create base node structure
137
+ const node = {
138
+ id: options.id, // Use provided ID (from upstream)
139
+ type: this.TYPE,
140
+ name: this._computeName(expressionType, options),
141
+ file,
142
+ line,
143
+ column,
144
+ expressionType
145
+ };
146
+ // Add optional fields if present (same logic as create())
147
+ if (options.object !== undefined)
148
+ node.object = options.object;
149
+ if (options.property !== undefined)
150
+ node.property = options.property;
151
+ if (options.computed !== undefined)
152
+ node.computed = options.computed;
153
+ if (options.computedPropertyVar !== undefined)
154
+ node.computedPropertyVar = options.computedPropertyVar;
155
+ if (options.operator !== undefined)
156
+ node.operator = options.operator;
157
+ if (options.path !== undefined)
158
+ node.path = options.path;
159
+ if (options.baseName !== undefined)
160
+ node.baseName = options.baseName;
161
+ if (options.propertyPath !== undefined)
162
+ node.propertyPath = options.propertyPath;
163
+ if (options.arrayIndex !== undefined)
164
+ node.arrayIndex = options.arrayIndex;
165
+ return node;
166
+ }
167
+ static validate(node) {
168
+ const errors = [];
169
+ if (node.type !== this.TYPE) {
170
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
171
+ }
172
+ if (!node.expressionType) {
173
+ errors.push('Missing required field: expressionType');
174
+ }
175
+ if (!node.file) {
176
+ errors.push('Missing required field: file');
177
+ }
178
+ return errors;
179
+ }
180
+ }