@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.
- package/README.md +0 -1
- package/dist/Orchestrator.d.ts +31 -2
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +222 -27
- package/dist/config/ConfigLoader.d.ts +90 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +249 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +4 -0
- package/dist/core/ASTWorker.d.ts +11 -36
- package/dist/core/ASTWorker.d.ts.map +1 -1
- package/dist/core/ASTWorker.js +93 -99
- package/dist/core/CoverageAnalyzer.d.ts +65 -0
- package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
- package/dist/core/CoverageAnalyzer.js +198 -0
- package/dist/core/FileExplainer.d.ts +101 -0
- package/dist/core/FileExplainer.d.ts.map +1 -0
- package/dist/core/FileExplainer.js +139 -0
- package/dist/core/FileNodeManager.d.ts +40 -0
- package/dist/core/FileNodeManager.d.ts.map +1 -0
- package/dist/core/FileNodeManager.js +84 -0
- package/dist/core/GraphFreshnessChecker.d.ts +33 -0
- package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
- package/dist/core/GraphFreshnessChecker.js +101 -0
- package/dist/core/HashUtils.d.ts +24 -0
- package/dist/core/HashUtils.d.ts.map +1 -0
- package/dist/core/HashUtils.js +45 -0
- package/dist/core/IncrementalReanalyzer.d.ts +36 -0
- package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
- package/dist/core/IncrementalReanalyzer.js +132 -0
- package/dist/core/NodeFactory.d.ts +266 -19
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +256 -21
- package/dist/core/ScopeTracker.d.ts +84 -0
- package/dist/core/ScopeTracker.d.ts.map +1 -0
- package/dist/core/ScopeTracker.js +116 -0
- package/dist/core/SemanticId.d.ts +90 -0
- package/dist/core/SemanticId.d.ts.map +1 -0
- package/dist/core/SemanticId.js +115 -0
- package/dist/core/VersionManager.d.ts.map +1 -1
- package/dist/core/VersionManager.js +3 -2
- package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
- package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
- package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
- package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
- package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
- package/dist/core/nodes/ArrayLiteralNode.js +43 -0
- package/dist/core/nodes/BranchNode.d.ts +41 -0
- package/dist/core/nodes/BranchNode.d.ts.map +1 -0
- package/dist/core/nodes/BranchNode.js +82 -0
- package/dist/core/nodes/CallSiteNode.d.ts +30 -2
- package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
- package/dist/core/nodes/CallSiteNode.js +54 -4
- package/dist/core/nodes/CaseNode.d.ts +43 -0
- package/dist/core/nodes/CaseNode.d.ts.map +1 -0
- package/dist/core/nodes/CaseNode.js +81 -0
- package/dist/core/nodes/ClassNode.d.ts +34 -2
- package/dist/core/nodes/ClassNode.d.ts.map +1 -1
- package/dist/core/nodes/ClassNode.js +52 -4
- package/dist/core/nodes/ConstantNode.d.ts +2 -2
- package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
- package/dist/core/nodes/ConstantNode.js +6 -4
- package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
- package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
- package/dist/core/nodes/ConstructorCallNode.js +171 -0
- package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
- package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
- package/dist/core/nodes/DatabaseQueryNode.js +5 -2
- package/dist/core/nodes/DecoratorNode.d.ts +42 -0
- package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
- package/dist/core/nodes/DecoratorNode.js +64 -0
- package/dist/core/nodes/EnumNode.d.ts +42 -0
- package/dist/core/nodes/EnumNode.d.ts.map +1 -0
- package/dist/core/nodes/EnumNode.js +56 -0
- package/dist/core/nodes/EventListenerNode.d.ts +4 -4
- package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
- package/dist/core/nodes/EventListenerNode.js +7 -4
- package/dist/core/nodes/ExportNode.d.ts +38 -2
- package/dist/core/nodes/ExportNode.d.ts.map +1 -1
- package/dist/core/nodes/ExportNode.js +54 -4
- package/dist/core/nodes/ExpressionNode.d.ts +97 -0
- package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
- package/dist/core/nodes/ExpressionNode.js +180 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts +32 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
- package/dist/core/nodes/ExternalModuleNode.js +49 -0
- package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
- package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
- package/dist/core/nodes/ExternalStdioNode.js +15 -8
- package/dist/core/nodes/FunctionNode.d.ts +36 -0
- package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
- package/dist/core/nodes/FunctionNode.js +80 -1
- package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
- package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
- package/dist/core/nodes/HttpRequestNode.js +7 -4
- package/dist/core/nodes/ImportNode.d.ts +28 -6
- package/dist/core/nodes/ImportNode.d.ts.map +1 -1
- package/dist/core/nodes/ImportNode.js +43 -8
- package/dist/core/nodes/InterfaceNode.d.ts +46 -0
- package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
- package/dist/core/nodes/InterfaceNode.js +57 -0
- package/dist/core/nodes/IssueNode.d.ts +73 -0
- package/dist/core/nodes/IssueNode.d.ts.map +1 -0
- package/dist/core/nodes/IssueNode.js +129 -0
- package/dist/core/nodes/LiteralNode.d.ts +2 -2
- package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
- package/dist/core/nodes/LiteralNode.js +6 -4
- package/dist/core/nodes/MethodCallNode.d.ts +32 -2
- package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodCallNode.js +57 -4
- package/dist/core/nodes/MethodNode.d.ts +34 -2
- package/dist/core/nodes/MethodNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodNode.js +55 -3
- package/dist/core/nodes/ModuleNode.d.ts +31 -0
- package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
- package/dist/core/nodes/ModuleNode.js +37 -0
- package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
- package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
- package/dist/core/nodes/NetworkRequestNode.js +65 -0
- package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
- package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
- package/dist/core/nodes/ObjectLiteralNode.js +43 -0
- package/dist/core/nodes/ParameterNode.d.ts +2 -2
- package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
- package/dist/core/nodes/ParameterNode.js +5 -3
- package/dist/core/nodes/ScopeNode.d.ts +31 -0
- package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
- package/dist/core/nodes/ScopeNode.js +49 -0
- package/dist/core/nodes/TypeNode.d.ts +36 -0
- package/dist/core/nodes/TypeNode.d.ts.map +1 -0
- package/dist/core/nodes/TypeNode.js +55 -0
- package/dist/core/nodes/VariableDeclarationNode.d.ts +29 -2
- package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
- package/dist/core/nodes/VariableDeclarationNode.js +48 -4
- package/dist/core/nodes/index.d.ts +15 -1
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +17 -0
- package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
- package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
- package/dist/data/builtins/BuiltinRegistry.js +110 -0
- package/dist/data/builtins/definitions.d.ts +28 -0
- package/dist/data/builtins/definitions.d.ts.map +1 -0
- package/dist/data/builtins/definitions.js +250 -0
- package/dist/data/builtins/index.d.ts +10 -0
- package/dist/data/builtins/index.d.ts.map +1 -0
- package/dist/data/builtins/index.js +8 -0
- package/dist/data/builtins/jsGlobals.d.ts +18 -0
- package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
- package/dist/data/builtins/jsGlobals.js +26 -0
- package/dist/data/builtins/types.d.ts +34 -0
- package/dist/data/builtins/types.d.ts.map +1 -0
- package/dist/data/builtins/types.js +7 -0
- package/dist/data/globals/definitions.d.ts +27 -0
- package/dist/data/globals/definitions.d.ts.map +1 -0
- package/dist/data/globals/definitions.js +117 -0
- package/dist/data/globals/index.d.ts +36 -0
- package/dist/data/globals/index.d.ts.map +1 -0
- package/dist/data/globals/index.js +52 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticCollector.js +129 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts +100 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.js +247 -0
- package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
- package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticWriter.js +43 -0
- package/dist/diagnostics/index.d.ts +14 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +11 -0
- package/dist/errors/GrafemaError.d.ts +161 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -0
- package/dist/errors/GrafemaError.js +181 -0
- package/dist/index.d.ts +73 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -1
- package/dist/logging/Logger.d.ts +48 -0
- package/dist/logging/Logger.d.ts.map +1 -0
- package/dist/logging/Logger.js +134 -0
- package/dist/plugins/Plugin.d.ts +5 -1
- package/dist/plugins/Plugin.d.ts.map +1 -1
- package/dist/plugins/Plugin.js +33 -0
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.js +14 -6
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +29 -19
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +71 -29
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +41 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +187 -19
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts +313 -19
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +3430 -503
- package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
- package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/RustAnalyzer.js +16 -11
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +11 -7
- package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +117 -21
- package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts +207 -4
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +1527 -316
- package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
- package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
- package/dist/plugins/analysis/ast/types.d.ts +470 -5
- package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
- package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
- package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/index.js +5 -0
- package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
- package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/location.js +78 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +14 -5
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +100 -9
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +674 -125
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +14 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +190 -63
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +112 -8
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +20 -2
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +243 -45
- package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
- package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
- package/dist/plugins/discovery/WorkspaceDiscovery.js +141 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
- package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
- package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/detector.js +49 -0
- package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
- package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
- package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
- package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/index.js +8 -0
- package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
- package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/parsers.js +80 -0
- package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
- package/dist/plugins/enrichment/AliasTracker.js +29 -8
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +78 -27
- package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
- package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MethodCallResolver.js +33 -13
- package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +173 -147
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
- package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
- package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
- package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +22 -27
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +185 -143
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
- package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
- package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +121 -31
- package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +8 -7
- package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
- package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
- package/dist/plugins/indexing/ServiceDetector.js +28 -15
- package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
- package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
- package/dist/plugins/validation/BrokenImportValidator.js +249 -0
- package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
- package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
- package/dist/plugins/validation/CallResolverValidator.js +103 -77
- package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
- package/dist/plugins/validation/DataFlowValidator.js +62 -49
- package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
- package/dist/plugins/validation/EvalBanValidator.js +17 -16
- package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js +44 -24
- package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
- package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
- package/dist/plugins/validation/NodeCreationValidator.js +415 -0
- package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
- package/dist/plugins/validation/SQLInjectionValidator.js +61 -19
- package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
- package/dist/plugins/validation/ShadowingDetector.js +6 -5
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
- package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
- package/dist/plugins/vcs/GitPlugin.js +10 -12
- package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
- package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
- package/dist/plugins/vcs/VCSPlugin.js +5 -5
- package/dist/queries/findCallsInFunction.d.ts +52 -0
- package/dist/queries/findCallsInFunction.d.ts.map +1 -0
- package/dist/queries/findCallsInFunction.js +135 -0
- package/dist/queries/findContainingFunction.d.ts +45 -0
- package/dist/queries/findContainingFunction.d.ts.map +1 -0
- package/dist/queries/findContainingFunction.js +54 -0
- package/dist/queries/index.d.ts +14 -0
- package/dist/queries/index.d.ts.map +1 -0
- package/dist/queries/index.js +11 -0
- package/dist/queries/traceValues.d.ts +70 -0
- package/dist/queries/traceValues.d.ts.map +1 -0
- package/dist/queries/traceValues.js +299 -0
- package/dist/queries/types.d.ts +163 -0
- package/dist/queries/types.d.ts.map +1 -0
- package/dist/queries/types.js +9 -0
- package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
- package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/GraphSchemaExtractor.js +124 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js +112 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +21 -34
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +72 -62
- package/dist/storage/backends/typeValidation.d.ts.map +1 -1
- package/dist/storage/backends/typeValidation.js +1 -0
- package/dist/validation/PathValidator.d.ts +1 -2
- package/dist/validation/PathValidator.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/Orchestrator.ts +272 -27
- package/src/config/ConfigLoader.ts +354 -0
- package/src/config/index.ts +5 -0
- package/src/core/ASTWorker.ts +143 -139
- package/src/core/CoverageAnalyzer.ts +243 -0
- package/src/core/FileExplainer.ts +179 -0
- package/src/core/FileNodeManager.ts +100 -0
- package/src/core/GraphFreshnessChecker.ts +143 -0
- package/src/core/HashUtils.ts +48 -0
- package/src/core/IncrementalReanalyzer.ts +192 -0
- package/src/core/NodeFactory.ts +470 -23
- package/src/core/ScopeTracker.ts +154 -0
- package/src/core/SemanticId.ts +192 -0
- package/src/core/VersionManager.ts +3 -2
- package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
- package/src/core/nodes/ArrayLiteralNode.ts +66 -0
- package/src/core/nodes/BranchNode.ts +113 -0
- package/src/core/nodes/CallSiteNode.ts +64 -4
- package/src/core/nodes/CaseNode.ts +123 -0
- package/src/core/nodes/ClassNode.ts +67 -4
- package/src/core/nodes/ConstantNode.ts +5 -4
- package/src/core/nodes/ConstructorCallNode.ts +217 -0
- package/src/core/nodes/DatabaseQueryNode.ts +5 -1
- package/src/core/nodes/DecoratorNode.ts +92 -0
- package/src/core/nodes/EnumNode.ts +87 -0
- package/src/core/nodes/EventListenerNode.ts +7 -4
- package/src/core/nodes/ExportNode.ts +74 -4
- package/src/core/nodes/ExpressionNode.ts +232 -0
- package/src/core/nodes/ExternalModuleNode.ts +65 -0
- package/src/core/nodes/ExternalStdioNode.ts +17 -9
- package/src/core/nodes/FunctionNode.ts +101 -1
- package/src/core/nodes/HttpRequestNode.ts +7 -4
- package/src/core/nodes/ImportNode.ts +62 -13
- package/src/core/nodes/InterfaceNode.ts +92 -0
- package/src/core/nodes/IssueNode.ts +177 -0
- package/src/core/nodes/LiteralNode.ts +5 -4
- package/src/core/nodes/MethodCallNode.ts +70 -4
- package/src/core/nodes/MethodNode.ts +68 -3
- package/src/core/nodes/ModuleNode.ts +50 -0
- package/src/core/nodes/NetworkRequestNode.ts +77 -0
- package/src/core/nodes/ObjectLiteralNode.ts +66 -0
- package/src/core/nodes/ParameterNode.ts +4 -3
- package/src/core/nodes/ScopeNode.ts +65 -0
- package/src/core/nodes/TypeNode.ts +79 -0
- package/src/core/nodes/VariableDeclarationNode.ts +58 -4
- package/src/core/nodes/index.ts +21 -1
- package/src/data/builtins/BuiltinRegistry.ts +124 -0
- package/src/data/builtins/definitions.ts +267 -0
- package/src/data/builtins/index.ts +10 -0
- package/src/data/builtins/jsGlobals.ts +28 -0
- package/src/data/builtins/types.ts +36 -0
- package/src/data/globals/definitions.ts +156 -0
- package/src/data/globals/index.ts +66 -0
- package/src/diagnostics/DiagnosticCollector.ts +163 -0
- package/src/diagnostics/DiagnosticReporter.ts +324 -0
- package/src/diagnostics/DiagnosticWriter.ts +50 -0
- package/src/diagnostics/index.ts +16 -0
- package/src/errors/GrafemaError.ts +239 -0
- package/src/index.ts +193 -1
- package/src/logging/Logger.ts +152 -0
- package/src/plugins/Plugin.ts +42 -0
- package/src/plugins/analysis/DatabaseAnalyzer.ts +16 -8
- package/src/plugins/analysis/ExpressAnalyzer.ts +33 -19
- package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +76 -36
- package/src/plugins/analysis/FetchAnalyzer.ts +232 -21
- package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
- package/src/plugins/analysis/JSASTAnalyzer.ts +4265 -587
- package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
- package/src/plugins/analysis/RustAnalyzer.ts +16 -11
- package/src/plugins/analysis/SQLiteAnalyzer.ts +13 -7
- package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
- package/src/plugins/analysis/SocketIOAnalyzer.ts +151 -28
- package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
- package/src/plugins/analysis/ast/GraphBuilder.ts +1947 -327
- package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
- package/src/plugins/analysis/ast/types.ts +596 -6
- package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
- package/src/plugins/analysis/ast/utils/index.ts +12 -0
- package/src/plugins/analysis/ast/utils/location.ts +103 -0
- package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +19 -8
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +924 -83
- package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +234 -93
- package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +124 -9
- package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +294 -49
- package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
- package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
- package/src/plugins/discovery/WorkspaceDiscovery.ts +184 -0
- package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
- package/src/plugins/discovery/workspaces/detector.ts +63 -0
- package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
- package/src/plugins/discovery/workspaces/index.ts +23 -0
- package/src/plugins/discovery/workspaces/parsers.ts +99 -0
- package/src/plugins/enrichment/AliasTracker.ts +35 -8
- package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
- package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
- package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
- package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +84 -27
- package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
- package/src/plugins/enrichment/MethodCallResolver.ts +39 -13
- package/src/plugins/enrichment/MountPointResolver.ts +208 -195
- package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
- package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
- package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +209 -189
- package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
- package/src/plugins/indexing/JSModuleIndexer.ts +140 -34
- package/src/plugins/indexing/RustModuleIndexer.ts +8 -7
- package/src/plugins/validation/BrokenImportValidator.ts +325 -0
- package/src/plugins/validation/CallResolverValidator.ts +131 -110
- package/src/plugins/validation/DataFlowValidator.ts +88 -67
- package/src/plugins/validation/EvalBanValidator.ts +17 -16
- package/src/plugins/validation/GraphConnectivityValidator.ts +58 -24
- package/src/plugins/validation/NodeCreationValidator.ts +554 -0
- package/src/plugins/validation/SQLInjectionValidator.ts +63 -20
- package/src/plugins/validation/ShadowingDetector.ts +6 -5
- package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
- package/src/plugins/vcs/GitPlugin.ts +40 -12
- package/src/plugins/vcs/VCSPlugin.ts +7 -5
- package/src/queries/README.md +46 -0
- package/src/queries/findCallsInFunction.ts +206 -0
- package/src/queries/findContainingFunction.ts +83 -0
- package/src/queries/index.ts +23 -0
- package/src/queries/traceValues.ts +398 -0
- package/src/queries/types.ts +187 -0
- package/src/schema/GraphSchemaExtractor.ts +177 -0
- package/src/schema/InterfaceSchemaExtractor.ts +173 -0
- package/src/schema/index.ts +5 -0
- package/src/storage/backends/RFDBServerBackend.ts +100 -98
- package/src/storage/backends/typeValidation.ts +1 -0
- package/src/validation/PathValidator.ts +1 -1
- package/dist/core/AnalysisWorker.d.ts +0 -14
- package/dist/core/AnalysisWorker.d.ts.map +0 -1
- package/dist/core/AnalysisWorker.js +0 -307
- package/dist/core/ParallelAnalyzer.d.ts +0 -120
- package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
- package/dist/core/ParallelAnalyzer.js +0 -331
- package/dist/core/QueueWorker.d.ts +0 -12
- package/dist/core/QueueWorker.d.ts.map +0 -1
- package/dist/core/QueueWorker.js +0 -567
- package/dist/core/RFDBClient.d.ts +0 -179
- package/dist/core/RFDBClient.d.ts.map +0 -1
- package/dist/core/RFDBClient.js +0 -429
- package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
- package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
- package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
- package/src/core/AnalysisWorker.ts +0 -410
- package/src/core/ParallelAnalyzer.ts +0 -476
- package/src/core/QueueWorker.ts +0 -780
- package/src/plugins/indexing/ServiceDetector.ts +0 -230
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SemanticId - Stable identifiers for code elements
|
|
3
|
+
*
|
|
4
|
+
* Semantic IDs provide stable identifiers for code elements that don't change
|
|
5
|
+
* when unrelated code is added/removed (no line numbers in IDs).
|
|
6
|
+
*
|
|
7
|
+
* Format: {file}->{scope_path}->{type}->{name}[#discriminator]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* src/app.js->global->FUNCTION->processData
|
|
11
|
+
* src/app.js->UserService->METHOD->login
|
|
12
|
+
* src/app.js->getUser->if#0->CALL->console.log#0
|
|
13
|
+
*
|
|
14
|
+
* Special formats:
|
|
15
|
+
* Singletons: net:stdio->__stdio__
|
|
16
|
+
* External modules: EXTERNAL_MODULE->lodash
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Compute semantic ID for any node type.
|
|
20
|
+
*
|
|
21
|
+
* @param type - Node type (FUNCTION, CALL, VARIABLE, etc.)
|
|
22
|
+
* @param name - Node name
|
|
23
|
+
* @param context - Scope context from ScopeTracker
|
|
24
|
+
* @param options - Optional discriminator or context
|
|
25
|
+
* @returns Semantic ID string
|
|
26
|
+
*/
|
|
27
|
+
export function computeSemanticId(type, name, context, options) {
|
|
28
|
+
const { file, scopePath } = context;
|
|
29
|
+
const scope = scopePath.length > 0 ? scopePath.join('->') : 'global';
|
|
30
|
+
let id = `${file}->${scope}->${type}->${name}`;
|
|
31
|
+
if (options?.discriminator !== undefined) {
|
|
32
|
+
id += `#${options.discriminator}`;
|
|
33
|
+
}
|
|
34
|
+
else if (options?.context) {
|
|
35
|
+
id += `[${options.context}]`;
|
|
36
|
+
}
|
|
37
|
+
return id;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parse semantic ID back to components.
|
|
41
|
+
*
|
|
42
|
+
* @param id - Semantic ID to parse
|
|
43
|
+
* @returns Parsed components or null if invalid
|
|
44
|
+
*/
|
|
45
|
+
export function parseSemanticId(id) {
|
|
46
|
+
// Handle singletons
|
|
47
|
+
if (id.startsWith('net:stdio') || id.startsWith('net:request')) {
|
|
48
|
+
const [prefix, name] = id.split('->');
|
|
49
|
+
return {
|
|
50
|
+
file: '',
|
|
51
|
+
scopePath: [prefix],
|
|
52
|
+
type: 'SINGLETON',
|
|
53
|
+
name,
|
|
54
|
+
discriminator: undefined
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (id.startsWith('EXTERNAL_MODULE')) {
|
|
58
|
+
const [, name] = id.split('->');
|
|
59
|
+
return {
|
|
60
|
+
file: '',
|
|
61
|
+
scopePath: [],
|
|
62
|
+
type: 'EXTERNAL_MODULE',
|
|
63
|
+
name,
|
|
64
|
+
discriminator: undefined
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const parts = id.split('->');
|
|
68
|
+
if (parts.length < 4)
|
|
69
|
+
return null;
|
|
70
|
+
const file = parts[0];
|
|
71
|
+
const type = parts[parts.length - 2];
|
|
72
|
+
let name = parts[parts.length - 1];
|
|
73
|
+
const scopePath = parts.slice(1, -2);
|
|
74
|
+
// Parse discriminator or context
|
|
75
|
+
let discriminator;
|
|
76
|
+
let context;
|
|
77
|
+
const hashMatch = name.match(/^(.+)#(\d+)$/);
|
|
78
|
+
if (hashMatch) {
|
|
79
|
+
name = hashMatch[1];
|
|
80
|
+
discriminator = parseInt(hashMatch[2], 10);
|
|
81
|
+
}
|
|
82
|
+
const bracketMatch = name.match(/^(.+)\[(.+)\]$/);
|
|
83
|
+
if (bracketMatch) {
|
|
84
|
+
name = bracketMatch[1];
|
|
85
|
+
context = bracketMatch[2];
|
|
86
|
+
}
|
|
87
|
+
return { file, scopePath, type, name, discriminator, context };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Compute discriminator for items with same name in same scope.
|
|
91
|
+
* Uses line/column for stable ordering.
|
|
92
|
+
*
|
|
93
|
+
* @param items - All items in scope
|
|
94
|
+
* @param targetName - Name to find discriminator for
|
|
95
|
+
* @param targetLocation - Location of target item
|
|
96
|
+
* @returns Discriminator (0-based index among same-named items)
|
|
97
|
+
*/
|
|
98
|
+
export function computeDiscriminator(items, targetName, targetLocation) {
|
|
99
|
+
// Filter items with same name
|
|
100
|
+
const sameNameItems = items.filter(item => item.name === targetName);
|
|
101
|
+
if (sameNameItems.length <= 1) {
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
// Sort by line, then by column for stable ordering
|
|
105
|
+
sameNameItems.sort((a, b) => {
|
|
106
|
+
if (a.location.line !== b.location.line) {
|
|
107
|
+
return a.location.line - b.location.line;
|
|
108
|
+
}
|
|
109
|
+
return a.location.column - b.location.column;
|
|
110
|
+
});
|
|
111
|
+
// Find index of target
|
|
112
|
+
const index = sameNameItems.findIndex(item => item.location.line === targetLocation.line &&
|
|
113
|
+
item.location.column === targetLocation.column);
|
|
114
|
+
return index >= 0 ? index : 0;
|
|
115
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionManager.d.ts","sourceRoot":"","sources":["../../src/core/VersionManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"VersionManager.d.ts","sourceRoot":"","sources":["../../src/core/VersionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,9 +36,10 @@ export class VersionManager {
|
|
|
36
36
|
if (type === 'VARIABLE_DECLARATION') {
|
|
37
37
|
return `${type}:${name}:${file}:${line || 0}`;
|
|
38
38
|
}
|
|
39
|
-
// Для MODULE -
|
|
39
|
+
// Для MODULE - use semantic ID format with name (relative path)
|
|
40
40
|
if (type === 'MODULE') {
|
|
41
|
-
|
|
41
|
+
// name stores the relative path for MODULE nodes
|
|
42
|
+
return `${name}->global->MODULE->module`;
|
|
42
43
|
}
|
|
43
44
|
// Для SERVICE - используем имя или file
|
|
44
45
|
if (type === 'SERVICE') {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArgumentExpressionNode - EXPRESSION node with call argument context
|
|
3
|
+
*
|
|
4
|
+
* Extends ExpressionNode with fields tracking which call and argument position
|
|
5
|
+
* this expression appears in. Used for argument data flow tracking.
|
|
6
|
+
*
|
|
7
|
+
* ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
|
|
8
|
+
* With counter: {file}:EXPRESSION:{expressionType}:{line}:{column}:{counter}
|
|
9
|
+
*
|
|
10
|
+
* Example: /src/app.ts:EXPRESSION:BinaryExpression:25:10
|
|
11
|
+
*
|
|
12
|
+
* Note: Uses counter suffix since same expression at same position can appear
|
|
13
|
+
* multiple times in different argument contexts.
|
|
14
|
+
*/
|
|
15
|
+
import { type ExpressionNodeRecord, type ExpressionNodeOptions } from './ExpressionNode.js';
|
|
16
|
+
interface ArgumentExpressionNodeRecord extends ExpressionNodeRecord {
|
|
17
|
+
parentCallId: string;
|
|
18
|
+
argIndex: number;
|
|
19
|
+
}
|
|
20
|
+
interface ArgumentExpressionNodeOptions extends ExpressionNodeOptions {
|
|
21
|
+
parentCallId: string;
|
|
22
|
+
argIndex: number;
|
|
23
|
+
counter?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class ArgumentExpressionNode {
|
|
26
|
+
static readonly TYPE: "EXPRESSION";
|
|
27
|
+
static readonly REQUIRED: readonly string[];
|
|
28
|
+
static readonly OPTIONAL: readonly string[];
|
|
29
|
+
/**
|
|
30
|
+
* Create EXPRESSION node with argument context
|
|
31
|
+
*
|
|
32
|
+
* @param expressionType - Type of expression (BinaryExpression, LogicalExpression, etc.)
|
|
33
|
+
* @param file - File path
|
|
34
|
+
* @param line - Line number
|
|
35
|
+
* @param column - Column position
|
|
36
|
+
* @param options - Required: parentCallId, argIndex; Optional: expression properties, counter
|
|
37
|
+
* @returns ArgumentExpressionNodeRecord
|
|
38
|
+
*/
|
|
39
|
+
static create(expressionType: string, file: string, line: number, column: number, options: ArgumentExpressionNodeOptions): ArgumentExpressionNodeRecord;
|
|
40
|
+
static validate(node: ArgumentExpressionNodeRecord): string[];
|
|
41
|
+
}
|
|
42
|
+
export type { ArgumentExpressionNodeRecord, ArgumentExpressionNodeOptions };
|
|
43
|
+
//# sourceMappingURL=ArgumentExpressionNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArgumentExpressionNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ArgumentExpressionNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAkB,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5G,UAAU,4BAA6B,SAAQ,oBAAoB;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,6BAA8B,SAAQ,qBAAqB;IACnE,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,sBAAsB;IAEjC,MAAM,CAAC,QAAQ,CAAC,IAAI,eAAuB;IAC3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAA4D;IACvG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAA2C;IAEtF;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,CACX,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,6BAA6B,GACrC,4BAA4B;IAuB/B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,4BAA4B,GAAG,MAAM,EAAE;CAa9D;AAED,YAAY,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArgumentExpressionNode - EXPRESSION node with call argument context
|
|
3
|
+
*
|
|
4
|
+
* Extends ExpressionNode with fields tracking which call and argument position
|
|
5
|
+
* this expression appears in. Used for argument data flow tracking.
|
|
6
|
+
*
|
|
7
|
+
* ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
|
|
8
|
+
* With counter: {file}:EXPRESSION:{expressionType}:{line}:{column}:{counter}
|
|
9
|
+
*
|
|
10
|
+
* Example: /src/app.ts:EXPRESSION:BinaryExpression:25:10
|
|
11
|
+
*
|
|
12
|
+
* Note: Uses counter suffix since same expression at same position can appear
|
|
13
|
+
* multiple times in different argument contexts.
|
|
14
|
+
*/
|
|
15
|
+
import { ExpressionNode } from './ExpressionNode.js';
|
|
16
|
+
export class ArgumentExpressionNode {
|
|
17
|
+
// Inherit TYPE from ExpressionNode
|
|
18
|
+
static TYPE = ExpressionNode.TYPE;
|
|
19
|
+
static REQUIRED = [...ExpressionNode.REQUIRED, 'parentCallId', 'argIndex'];
|
|
20
|
+
static OPTIONAL = [...ExpressionNode.OPTIONAL, 'counter'];
|
|
21
|
+
/**
|
|
22
|
+
* Create EXPRESSION node with argument context
|
|
23
|
+
*
|
|
24
|
+
* @param expressionType - Type of expression (BinaryExpression, LogicalExpression, etc.)
|
|
25
|
+
* @param file - File path
|
|
26
|
+
* @param line - Line number
|
|
27
|
+
* @param column - Column position
|
|
28
|
+
* @param options - Required: parentCallId, argIndex; Optional: expression properties, counter
|
|
29
|
+
* @returns ArgumentExpressionNodeRecord
|
|
30
|
+
*/
|
|
31
|
+
static create(expressionType, file, line, column, options) {
|
|
32
|
+
if (!options.parentCallId) {
|
|
33
|
+
throw new Error('ArgumentExpressionNode.create: parentCallId is required');
|
|
34
|
+
}
|
|
35
|
+
if (options.argIndex === undefined) {
|
|
36
|
+
throw new Error('ArgumentExpressionNode.create: argIndex is required');
|
|
37
|
+
}
|
|
38
|
+
// Create base EXPRESSION node using parent class
|
|
39
|
+
const baseNode = ExpressionNode.create(expressionType, file, line, column, options);
|
|
40
|
+
// Override ID with counter suffix (since same location can have multiple expressions)
|
|
41
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
42
|
+
const id = `${file}:EXPRESSION:${expressionType}:${line}:${column}${counter}`;
|
|
43
|
+
return {
|
|
44
|
+
...baseNode,
|
|
45
|
+
id,
|
|
46
|
+
parentCallId: options.parentCallId,
|
|
47
|
+
argIndex: options.argIndex
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
static validate(node) {
|
|
51
|
+
const errors = ExpressionNode.validate(node);
|
|
52
|
+
if (!node.parentCallId) {
|
|
53
|
+
errors.push('Missing required field: parentCallId');
|
|
54
|
+
}
|
|
55
|
+
if (node.argIndex === undefined) {
|
|
56
|
+
errors.push('Missing required field: argIndex');
|
|
57
|
+
}
|
|
58
|
+
return errors;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArrayLiteralNode - contract for ARRAY_LITERAL node
|
|
3
|
+
*
|
|
4
|
+
* Represents an array literal expression: [elem1, elem2, ...]
|
|
5
|
+
* Used for tracking data flow through array construction.
|
|
6
|
+
*/
|
|
7
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
8
|
+
interface ArrayLiteralNodeRecord extends BaseNodeRecord {
|
|
9
|
+
type: 'ARRAY_LITERAL';
|
|
10
|
+
column: number;
|
|
11
|
+
parentCallId?: string;
|
|
12
|
+
argIndex?: number;
|
|
13
|
+
}
|
|
14
|
+
interface ArrayLiteralNodeOptions {
|
|
15
|
+
parentCallId?: string;
|
|
16
|
+
argIndex?: number;
|
|
17
|
+
counter?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare class ArrayLiteralNode {
|
|
20
|
+
static readonly TYPE: "ARRAY_LITERAL";
|
|
21
|
+
static readonly REQUIRED: readonly ["file", "line", "column"];
|
|
22
|
+
static readonly OPTIONAL: readonly ["parentCallId", "argIndex"];
|
|
23
|
+
static create(file: string, line: number, column: number, options?: ArrayLiteralNodeOptions): ArrayLiteralNodeRecord;
|
|
24
|
+
static validate(node: ArrayLiteralNodeRecord): string[];
|
|
25
|
+
}
|
|
26
|
+
export type { ArrayLiteralNodeRecord, ArrayLiteralNodeOptions };
|
|
27
|
+
//# sourceMappingURL=ArrayLiteralNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrayLiteralNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ArrayLiteralNode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,sBAAuB,SAAQ,cAAc;IACrD,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,uBAAuB;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,eAAe,CAAU;IAEhD,MAAM,CAAC,QAAQ,CAAC,QAAQ,sCAAuC;IAC/D,MAAM,CAAC,QAAQ,CAAC,QAAQ,wCAAyC;IAEjE,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,uBAA4B,GACpC,sBAAsB;IAqBzB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,EAAE;CASxD;AAED,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArrayLiteralNode - contract for ARRAY_LITERAL node
|
|
3
|
+
*
|
|
4
|
+
* Represents an array literal expression: [elem1, elem2, ...]
|
|
5
|
+
* Used for tracking data flow through array construction.
|
|
6
|
+
*/
|
|
7
|
+
export class ArrayLiteralNode {
|
|
8
|
+
static TYPE = 'ARRAY_LITERAL';
|
|
9
|
+
static REQUIRED = ['file', 'line', 'column'];
|
|
10
|
+
static OPTIONAL = ['parentCallId', 'argIndex'];
|
|
11
|
+
static create(file, line, column, options = {}) {
|
|
12
|
+
if (!file)
|
|
13
|
+
throw new Error('ArrayLiteralNode.create: file is required');
|
|
14
|
+
if (line === undefined)
|
|
15
|
+
throw new Error('ArrayLiteralNode.create: line is required');
|
|
16
|
+
if (column === undefined)
|
|
17
|
+
throw new Error('ArrayLiteralNode.create: column is required');
|
|
18
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
19
|
+
const argSuffix = options.argIndex !== undefined ? `arg${options.argIndex}` : 'arr';
|
|
20
|
+
const id = `ARRAY_LITERAL#${argSuffix}#${file}#${line}:${column}${counter}`;
|
|
21
|
+
return {
|
|
22
|
+
id,
|
|
23
|
+
type: this.TYPE,
|
|
24
|
+
name: `<array>`,
|
|
25
|
+
file,
|
|
26
|
+
line,
|
|
27
|
+
column,
|
|
28
|
+
parentCallId: options.parentCallId,
|
|
29
|
+
argIndex: options.argIndex
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
static validate(node) {
|
|
33
|
+
const errors = [];
|
|
34
|
+
if (node.type !== this.TYPE)
|
|
35
|
+
errors.push(`Expected type ${this.TYPE}`);
|
|
36
|
+
const nodeRecord = node;
|
|
37
|
+
for (const field of this.REQUIRED) {
|
|
38
|
+
if (nodeRecord[field] === undefined)
|
|
39
|
+
errors.push(`Missing: ${field}`);
|
|
40
|
+
}
|
|
41
|
+
return errors;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BranchNode - contract for BRANCH node
|
|
3
|
+
*
|
|
4
|
+
* Represents control flow branching (switch statements).
|
|
5
|
+
* Future: if statements, ternary expressions.
|
|
6
|
+
*
|
|
7
|
+
* ID format (legacy): {file}:BRANCH:{branchType}:{line}:{counter}
|
|
8
|
+
* Semantic ID format: {file}->{scope_path}->BRANCH->switch#N
|
|
9
|
+
*/
|
|
10
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
11
|
+
import { type ScopeContext, type Location } from '../SemanticId.js';
|
|
12
|
+
interface BranchNodeRecord extends BaseNodeRecord {
|
|
13
|
+
type: 'BRANCH';
|
|
14
|
+
column: number;
|
|
15
|
+
branchType: 'switch' | 'if' | 'ternary';
|
|
16
|
+
parentScopeId?: string;
|
|
17
|
+
}
|
|
18
|
+
interface BranchNodeOptions {
|
|
19
|
+
parentScopeId?: string;
|
|
20
|
+
counter?: number;
|
|
21
|
+
}
|
|
22
|
+
interface BranchContextOptions {
|
|
23
|
+
discriminator: number;
|
|
24
|
+
parentScopeId?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare class BranchNode {
|
|
27
|
+
static readonly TYPE: "BRANCH";
|
|
28
|
+
static readonly REQUIRED: readonly ["branchType", "file", "line", "column"];
|
|
29
|
+
static readonly OPTIONAL: readonly ["parentScopeId"];
|
|
30
|
+
/**
|
|
31
|
+
* Create BRANCH node (legacy ID)
|
|
32
|
+
*/
|
|
33
|
+
static create(branchType: 'switch' | 'if' | 'ternary', file: string, line: number, column: number, options?: BranchNodeOptions): BranchNodeRecord;
|
|
34
|
+
/**
|
|
35
|
+
* Create BRANCH node with semantic ID (NEW API)
|
|
36
|
+
*/
|
|
37
|
+
static createWithContext(branchType: 'switch' | 'if' | 'ternary', context: ScopeContext, location: Partial<Location>, options: BranchContextOptions): BranchNodeRecord;
|
|
38
|
+
static validate(node: BranchNodeRecord): string[];
|
|
39
|
+
}
|
|
40
|
+
export type { BranchNodeRecord };
|
|
41
|
+
//# sourceMappingURL=BranchNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BranchNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/BranchNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvF,UAAU,gBAAiB,SAAQ,cAAc;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,iBAAiB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,oBAAoB;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IACzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,oDAAqD;IAC7E,MAAM,CAAC,QAAQ,CAAC,QAAQ,6BAA8B;IAEtD;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,UAAU,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EACvC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB;IAsBnB;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,UAAU,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EACvC,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC3B,OAAO,EAAE,oBAAoB,GAC5B,gBAAgB;IAuBnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE;CAalD;AAED,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BranchNode - contract for BRANCH node
|
|
3
|
+
*
|
|
4
|
+
* Represents control flow branching (switch statements).
|
|
5
|
+
* Future: if statements, ternary expressions.
|
|
6
|
+
*
|
|
7
|
+
* ID format (legacy): {file}:BRANCH:{branchType}:{line}:{counter}
|
|
8
|
+
* Semantic ID format: {file}->{scope_path}->BRANCH->switch#N
|
|
9
|
+
*/
|
|
10
|
+
import { computeSemanticId } from '../SemanticId.js';
|
|
11
|
+
export class BranchNode {
|
|
12
|
+
static TYPE = 'BRANCH';
|
|
13
|
+
static REQUIRED = ['branchType', 'file', 'line', 'column'];
|
|
14
|
+
static OPTIONAL = ['parentScopeId'];
|
|
15
|
+
/**
|
|
16
|
+
* Create BRANCH node (legacy ID)
|
|
17
|
+
*/
|
|
18
|
+
static create(branchType, file, line, column, options = {}) {
|
|
19
|
+
// Validation
|
|
20
|
+
if (!branchType)
|
|
21
|
+
throw new Error('BranchNode.create: branchType is required');
|
|
22
|
+
if (!file)
|
|
23
|
+
throw new Error('BranchNode.create: file is required');
|
|
24
|
+
if (line === undefined)
|
|
25
|
+
throw new Error('BranchNode.create: line is required');
|
|
26
|
+
if (column === undefined)
|
|
27
|
+
throw new Error('BranchNode.create: column is required');
|
|
28
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
29
|
+
const id = `${file}:BRANCH:${branchType}:${line}${counter}`;
|
|
30
|
+
return {
|
|
31
|
+
id,
|
|
32
|
+
type: this.TYPE,
|
|
33
|
+
name: branchType,
|
|
34
|
+
file,
|
|
35
|
+
line,
|
|
36
|
+
column,
|
|
37
|
+
branchType,
|
|
38
|
+
parentScopeId: options.parentScopeId
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create BRANCH node with semantic ID (NEW API)
|
|
43
|
+
*/
|
|
44
|
+
static createWithContext(branchType, context, location, options) {
|
|
45
|
+
if (!branchType)
|
|
46
|
+
throw new Error('BranchNode.createWithContext: branchType is required');
|
|
47
|
+
if (!context.file)
|
|
48
|
+
throw new Error('BranchNode.createWithContext: file is required');
|
|
49
|
+
if (location.line === undefined)
|
|
50
|
+
throw new Error('BranchNode.createWithContext: line is required');
|
|
51
|
+
if (location.column === undefined)
|
|
52
|
+
throw new Error('BranchNode.createWithContext: column is required');
|
|
53
|
+
if (options.discriminator === undefined)
|
|
54
|
+
throw new Error('BranchNode.createWithContext: discriminator is required');
|
|
55
|
+
const id = computeSemanticId('BRANCH', branchType, context, {
|
|
56
|
+
discriminator: options.discriminator
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
id,
|
|
60
|
+
type: this.TYPE,
|
|
61
|
+
name: `${branchType}#${options.discriminator}`,
|
|
62
|
+
file: context.file,
|
|
63
|
+
line: location.line,
|
|
64
|
+
column: location.column,
|
|
65
|
+
branchType,
|
|
66
|
+
parentScopeId: options.parentScopeId
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
static validate(node) {
|
|
70
|
+
const errors = [];
|
|
71
|
+
if (node.type !== this.TYPE) {
|
|
72
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
73
|
+
}
|
|
74
|
+
if (!node.branchType) {
|
|
75
|
+
errors.push('Missing required field: branchType');
|
|
76
|
+
}
|
|
77
|
+
if (!node.file) {
|
|
78
|
+
errors.push('Missing required field: file');
|
|
79
|
+
}
|
|
80
|
+
return errors;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CallSiteNode - contract for CALL_SITE node
|
|
3
|
+
*
|
|
4
|
+
* Supports two creation modes:
|
|
5
|
+
* 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
|
|
6
|
+
* 2. create() - LEGACY: Uses line-based IDs for backward compatibility
|
|
7
|
+
*
|
|
8
|
+
* Semantic ID format: {file}->{scope_path}->CALL->{calleeName}#N
|
|
9
|
+
* Example: src/app.js->handler->CALL->console.log#0
|
|
3
10
|
*/
|
|
4
11
|
import type { BaseNodeRecord } from '@grafema/types';
|
|
12
|
+
import { type ScopeContext, type Location } from '../SemanticId.js';
|
|
5
13
|
interface CallSiteNodeRecord extends BaseNodeRecord {
|
|
6
14
|
type: 'CALL_SITE';
|
|
7
15
|
column: number;
|
|
@@ -12,14 +20,34 @@ interface CallSiteNodeOptions {
|
|
|
12
20
|
parentScopeId?: string;
|
|
13
21
|
counter?: number;
|
|
14
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Options for createWithContext
|
|
25
|
+
*/
|
|
26
|
+
interface CallSiteContextOptions {
|
|
27
|
+
discriminator: number;
|
|
28
|
+
parentScopeId?: string;
|
|
29
|
+
}
|
|
15
30
|
export declare class CallSiteNode {
|
|
16
31
|
static readonly TYPE: "CALL_SITE";
|
|
17
|
-
static readonly REQUIRED: readonly ["name", "file", "line"];
|
|
18
|
-
static readonly OPTIONAL: readonly ["
|
|
32
|
+
static readonly REQUIRED: readonly ["name", "file", "line", "column"];
|
|
33
|
+
static readonly OPTIONAL: readonly ["parentScopeId", "targetFunctionName"];
|
|
19
34
|
/**
|
|
20
35
|
* Create CALL_SITE node
|
|
21
36
|
*/
|
|
22
37
|
static create(targetName: string, file: string, line: number, column: number, options?: CallSiteNodeOptions): CallSiteNodeRecord;
|
|
38
|
+
/**
|
|
39
|
+
* Create CALL_SITE node with semantic ID (NEW API)
|
|
40
|
+
*
|
|
41
|
+
* Uses ScopeContext from ScopeTracker for stable identifiers.
|
|
42
|
+
* Requires discriminator for multiple calls to same function within scope.
|
|
43
|
+
*
|
|
44
|
+
* @param targetName - Name of called function (e.g., 'console.log', 'db.query')
|
|
45
|
+
* @param context - Scope context from ScopeTracker.getContext()
|
|
46
|
+
* @param location - Source location { line, column }
|
|
47
|
+
* @param options - Options including required discriminator
|
|
48
|
+
* @returns CallSiteNodeRecord with semantic ID
|
|
49
|
+
*/
|
|
50
|
+
static createWithContext(targetName: string, context: ScopeContext, location: Partial<Location>, options: CallSiteContextOptions): CallSiteNodeRecord;
|
|
23
51
|
static validate(node: CallSiteNodeRecord): string[];
|
|
24
52
|
}
|
|
25
53
|
export type { CallSiteNodeRecord };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallSiteNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/CallSiteNode.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"CallSiteNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/CallSiteNode.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,UAAU,kBAAmB,SAAQ,cAAc;IACjD,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,mBAAmB;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,sBAAsB;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,YAAY;IACvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IAE5C,MAAM,CAAC,QAAQ,CAAC,QAAQ,8CAA+C;IACvE,MAAM,CAAC,QAAQ,CAAC,QAAQ,mDAAoD;IAE5E;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB;IAqBrB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,iBAAiB,CACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC3B,OAAO,EAAE,sBAAsB,GAC9B,kBAAkB;IA0BrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,EAAE;CAgBpD;AAED,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CallSiteNode - contract for CALL_SITE node
|
|
3
|
+
*
|
|
4
|
+
* Supports two creation modes:
|
|
5
|
+
* 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
|
|
6
|
+
* 2. create() - LEGACY: Uses line-based IDs for backward compatibility
|
|
7
|
+
*
|
|
8
|
+
* Semantic ID format: {file}->{scope_path}->CALL->{calleeName}#N
|
|
9
|
+
* Example: src/app.js->handler->CALL->console.log#0
|
|
3
10
|
*/
|
|
11
|
+
import { computeSemanticId } from '../SemanticId.js';
|
|
4
12
|
export class CallSiteNode {
|
|
5
13
|
static TYPE = 'CALL_SITE';
|
|
6
|
-
static REQUIRED = ['name', 'file', 'line'];
|
|
7
|
-
static OPTIONAL = ['
|
|
14
|
+
static REQUIRED = ['name', 'file', 'line', 'column'];
|
|
15
|
+
static OPTIONAL = ['parentScopeId', 'targetFunctionName'];
|
|
8
16
|
/**
|
|
9
17
|
* Create CALL_SITE node
|
|
10
18
|
*/
|
|
@@ -15,15 +23,57 @@ export class CallSiteNode {
|
|
|
15
23
|
throw new Error('CallSiteNode.create: file is required');
|
|
16
24
|
if (line === undefined)
|
|
17
25
|
throw new Error('CallSiteNode.create: line is required');
|
|
26
|
+
if (column === undefined)
|
|
27
|
+
throw new Error('CallSiteNode.create: column is required');
|
|
18
28
|
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
19
|
-
const id = `${file}:CALL_SITE:${targetName}:${line}:${column
|
|
29
|
+
const id = `${file}:CALL_SITE:${targetName}:${line}:${column}${counter}`;
|
|
20
30
|
return {
|
|
21
31
|
id,
|
|
22
32
|
type: this.TYPE,
|
|
23
33
|
name: targetName,
|
|
24
34
|
file,
|
|
25
35
|
line,
|
|
26
|
-
column
|
|
36
|
+
column,
|
|
37
|
+
parentScopeId: options.parentScopeId,
|
|
38
|
+
targetFunctionName: targetName
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create CALL_SITE node with semantic ID (NEW API)
|
|
43
|
+
*
|
|
44
|
+
* Uses ScopeContext from ScopeTracker for stable identifiers.
|
|
45
|
+
* Requires discriminator for multiple calls to same function within scope.
|
|
46
|
+
*
|
|
47
|
+
* @param targetName - Name of called function (e.g., 'console.log', 'db.query')
|
|
48
|
+
* @param context - Scope context from ScopeTracker.getContext()
|
|
49
|
+
* @param location - Source location { line, column }
|
|
50
|
+
* @param options - Options including required discriminator
|
|
51
|
+
* @returns CallSiteNodeRecord with semantic ID
|
|
52
|
+
*/
|
|
53
|
+
static createWithContext(targetName, context, location, options) {
|
|
54
|
+
// Validate required fields
|
|
55
|
+
if (!targetName)
|
|
56
|
+
throw new Error('CallSiteNode.createWithContext: targetName is required');
|
|
57
|
+
if (!context.file)
|
|
58
|
+
throw new Error('CallSiteNode.createWithContext: file is required');
|
|
59
|
+
if (location.line === undefined)
|
|
60
|
+
throw new Error('CallSiteNode.createWithContext: line is required');
|
|
61
|
+
if (location.column === undefined)
|
|
62
|
+
throw new Error('CallSiteNode.createWithContext: column is required');
|
|
63
|
+
if (options.discriminator === undefined)
|
|
64
|
+
throw new Error('CallSiteNode.createWithContext: discriminator is required');
|
|
65
|
+
// Compute semantic ID with discriminator
|
|
66
|
+
// Use 'CALL' as the type for cleaner IDs (matches spec)
|
|
67
|
+
const id = computeSemanticId('CALL', targetName, context, {
|
|
68
|
+
discriminator: options.discriminator
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
id,
|
|
72
|
+
type: this.TYPE,
|
|
73
|
+
name: targetName,
|
|
74
|
+
file: context.file,
|
|
75
|
+
line: location.line,
|
|
76
|
+
column: location.column,
|
|
27
77
|
parentScopeId: options.parentScopeId,
|
|
28
78
|
targetFunctionName: targetName
|
|
29
79
|
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CaseNode - contract for CASE node
|
|
3
|
+
*
|
|
4
|
+
* Represents a case clause in a switch statement.
|
|
5
|
+
*
|
|
6
|
+
* ID format (legacy): {file}:CASE:{value}:{line}:{counter}
|
|
7
|
+
* Semantic ID format: {file}->{scope_path}->CASE->{value}#N
|
|
8
|
+
*/
|
|
9
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
10
|
+
import { type ScopeContext, type Location } from '../SemanticId.js';
|
|
11
|
+
interface CaseNodeRecord extends BaseNodeRecord {
|
|
12
|
+
type: 'CASE';
|
|
13
|
+
column: number;
|
|
14
|
+
value: unknown;
|
|
15
|
+
isDefault: boolean;
|
|
16
|
+
fallsThrough: boolean;
|
|
17
|
+
isEmpty: boolean;
|
|
18
|
+
parentBranchId?: string;
|
|
19
|
+
}
|
|
20
|
+
interface CaseNodeOptions {
|
|
21
|
+
parentBranchId?: string;
|
|
22
|
+
counter?: number;
|
|
23
|
+
}
|
|
24
|
+
interface CaseContextOptions {
|
|
25
|
+
discriminator: number;
|
|
26
|
+
parentBranchId?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare class CaseNode {
|
|
29
|
+
static readonly TYPE: "CASE";
|
|
30
|
+
static readonly REQUIRED: readonly ["file", "line", "column"];
|
|
31
|
+
static readonly OPTIONAL: readonly ["value", "isDefault", "fallsThrough", "isEmpty", "parentBranchId"];
|
|
32
|
+
/**
|
|
33
|
+
* Create CASE node (legacy ID)
|
|
34
|
+
*/
|
|
35
|
+
static create(value: unknown, isDefault: boolean, fallsThrough: boolean, isEmpty: boolean, file: string, line: number, column: number, options?: CaseNodeOptions): CaseNodeRecord;
|
|
36
|
+
/**
|
|
37
|
+
* Create CASE node with semantic ID (NEW API)
|
|
38
|
+
*/
|
|
39
|
+
static createWithContext(value: unknown, isDefault: boolean, fallsThrough: boolean, isEmpty: boolean, context: ScopeContext, location: Partial<Location>, options: CaseContextOptions): CaseNodeRecord;
|
|
40
|
+
static validate(node: CaseNodeRecord): string[];
|
|
41
|
+
}
|
|
42
|
+
export type { CaseNodeRecord };
|
|
43
|
+
//# sourceMappingURL=CaseNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CaseNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/CaseNode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvF,UAAU,cAAe,SAAQ,cAAc;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,eAAe;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,kBAAkB;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,QAAQ;IACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IACvC,MAAM,CAAC,QAAQ,CAAC,QAAQ,sCAAuC;IAC/D,MAAM,CAAC,QAAQ,CAAC,QAAQ,+EAAgF;IAExG;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,cAAc;IAwBjB;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC3B,OAAO,EAAE,kBAAkB,GAC1B,cAAc;IA0BjB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE;CAUhD;AAED,YAAY,EAAE,cAAc,EAAE,CAAC"}
|