@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
|
@@ -6,16 +6,24 @@
|
|
|
6
6
|
* - ArrowFunctionExpression (module-level)
|
|
7
7
|
*/
|
|
8
8
|
import { ASTVisitor } from './ASTVisitor.js';
|
|
9
|
+
import { typeNodeToString } from './TypeScriptVisitor.js';
|
|
10
|
+
import { IdGenerator } from '../IdGenerator.js';
|
|
11
|
+
import { createParameterNodes } from '../utils/createParameterNodes.js';
|
|
12
|
+
import { getLine, getColumn } from '../utils/location.js';
|
|
13
|
+
import { ConstructorCallNode } from '../../../../core/nodes/ConstructorCallNode.js';
|
|
9
14
|
export class FunctionVisitor extends ASTVisitor {
|
|
10
15
|
analyzeFunctionBody;
|
|
16
|
+
scopeTracker;
|
|
11
17
|
/**
|
|
12
18
|
* @param module - Current module being analyzed
|
|
13
19
|
* @param collections - Must contain arrays and counter refs
|
|
14
20
|
* @param analyzeFunctionBody - Callback to analyze function internals
|
|
21
|
+
* @param scopeTracker - REQUIRED for semantic ID generation
|
|
15
22
|
*/
|
|
16
|
-
constructor(module, collections, analyzeFunctionBody) {
|
|
23
|
+
constructor(module, collections, analyzeFunctionBody, scopeTracker) {
|
|
17
24
|
super(module, collections);
|
|
18
25
|
this.analyzeFunctionBody = analyzeFunctionBody;
|
|
26
|
+
this.scopeTracker = scopeTracker;
|
|
19
27
|
}
|
|
20
28
|
getHandlers() {
|
|
21
29
|
const { module } = this;
|
|
@@ -23,71 +31,96 @@ export class FunctionVisitor extends ASTVisitor {
|
|
|
23
31
|
const parameters = this.collections.parameters ?? [];
|
|
24
32
|
const scopes = this.collections.scopes ?? [];
|
|
25
33
|
const functionCounterRef = (this.collections.functionCounterRef ?? { value: 0 });
|
|
26
|
-
const
|
|
34
|
+
const scopeTracker = this.scopeTracker;
|
|
27
35
|
const analyzeFunctionBody = this.analyzeFunctionBody;
|
|
28
36
|
const collections = this.collections;
|
|
29
37
|
// Helper function to generate stable anonymous function name
|
|
30
38
|
const generateAnonymousName = () => {
|
|
31
|
-
|
|
32
|
-
return 'anonymous';
|
|
33
|
-
const index = moduleScopeCtx.siblingCounters.get('anonymous') || 0;
|
|
34
|
-
moduleScopeCtx.siblingCounters.set('anonymous', index + 1);
|
|
39
|
+
const index = scopeTracker.getSiblingIndex('anonymous');
|
|
35
40
|
return `anonymous[${index}]`;
|
|
36
41
|
};
|
|
37
|
-
// Helper function to
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
params.forEach((param
|
|
42
|
-
// Handle different parameter types
|
|
42
|
+
// Helper function to extract parameter names and types from function params
|
|
43
|
+
const extractParamInfo = (params) => {
|
|
44
|
+
const names = [];
|
|
45
|
+
const types = [];
|
|
46
|
+
params.forEach((param) => {
|
|
43
47
|
if (param.type === 'Identifier') {
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
file: file,
|
|
50
|
-
line: param.loc?.start.line || line,
|
|
51
|
-
index: index,
|
|
52
|
-
parentFunctionId: functionId
|
|
53
|
-
});
|
|
48
|
+
const id = param;
|
|
49
|
+
names.push(id.name);
|
|
50
|
+
// Check for type annotation
|
|
51
|
+
const typeAnnotation = id.typeAnnotation?.typeAnnotation;
|
|
52
|
+
types.push(typeAnnotation ? typeNodeToString(typeAnnotation) : 'any');
|
|
54
53
|
}
|
|
55
54
|
else if (param.type === 'AssignmentPattern') {
|
|
56
|
-
// Default parameter: function(a = 1)
|
|
57
55
|
const assignmentParam = param;
|
|
58
56
|
if (assignmentParam.left.type === 'Identifier') {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
name: assignmentParam.left.name,
|
|
64
|
-
file: file,
|
|
65
|
-
line: assignmentParam.left.loc?.start.line || line,
|
|
66
|
-
index: index,
|
|
67
|
-
hasDefault: true,
|
|
68
|
-
parentFunctionId: functionId
|
|
69
|
-
});
|
|
57
|
+
const id = assignmentParam.left;
|
|
58
|
+
names.push(id.name + '?');
|
|
59
|
+
const typeAnnotation = id.typeAnnotation?.typeAnnotation;
|
|
60
|
+
types.push(typeAnnotation ? typeNodeToString(typeAnnotation) : 'any');
|
|
70
61
|
}
|
|
71
62
|
}
|
|
72
63
|
else if (param.type === 'RestElement') {
|
|
73
|
-
// Rest parameter: function(...args)
|
|
74
64
|
const restParam = param;
|
|
75
65
|
if (restParam.argument.type === 'Identifier') {
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
name: restParam.argument.name,
|
|
81
|
-
file: file,
|
|
82
|
-
line: restParam.argument.loc?.start.line || line,
|
|
83
|
-
index: index,
|
|
84
|
-
isRest: true,
|
|
85
|
-
parentFunctionId: functionId
|
|
86
|
-
});
|
|
66
|
+
const id = restParam.argument;
|
|
67
|
+
names.push('...' + id.name);
|
|
68
|
+
const typeAnnotation = id.typeAnnotation?.typeAnnotation;
|
|
69
|
+
types.push(typeAnnotation ? typeNodeToString(typeAnnotation) : 'any[]');
|
|
87
70
|
}
|
|
88
71
|
}
|
|
89
|
-
// ObjectPattern and ArrayPattern (destructuring parameters) can be added later
|
|
90
72
|
});
|
|
73
|
+
return { names, types };
|
|
74
|
+
};
|
|
75
|
+
// Helper function to extract return type from function
|
|
76
|
+
const extractReturnType = (node) => {
|
|
77
|
+
const returnTypeAnnotation = node.returnType?.typeAnnotation;
|
|
78
|
+
if (returnTypeAnnotation) {
|
|
79
|
+
return typeNodeToString(returnTypeAnnotation);
|
|
80
|
+
}
|
|
81
|
+
return 'void';
|
|
82
|
+
};
|
|
83
|
+
// Helper function to extract JSDoc summary from leading comments
|
|
84
|
+
const extractJsdocSummary = (node) => {
|
|
85
|
+
const comments = node.leadingComments;
|
|
86
|
+
if (!comments || comments.length === 0)
|
|
87
|
+
return undefined;
|
|
88
|
+
// Find the last block comment that looks like JSDoc
|
|
89
|
+
for (let i = comments.length - 1; i >= 0; i--) {
|
|
90
|
+
const comment = comments[i];
|
|
91
|
+
if (comment.type === 'CommentBlock' && comment.value.startsWith('*')) {
|
|
92
|
+
// Parse JSDoc - get first non-empty line after the opening
|
|
93
|
+
const lines = comment.value.split('\n');
|
|
94
|
+
for (const line of lines) {
|
|
95
|
+
const trimmed = line.replace(/^\s*\*\s?/, '').trim();
|
|
96
|
+
// Skip empty lines and @tags
|
|
97
|
+
if (trimmed && !trimmed.startsWith('@')) {
|
|
98
|
+
return trimmed.slice(0, 200); // Limit length
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
};
|
|
105
|
+
// Helper function to build function signature
|
|
106
|
+
const buildSignature = (params, paramTypes, returnType, isAsync) => {
|
|
107
|
+
const paramParts = params.map((name, i) => {
|
|
108
|
+
const type = paramTypes[i] || 'any';
|
|
109
|
+
// Handle rest params
|
|
110
|
+
if (name.startsWith('...')) {
|
|
111
|
+
return `${name}: ${type}`;
|
|
112
|
+
}
|
|
113
|
+
// Handle optional params (with ?)
|
|
114
|
+
if (name.endsWith('?')) {
|
|
115
|
+
return `${name}: ${type}`;
|
|
116
|
+
}
|
|
117
|
+
return `${name}: ${type}`;
|
|
118
|
+
});
|
|
119
|
+
const paramsStr = `(${paramParts.join(', ')})`;
|
|
120
|
+
const retStr = isAsync && !returnType.startsWith('Promise')
|
|
121
|
+
? `Promise<${returnType}>`
|
|
122
|
+
: returnType;
|
|
123
|
+
return `${paramsStr} => ${retStr}`;
|
|
91
124
|
};
|
|
92
125
|
return {
|
|
93
126
|
// Regular function declarations
|
|
@@ -95,21 +128,36 @@ export class FunctionVisitor extends ASTVisitor {
|
|
|
95
128
|
const node = path.node;
|
|
96
129
|
if (!node.id)
|
|
97
130
|
return; // Skip anonymous function declarations
|
|
98
|
-
const
|
|
131
|
+
const isAsync = node.async || false;
|
|
132
|
+
const line = getLine(node);
|
|
133
|
+
// Generate ID using centralized IdGenerator
|
|
134
|
+
const idGenerator = new IdGenerator(scopeTracker);
|
|
135
|
+
const functionId = idGenerator.generateSimple('FUNCTION', node.id.name, module.file, line);
|
|
136
|
+
// Extract type info
|
|
137
|
+
const { names: paramNames, types: paramTypes } = extractParamInfo(node.params);
|
|
138
|
+
const returnType = extractReturnType(node);
|
|
139
|
+
const jsdocSummary = extractJsdocSummary(node);
|
|
140
|
+
const signature = buildSignature(paramNames, paramTypes, returnType, isAsync);
|
|
99
141
|
functions.push({
|
|
100
142
|
id: functionId,
|
|
101
|
-
stableId: functionId,
|
|
102
143
|
type: 'FUNCTION',
|
|
103
144
|
name: node.id.name,
|
|
104
145
|
file: module.file,
|
|
105
|
-
line
|
|
106
|
-
async:
|
|
107
|
-
generator: node.generator || false
|
|
146
|
+
line,
|
|
147
|
+
async: isAsync,
|
|
148
|
+
generator: node.generator || false,
|
|
149
|
+
params: paramNames,
|
|
150
|
+
paramTypes,
|
|
151
|
+
returnType,
|
|
152
|
+
signature,
|
|
153
|
+
jsdocSummary
|
|
108
154
|
});
|
|
155
|
+
// Enter function scope BEFORE creating parameters (semantic IDs need function context)
|
|
156
|
+
scopeTracker.enterScope(node.id.name, 'FUNCTION');
|
|
109
157
|
// Create PARAMETER nodes for function parameters
|
|
110
|
-
createParameterNodes(node.params, functionId, module.file, node
|
|
158
|
+
createParameterNodes(node.params, functionId, module.file, getLine(node), parameters, scopeTracker);
|
|
111
159
|
// Create SCOPE for function body
|
|
112
|
-
const functionBodyScopeId =
|
|
160
|
+
const functionBodyScopeId = idGenerator.generateScope('body', `${node.id.name}:body`, module.file, line);
|
|
113
161
|
scopes.push({
|
|
114
162
|
id: functionBodyScopeId,
|
|
115
163
|
type: 'SCOPE',
|
|
@@ -117,19 +165,22 @@ export class FunctionVisitor extends ASTVisitor {
|
|
|
117
165
|
name: `${node.id.name}:body`,
|
|
118
166
|
conditional: false,
|
|
119
167
|
file: module.file,
|
|
120
|
-
line
|
|
168
|
+
line,
|
|
121
169
|
parentFunctionId: functionId
|
|
122
170
|
});
|
|
123
171
|
// Analyze function body
|
|
124
172
|
analyzeFunctionBody(path, functionBodyScopeId, module, collections);
|
|
173
|
+
// Exit function scope
|
|
174
|
+
scopeTracker.exitScope();
|
|
125
175
|
// Stop traversal - analyzeFunctionBody already processed contents
|
|
126
176
|
path.skip();
|
|
127
177
|
},
|
|
128
178
|
// Arrow functions (module-level, assigned to variables or as callbacks)
|
|
129
179
|
ArrowFunctionExpression: (path) => {
|
|
130
180
|
const node = path.node;
|
|
131
|
-
const line = node
|
|
132
|
-
const column = node
|
|
181
|
+
const line = getLine(node);
|
|
182
|
+
const column = getColumn(node);
|
|
183
|
+
const isAsync = node.async || false;
|
|
133
184
|
// Determine arrow function name (use scope-level counter for stable semanticId)
|
|
134
185
|
let functionName = generateAnonymousName();
|
|
135
186
|
// If arrow function is assigned to variable: const add = () => {}
|
|
@@ -140,22 +191,35 @@ export class FunctionVisitor extends ASTVisitor {
|
|
|
140
191
|
functionName = declarator.id.name;
|
|
141
192
|
}
|
|
142
193
|
}
|
|
143
|
-
|
|
194
|
+
// Generate ID using centralized IdGenerator
|
|
195
|
+
const idGenerator = new IdGenerator(scopeTracker);
|
|
196
|
+
const functionId = idGenerator.generate('FUNCTION', functionName, module.file, line, column, functionCounterRef);
|
|
197
|
+
// Extract type info
|
|
198
|
+
const { names: paramNames, types: paramTypes } = extractParamInfo(node.params);
|
|
199
|
+
const returnType = extractReturnType(node);
|
|
200
|
+
const jsdocSummary = extractJsdocSummary(node);
|
|
201
|
+
const signature = buildSignature(paramNames, paramTypes, returnType, isAsync);
|
|
144
202
|
functions.push({
|
|
145
203
|
id: functionId,
|
|
146
|
-
stableId: functionId,
|
|
147
204
|
type: 'FUNCTION',
|
|
148
205
|
name: functionName,
|
|
149
206
|
file: module.file,
|
|
150
207
|
line,
|
|
151
208
|
column,
|
|
152
|
-
async:
|
|
153
|
-
arrowFunction: true
|
|
209
|
+
async: isAsync,
|
|
210
|
+
arrowFunction: true,
|
|
211
|
+
params: paramNames,
|
|
212
|
+
paramTypes,
|
|
213
|
+
returnType,
|
|
214
|
+
signature,
|
|
215
|
+
jsdocSummary
|
|
154
216
|
});
|
|
217
|
+
// Enter function scope BEFORE creating parameters (semantic IDs need function context)
|
|
218
|
+
scopeTracker.enterScope(functionName, 'FUNCTION');
|
|
155
219
|
// Create PARAMETER nodes for arrow function parameters
|
|
156
|
-
createParameterNodes(node.params, functionId, module.file, line);
|
|
220
|
+
createParameterNodes(node.params, functionId, module.file, line, parameters, scopeTracker);
|
|
157
221
|
// Create SCOPE for arrow function body
|
|
158
|
-
const bodyScope =
|
|
222
|
+
const bodyScope = idGenerator.generateScope('body', `${functionName}:body`, module.file, line, column);
|
|
159
223
|
scopes.push({
|
|
160
224
|
id: bodyScope,
|
|
161
225
|
type: 'SCOPE',
|
|
@@ -165,8 +229,71 @@ export class FunctionVisitor extends ASTVisitor {
|
|
|
165
229
|
scopeType: 'function-body',
|
|
166
230
|
parentFunctionId: functionId
|
|
167
231
|
});
|
|
232
|
+
// REG-334: Detect Promise executor context BEFORE analyzing body
|
|
233
|
+
// This must happen before analyzeFunctionBody so resolve/reject calls can be linked
|
|
234
|
+
this.detectPromiseExecutorContext(path, node, module, collections);
|
|
168
235
|
analyzeFunctionBody(path, bodyScope, module, collections);
|
|
236
|
+
// Exit function scope
|
|
237
|
+
scopeTracker.exitScope();
|
|
238
|
+
// Stop traversal - analyzeFunctionBody already processed contents
|
|
239
|
+
// Without this, babel traverse continues into arrow body and finds
|
|
240
|
+
// nested arrow functions, causing duplicate FUNCTION nodes
|
|
241
|
+
path.skip();
|
|
169
242
|
}
|
|
170
243
|
};
|
|
171
244
|
}
|
|
245
|
+
/**
|
|
246
|
+
* REG-334: Detect if this function is a Promise executor callback.
|
|
247
|
+
* If so, register the context so resolve/reject calls can be linked.
|
|
248
|
+
*
|
|
249
|
+
* Pattern: new Promise((resolve, reject) => { ... })
|
|
250
|
+
*
|
|
251
|
+
* Must be called BEFORE analyzeFunctionBody so the context is available
|
|
252
|
+
* when resolve/reject calls are processed.
|
|
253
|
+
*/
|
|
254
|
+
detectPromiseExecutorContext(path, node, module, collections) {
|
|
255
|
+
// Check if this function is the first argument to new Promise()
|
|
256
|
+
const parent = path.parent;
|
|
257
|
+
if (parent?.type !== 'NewExpression')
|
|
258
|
+
return;
|
|
259
|
+
const newExpr = parent;
|
|
260
|
+
// Check it's Promise constructor
|
|
261
|
+
if (newExpr.callee.type !== 'Identifier')
|
|
262
|
+
return;
|
|
263
|
+
if (newExpr.callee.name !== 'Promise')
|
|
264
|
+
return;
|
|
265
|
+
// Check this function is the first argument
|
|
266
|
+
if (newExpr.arguments.length === 0)
|
|
267
|
+
return;
|
|
268
|
+
if (newExpr.arguments[0] !== node)
|
|
269
|
+
return;
|
|
270
|
+
// Extract resolve/reject parameter names
|
|
271
|
+
let resolveName;
|
|
272
|
+
let rejectName;
|
|
273
|
+
if (node.params.length > 0 && node.params[0].type === 'Identifier') {
|
|
274
|
+
resolveName = node.params[0].name;
|
|
275
|
+
}
|
|
276
|
+
if (node.params.length > 1 && node.params[1].type === 'Identifier') {
|
|
277
|
+
rejectName = node.params[1].name;
|
|
278
|
+
}
|
|
279
|
+
if (!resolveName)
|
|
280
|
+
return; // No resolve parameter, nothing to track
|
|
281
|
+
// Generate the CONSTRUCTOR_CALL ID for linking
|
|
282
|
+
const line = getLine(newExpr);
|
|
283
|
+
const column = getColumn(newExpr);
|
|
284
|
+
const constructorCallId = ConstructorCallNode.generateId('Promise', module.file, line, column);
|
|
285
|
+
// Initialize promiseExecutorContexts if not exists
|
|
286
|
+
if (!collections.promiseExecutorContexts) {
|
|
287
|
+
collections.promiseExecutorContexts = new Map();
|
|
288
|
+
}
|
|
289
|
+
// Key by function node position to allow nested Promise detection
|
|
290
|
+
const funcKey = `${node.start}:${node.end}`;
|
|
291
|
+
collections.promiseExecutorContexts.set(funcKey, {
|
|
292
|
+
constructorCallId,
|
|
293
|
+
resolveName,
|
|
294
|
+
rejectName,
|
|
295
|
+
file: module.file,
|
|
296
|
+
line: getLine(node)
|
|
297
|
+
});
|
|
298
|
+
}
|
|
172
299
|
}
|
|
@@ -23,6 +23,10 @@ export declare class ImportExportVisitor extends ASTVisitor {
|
|
|
23
23
|
*/
|
|
24
24
|
constructor(module: VisitorModule, collections: VisitorCollections, extractVariableNamesFromPattern: ExtractVariableNamesCallback);
|
|
25
25
|
getImportHandlers(): VisitorHandlers;
|
|
26
|
+
/**
|
|
27
|
+
* Convert a TemplateLiteral to a string representation for debugging
|
|
28
|
+
*/
|
|
29
|
+
private templateLiteralToString;
|
|
26
30
|
getExportHandlers(): VisitorHandlers;
|
|
27
31
|
getHandlers(): VisitorHandlers;
|
|
28
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImportExportVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/ImportExportVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAaV,IAAI,
|
|
1
|
+
{"version":3,"file":"ImportExportVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/ImportExportVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAaV,IAAI,EAGL,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;AA2C7E,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,OAAO,CAAC,+BAA+B,CAA+B;IAEtE;;;;OAIG;gBAED,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,kBAAkB,EAC/B,+BAA+B,EAAE,4BAA4B;IAM/D,iBAAiB,IAAI,eAAe;IAuIpC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B,iBAAiB,IAAI,eAAe;IAsHpC,WAAW,IAAI,eAAe;CAM/B"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* - ExportAllDeclaration: export * from './module'
|
|
9
9
|
*/
|
|
10
10
|
import { ASTVisitor } from './ASTVisitor.js';
|
|
11
|
+
import { getLine, getColumn } from '../utils/location.js';
|
|
11
12
|
export class ImportExportVisitor extends ASTVisitor {
|
|
12
13
|
extractVariableNamesFromPattern;
|
|
13
14
|
/**
|
|
@@ -59,11 +60,113 @@ export class ImportExportVisitor extends ASTVisitor {
|
|
|
59
60
|
imports.push({
|
|
60
61
|
source,
|
|
61
62
|
specifiers,
|
|
62
|
-
line: node
|
|
63
|
+
line: getLine(node),
|
|
64
|
+
column: getColumn(node)
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
/**
|
|
68
|
+
* Handle dynamic import() expressions
|
|
69
|
+
* Examples:
|
|
70
|
+
* - import('./module.js') -> isResolvable: true
|
|
71
|
+
* - import(`./plugins/${name}.js`) -> isResolvable: false, source: './plugins/'
|
|
72
|
+
* - import(modulePath) -> isResolvable: false, source: '<dynamic>'
|
|
73
|
+
*/
|
|
74
|
+
CallExpression: (path) => {
|
|
75
|
+
const node = path.node;
|
|
76
|
+
// Check if this is an import() call
|
|
77
|
+
if (node.callee.type !== 'Import') {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const arg = node.arguments[0];
|
|
81
|
+
if (!arg)
|
|
82
|
+
return;
|
|
83
|
+
let source;
|
|
84
|
+
let isResolvable;
|
|
85
|
+
let dynamicPath;
|
|
86
|
+
if (arg.type === 'StringLiteral') {
|
|
87
|
+
// import('./module.js') - literal path, fully resolvable
|
|
88
|
+
source = arg.value;
|
|
89
|
+
isResolvable = true;
|
|
90
|
+
}
|
|
91
|
+
else if (arg.type === 'TemplateLiteral') {
|
|
92
|
+
// import(`./plugins/${name}.js`) - template literal
|
|
93
|
+
const templateArg = arg;
|
|
94
|
+
const firstQuasi = templateArg.quasis[0];
|
|
95
|
+
// Extract static prefix (part before first expression)
|
|
96
|
+
const prefix = firstQuasi?.value?.raw || '';
|
|
97
|
+
if (prefix) {
|
|
98
|
+
source = prefix;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// No static prefix - e.g., import(`${baseDir}/loader.js`)
|
|
102
|
+
source = '<dynamic>';
|
|
103
|
+
}
|
|
104
|
+
isResolvable = false;
|
|
105
|
+
// Capture the original template for debugging/analysis
|
|
106
|
+
dynamicPath = this.templateLiteralToString(templateArg);
|
|
107
|
+
}
|
|
108
|
+
else if (arg.type === 'Identifier') {
|
|
109
|
+
// import(modulePath) - variable path
|
|
110
|
+
source = '<dynamic>';
|
|
111
|
+
isResolvable = false;
|
|
112
|
+
dynamicPath = arg.name;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Other expressions (e.g., function calls, member expressions)
|
|
116
|
+
source = '<dynamic>';
|
|
117
|
+
isResolvable = false;
|
|
118
|
+
}
|
|
119
|
+
// Find the receiving variable name from parent
|
|
120
|
+
// Patterns: const mod = await import(...) or const mod = import(...)
|
|
121
|
+
let localName = '*'; // Default for side-effect imports
|
|
122
|
+
const parent = path.parent;
|
|
123
|
+
if (parent?.type === 'AwaitExpression') {
|
|
124
|
+
// const mod = await import(...)
|
|
125
|
+
const awaitParent = path.parentPath?.parent;
|
|
126
|
+
if (awaitParent?.type === 'VariableDeclarator' &&
|
|
127
|
+
awaitParent.id?.type === 'Identifier') {
|
|
128
|
+
localName = awaitParent.id.name;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else if (parent?.type === 'VariableDeclarator' &&
|
|
132
|
+
parent.id?.type === 'Identifier') {
|
|
133
|
+
// const mod = import(...) (without await)
|
|
134
|
+
localName = parent.id.name;
|
|
135
|
+
}
|
|
136
|
+
imports.push({
|
|
137
|
+
source,
|
|
138
|
+
specifiers: [{
|
|
139
|
+
imported: '*', // Dynamic imports are always namespace imports
|
|
140
|
+
local: localName
|
|
141
|
+
}],
|
|
142
|
+
line: getLine(node),
|
|
143
|
+
column: getColumn(node),
|
|
144
|
+
isDynamic: true,
|
|
145
|
+
isResolvable,
|
|
146
|
+
dynamicPath
|
|
63
147
|
});
|
|
64
148
|
}
|
|
65
149
|
};
|
|
66
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Convert a TemplateLiteral to a string representation for debugging
|
|
153
|
+
*/
|
|
154
|
+
templateLiteralToString(template) {
|
|
155
|
+
let result = '';
|
|
156
|
+
for (let i = 0; i < template.quasis.length; i++) {
|
|
157
|
+
result += template.quasis[i].value.raw;
|
|
158
|
+
if (i < template.expressions.length) {
|
|
159
|
+
const expr = template.expressions[i];
|
|
160
|
+
if (expr.type === 'Identifier') {
|
|
161
|
+
result += `\${${expr.name}}`;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
result += '${...}';
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
67
170
|
getExportHandlers() {
|
|
68
171
|
const { exports } = this.collections;
|
|
69
172
|
const extractVariableNamesFromPattern = this.extractVariableNamesFromPattern;
|
|
@@ -72,12 +175,13 @@ export class ImportExportVisitor extends ASTVisitor {
|
|
|
72
175
|
const node = path.node;
|
|
73
176
|
exports.push({
|
|
74
177
|
type: 'default',
|
|
75
|
-
line: node
|
|
178
|
+
line: getLine(node),
|
|
76
179
|
declaration: node.declaration
|
|
77
180
|
});
|
|
78
181
|
},
|
|
79
182
|
ExportNamedDeclaration: (path) => {
|
|
80
183
|
const node = path.node;
|
|
184
|
+
const exportLine = getLine(node);
|
|
81
185
|
// export { foo, bar } from './module'
|
|
82
186
|
if (node.source) {
|
|
83
187
|
const specifiers = node.specifiers.map((spec) => {
|
|
@@ -95,7 +199,7 @@ export class ImportExportVisitor extends ASTVisitor {
|
|
|
95
199
|
});
|
|
96
200
|
exports.push({
|
|
97
201
|
type: 'named',
|
|
98
|
-
line:
|
|
202
|
+
line: exportLine,
|
|
99
203
|
specifiers,
|
|
100
204
|
source: node.source.value
|
|
101
205
|
});
|
|
@@ -114,7 +218,7 @@ export class ImportExportVisitor extends ASTVisitor {
|
|
|
114
218
|
});
|
|
115
219
|
exports.push({
|
|
116
220
|
type: 'named',
|
|
117
|
-
line:
|
|
221
|
+
line: exportLine,
|
|
118
222
|
specifiers
|
|
119
223
|
});
|
|
120
224
|
}
|
|
@@ -127,7 +231,7 @@ export class ImportExportVisitor extends ASTVisitor {
|
|
|
127
231
|
if (funcDecl.id) {
|
|
128
232
|
exports.push({
|
|
129
233
|
type: 'named',
|
|
130
|
-
line:
|
|
234
|
+
line: exportLine,
|
|
131
235
|
name: funcDecl.id.name
|
|
132
236
|
});
|
|
133
237
|
}
|
|
@@ -141,7 +245,7 @@ export class ImportExportVisitor extends ASTVisitor {
|
|
|
141
245
|
variables.forEach((varInfo) => {
|
|
142
246
|
exports.push({
|
|
143
247
|
type: 'named',
|
|
144
|
-
line:
|
|
248
|
+
line: exportLine,
|
|
145
249
|
name: varInfo.name
|
|
146
250
|
});
|
|
147
251
|
});
|
|
@@ -153,7 +257,7 @@ export class ImportExportVisitor extends ASTVisitor {
|
|
|
153
257
|
if (classDecl.id) {
|
|
154
258
|
exports.push({
|
|
155
259
|
type: 'named',
|
|
156
|
-
line:
|
|
260
|
+
line: exportLine,
|
|
157
261
|
name: classDecl.id.name
|
|
158
262
|
});
|
|
159
263
|
}
|
|
@@ -165,7 +269,7 @@ export class ImportExportVisitor extends ASTVisitor {
|
|
|
165
269
|
// export * from './module'
|
|
166
270
|
exports.push({
|
|
167
271
|
type: 'all',
|
|
168
|
-
line: node
|
|
272
|
+
line: getLine(node),
|
|
169
273
|
source: node.source.value
|
|
170
274
|
});
|
|
171
275
|
}
|
|
@@ -7,8 +7,19 @@
|
|
|
7
7
|
* - TSEnumDeclaration
|
|
8
8
|
*/
|
|
9
9
|
import { ASTVisitor, type VisitorModule, type VisitorCollections, type VisitorHandlers } from './ASTVisitor.js';
|
|
10
|
+
import { ScopeTracker } from '../../../../core/ScopeTracker.js';
|
|
11
|
+
/**
|
|
12
|
+
* Extracts a string representation of a TypeScript type node
|
|
13
|
+
*/
|
|
14
|
+
export declare function typeNodeToString(node: unknown): string;
|
|
10
15
|
export declare class TypeScriptVisitor extends ASTVisitor {
|
|
11
|
-
|
|
16
|
+
private scopeTracker?;
|
|
17
|
+
/**
|
|
18
|
+
* @param module - Current module being analyzed
|
|
19
|
+
* @param collections - Must contain interfaces, typeAliases, enums arrays
|
|
20
|
+
* @param scopeTracker - Optional ScopeTracker for semantic ID generation
|
|
21
|
+
*/
|
|
22
|
+
constructor(module: VisitorModule, collections: VisitorCollections, scopeTracker?: ScopeTracker);
|
|
12
23
|
getHandlers(): VisitorHandlers;
|
|
13
24
|
}
|
|
14
25
|
//# sourceMappingURL=TypeScriptVisitor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeScriptVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"TypeScriptVisitor.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAQhH,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIhE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAgEtD;AAED,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC;;;;OAIG;gBACS,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,CAAC,EAAE,YAAY;IAK/F,WAAW,IAAI,eAAe;CAmJ/B"}
|