@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,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ScopeTracker - Track scope hierarchy during AST traversal
|
|
3
|
+
*
|
|
4
|
+
* Maintains the current scope path and provides counters for:
|
|
5
|
+
* - Counted scopes (if#0, try#1, etc.)
|
|
6
|
+
* - Item counters (CALL, LITERAL, etc.)
|
|
7
|
+
* - Sibling tracking (anonymous[0], anonymous[1], etc.)
|
|
8
|
+
*
|
|
9
|
+
* Used with SemanticId to generate stable identifiers.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { ScopeContext } from './SemanticId.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Entry in the scope stack
|
|
16
|
+
*/
|
|
17
|
+
export interface ScopeEntry {
|
|
18
|
+
name: string;
|
|
19
|
+
type: string;
|
|
20
|
+
counter?: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Result of entering a counted scope
|
|
25
|
+
*/
|
|
26
|
+
export interface CountedScopeResult {
|
|
27
|
+
name: string;
|
|
28
|
+
discriminator: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* ScopeTracker - Manages scope hierarchy and counters during AST traversal
|
|
33
|
+
*/
|
|
34
|
+
export class ScopeTracker {
|
|
35
|
+
/** Source file path */
|
|
36
|
+
readonly file: string;
|
|
37
|
+
|
|
38
|
+
/** Current scope stack */
|
|
39
|
+
private scopeStack: ScopeEntry[] = [];
|
|
40
|
+
|
|
41
|
+
/** Counters for various purposes (scoped by scope path) */
|
|
42
|
+
private counters: Map<string, number> = new Map();
|
|
43
|
+
|
|
44
|
+
constructor(file: string) {
|
|
45
|
+
this.file = file;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// === Scope Management ===
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Enter a named scope (function, class, etc.)
|
|
52
|
+
*/
|
|
53
|
+
enterScope(name: string, type: string): void {
|
|
54
|
+
this.scopeStack.push({ name, type });
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Enter a counted scope (if, try, for, etc.)
|
|
59
|
+
* Automatically assigns a discriminator.
|
|
60
|
+
*/
|
|
61
|
+
enterCountedScope(type: string): CountedScopeResult {
|
|
62
|
+
const key = this.counterKey(type);
|
|
63
|
+
const n = this.counters.get(key) || 0;
|
|
64
|
+
this.counters.set(key, n + 1);
|
|
65
|
+
|
|
66
|
+
const name = `${type}#${n}`;
|
|
67
|
+
this.scopeStack.push({ name, type, counter: n });
|
|
68
|
+
return { name, discriminator: n };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Exit the current scope
|
|
73
|
+
*/
|
|
74
|
+
exitScope(): void {
|
|
75
|
+
this.scopeStack.pop();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// === ID Generation ===
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Get current scope context for semantic ID generation
|
|
82
|
+
*/
|
|
83
|
+
getContext(): ScopeContext {
|
|
84
|
+
return {
|
|
85
|
+
file: this.file,
|
|
86
|
+
scopePath: this.scopeStack.map(s => s.name)
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Get scope path as string (for display/debugging)
|
|
92
|
+
*/
|
|
93
|
+
getScopePath(): string {
|
|
94
|
+
if (this.scopeStack.length === 0) return 'global';
|
|
95
|
+
return this.scopeStack.map(s => s.name).join('->');
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Get the innermost enclosing scope of a specific type.
|
|
100
|
+
* Searches from innermost to outermost.
|
|
101
|
+
*
|
|
102
|
+
* @param scopeType - Type to search for ('CLASS', 'FUNCTION', etc.)
|
|
103
|
+
* @returns The scope entry name if found, undefined otherwise
|
|
104
|
+
*/
|
|
105
|
+
getEnclosingScope(scopeType: string): string | undefined {
|
|
106
|
+
// Search from end (innermost) to start (outermost)
|
|
107
|
+
for (let i = this.scopeStack.length - 1; i >= 0; i--) {
|
|
108
|
+
if (this.scopeStack[i].type === scopeType) {
|
|
109
|
+
return this.scopeStack[i].name;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// === Counter Management ===
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Get next counter for item type within current scope.
|
|
119
|
+
* Used for CALL, LITERAL, etc. that need #N discriminators.
|
|
120
|
+
*/
|
|
121
|
+
getItemCounter(itemType: string): number {
|
|
122
|
+
const key = this.counterKey(itemType);
|
|
123
|
+
const n = this.counters.get(key) || 0;
|
|
124
|
+
this.counters.set(key, n + 1);
|
|
125
|
+
return n;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Get current count without incrementing.
|
|
130
|
+
* Used to check for collisions.
|
|
131
|
+
*/
|
|
132
|
+
peekItemCounter(itemType: string): number {
|
|
133
|
+
return this.counters.get(this.counterKey(itemType)) || 0;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// === Sibling Tracking ===
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Track siblings by name within current scope.
|
|
140
|
+
* Used for anonymous functions: anonymous[0], anonymous[1]
|
|
141
|
+
*/
|
|
142
|
+
getSiblingIndex(name: string): number {
|
|
143
|
+
const key = `${this.getScopePath()}:sibling:${name}`;
|
|
144
|
+
const n = this.counters.get(key) || 0;
|
|
145
|
+
this.counters.set(key, n + 1);
|
|
146
|
+
return n;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// === Private ===
|
|
150
|
+
|
|
151
|
+
private counterKey(itemType: string): string {
|
|
152
|
+
return `${this.getScopePath()}:${itemType}`;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
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
|
+
/**
|
|
20
|
+
* Location in source file
|
|
21
|
+
*/
|
|
22
|
+
export interface Location {
|
|
23
|
+
line: number;
|
|
24
|
+
column: number;
|
|
25
|
+
endLine?: number;
|
|
26
|
+
endColumn?: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Scope context for semantic ID generation
|
|
31
|
+
*/
|
|
32
|
+
export interface ScopeContext {
|
|
33
|
+
/** Source file path */
|
|
34
|
+
file: string;
|
|
35
|
+
/** Array of scope names, e.g. ['MyClass', 'myMethod', 'if#1'] */
|
|
36
|
+
scopePath: string[];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Options for semantic ID generation
|
|
41
|
+
*/
|
|
42
|
+
export interface SemanticIdOptions {
|
|
43
|
+
/** Counter for disambiguation (#N) */
|
|
44
|
+
discriminator?: number;
|
|
45
|
+
/** Context string for special cases ([context]) */
|
|
46
|
+
context?: string;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Parsed semantic ID components
|
|
51
|
+
*/
|
|
52
|
+
export interface ParsedSemanticId {
|
|
53
|
+
file: string;
|
|
54
|
+
scopePath: string[];
|
|
55
|
+
type: string;
|
|
56
|
+
name: string;
|
|
57
|
+
discriminator?: number;
|
|
58
|
+
context?: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Item with name and location for discriminator computation
|
|
63
|
+
*/
|
|
64
|
+
export interface LocatedItem {
|
|
65
|
+
name: string;
|
|
66
|
+
location: Location;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Compute semantic ID for any node type.
|
|
71
|
+
*
|
|
72
|
+
* @param type - Node type (FUNCTION, CALL, VARIABLE, etc.)
|
|
73
|
+
* @param name - Node name
|
|
74
|
+
* @param context - Scope context from ScopeTracker
|
|
75
|
+
* @param options - Optional discriminator or context
|
|
76
|
+
* @returns Semantic ID string
|
|
77
|
+
*/
|
|
78
|
+
export function computeSemanticId(
|
|
79
|
+
type: string,
|
|
80
|
+
name: string,
|
|
81
|
+
context: ScopeContext,
|
|
82
|
+
options?: SemanticIdOptions
|
|
83
|
+
): string {
|
|
84
|
+
const { file, scopePath } = context;
|
|
85
|
+
const scope = scopePath.length > 0 ? scopePath.join('->') : 'global';
|
|
86
|
+
|
|
87
|
+
let id = `${file}->${scope}->${type}->${name}`;
|
|
88
|
+
|
|
89
|
+
if (options?.discriminator !== undefined) {
|
|
90
|
+
id += `#${options.discriminator}`;
|
|
91
|
+
} else if (options?.context) {
|
|
92
|
+
id += `[${options.context}]`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return id;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Parse semantic ID back to components.
|
|
100
|
+
*
|
|
101
|
+
* @param id - Semantic ID to parse
|
|
102
|
+
* @returns Parsed components or null if invalid
|
|
103
|
+
*/
|
|
104
|
+
export function parseSemanticId(id: string): ParsedSemanticId | null {
|
|
105
|
+
// Handle singletons
|
|
106
|
+
if (id.startsWith('net:stdio') || id.startsWith('net:request')) {
|
|
107
|
+
const [prefix, name] = id.split('->');
|
|
108
|
+
return {
|
|
109
|
+
file: '',
|
|
110
|
+
scopePath: [prefix],
|
|
111
|
+
type: 'SINGLETON',
|
|
112
|
+
name,
|
|
113
|
+
discriminator: undefined
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (id.startsWith('EXTERNAL_MODULE')) {
|
|
118
|
+
const [, name] = id.split('->');
|
|
119
|
+
return {
|
|
120
|
+
file: '',
|
|
121
|
+
scopePath: [],
|
|
122
|
+
type: 'EXTERNAL_MODULE',
|
|
123
|
+
name,
|
|
124
|
+
discriminator: undefined
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const parts = id.split('->');
|
|
129
|
+
if (parts.length < 4) return null;
|
|
130
|
+
|
|
131
|
+
const file = parts[0];
|
|
132
|
+
const type = parts[parts.length - 2];
|
|
133
|
+
let name = parts[parts.length - 1];
|
|
134
|
+
const scopePath = parts.slice(1, -2);
|
|
135
|
+
|
|
136
|
+
// Parse discriminator or context
|
|
137
|
+
let discriminator: number | undefined;
|
|
138
|
+
let context: string | undefined;
|
|
139
|
+
|
|
140
|
+
const hashMatch = name.match(/^(.+)#(\d+)$/);
|
|
141
|
+
if (hashMatch) {
|
|
142
|
+
name = hashMatch[1];
|
|
143
|
+
discriminator = parseInt(hashMatch[2], 10);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const bracketMatch = name.match(/^(.+)\[(.+)\]$/);
|
|
147
|
+
if (bracketMatch) {
|
|
148
|
+
name = bracketMatch[1];
|
|
149
|
+
context = bracketMatch[2];
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return { file, scopePath, type, name, discriminator, context };
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Compute discriminator for items with same name in same scope.
|
|
157
|
+
* Uses line/column for stable ordering.
|
|
158
|
+
*
|
|
159
|
+
* @param items - All items in scope
|
|
160
|
+
* @param targetName - Name to find discriminator for
|
|
161
|
+
* @param targetLocation - Location of target item
|
|
162
|
+
* @returns Discriminator (0-based index among same-named items)
|
|
163
|
+
*/
|
|
164
|
+
export function computeDiscriminator(
|
|
165
|
+
items: LocatedItem[],
|
|
166
|
+
targetName: string,
|
|
167
|
+
targetLocation: Location
|
|
168
|
+
): number {
|
|
169
|
+
// Filter items with same name
|
|
170
|
+
const sameNameItems = items.filter(item => item.name === targetName);
|
|
171
|
+
|
|
172
|
+
if (sameNameItems.length <= 1) {
|
|
173
|
+
return 0;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Sort by line, then by column for stable ordering
|
|
177
|
+
sameNameItems.sort((a, b) => {
|
|
178
|
+
if (a.location.line !== b.location.line) {
|
|
179
|
+
return a.location.line - b.location.line;
|
|
180
|
+
}
|
|
181
|
+
return a.location.column - b.location.column;
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// Find index of target
|
|
185
|
+
const index = sameNameItems.findIndex(
|
|
186
|
+
item =>
|
|
187
|
+
item.location.line === targetLocation.line &&
|
|
188
|
+
item.location.column === targetLocation.column
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
return index >= 0 ? index : 0;
|
|
192
|
+
}
|
|
@@ -170,9 +170,10 @@ export class VersionManager {
|
|
|
170
170
|
return `${type}:${name}:${file}:${line || 0}`;
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
// Для MODULE -
|
|
173
|
+
// Для MODULE - use semantic ID format with name (relative path)
|
|
174
174
|
if (type === 'MODULE') {
|
|
175
|
-
|
|
175
|
+
// name stores the relative path for MODULE nodes
|
|
176
|
+
return `${name}->global->MODULE->module`;
|
|
176
177
|
}
|
|
177
178
|
|
|
178
179
|
// Для SERVICE - используем имя или file
|
|
@@ -0,0 +1,89 @@
|
|
|
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
|
+
|
|
16
|
+
import { ExpressionNode, type ExpressionNodeRecord, type ExpressionNodeOptions } from './ExpressionNode.js';
|
|
17
|
+
|
|
18
|
+
interface ArgumentExpressionNodeRecord extends ExpressionNodeRecord {
|
|
19
|
+
parentCallId: string;
|
|
20
|
+
argIndex: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface ArgumentExpressionNodeOptions extends ExpressionNodeOptions {
|
|
24
|
+
parentCallId: string;
|
|
25
|
+
argIndex: number;
|
|
26
|
+
counter?: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export class ArgumentExpressionNode {
|
|
30
|
+
// Inherit TYPE from ExpressionNode
|
|
31
|
+
static readonly TYPE = ExpressionNode.TYPE;
|
|
32
|
+
static readonly REQUIRED: readonly string[] = [...ExpressionNode.REQUIRED, 'parentCallId', 'argIndex'];
|
|
33
|
+
static readonly OPTIONAL: readonly string[] = [...ExpressionNode.OPTIONAL, 'counter'];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Create EXPRESSION node with argument context
|
|
37
|
+
*
|
|
38
|
+
* @param expressionType - Type of expression (BinaryExpression, LogicalExpression, etc.)
|
|
39
|
+
* @param file - File path
|
|
40
|
+
* @param line - Line number
|
|
41
|
+
* @param column - Column position
|
|
42
|
+
* @param options - Required: parentCallId, argIndex; Optional: expression properties, counter
|
|
43
|
+
* @returns ArgumentExpressionNodeRecord
|
|
44
|
+
*/
|
|
45
|
+
static create(
|
|
46
|
+
expressionType: string,
|
|
47
|
+
file: string,
|
|
48
|
+
line: number,
|
|
49
|
+
column: number,
|
|
50
|
+
options: ArgumentExpressionNodeOptions
|
|
51
|
+
): ArgumentExpressionNodeRecord {
|
|
52
|
+
if (!options.parentCallId) {
|
|
53
|
+
throw new Error('ArgumentExpressionNode.create: parentCallId is required');
|
|
54
|
+
}
|
|
55
|
+
if (options.argIndex === undefined) {
|
|
56
|
+
throw new Error('ArgumentExpressionNode.create: argIndex is required');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Create base EXPRESSION node using parent class
|
|
60
|
+
const baseNode = ExpressionNode.create(expressionType, file, line, column, options);
|
|
61
|
+
|
|
62
|
+
// Override ID with counter suffix (since same location can have multiple expressions)
|
|
63
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
64
|
+
const id = `${file}:EXPRESSION:${expressionType}:${line}:${column}${counter}`;
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
...baseNode,
|
|
68
|
+
id,
|
|
69
|
+
parentCallId: options.parentCallId,
|
|
70
|
+
argIndex: options.argIndex
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
static validate(node: ArgumentExpressionNodeRecord): string[] {
|
|
75
|
+
const errors = ExpressionNode.validate(node);
|
|
76
|
+
|
|
77
|
+
if (!node.parentCallId) {
|
|
78
|
+
errors.push('Missing required field: parentCallId');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (node.argIndex === undefined) {
|
|
82
|
+
errors.push('Missing required field: argIndex');
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return errors;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export type { ArgumentExpressionNodeRecord, ArgumentExpressionNodeOptions };
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
|
|
8
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
9
|
+
|
|
10
|
+
interface ArrayLiteralNodeRecord extends BaseNodeRecord {
|
|
11
|
+
type: 'ARRAY_LITERAL';
|
|
12
|
+
column: number;
|
|
13
|
+
parentCallId?: string;
|
|
14
|
+
argIndex?: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface ArrayLiteralNodeOptions {
|
|
18
|
+
parentCallId?: string;
|
|
19
|
+
argIndex?: number;
|
|
20
|
+
counter?: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class ArrayLiteralNode {
|
|
24
|
+
static readonly TYPE = 'ARRAY_LITERAL' as const;
|
|
25
|
+
|
|
26
|
+
static readonly REQUIRED = ['file', 'line', 'column'] as const;
|
|
27
|
+
static readonly OPTIONAL = ['parentCallId', 'argIndex'] as const;
|
|
28
|
+
|
|
29
|
+
static create(
|
|
30
|
+
file: string,
|
|
31
|
+
line: number,
|
|
32
|
+
column: number,
|
|
33
|
+
options: ArrayLiteralNodeOptions = {}
|
|
34
|
+
): ArrayLiteralNodeRecord {
|
|
35
|
+
if (!file) throw new Error('ArrayLiteralNode.create: file is required');
|
|
36
|
+
if (line === undefined) throw new Error('ArrayLiteralNode.create: line is required');
|
|
37
|
+
if (column === undefined) throw new Error('ArrayLiteralNode.create: column is required');
|
|
38
|
+
|
|
39
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
40
|
+
const argSuffix = options.argIndex !== undefined ? `arg${options.argIndex}` : 'arr';
|
|
41
|
+
const id = `ARRAY_LITERAL#${argSuffix}#${file}#${line}:${column}${counter}`;
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
id,
|
|
45
|
+
type: this.TYPE,
|
|
46
|
+
name: `<array>`,
|
|
47
|
+
file,
|
|
48
|
+
line,
|
|
49
|
+
column,
|
|
50
|
+
parentCallId: options.parentCallId,
|
|
51
|
+
argIndex: options.argIndex
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static validate(node: ArrayLiteralNodeRecord): string[] {
|
|
56
|
+
const errors: string[] = [];
|
|
57
|
+
if (node.type !== this.TYPE) errors.push(`Expected type ${this.TYPE}`);
|
|
58
|
+
const nodeRecord = node as unknown as Record<string, unknown>;
|
|
59
|
+
for (const field of this.REQUIRED) {
|
|
60
|
+
if (nodeRecord[field] === undefined) errors.push(`Missing: ${field}`);
|
|
61
|
+
}
|
|
62
|
+
return errors;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type { ArrayLiteralNodeRecord, ArrayLiteralNodeOptions };
|
|
@@ -0,0 +1,113 @@
|
|
|
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
|
+
|
|
11
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
12
|
+
import { computeSemanticId, type ScopeContext, type Location } from '../SemanticId.js';
|
|
13
|
+
|
|
14
|
+
interface BranchNodeRecord extends BaseNodeRecord {
|
|
15
|
+
type: 'BRANCH';
|
|
16
|
+
column: number;
|
|
17
|
+
branchType: 'switch' | 'if' | 'ternary';
|
|
18
|
+
parentScopeId?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface BranchNodeOptions {
|
|
22
|
+
parentScopeId?: string;
|
|
23
|
+
counter?: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface BranchContextOptions {
|
|
27
|
+
discriminator: number;
|
|
28
|
+
parentScopeId?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export class BranchNode {
|
|
32
|
+
static readonly TYPE = 'BRANCH' as const;
|
|
33
|
+
static readonly REQUIRED = ['branchType', 'file', 'line', 'column'] as const;
|
|
34
|
+
static readonly OPTIONAL = ['parentScopeId'] as const;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Create BRANCH node (legacy ID)
|
|
38
|
+
*/
|
|
39
|
+
static create(
|
|
40
|
+
branchType: 'switch' | 'if' | 'ternary',
|
|
41
|
+
file: string,
|
|
42
|
+
line: number,
|
|
43
|
+
column: number,
|
|
44
|
+
options: BranchNodeOptions = {}
|
|
45
|
+
): BranchNodeRecord {
|
|
46
|
+
// Validation
|
|
47
|
+
if (!branchType) throw new Error('BranchNode.create: branchType is required');
|
|
48
|
+
if (!file) throw new Error('BranchNode.create: file is required');
|
|
49
|
+
if (line === undefined) throw new Error('BranchNode.create: line is required');
|
|
50
|
+
if (column === undefined) throw new Error('BranchNode.create: column is required');
|
|
51
|
+
|
|
52
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
53
|
+
const id = `${file}:BRANCH:${branchType}:${line}${counter}`;
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
id,
|
|
57
|
+
type: this.TYPE,
|
|
58
|
+
name: branchType,
|
|
59
|
+
file,
|
|
60
|
+
line,
|
|
61
|
+
column,
|
|
62
|
+
branchType,
|
|
63
|
+
parentScopeId: options.parentScopeId
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Create BRANCH node with semantic ID (NEW API)
|
|
69
|
+
*/
|
|
70
|
+
static createWithContext(
|
|
71
|
+
branchType: 'switch' | 'if' | 'ternary',
|
|
72
|
+
context: ScopeContext,
|
|
73
|
+
location: Partial<Location>,
|
|
74
|
+
options: BranchContextOptions
|
|
75
|
+
): BranchNodeRecord {
|
|
76
|
+
if (!branchType) throw new Error('BranchNode.createWithContext: branchType is required');
|
|
77
|
+
if (!context.file) throw new Error('BranchNode.createWithContext: file is required');
|
|
78
|
+
if (location.line === undefined) throw new Error('BranchNode.createWithContext: line is required');
|
|
79
|
+
if (location.column === undefined) throw new Error('BranchNode.createWithContext: column is required');
|
|
80
|
+
if (options.discriminator === undefined) throw new Error('BranchNode.createWithContext: discriminator is required');
|
|
81
|
+
|
|
82
|
+
const id = computeSemanticId('BRANCH', branchType, context, {
|
|
83
|
+
discriminator: options.discriminator
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
return {
|
|
87
|
+
id,
|
|
88
|
+
type: this.TYPE,
|
|
89
|
+
name: `${branchType}#${options.discriminator}`,
|
|
90
|
+
file: context.file,
|
|
91
|
+
line: location.line,
|
|
92
|
+
column: location.column,
|
|
93
|
+
branchType,
|
|
94
|
+
parentScopeId: options.parentScopeId
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
static validate(node: BranchNodeRecord): string[] {
|
|
99
|
+
const errors: string[] = [];
|
|
100
|
+
if (node.type !== this.TYPE) {
|
|
101
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
102
|
+
}
|
|
103
|
+
if (!node.branchType) {
|
|
104
|
+
errors.push('Missing required field: branchType');
|
|
105
|
+
}
|
|
106
|
+
if (!node.file) {
|
|
107
|
+
errors.push('Missing required field: file');
|
|
108
|
+
}
|
|
109
|
+
return errors;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export type { BranchNodeRecord };
|