@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
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
* - TSEnumDeclaration
|
|
8
8
|
*/
|
|
9
9
|
import { ASTVisitor } from './ASTVisitor.js';
|
|
10
|
+
import { computeSemanticId } from '../../../../core/SemanticId.js';
|
|
11
|
+
import { getLine, getColumn } from '../utils/location.js';
|
|
10
12
|
/**
|
|
11
13
|
* Extracts a string representation of a TypeScript type node
|
|
12
14
|
*/
|
|
13
|
-
function typeNodeToString(node) {
|
|
15
|
+
export function typeNodeToString(node) {
|
|
14
16
|
if (!node || typeof node !== 'object')
|
|
15
17
|
return 'unknown';
|
|
16
18
|
const typeNode = node;
|
|
@@ -77,19 +79,31 @@ function typeNodeToString(node) {
|
|
|
77
79
|
}
|
|
78
80
|
}
|
|
79
81
|
export class TypeScriptVisitor extends ASTVisitor {
|
|
80
|
-
|
|
82
|
+
scopeTracker;
|
|
83
|
+
/**
|
|
84
|
+
* @param module - Current module being analyzed
|
|
85
|
+
* @param collections - Must contain interfaces, typeAliases, enums arrays
|
|
86
|
+
* @param scopeTracker - Optional ScopeTracker for semantic ID generation
|
|
87
|
+
*/
|
|
88
|
+
constructor(module, collections, scopeTracker) {
|
|
81
89
|
super(module, collections);
|
|
90
|
+
this.scopeTracker = scopeTracker;
|
|
82
91
|
}
|
|
83
92
|
getHandlers() {
|
|
84
93
|
const { module } = this;
|
|
85
94
|
const { interfaces, typeAliases, enums } = this.collections;
|
|
95
|
+
const scopeTracker = this.scopeTracker;
|
|
86
96
|
return {
|
|
87
97
|
TSInterfaceDeclaration: (path) => {
|
|
88
98
|
const node = path.node;
|
|
89
99
|
if (!node.id)
|
|
90
100
|
return;
|
|
91
101
|
const interfaceName = node.id.name;
|
|
92
|
-
|
|
102
|
+
// Generate semantic ID if scopeTracker available
|
|
103
|
+
let interfaceSemanticId;
|
|
104
|
+
if (scopeTracker) {
|
|
105
|
+
interfaceSemanticId = computeSemanticId('INTERFACE', interfaceName, scopeTracker.getContext());
|
|
106
|
+
}
|
|
93
107
|
// Extract extends
|
|
94
108
|
const extendsNames = [];
|
|
95
109
|
if (node.extends && node.extends.length > 0) {
|
|
@@ -128,12 +142,12 @@ export class TypeScriptVisitor extends ASTVisitor {
|
|
|
128
142
|
}
|
|
129
143
|
}
|
|
130
144
|
interfaces.push({
|
|
131
|
-
|
|
145
|
+
semanticId: interfaceSemanticId,
|
|
132
146
|
type: 'INTERFACE',
|
|
133
147
|
name: interfaceName,
|
|
134
148
|
file: module.file,
|
|
135
|
-
line: node
|
|
136
|
-
column: node
|
|
149
|
+
line: getLine(node),
|
|
150
|
+
column: getColumn(node),
|
|
137
151
|
extends: extendsNames.length > 0 ? extendsNames : undefined,
|
|
138
152
|
properties
|
|
139
153
|
});
|
|
@@ -143,16 +157,20 @@ export class TypeScriptVisitor extends ASTVisitor {
|
|
|
143
157
|
if (!node.id)
|
|
144
158
|
return;
|
|
145
159
|
const typeName = node.id.name;
|
|
146
|
-
|
|
160
|
+
// Generate semantic ID if scopeTracker available
|
|
161
|
+
let typeSemanticId;
|
|
162
|
+
if (scopeTracker) {
|
|
163
|
+
typeSemanticId = computeSemanticId('TYPE', typeName, scopeTracker.getContext());
|
|
164
|
+
}
|
|
147
165
|
// Extract the type being aliased
|
|
148
166
|
const aliasOf = typeNodeToString(node.typeAnnotation);
|
|
149
167
|
typeAliases.push({
|
|
150
|
-
|
|
168
|
+
semanticId: typeSemanticId,
|
|
151
169
|
type: 'TYPE',
|
|
152
170
|
name: typeName,
|
|
153
171
|
file: module.file,
|
|
154
|
-
line: node
|
|
155
|
-
column: node
|
|
172
|
+
line: getLine(node),
|
|
173
|
+
column: getColumn(node),
|
|
156
174
|
aliasOf
|
|
157
175
|
});
|
|
158
176
|
},
|
|
@@ -161,7 +179,11 @@ export class TypeScriptVisitor extends ASTVisitor {
|
|
|
161
179
|
if (!node.id)
|
|
162
180
|
return;
|
|
163
181
|
const enumName = node.id.name;
|
|
164
|
-
|
|
182
|
+
// Generate semantic ID if scopeTracker available
|
|
183
|
+
let enumSemanticId;
|
|
184
|
+
if (scopeTracker) {
|
|
185
|
+
enumSemanticId = computeSemanticId('ENUM', enumName, scopeTracker.getContext());
|
|
186
|
+
}
|
|
165
187
|
// Extract members
|
|
166
188
|
const members = [];
|
|
167
189
|
if (node.members) {
|
|
@@ -185,12 +207,12 @@ export class TypeScriptVisitor extends ASTVisitor {
|
|
|
185
207
|
}
|
|
186
208
|
}
|
|
187
209
|
enums.push({
|
|
188
|
-
|
|
210
|
+
semanticId: enumSemanticId,
|
|
189
211
|
type: 'ENUM',
|
|
190
212
|
name: enumName,
|
|
191
213
|
file: module.file,
|
|
192
|
-
line: node
|
|
193
|
-
column: node
|
|
214
|
+
line: getLine(node),
|
|
215
|
+
column: getColumn(node),
|
|
194
216
|
isConst: node.const || false,
|
|
195
217
|
members
|
|
196
218
|
});
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { Node } from '@babel/types';
|
|
10
10
|
import { ASTVisitor, type VisitorModule, type VisitorCollections, type VisitorHandlers, type CounterRef } from './ASTVisitor.js';
|
|
11
|
+
import { ScopeTracker } from '../../../../core/ScopeTracker.js';
|
|
11
12
|
/**
|
|
12
13
|
* Variable info extracted from pattern
|
|
13
14
|
*/
|
|
@@ -21,6 +22,7 @@ export interface VariableInfo {
|
|
|
21
22
|
};
|
|
22
23
|
propertyPath?: string[];
|
|
23
24
|
arrayIndex?: number;
|
|
25
|
+
isRest?: boolean;
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
28
|
* Callback type for extracting variable names from patterns
|
|
@@ -29,17 +31,33 @@ export type ExtractVariableNamesCallback = (pattern: Node) => VariableInfo[];
|
|
|
29
31
|
/**
|
|
30
32
|
* Callback type for tracking variable assignments
|
|
31
33
|
*/
|
|
32
|
-
export type TrackVariableAssignmentCallback = (initNode: Node, variableId: string, variableName: string, module: VisitorModule, line: number, literals: unknown[], variableAssignments: unknown[], literalCounterRef: CounterRef) => void;
|
|
34
|
+
export type TrackVariableAssignmentCallback = (initNode: Node, variableId: string, variableName: string, module: VisitorModule, line: number, literals: unknown[], variableAssignments: unknown[], literalCounterRef: CounterRef, objectLiterals: unknown[], objectProperties: unknown[], objectLiteralCounterRef: CounterRef) => void;
|
|
33
35
|
export declare class VariableVisitor extends ASTVisitor {
|
|
34
36
|
private extractVariableNamesFromPattern;
|
|
35
37
|
private trackVariableAssignment;
|
|
38
|
+
private scopeTracker?;
|
|
39
|
+
/**
|
|
40
|
+
* Recursively unwrap AwaitExpression to get the underlying expression.
|
|
41
|
+
* await await fetch() -> fetch() (REG-223)
|
|
42
|
+
*/
|
|
43
|
+
private unwrapAwaitExpression;
|
|
44
|
+
/**
|
|
45
|
+
* Check if expression is CallExpression or AwaitExpression wrapping a call. (REG-223)
|
|
46
|
+
*/
|
|
47
|
+
private isCallOrAwaitExpression;
|
|
48
|
+
/**
|
|
49
|
+
* Extract call site information from CallExpression. (REG-223)
|
|
50
|
+
* Returns null if not a valid CallExpression.
|
|
51
|
+
*/
|
|
52
|
+
private extractCallInfo;
|
|
36
53
|
/**
|
|
37
54
|
* @param module - Current module being analyzed
|
|
38
55
|
* @param collections - Must contain arrays and counter refs
|
|
39
56
|
* @param extractVariableNamesFromPattern - Helper for destructuring
|
|
40
57
|
* @param trackVariableAssignment - Helper for data flow tracking
|
|
58
|
+
* @param scopeTracker - Optional ScopeTracker for semantic ID generation
|
|
41
59
|
*/
|
|
42
|
-
constructor(module: VisitorModule, collections: VisitorCollections, extractVariableNamesFromPattern: ExtractVariableNamesCallback, trackVariableAssignment: TrackVariableAssignmentCallback);
|
|
60
|
+
constructor(module: VisitorModule, collections: VisitorCollections, extractVariableNamesFromPattern: ExtractVariableNamesCallback, trackVariableAssignment: TrackVariableAssignmentCallback, scopeTracker?: ScopeTracker);
|
|
43
61
|
getHandlers(): VisitorHandlers;
|
|
44
62
|
}
|
|
45
63
|
//# sourceMappingURL=VariableVisitor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VariableVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/VariableVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAKV,IAAI,EACL,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"VariableVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/VariableVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAKV,IAAI,EACL,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEjI,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIhE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACjD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG,CAC5C,QAAQ,EAAE,IAAI,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,mBAAmB,EAAE,OAAO,EAAE,EAC9B,iBAAiB,EAAE,UAAU,EAC7B,cAAc,EAAE,OAAO,EAAE,EACzB,gBAAgB,EAAE,OAAO,EAAE,EAC3B,uBAAuB,EAAE,UAAU,KAChC,IAAI,CAAC;AA8DV,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,+BAA+B,CAA+B;IACtE,OAAO,CAAC,uBAAuB,CAAkC;IACjE,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAsCvB;;;;;;OAMG;gBAED,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,kBAAkB,EAC/B,+BAA+B,EAAE,4BAA4B,EAC7D,uBAAuB,EAAE,+BAA+B,EACxD,YAAY,CAAC,EAAE,YAAY;IAQ7B,WAAW,IAAI,eAAe;CAsT/B"}
|
|
@@ -8,19 +8,78 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { ASTVisitor } from './ASTVisitor.js';
|
|
10
10
|
import { ExpressionEvaluator } from '../ExpressionEvaluator.js';
|
|
11
|
+
import { IdGenerator } from '../IdGenerator.js';
|
|
11
12
|
export class VariableVisitor extends ASTVisitor {
|
|
12
13
|
extractVariableNamesFromPattern;
|
|
13
14
|
trackVariableAssignment;
|
|
15
|
+
scopeTracker;
|
|
16
|
+
/**
|
|
17
|
+
* Recursively unwrap AwaitExpression to get the underlying expression.
|
|
18
|
+
* await await fetch() -> fetch() (REG-223)
|
|
19
|
+
*/
|
|
20
|
+
unwrapAwaitExpression(node) {
|
|
21
|
+
if (node.type === 'AwaitExpression' && node.argument) {
|
|
22
|
+
return this.unwrapAwaitExpression(node.argument);
|
|
23
|
+
}
|
|
24
|
+
return node;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if expression is CallExpression or AwaitExpression wrapping a call. (REG-223)
|
|
28
|
+
*/
|
|
29
|
+
isCallOrAwaitExpression(node) {
|
|
30
|
+
const unwrapped = this.unwrapAwaitExpression(node);
|
|
31
|
+
return unwrapped.type === 'CallExpression';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Extract call site information from CallExpression. (REG-223)
|
|
35
|
+
* Returns null if not a valid CallExpression.
|
|
36
|
+
*/
|
|
37
|
+
extractCallInfo(node) {
|
|
38
|
+
if (node.type !== 'CallExpression') {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
const callExpr = node;
|
|
42
|
+
const callee = callExpr.callee;
|
|
43
|
+
let name;
|
|
44
|
+
let isMethodCall = false;
|
|
45
|
+
// Direct call: fetchUser()
|
|
46
|
+
if (callee.type === 'Identifier') {
|
|
47
|
+
name = callee.name;
|
|
48
|
+
}
|
|
49
|
+
// Method call: obj.fetchUser() or arr.map()
|
|
50
|
+
else if (callee.type === 'MemberExpression') {
|
|
51
|
+
isMethodCall = true;
|
|
52
|
+
const memberExpr = callee;
|
|
53
|
+
const objectName = memberExpr.object.type === 'Identifier'
|
|
54
|
+
? memberExpr.object.name
|
|
55
|
+
: (memberExpr.object.type === 'ThisExpression' ? 'this' : 'unknown');
|
|
56
|
+
const methodName = memberExpr.property.type === 'Identifier'
|
|
57
|
+
? memberExpr.property.name
|
|
58
|
+
: 'unknown';
|
|
59
|
+
name = `${objectName}.${methodName}`;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
line: callExpr.loc?.start.line ?? 0,
|
|
66
|
+
column: callExpr.loc?.start.column ?? 0,
|
|
67
|
+
name,
|
|
68
|
+
isMethodCall
|
|
69
|
+
};
|
|
70
|
+
}
|
|
14
71
|
/**
|
|
15
72
|
* @param module - Current module being analyzed
|
|
16
73
|
* @param collections - Must contain arrays and counter refs
|
|
17
74
|
* @param extractVariableNamesFromPattern - Helper for destructuring
|
|
18
75
|
* @param trackVariableAssignment - Helper for data flow tracking
|
|
76
|
+
* @param scopeTracker - Optional ScopeTracker for semantic ID generation
|
|
19
77
|
*/
|
|
20
|
-
constructor(module, collections, extractVariableNamesFromPattern, trackVariableAssignment) {
|
|
78
|
+
constructor(module, collections, extractVariableNamesFromPattern, trackVariableAssignment, scopeTracker) {
|
|
21
79
|
super(module, collections);
|
|
22
80
|
this.extractVariableNamesFromPattern = extractVariableNamesFromPattern;
|
|
23
81
|
this.trackVariableAssignment = trackVariableAssignment;
|
|
82
|
+
this.scopeTracker = scopeTracker;
|
|
24
83
|
}
|
|
25
84
|
getHandlers() {
|
|
26
85
|
const { module } = this;
|
|
@@ -28,10 +87,19 @@ export class VariableVisitor extends ASTVisitor {
|
|
|
28
87
|
const classInstantiations = this.collections.classInstantiations ?? [];
|
|
29
88
|
const literals = (this.collections.literals ?? []);
|
|
30
89
|
const variableAssignments = this.collections.variableAssignments ?? [];
|
|
90
|
+
const scopes = (this.collections.scopes ?? []);
|
|
31
91
|
const varDeclCounterRef = (this.collections.varDeclCounterRef ?? { value: 0 });
|
|
32
92
|
const literalCounterRef = (this.collections.literalCounterRef ?? { value: 0 });
|
|
93
|
+
const scopeCounterRef = (this.collections.scopeCounterRef ?? { value: 0 });
|
|
94
|
+
// Object literal tracking collections (REG-328)
|
|
95
|
+
const objectLiterals = (this.collections.objectLiterals ?? []);
|
|
96
|
+
const objectProperties = (this.collections.objectProperties ?? []);
|
|
97
|
+
const objectLiteralCounterRef = (this.collections.objectLiteralCounterRef ?? { value: 0 });
|
|
98
|
+
const scopeTracker = this.scopeTracker;
|
|
33
99
|
const extractVariableNamesFromPattern = this.extractVariableNamesFromPattern;
|
|
34
100
|
const trackVariableAssignment = this.trackVariableAssignment;
|
|
101
|
+
// Track which loops we've already created scopes for
|
|
102
|
+
const processedLoops = new Set();
|
|
35
103
|
return {
|
|
36
104
|
VariableDeclaration: (path) => {
|
|
37
105
|
// Only module-level variables
|
|
@@ -39,6 +107,35 @@ export class VariableVisitor extends ASTVisitor {
|
|
|
39
107
|
if (!functionParent) {
|
|
40
108
|
const varNode = path.node;
|
|
41
109
|
const isConst = varNode.kind === 'const';
|
|
110
|
+
// Check if this is a loop variable (for...of or for...in)
|
|
111
|
+
const parent = path.parent;
|
|
112
|
+
const isLoopVariable = (parent.type === 'ForOfStatement' || parent.type === 'ForInStatement')
|
|
113
|
+
&& parent.left === varNode;
|
|
114
|
+
// If this is a loop variable, create the loop scope first (if not already created)
|
|
115
|
+
if (isLoopVariable && !processedLoops.has(parent)) {
|
|
116
|
+
processedLoops.add(parent);
|
|
117
|
+
const loopNode = parent;
|
|
118
|
+
const line = loopNode.loc?.start.line ?? 0;
|
|
119
|
+
const scopeType = loopNode.type === 'ForOfStatement' ? 'for-of-loop' : 'for-in-loop';
|
|
120
|
+
const trackerType = loopNode.type === 'ForOfStatement' ? 'for-of' : 'for-in';
|
|
121
|
+
const scopeId = `SCOPE#${scopeType}#${module.file}#${line}:${scopeCounterRef.value++}`;
|
|
122
|
+
// Enter scope in tracker BEFORE generating semantic ID
|
|
123
|
+
if (scopeTracker) {
|
|
124
|
+
scopeTracker.enterCountedScope(trackerType);
|
|
125
|
+
}
|
|
126
|
+
const semanticId = scopeTracker
|
|
127
|
+
? scopeTracker.getContext().scopePath.join('->')
|
|
128
|
+
: scopeId;
|
|
129
|
+
scopes.push({
|
|
130
|
+
id: scopeId,
|
|
131
|
+
type: 'SCOPE',
|
|
132
|
+
scopeType,
|
|
133
|
+
semanticId,
|
|
134
|
+
file: module.file,
|
|
135
|
+
line,
|
|
136
|
+
parentScopeId: module.id
|
|
137
|
+
});
|
|
138
|
+
}
|
|
42
139
|
varNode.declarations.forEach((declarator) => {
|
|
43
140
|
// Extract all variable names from the pattern (handles destructuring)
|
|
44
141
|
const variables = extractVariableNamesFromPattern(declarator.id);
|
|
@@ -46,12 +143,13 @@ export class VariableVisitor extends ASTVisitor {
|
|
|
46
143
|
const literalValue = ExpressionEvaluator.extractLiteralValue(declarator.init);
|
|
47
144
|
const isLiteral = literalValue !== null;
|
|
48
145
|
const isNewExpression = declarator.init && declarator.init.type === 'NewExpression';
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
const shouldBeConstant = isConst && (isLiteral || isNewExpression);
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
146
|
+
// Loop variables with const should be CONSTANT (they can't be reassigned in loop body)
|
|
147
|
+
// Regular variables with const are CONSTANT only if initialized with literal or new expression
|
|
148
|
+
const shouldBeConstant = isConst && (isLoopVariable || isLiteral || isNewExpression);
|
|
149
|
+
const nodeType = shouldBeConstant ? 'CONSTANT' : 'VARIABLE';
|
|
150
|
+
// Generate ID using centralized IdGenerator
|
|
151
|
+
const idGenerator = new IdGenerator(scopeTracker);
|
|
152
|
+
const varId = idGenerator.generate(nodeType, varInfo.name, module.file, varInfo.loc.start.line, varInfo.loc.start.column, varDeclCounterRef);
|
|
55
153
|
if (shouldBeConstant) {
|
|
56
154
|
// CONSTANT node
|
|
57
155
|
const constantData = {
|
|
@@ -92,53 +190,153 @@ export class VariableVisitor extends ASTVisitor {
|
|
|
92
190
|
});
|
|
93
191
|
}
|
|
94
192
|
// Track assignment for data flow analysis
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
expressionPath = `${initName}.${varInfo.propertyPath.join('.')}`;
|
|
105
|
-
}
|
|
106
|
-
else if (varInfo.arrayIndex !== undefined) {
|
|
107
|
-
expressionPath = `${initName}[${varInfo.arrayIndex}]`;
|
|
108
|
-
}
|
|
109
|
-
const expressionId = `EXPRESSION#${expressionPath}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}`;
|
|
110
|
-
// Create EXPRESSION node representing the property access
|
|
111
|
-
literals.push({
|
|
112
|
-
id: expressionId,
|
|
113
|
-
type: 'EXPRESSION',
|
|
114
|
-
expressionType: varInfo.propertyPath ? 'MemberExpression' : 'ArrayAccess',
|
|
115
|
-
path: expressionPath,
|
|
116
|
-
baseName: initName,
|
|
117
|
-
propertyPath: varInfo.propertyPath || null,
|
|
118
|
-
arrayIndex: varInfo.arrayIndex,
|
|
119
|
-
file: module.file,
|
|
120
|
-
line: varInfo.loc.start.line
|
|
121
|
-
});
|
|
122
|
-
// Create ASSIGNED_FROM edge: VARIABLE -> EXPRESSION
|
|
193
|
+
// For loop variables, the "init" is the right side of for...of/for...in
|
|
194
|
+
const initExpression = isLoopVariable
|
|
195
|
+
? parent.right
|
|
196
|
+
: declarator.init;
|
|
197
|
+
if (initExpression) {
|
|
198
|
+
// For loop variables, create DERIVES_FROM edges instead of ASSIGNED_FROM
|
|
199
|
+
// Loop variables derive their values from the collection (semantic difference)
|
|
200
|
+
if (isLoopVariable && initExpression.type === 'Identifier') {
|
|
201
|
+
const sourceName = initExpression.name;
|
|
123
202
|
variableAssignments.push({
|
|
124
203
|
variableId: varId,
|
|
125
|
-
|
|
126
|
-
|
|
204
|
+
sourceType: 'DERIVES_FROM_VARIABLE',
|
|
205
|
+
sourceName,
|
|
206
|
+
file: module.file,
|
|
207
|
+
line: varInfo.loc.start.line
|
|
127
208
|
});
|
|
128
|
-
|
|
129
|
-
|
|
209
|
+
}
|
|
210
|
+
// Handle destructuring - create EXPRESSION for property path
|
|
211
|
+
else if (varInfo.propertyPath || varInfo.arrayIndex !== undefined || varInfo.isRest) {
|
|
212
|
+
// Phase 1: Simple Identifier init expressions (REG-201)
|
|
213
|
+
if (initExpression.type === 'Identifier') {
|
|
214
|
+
const sourceBaseName = initExpression.name;
|
|
215
|
+
const expressionLine = varInfo.loc.start.line;
|
|
216
|
+
// Handle rest elements specially - create edge to whole source
|
|
217
|
+
if (varInfo.isRest) {
|
|
218
|
+
variableAssignments.push({
|
|
219
|
+
variableId: varId,
|
|
220
|
+
sourceType: 'VARIABLE',
|
|
221
|
+
sourceName: sourceBaseName,
|
|
222
|
+
line: expressionLine
|
|
223
|
+
});
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const expressionColumn = varInfo.loc.start.column;
|
|
227
|
+
// Build property path string
|
|
228
|
+
let fullPath = sourceBaseName;
|
|
229
|
+
if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
|
|
230
|
+
fullPath = `${sourceBaseName}.${varInfo.propertyPath.join('.')}`;
|
|
231
|
+
}
|
|
232
|
+
// Generate expression ID (matches GraphBuilder expectations)
|
|
233
|
+
const expressionId = `${module.file}:EXPRESSION:MemberExpression:${expressionLine}:${expressionColumn}`;
|
|
234
|
+
// Determine property for display
|
|
235
|
+
let property;
|
|
236
|
+
if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
|
|
237
|
+
property = varInfo.propertyPath[varInfo.propertyPath.length - 1];
|
|
238
|
+
}
|
|
239
|
+
else if (varInfo.arrayIndex !== undefined) {
|
|
240
|
+
property = String(varInfo.arrayIndex);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
property = '';
|
|
244
|
+
}
|
|
245
|
+
// Push assignment with full metadata for GraphBuilder (REG-201)
|
|
246
|
+
// GraphBuilder will create the EXPRESSION node from this metadata
|
|
247
|
+
variableAssignments.push({
|
|
248
|
+
variableId: varId,
|
|
249
|
+
sourceId: expressionId,
|
|
250
|
+
sourceType: 'EXPRESSION',
|
|
251
|
+
expressionType: 'MemberExpression',
|
|
252
|
+
object: sourceBaseName,
|
|
253
|
+
property: property,
|
|
254
|
+
computed: varInfo.arrayIndex !== undefined,
|
|
255
|
+
path: fullPath,
|
|
256
|
+
objectSourceName: sourceBaseName, // Use objectSourceName for DERIVES_FROM edge creation
|
|
257
|
+
propertyPath: varInfo.propertyPath || undefined,
|
|
258
|
+
arrayIndex: varInfo.arrayIndex,
|
|
259
|
+
file: module.file,
|
|
260
|
+
line: expressionLine,
|
|
261
|
+
column: expressionColumn
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
// Phase 2: CallExpression or AwaitExpression (REG-223)
|
|
265
|
+
else if (this.isCallOrAwaitExpression(initExpression)) {
|
|
266
|
+
const unwrapped = this.unwrapAwaitExpression(initExpression);
|
|
267
|
+
const callInfo = this.extractCallInfo(unwrapped);
|
|
268
|
+
if (!callInfo) {
|
|
269
|
+
// Unsupported call pattern (computed callee, etc.)
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
const callRepresentation = `${callInfo.name}()`;
|
|
273
|
+
const expressionLine = varInfo.loc.start.line;
|
|
274
|
+
const expressionColumn = varInfo.loc.start.column;
|
|
275
|
+
// Handle rest elements - create direct CALL_SITE assignment
|
|
276
|
+
if (varInfo.isRest) {
|
|
277
|
+
variableAssignments.push({
|
|
278
|
+
variableId: varId,
|
|
279
|
+
sourceType: 'CALL_SITE',
|
|
280
|
+
callName: callInfo.name,
|
|
281
|
+
callLine: callInfo.line,
|
|
282
|
+
callColumn: callInfo.column,
|
|
283
|
+
callSourceLine: callInfo.line,
|
|
284
|
+
callSourceColumn: callInfo.column,
|
|
285
|
+
callSourceFile: module.file,
|
|
286
|
+
callSourceName: callInfo.name,
|
|
287
|
+
line: expressionLine
|
|
288
|
+
});
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// Generate expression ID (matches GraphBuilder expectations)
|
|
292
|
+
const expressionId = `${module.file}:EXPRESSION:MemberExpression:${expressionLine}:${expressionColumn}`;
|
|
293
|
+
// Determine property for display
|
|
294
|
+
let property;
|
|
295
|
+
if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
|
|
296
|
+
property = varInfo.propertyPath[varInfo.propertyPath.length - 1];
|
|
297
|
+
}
|
|
298
|
+
else if (varInfo.arrayIndex !== undefined) {
|
|
299
|
+
property = String(varInfo.arrayIndex);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
property = '';
|
|
303
|
+
}
|
|
304
|
+
// Build property path string: "fetchUser().data" or "fetchUser().user.name"
|
|
305
|
+
let fullPath = callRepresentation;
|
|
306
|
+
if (varInfo.propertyPath && varInfo.propertyPath.length > 0) {
|
|
307
|
+
fullPath = `${callRepresentation}.${varInfo.propertyPath.join('.')}`;
|
|
308
|
+
}
|
|
309
|
+
// Push assignment with call source metadata for GraphBuilder (REG-223)
|
|
130
310
|
variableAssignments.push({
|
|
131
|
-
variableId:
|
|
132
|
-
sourceId:
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
311
|
+
variableId: varId,
|
|
312
|
+
sourceId: expressionId,
|
|
313
|
+
sourceType: 'EXPRESSION',
|
|
314
|
+
expressionType: 'MemberExpression',
|
|
315
|
+
object: callRepresentation, // "fetchUser()" - display name
|
|
316
|
+
property: property,
|
|
317
|
+
computed: varInfo.arrayIndex !== undefined,
|
|
318
|
+
path: fullPath,
|
|
319
|
+
propertyPath: varInfo.propertyPath || undefined,
|
|
320
|
+
arrayIndex: varInfo.arrayIndex,
|
|
321
|
+
// Call source for DERIVES_FROM lookup (REG-223)
|
|
322
|
+
callSourceLine: callInfo.line,
|
|
323
|
+
callSourceColumn: callInfo.column,
|
|
324
|
+
callSourceFile: module.file,
|
|
325
|
+
callSourceName: callInfo.name,
|
|
326
|
+
sourceMetadata: {
|
|
327
|
+
sourceType: callInfo.isMethodCall ? 'method-call' : 'call'
|
|
328
|
+
},
|
|
329
|
+
file: module.file,
|
|
330
|
+
line: expressionLine,
|
|
331
|
+
column: expressionColumn
|
|
136
332
|
});
|
|
137
333
|
}
|
|
334
|
+
// Unsupported init type (MemberExpression without call, etc.)
|
|
335
|
+
// Skip silently
|
|
138
336
|
}
|
|
139
337
|
else {
|
|
140
338
|
// Normal assignment tracking
|
|
141
|
-
trackVariableAssignment(
|
|
339
|
+
trackVariableAssignment(initExpression, varId, varInfo.name, module, varInfo.loc.start.line, literals, variableAssignments, literalCounterRef, objectLiterals, objectProperties, objectLiteralCounterRef);
|
|
142
340
|
}
|
|
143
341
|
}
|
|
144
342
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonorepoServiceDiscovery.d.ts","sourceRoot":"","sources":["../../../src/plugins/discovery/MonorepoServiceDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAehF;;GAEG;AACH,UAAU,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IAC3D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAW;gBAElB,MAAM,GAAE,cAAmB;IAOvC,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"MonorepoServiceDiscovery.d.ts","sourceRoot":"","sources":["../../../src/plugins/discovery/MonorepoServiceDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAehF;;GAEG;AACH,UAAU,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IAC3D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAW;gBAElB,MAAM,GAAE,cAAmB;IAOvC,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CA2D7D"}
|
|
@@ -32,16 +32,17 @@ export class MonorepoServiceDiscovery extends DiscoveryPlugin {
|
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
async execute(context) {
|
|
35
|
+
const logger = this.log(context);
|
|
35
36
|
const { projectPath, graph } = context;
|
|
36
37
|
const servicesPath = join(projectPath, this.servicesDir);
|
|
37
|
-
|
|
38
|
+
logger.debug('Looking for services', { servicesPath });
|
|
38
39
|
if (!existsSync(servicesPath)) {
|
|
39
40
|
return createErrorResult(new Error(`Services directory not found: ${servicesPath}`));
|
|
40
41
|
}
|
|
41
42
|
try {
|
|
42
43
|
const services = [];
|
|
43
44
|
const entries = readdirSync(servicesPath);
|
|
44
|
-
|
|
45
|
+
logger.debug('Found entries', { count: entries.length });
|
|
45
46
|
for (const entry of entries) {
|
|
46
47
|
const fullPath = join(servicesPath, entry);
|
|
47
48
|
const stat = statSync(fullPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleProjectDiscovery.d.ts","sourceRoot":"","sources":["../../../src/plugins/discovery/SimpleProjectDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"SimpleProjectDiscovery.d.ts","sourceRoot":"","sources":["../../../src/plugins/discovery/SimpleProjectDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,MAAM,EAA0C,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA6BhF,qBAAa,sBAAuB,SAAQ,MAAM;IAEhD,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAkD7D"}
|
|
@@ -9,6 +9,7 @@ import { existsSync, readFileSync } from 'fs';
|
|
|
9
9
|
import { join } from 'path';
|
|
10
10
|
import { NodeFactory } from '../../core/NodeFactory.js';
|
|
11
11
|
import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
12
|
+
import { resolveSourceEntrypoint } from './resolveSourceEntrypoint.js';
|
|
12
13
|
export class SimpleProjectDiscovery extends Plugin {
|
|
13
14
|
get metadata() {
|
|
14
15
|
return {
|
|
@@ -36,7 +37,10 @@ export class SimpleProjectDiscovery extends Plugin {
|
|
|
36
37
|
try {
|
|
37
38
|
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
38
39
|
const serviceName = packageJson.name || 'unnamed-service';
|
|
39
|
-
|
|
40
|
+
// Prefer TypeScript source over compiled output
|
|
41
|
+
const entrypoint = resolveSourceEntrypoint(projectPath, packageJson)
|
|
42
|
+
?? packageJson.main
|
|
43
|
+
?? 'index.js';
|
|
40
44
|
// Используем NodeFactory для создания SERVICE ноды
|
|
41
45
|
const serviceNode = NodeFactory.createService(serviceName, projectPath, {
|
|
42
46
|
discoveryMethod: 'simple',
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkspaceDiscovery - Discovery plugin for npm/pnpm/yarn/lerna workspaces
|
|
3
|
+
*
|
|
4
|
+
* Detects workspace configuration and creates SERVICE nodes for each package.
|
|
5
|
+
* Priority: 110 (higher than MonorepoServiceDiscovery at 100)
|
|
6
|
+
*
|
|
7
|
+
* Supports:
|
|
8
|
+
* - pnpm-workspace.yaml
|
|
9
|
+
* - package.json workspaces (npm/yarn)
|
|
10
|
+
* - lerna.json
|
|
11
|
+
*/
|
|
12
|
+
import { DiscoveryPlugin } from './DiscoveryPlugin.js';
|
|
13
|
+
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
14
|
+
export declare class WorkspaceDiscovery extends DiscoveryPlugin {
|
|
15
|
+
get metadata(): PluginMetadata;
|
|
16
|
+
execute(context: PluginContext): Promise<PluginResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Create SERVICE node from workspace package.
|
|
19
|
+
*/
|
|
20
|
+
private createServiceNode;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=WorkspaceDiscovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceDiscovery.d.ts","sourceRoot":"","sources":["../../../src/plugins/discovery/WorkspaceDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAuBhF,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,IAAI,QAAQ,IAAI,cAAc,CAW7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA4F5D;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAmC1B"}
|