@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,32 @@
1
+ /**
2
+ * ExternalModuleNode - contract for EXTERNAL_MODULE node
3
+ *
4
+ * Represents external npm packages or Node.js built-in modules
5
+ * that are imported but not analyzed.
6
+ *
7
+ * ID format: EXTERNAL_MODULE:{source}
8
+ * Example: EXTERNAL_MODULE:lodash, EXTERNAL_MODULE:@tanstack/react-query
9
+ */
10
+ import type { BaseNodeRecord } from '@grafema/types';
11
+ interface ExternalModuleNodeRecord extends BaseNodeRecord {
12
+ type: 'EXTERNAL_MODULE';
13
+ }
14
+ export declare class ExternalModuleNode {
15
+ static readonly TYPE: "EXTERNAL_MODULE";
16
+ static readonly REQUIRED: readonly ["name"];
17
+ static readonly OPTIONAL: readonly [];
18
+ /**
19
+ * Create EXTERNAL_MODULE node
20
+ *
21
+ * Normalizes node: prefix for Node.js builtins:
22
+ * - 'node:fs' -> 'fs'
23
+ * - 'node:path' -> 'path'
24
+ *
25
+ * @param source - Module name (e.g., 'lodash', '@tanstack/react-query', 'node:fs')
26
+ * @returns ExternalModuleNodeRecord
27
+ */
28
+ static create(source: string): ExternalModuleNodeRecord;
29
+ static validate(node: ExternalModuleNodeRecord): string[];
30
+ }
31
+ export type { ExternalModuleNodeRecord };
32
+ //# sourceMappingURL=ExternalModuleNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalModuleNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ExternalModuleNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,wBAAyB,SAAQ,cAAc;IACvD,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAU;IAElD,MAAM,CAAC,QAAQ,CAAC,QAAQ,oBAAqB;IAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAe;IAEvC;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB;IAiBvD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,EAAE;CAa1D;AAED,YAAY,EAAE,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * ExternalModuleNode - contract for EXTERNAL_MODULE node
3
+ *
4
+ * Represents external npm packages or Node.js built-in modules
5
+ * that are imported but not analyzed.
6
+ *
7
+ * ID format: EXTERNAL_MODULE:{source}
8
+ * Example: EXTERNAL_MODULE:lodash, EXTERNAL_MODULE:@tanstack/react-query
9
+ */
10
+ export class ExternalModuleNode {
11
+ static TYPE = 'EXTERNAL_MODULE';
12
+ static REQUIRED = ['name'];
13
+ static OPTIONAL = [];
14
+ /**
15
+ * Create EXTERNAL_MODULE node
16
+ *
17
+ * Normalizes node: prefix for Node.js builtins:
18
+ * - 'node:fs' -> 'fs'
19
+ * - 'node:path' -> 'path'
20
+ *
21
+ * @param source - Module name (e.g., 'lodash', '@tanstack/react-query', 'node:fs')
22
+ * @returns ExternalModuleNodeRecord
23
+ */
24
+ static create(source) {
25
+ if (!source)
26
+ throw new Error('ExternalModuleNode.create: source is required');
27
+ // Normalize node: prefix for Node.js builtins
28
+ const normalizedSource = source.startsWith('node:')
29
+ ? source.slice(5)
30
+ : source;
31
+ return {
32
+ id: `EXTERNAL_MODULE:${normalizedSource}`,
33
+ type: this.TYPE,
34
+ name: normalizedSource,
35
+ file: '',
36
+ line: 0
37
+ };
38
+ }
39
+ static validate(node) {
40
+ const errors = [];
41
+ if (node.type !== this.TYPE) {
42
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
43
+ }
44
+ if (!node.name) {
45
+ errors.push('Missing required field: name');
46
+ }
47
+ return errors;
48
+ }
49
+ }
@@ -1,15 +1,22 @@
1
1
  /**
2
- * ExternalStdioNode - contract for EXTERNAL_STDIO node (singleton)
2
+ * ExternalStdioNode - contract for net:stdio node (singleton)
3
+ *
4
+ * Represents standard I/O streams (console.log, console.error, etc.)
5
+ * Singleton node - only one instance per graph.
6
+ *
7
+ * Uses namespaced type 'net:stdio' for semantic grouping - AI agents
8
+ * can query all I/O-related nodes via 'net:*' pattern.
3
9
  */
4
10
  import type { BaseNodeRecord } from '@grafema/types';
5
11
  interface ExternalStdioNodeRecord extends BaseNodeRecord {
6
- type: 'EXTERNAL_STDIO';
12
+ type: 'net:stdio';
13
+ description?: string;
7
14
  }
8
15
  export declare class ExternalStdioNode {
9
- static readonly TYPE: "EXTERNAL_STDIO";
10
- static readonly SINGLETON_ID = "EXTERNAL_STDIO:__stdio__";
11
- static readonly REQUIRED: readonly ["name", "file"];
12
- static readonly OPTIONAL: readonly [];
16
+ static readonly TYPE: "net:stdio";
17
+ static readonly SINGLETON_ID = "net:stdio#__stdio__";
18
+ static readonly REQUIRED: readonly ["name"];
19
+ static readonly OPTIONAL: readonly ["description"];
13
20
  static create(): ExternalStdioNodeRecord;
14
21
  static validate(node: ExternalStdioNodeRecord): string[];
15
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalStdioNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ExternalStdioNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,uBAAwB,SAAQ,cAAc;IACtD,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;IACjD,MAAM,CAAC,QAAQ,CAAC,YAAY,8BAA8B;IAE1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,4BAA6B;IACrD,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAe;IAEvC,MAAM,CAAC,MAAM,IAAI,uBAAuB;IAUxC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,EAAE;CAMzD;AAED,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"ExternalStdioNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ExternalStdioNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,uBAAwB,SAAQ,cAAc;IACtD,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IAC5C,MAAM,CAAC,QAAQ,CAAC,YAAY,yBAAyB;IAErD,MAAM,CAAC,QAAQ,CAAC,QAAQ,oBAAqB;IAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,2BAA4B;IAEpD,MAAM,CAAC,MAAM,IAAI,uBAAuB;IAWxC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,EAAE;CAMzD;AAED,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
@@ -1,26 +1,33 @@
1
1
  /**
2
- * ExternalStdioNode - contract for EXTERNAL_STDIO node (singleton)
2
+ * ExternalStdioNode - contract for net:stdio node (singleton)
3
+ *
4
+ * Represents standard I/O streams (console.log, console.error, etc.)
5
+ * Singleton node - only one instance per graph.
6
+ *
7
+ * Uses namespaced type 'net:stdio' for semantic grouping - AI agents
8
+ * can query all I/O-related nodes via 'net:*' pattern.
3
9
  */
4
10
  export class ExternalStdioNode {
5
- static TYPE = 'EXTERNAL_STDIO';
6
- static SINGLETON_ID = 'EXTERNAL_STDIO:__stdio__';
7
- static REQUIRED = ['name', 'file'];
8
- static OPTIONAL = [];
11
+ static TYPE = 'net:stdio';
12
+ static SINGLETON_ID = 'net:stdio#__stdio__';
13
+ static REQUIRED = ['name'];
14
+ static OPTIONAL = ['description'];
9
15
  static create() {
10
16
  return {
11
17
  id: this.SINGLETON_ID,
12
18
  type: this.TYPE,
13
19
  name: '__stdio__',
14
20
  file: '__builtin__',
15
- line: 0
21
+ line: 0,
22
+ description: 'Standard input/output stream'
16
23
  };
17
24
  }
18
25
  static validate(node) {
19
26
  const errors = [];
20
27
  if (node.type !== this.TYPE)
21
- errors.push(`Expected type ${this.TYPE}`);
28
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
22
29
  if (node.id !== this.SINGLETON_ID)
23
- errors.push(`Invalid singleton ID`);
30
+ errors.push(`Invalid singleton ID: ${node.id}, expected ${this.SINGLETON_ID}`);
24
31
  return errors;
25
32
  }
26
33
  }
@@ -1,7 +1,18 @@
1
1
  /**
2
2
  * FunctionNode - contract for FUNCTION 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}->FUNCTION->{name}
9
+ * Example: src/app.js->global->FUNCTION->processData
3
10
  */
4
11
  import type { FunctionNodeRecord } from '@grafema/types';
12
+ import { type ScopeContext, type Location } from '../SemanticId.js';
13
+ /**
14
+ * Options for function node creation
15
+ */
5
16
  interface FunctionNodeOptions {
6
17
  async?: boolean;
7
18
  generator?: boolean;
@@ -13,6 +24,18 @@ interface FunctionNodeOptions {
13
24
  params?: string[];
14
25
  counter?: number;
15
26
  }
27
+ /**
28
+ * Options specific to createWithContext
29
+ */
30
+ interface FunctionNodeContextOptions {
31
+ async?: boolean;
32
+ generator?: boolean;
33
+ exported?: boolean;
34
+ arrowFunction?: boolean;
35
+ isClassMethod?: boolean;
36
+ className?: string;
37
+ params?: string[];
38
+ }
16
39
  export declare class FunctionNode {
17
40
  static readonly TYPE: "FUNCTION";
18
41
  static readonly REQUIRED: readonly ["name", "file", "line", "column"];
@@ -21,6 +44,19 @@ export declare class FunctionNode {
21
44
  * Create FUNCTION node
22
45
  */
23
46
  static create(name: string, file: string, line: number, column: number, options?: FunctionNodeOptions): FunctionNodeRecord;
47
+ /**
48
+ * Create FUNCTION node with semantic ID (NEW API)
49
+ *
50
+ * Uses ScopeContext from ScopeTracker for stable identifiers that
51
+ * don't change when unrelated code is added/removed.
52
+ *
53
+ * @param name - Function name (or 'anonymous[N]' for anonymous functions)
54
+ * @param context - Scope context from ScopeTracker.getContext()
55
+ * @param location - Source location { line, column }
56
+ * @param options - Optional function properties
57
+ * @returns FunctionNodeRecord with semantic ID
58
+ */
59
+ static createWithContext(name: string, context: ScopeContext, location: Partial<Location>, options?: FunctionNodeContextOptions): FunctionNodeRecord;
24
60
  static validate(node: FunctionNodeRecord): string[];
25
61
  }
26
62
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/FunctionNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAE3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,8CAA+C;IACvE,MAAM,CAAC,QAAQ,CAAC,QAAQ,wHAAyH;IAEjJ;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB;IA4BrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,EAAE;CAgBpD"}
1
+ {"version":3,"file":"FunctionNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/FunctionNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvF;;GAEG;AACH,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,0BAA0B;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,YAAY;IACvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAE3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,8CAA+C;IACvE,MAAM,CAAC,QAAQ,CAAC,QAAQ,wHAAyH;IAEjJ;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB;IA2BrB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC3B,OAAO,GAAE,0BAA+B,GACvC,kBAAkB;IA4DrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,EAAE;CAgBpD"}
@@ -1,6 +1,14 @@
1
1
  /**
2
2
  * FunctionNode - contract for FUNCTION 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}->FUNCTION->{name}
9
+ * Example: src/app.js->global->FUNCTION->processData
3
10
  */
11
+ import { computeSemanticId } from '../SemanticId.js';
4
12
  export class FunctionNode {
5
13
  static TYPE = 'FUNCTION';
6
14
  static REQUIRED = ['name', 'file', 'line', 'column'];
@@ -21,7 +29,6 @@ export class FunctionNode {
21
29
  const id = `${file}:FUNCTION:${name}:${line}:${column}${counter}`;
22
30
  return {
23
31
  id,
24
- stableId: id,
25
32
  type: this.TYPE,
26
33
  name,
27
34
  file,
@@ -37,6 +44,78 @@ export class FunctionNode {
37
44
  params: options.params || []
38
45
  };
39
46
  }
47
+ /**
48
+ * Create FUNCTION node with semantic ID (NEW API)
49
+ *
50
+ * Uses ScopeContext from ScopeTracker for stable identifiers that
51
+ * don't change when unrelated code is added/removed.
52
+ *
53
+ * @param name - Function name (or 'anonymous[N]' for anonymous functions)
54
+ * @param context - Scope context from ScopeTracker.getContext()
55
+ * @param location - Source location { line, column }
56
+ * @param options - Optional function properties
57
+ * @returns FunctionNodeRecord with semantic ID
58
+ */
59
+ static createWithContext(name, context, location, options = {}) {
60
+ // Validate required fields
61
+ if (!name)
62
+ throw new Error('FunctionNode.createWithContext: name is required');
63
+ if (!context.file)
64
+ throw new Error('FunctionNode.createWithContext: file is required');
65
+ if (location.line === undefined)
66
+ throw new Error('FunctionNode.createWithContext: line is required');
67
+ if (location.column === undefined)
68
+ throw new Error('FunctionNode.createWithContext: column is required');
69
+ // Compute semantic ID
70
+ const id = computeSemanticId(this.TYPE, name, context);
71
+ // Compute parentScopeId from context
72
+ // If we have a scope path, the parent is the last scope in the path
73
+ let parentScopeId;
74
+ if (context.scopePath.length > 0) {
75
+ // Find the most recent function/method scope to use as parent
76
+ // For now, we construct the parent's semantic ID from the scope path
77
+ const parentContext = {
78
+ file: context.file,
79
+ scopePath: context.scopePath.slice(0, -1) // Remove last scope
80
+ };
81
+ const parentScopeName = context.scopePath[context.scopePath.length - 1];
82
+ // Check if parent is a function/method scope (not a control flow scope)
83
+ if (!parentScopeName.includes('#')) {
84
+ // Named scope - likely a function or class
85
+ parentScopeId = computeSemanticId('FUNCTION', parentScopeName, parentContext);
86
+ }
87
+ else {
88
+ // Control flow scope - find the nearest function ancestor
89
+ // For simplicity, take the first non-control-flow scope from the path
90
+ const nonControlFlowScopes = context.scopePath.filter(s => !s.includes('#'));
91
+ if (nonControlFlowScopes.length > 0) {
92
+ const parentName = nonControlFlowScopes[nonControlFlowScopes.length - 1];
93
+ const idx = context.scopePath.indexOf(parentName);
94
+ const ancestorContext = {
95
+ file: context.file,
96
+ scopePath: context.scopePath.slice(0, idx)
97
+ };
98
+ parentScopeId = computeSemanticId('FUNCTION', parentName, ancestorContext);
99
+ }
100
+ }
101
+ }
102
+ return {
103
+ id,
104
+ type: this.TYPE,
105
+ name,
106
+ file: context.file,
107
+ line: location.line,
108
+ column: location.column,
109
+ async: options.async || false,
110
+ generator: options.generator || false,
111
+ exported: options.exported || false,
112
+ arrowFunction: options.arrowFunction || false,
113
+ parentScopeId,
114
+ isClassMethod: options.isClassMethod || false,
115
+ className: options.className,
116
+ params: options.params || []
117
+ };
118
+ }
40
119
  static validate(node) {
41
120
  const errors = [];
42
121
  if (node.type !== this.TYPE) {
@@ -4,20 +4,20 @@
4
4
  import type { BaseNodeRecord } from '@grafema/types';
5
5
  interface HttpRequestNodeRecord extends BaseNodeRecord {
6
6
  type: 'HTTP_REQUEST';
7
+ column: number;
7
8
  url?: string;
8
9
  method: string;
9
10
  parentScopeId?: string;
10
11
  }
11
12
  interface HttpRequestNodeOptions {
12
- column?: number;
13
13
  parentScopeId?: string;
14
14
  counter?: number;
15
15
  }
16
16
  export declare class HttpRequestNode {
17
17
  static readonly TYPE: "HTTP_REQUEST";
18
- static readonly REQUIRED: readonly ["name", "file", "line"];
19
- static readonly OPTIONAL: readonly ["url", "method", "column", "parentScopeId"];
20
- static create(url: string | undefined, method: string | undefined, file: string, line: number, options?: HttpRequestNodeOptions): HttpRequestNodeRecord;
18
+ static readonly REQUIRED: readonly ["name", "file", "line", "column"];
19
+ static readonly OPTIONAL: readonly ["url", "method", "parentScopeId"];
20
+ static create(url: string | undefined, method: string | undefined, file: string, line: number, column: number, options?: HttpRequestNodeOptions): HttpRequestNodeRecord;
21
21
  static validate(node: HttpRequestNodeRecord): string[];
22
22
  }
23
23
  export type { HttpRequestNodeRecord };
@@ -1 +1 @@
1
- {"version":3,"file":"HttpRequestNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/HttpRequestNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,qBAAsB,SAAQ,cAAc;IACpD,IAAI,EAAE,cAAc,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,sBAAsB;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,cAAc,CAAU;IAE/C,MAAM,CAAC,QAAQ,CAAC,QAAQ,oCAAqC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,wDAAyD;IAEjF,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,sBAA2B,GACnC,qBAAqB;IAoBxB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,EAAE;CASvD;AAED,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"HttpRequestNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/HttpRequestNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,qBAAsB,SAAQ,cAAc;IACpD,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,sBAAsB;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,cAAc,CAAU;IAE/C,MAAM,CAAC,QAAQ,CAAC,QAAQ,8CAA+C;IACvE,MAAM,CAAC,QAAQ,CAAC,QAAQ,8CAA+C;IAEvE,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,sBAA2B,GACnC,qBAAqB;IAsBxB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,EAAE;CASvD;AAED,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
@@ -3,16 +3,18 @@
3
3
  */
4
4
  export class HttpRequestNode {
5
5
  static TYPE = 'HTTP_REQUEST';
6
- static REQUIRED = ['name', 'file', 'line'];
7
- static OPTIONAL = ['url', 'method', 'column', 'parentScopeId'];
8
- static create(url, method, file, line, options = {}) {
6
+ static REQUIRED = ['name', 'file', 'line', 'column'];
7
+ static OPTIONAL = ['url', 'method', 'parentScopeId'];
8
+ static create(url, method, file, line, column, options = {}) {
9
9
  if (!file)
10
10
  throw new Error('HttpRequestNode.create: file is required');
11
11
  if (line === undefined)
12
12
  throw new Error('HttpRequestNode.create: line is required');
13
+ if (column === undefined)
14
+ throw new Error('HttpRequestNode.create: column is required');
13
15
  const httpMethod = method || 'GET';
14
16
  const counter = options.counter !== undefined ? `:${options.counter}` : '';
15
- const id = `${file}:HTTP_REQUEST:${httpMethod}:${line}:${options.column || 0}${counter}`;
17
+ const id = `${file}:HTTP_REQUEST:${httpMethod}:${line}:${column}${counter}`;
16
18
  return {
17
19
  id,
18
20
  type: this.TYPE,
@@ -21,6 +23,7 @@ export class HttpRequestNode {
21
23
  method: httpMethod,
22
24
  file,
23
25
  line,
26
+ column,
24
27
  parentScopeId: options.parentScopeId
25
28
  };
26
29
  }
@@ -2,26 +2,48 @@
2
2
  * ImportNode - contract for IMPORT node
3
3
  */
4
4
  import type { BaseNodeRecord } from '@grafema/types';
5
- type ImportKind = 'value' | 'type' | 'typeof';
5
+ type ImportBinding = 'value' | 'type' | 'typeof';
6
+ type ImportType = 'default' | 'named' | 'namespace';
6
7
  interface ImportNodeRecord extends BaseNodeRecord {
7
8
  type: 'IMPORT';
8
9
  column: number;
9
10
  source: string;
10
- importKind: ImportKind;
11
+ importType: ImportType;
12
+ importBinding: ImportBinding;
11
13
  imported: string;
12
14
  local: string;
15
+ isDynamic?: boolean;
16
+ isResolvable?: boolean;
17
+ dynamicPath?: string;
18
+ sideEffect?: boolean;
13
19
  }
14
20
  interface ImportNodeOptions {
15
- importKind?: ImportKind;
21
+ importType?: ImportType;
22
+ importBinding?: ImportBinding;
16
23
  imported?: string;
17
24
  local?: string;
25
+ isDynamic?: boolean;
26
+ isResolvable?: boolean;
27
+ dynamicPath?: string;
28
+ sideEffect?: boolean;
18
29
  }
19
30
  export declare class ImportNode {
20
31
  static readonly TYPE: "IMPORT";
21
- static readonly REQUIRED: readonly ["name", "file", "line", "source"];
22
- static readonly OPTIONAL: readonly ["column", "importKind", "imported", "local"];
32
+ static readonly REQUIRED: readonly ["name", "file", "line", "column", "source"];
33
+ static readonly OPTIONAL: readonly ["importType", "importBinding", "imported", "local", "isDynamic", "isResolvable", "dynamicPath", "sideEffect"];
34
+ /**
35
+ * Create IMPORT node
36
+ *
37
+ * @param name - The local binding name (what the import is called in this module)
38
+ * @param file - Absolute file path
39
+ * @param line - Line number (for debugging only, not part of ID)
40
+ * @param column - Column position (pass 0 if unavailable - JSASTAnalyzer limitation)
41
+ * @param source - Module source (e.g., 'react', './utils')
42
+ * @param options - Optional fields
43
+ * @returns ImportNodeRecord
44
+ */
23
45
  static create(name: string, file: string, line: number, column: number, source: string, options?: ImportNodeOptions): ImportNodeRecord;
24
46
  static validate(node: ImportNodeRecord): string[];
25
47
  }
26
- export type { ImportNodeRecord, ImportKind };
48
+ export type { ImportNodeRecord, ImportBinding, ImportType };
27
49
  //# sourceMappingURL=ImportNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImportNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ImportNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,KAAK,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE9C,UAAU,gBAAiB,SAAQ,cAAc;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;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,yDAA0D;IAElF,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB;IAoBnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE;CAgBlD;AAED,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"ImportNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ImportNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,KAAK,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AACjD,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AAEpD,UAAU,gBAAiB,SAAQ,cAAc;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAEzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,wDAAyD;IACjF,MAAM,CAAC,QAAQ,CAAC,QAAQ,0HAA2H;IAEnJ;;;;;;;;;;OAUG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB;IA+CnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE;CAgBlD;AAED,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC"}
@@ -3,29 +3,64 @@
3
3
  */
4
4
  export class ImportNode {
5
5
  static TYPE = 'IMPORT';
6
- static REQUIRED = ['name', 'file', 'line', 'source'];
7
- static OPTIONAL = ['column', 'importKind', 'imported', 'local'];
6
+ static REQUIRED = ['name', 'file', 'line', 'column', 'source'];
7
+ static OPTIONAL = ['importType', 'importBinding', 'imported', 'local', 'isDynamic', 'isResolvable', 'dynamicPath', 'sideEffect'];
8
+ /**
9
+ * Create IMPORT node
10
+ *
11
+ * @param name - The local binding name (what the import is called in this module)
12
+ * @param file - Absolute file path
13
+ * @param line - Line number (for debugging only, not part of ID)
14
+ * @param column - Column position (pass 0 if unavailable - JSASTAnalyzer limitation)
15
+ * @param source - Module source (e.g., 'react', './utils')
16
+ * @param options - Optional fields
17
+ * @returns ImportNodeRecord
18
+ */
8
19
  static create(name, file, line, column, source, options = {}) {
9
20
  if (!name)
10
21
  throw new Error('ImportNode.create: name is required');
11
22
  if (!file)
12
23
  throw new Error('ImportNode.create: file is required');
13
- if (!line)
24
+ if (line === undefined)
14
25
  throw new Error('ImportNode.create: line is required');
26
+ if (column === undefined)
27
+ throw new Error('ImportNode.create: column is required');
15
28
  if (!source)
16
29
  throw new Error('ImportNode.create: source is required');
17
- return {
18
- id: `${file}:IMPORT:${name}:${line}`,
30
+ // Auto-detect importType from imported field if not explicitly provided
31
+ let importType = options.importType;
32
+ if (!importType && options.imported) {
33
+ importType = options.imported === 'default' ? 'default' :
34
+ options.imported === '*' ? 'namespace' : 'named';
35
+ }
36
+ const record = {
37
+ id: `${file}:IMPORT:${source}:${name}`, // SEMANTIC ID: no line number
19
38
  type: this.TYPE,
20
39
  name,
21
40
  file,
22
- line,
23
- column: column || 0,
41
+ line, // Stored as field, not in ID
42
+ column,
24
43
  source,
25
- importKind: options.importKind || 'value',
44
+ importType: importType || 'named', // NEW field with auto-detection
45
+ importBinding: options.importBinding || 'value', // RENAMED field
26
46
  imported: options.imported || name,
27
47
  local: options.local || name
28
48
  };
49
+ // Add dynamic import fields if provided
50
+ if (options.isDynamic !== undefined) {
51
+ record.isDynamic = options.isDynamic;
52
+ }
53
+ if (options.isResolvable !== undefined) {
54
+ record.isResolvable = options.isResolvable;
55
+ }
56
+ if (options.dynamicPath !== undefined) {
57
+ record.dynamicPath = options.dynamicPath;
58
+ }
59
+ // REG-273: Add sideEffect field if provided
60
+ if (options.sideEffect !== undefined) {
61
+ record.sideEffect = options.sideEffect;
62
+ }
63
+ return record;
29
64
  }
30
65
  static validate(node) {
31
66
  const errors = [];
@@ -0,0 +1,46 @@
1
+ /**
2
+ * InterfaceNode - contract for INTERFACE node
3
+ *
4
+ * Represents TypeScript interface declarations.
5
+ *
6
+ * ID format: {file}:INTERFACE:{name}:{line}
7
+ * Example: /src/types.ts:INTERFACE:IUser:5
8
+ */
9
+ import type { BaseNodeRecord } from '@grafema/types';
10
+ interface InterfacePropertyRecord {
11
+ name: string;
12
+ type?: string;
13
+ optional?: boolean;
14
+ readonly?: boolean;
15
+ }
16
+ interface InterfaceNodeRecord extends BaseNodeRecord {
17
+ type: 'INTERFACE';
18
+ column: number;
19
+ extends: string[];
20
+ properties: InterfacePropertyRecord[];
21
+ isExternal?: boolean;
22
+ }
23
+ interface InterfaceNodeOptions {
24
+ extends?: string[];
25
+ properties?: InterfacePropertyRecord[];
26
+ isExternal?: boolean;
27
+ }
28
+ export declare class InterfaceNode {
29
+ static readonly TYPE: "INTERFACE";
30
+ static readonly REQUIRED: readonly ["name", "file", "line", "column"];
31
+ static readonly OPTIONAL: readonly ["extends", "properties", "isExternal"];
32
+ /**
33
+ * Create INTERFACE node
34
+ *
35
+ * @param name - Interface name
36
+ * @param file - File path
37
+ * @param line - Line number
38
+ * @param column - Column position
39
+ * @param options - Optional interface properties
40
+ * @returns InterfaceNodeRecord
41
+ */
42
+ static create(name: string, file: string, line: number, column: number, options?: InterfaceNodeOptions): InterfaceNodeRecord;
43
+ static validate(node: InterfaceNodeRecord): string[];
44
+ }
45
+ export type { InterfaceNodeRecord, InterfacePropertyRecord };
46
+ //# sourceMappingURL=InterfaceNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InterfaceNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/InterfaceNode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,uBAAuB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,mBAAoB,SAAQ,cAAc;IAClD,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,uBAAuB,EAAE,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IAE5C,MAAM,CAAC,QAAQ,CAAC,QAAQ,8CAA+C;IACvE,MAAM,CAAC,QAAQ,CAAC,QAAQ,mDAAoD;IAE5E;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,oBAAyB,GACjC,mBAAmB;IAmBtB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE;CAgBrD;AAED,YAAY,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * InterfaceNode - contract for INTERFACE node
3
+ *
4
+ * Represents TypeScript interface declarations.
5
+ *
6
+ * ID format: {file}:INTERFACE:{name}:{line}
7
+ * Example: /src/types.ts:INTERFACE:IUser:5
8
+ */
9
+ export class InterfaceNode {
10
+ static TYPE = 'INTERFACE';
11
+ static REQUIRED = ['name', 'file', 'line', 'column'];
12
+ static OPTIONAL = ['extends', 'properties', 'isExternal'];
13
+ /**
14
+ * Create INTERFACE node
15
+ *
16
+ * @param name - Interface name
17
+ * @param file - File path
18
+ * @param line - Line number
19
+ * @param column - Column position
20
+ * @param options - Optional interface properties
21
+ * @returns InterfaceNodeRecord
22
+ */
23
+ static create(name, file, line, column, options = {}) {
24
+ if (!name)
25
+ throw new Error('InterfaceNode.create: name is required');
26
+ if (!file)
27
+ throw new Error('InterfaceNode.create: file is required');
28
+ if (!line)
29
+ throw new Error('InterfaceNode.create: line is required');
30
+ if (column === undefined)
31
+ throw new Error('InterfaceNode.create: column is required');
32
+ return {
33
+ id: `${file}:INTERFACE:${name}:${line}`,
34
+ type: this.TYPE,
35
+ name,
36
+ file,
37
+ line,
38
+ column,
39
+ extends: options.extends || [],
40
+ properties: options.properties || [],
41
+ ...(options.isExternal !== undefined && { isExternal: options.isExternal })
42
+ };
43
+ }
44
+ static validate(node) {
45
+ const errors = [];
46
+ if (node.type !== this.TYPE) {
47
+ errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
48
+ }
49
+ const nodeRecord = node;
50
+ for (const field of this.REQUIRED) {
51
+ if (!nodeRecord[field]) {
52
+ errors.push(`Missing required field: ${field}`);
53
+ }
54
+ }
55
+ return errors;
56
+ }
57
+ }