@grafema/core 0.2.4-beta → 0.2.5-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/dist/Orchestrator.d.ts +37 -0
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +322 -35
- package/dist/Orchestrator.js.map +1 -0
- package/dist/api/GraphAPI.d.ts +1 -1
- package/dist/api/GraphAPI.d.ts.map +1 -1
- package/dist/api/GraphAPI.js +3 -1
- package/dist/api/GraphAPI.js.map +1 -0
- package/dist/api/GuaranteeAPI.d.ts.map +1 -1
- package/dist/api/GuaranteeAPI.js +4 -2
- package/dist/api/GuaranteeAPI.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +66 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -1
- package/dist/config/ConfigLoader.js +77 -3
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -1
- package/dist/config/index.js.map +1 -0
- package/dist/core/ASTWorker.d.ts.map +1 -1
- package/dist/core/ASTWorker.js +6 -4
- package/dist/core/ASTWorker.js.map +1 -0
- package/dist/core/ASTWorkerPool.js +2 -1
- package/dist/core/ASTWorkerPool.js.map +1 -0
- package/dist/core/AnalysisQueue.js +1 -0
- package/dist/core/AnalysisQueue.js.map +1 -0
- package/dist/core/CoverageAnalyzer.d.ts.map +1 -1
- package/dist/core/CoverageAnalyzer.js +1 -0
- package/dist/core/CoverageAnalyzer.js.map +1 -0
- package/dist/core/FileExplainer.js +1 -0
- package/dist/core/FileExplainer.js.map +1 -0
- package/dist/core/FileNodeManager.d.ts.map +1 -1
- package/dist/core/FileNodeManager.js +4 -2
- package/dist/core/FileNodeManager.js.map +1 -0
- package/dist/core/GraphBackend.js +1 -0
- package/dist/core/GraphBackend.js.map +1 -0
- package/dist/core/GraphFreshnessChecker.js +1 -0
- package/dist/core/GraphFreshnessChecker.js.map +1 -0
- package/dist/core/GuaranteeManager.js +2 -1
- package/dist/core/GuaranteeManager.js.map +1 -0
- package/dist/core/HashUtils.js +1 -0
- package/dist/core/HashUtils.js.map +1 -0
- package/dist/core/IncrementalReanalyzer.d.ts.map +1 -1
- package/dist/core/IncrementalReanalyzer.js +7 -3
- package/dist/core/IncrementalReanalyzer.js.map +1 -0
- package/dist/core/ManifestStore.js +1 -0
- package/dist/core/ManifestStore.js.map +1 -0
- package/dist/core/NodeFactory.d.ts +54 -34
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +20 -1
- package/dist/core/NodeFactory.js.map +1 -0
- package/dist/core/NodeId.js +1 -0
- package/dist/core/NodeId.js.map +1 -0
- package/dist/core/PriorityQueue.js +1 -0
- package/dist/core/PriorityQueue.js.map +1 -0
- package/dist/core/Profiler.js +1 -0
- package/dist/core/Profiler.js.map +1 -0
- package/dist/core/ScopeTracker.js +1 -0
- package/dist/core/ScopeTracker.js.map +1 -0
- package/dist/core/SemanticId.js +1 -0
- package/dist/core/SemanticId.js.map +1 -0
- package/dist/core/Task.js +1 -0
- package/dist/core/Task.js.map +1 -0
- package/dist/core/TaskTypes.js +1 -0
- package/dist/core/TaskTypes.js.map +1 -0
- package/dist/core/VersionManager.js +1 -0
- package/dist/core/VersionManager.js.map +1 -0
- package/dist/core/WorkerPool.d.ts.map +1 -1
- package/dist/core/WorkerPool.js +3 -1
- package/dist/core/WorkerPool.js.map +1 -0
- package/dist/core/nodes/ArgumentExpressionNode.js +1 -0
- package/dist/core/nodes/ArgumentExpressionNode.js.map +1 -0
- package/dist/core/nodes/ArrayLiteralNode.js +1 -0
- package/dist/core/nodes/ArrayLiteralNode.js.map +1 -0
- package/dist/core/nodes/BranchNode.js +1 -0
- package/dist/core/nodes/BranchNode.js.map +1 -0
- package/dist/core/nodes/CallSiteNode.js +1 -0
- package/dist/core/nodes/CallSiteNode.js.map +1 -0
- package/dist/core/nodes/CaseNode.js +1 -0
- package/dist/core/nodes/CaseNode.js.map +1 -0
- package/dist/core/nodes/ClassNode.js +1 -0
- package/dist/core/nodes/ClassNode.js.map +1 -0
- package/dist/core/nodes/ConstantNode.js +1 -0
- package/dist/core/nodes/ConstantNode.js.map +1 -0
- package/dist/core/nodes/ConstructorCallNode.js +1 -0
- package/dist/core/nodes/ConstructorCallNode.js.map +1 -0
- package/dist/core/nodes/DatabaseQueryNode.js +1 -0
- package/dist/core/nodes/DatabaseQueryNode.js.map +1 -0
- package/dist/core/nodes/DecoratorNode.js +1 -0
- package/dist/core/nodes/DecoratorNode.js.map +1 -0
- package/dist/core/nodes/EntrypointNode.js +1 -0
- package/dist/core/nodes/EntrypointNode.js.map +1 -0
- package/dist/core/nodes/EnumNode.js +1 -0
- package/dist/core/nodes/EnumNode.js.map +1 -0
- package/dist/core/nodes/EventListenerNode.js +1 -0
- package/dist/core/nodes/EventListenerNode.js.map +1 -0
- package/dist/core/nodes/ExportNode.js +1 -0
- package/dist/core/nodes/ExportNode.js.map +1 -0
- package/dist/core/nodes/ExpressionNode.js +1 -0
- package/dist/core/nodes/ExpressionNode.js.map +1 -0
- package/dist/core/nodes/ExternalModuleNode.js +1 -0
- package/dist/core/nodes/ExternalModuleNode.js.map +1 -0
- package/dist/core/nodes/ExternalStdioNode.js +1 -0
- package/dist/core/nodes/ExternalStdioNode.js.map +1 -0
- package/dist/core/nodes/FunctionNode.js +1 -0
- package/dist/core/nodes/FunctionNode.js.map +1 -0
- package/dist/core/nodes/GuaranteeNode.js +1 -0
- package/dist/core/nodes/GuaranteeNode.js.map +1 -0
- package/dist/core/nodes/HttpRequestNode.js +1 -0
- package/dist/core/nodes/HttpRequestNode.js.map +1 -0
- package/dist/core/nodes/ImportNode.js +1 -0
- package/dist/core/nodes/ImportNode.js.map +1 -0
- package/dist/core/nodes/InterfaceNode.js +1 -0
- package/dist/core/nodes/InterfaceNode.js.map +1 -0
- package/dist/core/nodes/IssueNode.js +1 -0
- package/dist/core/nodes/IssueNode.js.map +1 -0
- package/dist/core/nodes/LiteralNode.js +1 -0
- package/dist/core/nodes/LiteralNode.js.map +1 -0
- package/dist/core/nodes/MethodCallNode.js +1 -0
- package/dist/core/nodes/MethodCallNode.js.map +1 -0
- package/dist/core/nodes/MethodNode.js +1 -0
- package/dist/core/nodes/MethodNode.js.map +1 -0
- package/dist/core/nodes/ModuleNode.js +1 -0
- package/dist/core/nodes/ModuleNode.js.map +1 -0
- package/dist/core/nodes/NetworkRequestNode.js +1 -0
- package/dist/core/nodes/NetworkRequestNode.js.map +1 -0
- package/dist/core/nodes/NodeKind.d.ts +5 -0
- package/dist/core/nodes/NodeKind.d.ts.map +1 -1
- package/dist/core/nodes/NodeKind.js +11 -0
- package/dist/core/nodes/NodeKind.js.map +1 -0
- package/dist/core/nodes/ObjectLiteralNode.js +1 -0
- package/dist/core/nodes/ObjectLiteralNode.js.map +1 -0
- package/dist/core/nodes/ParameterNode.js +1 -0
- package/dist/core/nodes/ParameterNode.js.map +1 -0
- package/dist/core/nodes/PluginNode.d.ts +69 -0
- package/dist/core/nodes/PluginNode.d.ts.map +1 -0
- package/dist/core/nodes/PluginNode.js +106 -0
- package/dist/core/nodes/PluginNode.js.map +1 -0
- package/dist/core/nodes/ScopeNode.js +1 -0
- package/dist/core/nodes/ScopeNode.js.map +1 -0
- package/dist/core/nodes/ServiceNode.js +1 -0
- package/dist/core/nodes/ServiceNode.js.map +1 -0
- package/dist/core/nodes/TypeNode.js +2 -1
- package/dist/core/nodes/TypeNode.js.map +1 -0
- package/dist/core/nodes/VariableDeclarationNode.js +1 -0
- package/dist/core/nodes/VariableDeclarationNode.js.map +1 -0
- package/dist/core/nodes/index.d.ts +2 -1
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +4 -1
- package/dist/core/nodes/index.js.map +1 -0
- package/dist/core/toposort.d.ts +38 -0
- package/dist/core/toposort.d.ts.map +1 -0
- package/dist/core/toposort.js +129 -0
- package/dist/core/toposort.js.map +1 -0
- package/dist/data/builtins/BuiltinRegistry.js +1 -0
- package/dist/data/builtins/BuiltinRegistry.js.map +1 -0
- package/dist/data/builtins/definitions.js +1 -0
- package/dist/data/builtins/definitions.js.map +1 -0
- package/dist/data/builtins/index.js +1 -0
- package/dist/data/builtins/index.js.map +1 -0
- package/dist/data/builtins/jsGlobals.js +1 -0
- package/dist/data/builtins/jsGlobals.js.map +1 -0
- package/dist/data/builtins/types.js +1 -0
- package/dist/data/builtins/types.js.map +1 -0
- package/dist/data/globals/definitions.js +1 -0
- package/dist/data/globals/definitions.js.map +1 -0
- package/dist/data/globals/index.js +1 -0
- package/dist/data/globals/index.js.map +1 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts +5 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -1
- package/dist/diagnostics/DiagnosticCollector.js +4 -0
- package/dist/diagnostics/DiagnosticCollector.js.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts +23 -1
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -1
- package/dist/diagnostics/DiagnosticReporter.js +68 -15
- package/dist/diagnostics/DiagnosticReporter.js.map +1 -0
- package/dist/diagnostics/DiagnosticWriter.js +1 -0
- package/dist/diagnostics/DiagnosticWriter.js.map +1 -0
- package/dist/diagnostics/categories.d.ts +57 -0
- package/dist/diagnostics/categories.d.ts.map +1 -0
- package/dist/diagnostics/categories.js +71 -0
- package/dist/diagnostics/categories.js.map +1 -0
- package/dist/diagnostics/index.d.ts +3 -0
- package/dist/diagnostics/index.d.ts.map +1 -1
- package/dist/diagnostics/index.js +4 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/errors/GrafemaError.d.ts +39 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -1
- package/dist/errors/GrafemaError.js +28 -0
- package/dist/errors/GrafemaError.js.map +1 -0
- package/dist/index.d.ts +21 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -7
- package/dist/index.js.map +1 -0
- package/dist/instructions/index.d.ts +8 -0
- package/dist/instructions/index.d.ts.map +1 -0
- package/dist/instructions/index.js +20 -0
- package/dist/instructions/index.js.map +1 -0
- package/dist/instructions/onboarding.md +121 -0
- package/dist/logging/Logger.d.ts +53 -3
- package/dist/logging/Logger.d.ts.map +1 -1
- package/dist/logging/Logger.js +144 -4
- package/dist/logging/Logger.js.map +1 -0
- package/dist/plugins/Plugin.js +1 -0
- package/dist/plugins/Plugin.js.map +1 -0
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.js +20 -14
- package/dist/plugins/analysis/DatabaseAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +23 -16
- package/dist/plugins/analysis/ExpressAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +2 -1
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js +53 -76
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +47 -37
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +8 -14
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +144 -97
- package/dist/plugins/analysis/FetchAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +3 -5
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js.map +1 -0
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts +59 -2
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +926 -422
- package/dist/plugins/analysis/JSASTAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ReactAnalyzer.js +24 -19
- package/dist/plugins/analysis/ReactAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/RustAnalyzer.js +39 -26
- package/dist/plugins/analysis/RustAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +14 -7
- package/dist/plugins/analysis/SQLiteAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js +33 -28
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +24 -14
- package/dist/plugins/analysis/SocketIOAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SystemDbAnalyzer.js +19 -11
- package/dist/plugins/analysis/SystemDbAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ast/ConditionParser.js +1 -0
- package/dist/plugins/analysis/ast/ConditionParser.js.map +1 -0
- package/dist/plugins/analysis/ast/ExpressionEvaluator.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/ExpressionEvaluator.js +1 -0
- package/dist/plugins/analysis/ast/ExpressionEvaluator.js.map +1 -0
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts +58 -6
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +440 -56
- package/dist/plugins/analysis/ast/GraphBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/IdGenerator.js +1 -0
- package/dist/plugins/analysis/ast/IdGenerator.js.map +1 -0
- package/dist/plugins/analysis/ast/OxcAdapter.js +1 -0
- package/dist/plugins/analysis/ast/OxcAdapter.js.map +1 -0
- package/dist/plugins/analysis/ast/types.d.ts +152 -1
- package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/types.js +1 -0
- package/dist/plugins/analysis/ast/types.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.d.ts +27 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.js +45 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js +1 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/index.js +1 -0
- package/dist/plugins/analysis/ast/utils/index.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/location.js +1 -0
- package/dist/plugins/analysis/ast/utils/location.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +3 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +9 -2
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +145 -14
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +198 -0
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +4 -3
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +5 -2
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts +83 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js +258 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/index.d.ts +1 -0
- package/dist/plugins/analysis/ast/visitors/index.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/index.js +2 -0
- package/dist/plugins/analysis/ast/visitors/index.js.map +1 -0
- package/dist/plugins/discovery/DiscoveryPlugin.d.ts +42 -10
- package/dist/plugins/discovery/DiscoveryPlugin.d.ts.map +1 -1
- package/dist/plugins/discovery/DiscoveryPlugin.js +17 -1
- package/dist/plugins/discovery/DiscoveryPlugin.js.map +1 -0
- package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js.map +1 -0
- package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/SimpleProjectDiscovery.js +3 -2
- package/dist/plugins/discovery/SimpleProjectDiscovery.js.map +1 -0
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/WorkspaceDiscovery.js +3 -2
- package/dist/plugins/discovery/WorkspaceDiscovery.js.map +1 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.js +1 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.js.map +1 -0
- package/dist/plugins/discovery/workspaces/detector.js +1 -0
- package/dist/plugins/discovery/workspaces/detector.js.map +1 -0
- package/dist/plugins/discovery/workspaces/globResolver.js +1 -0
- package/dist/plugins/discovery/workspaces/globResolver.js.map +1 -0
- package/dist/plugins/discovery/workspaces/index.js +1 -0
- package/dist/plugins/discovery/workspaces/index.js.map +1 -0
- package/dist/plugins/discovery/workspaces/parsers.js +1 -0
- package/dist/plugins/discovery/workspaces/parsers.js.map +1 -0
- package/dist/plugins/enrichment/AliasTracker.js +3 -2
- package/dist/plugins/enrichment/AliasTracker.js.map +1 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.js +1 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.js.map +1 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js +1 -1
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js.map +1 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.d.ts +21 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.d.ts.map +1 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.js +137 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.js.map +1 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/ExternalCallResolver.js +1 -1
- package/dist/plugins/enrichment/ExternalCallResolver.js.map +1 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts +5 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/FunctionCallResolver.js +11 -9
- package/dist/plugins/enrichment/FunctionCallResolver.js.map +1 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +2 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +51 -13
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js.map +1 -0
- package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.js +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.js.map +1 -0
- package/dist/plugins/enrichment/InstanceOfResolver.js +3 -2
- package/dist/plugins/enrichment/InstanceOfResolver.js.map +1 -0
- package/dist/plugins/enrichment/MethodCallResolver.d.ts +39 -1
- package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MethodCallResolver.js +422 -11
- package/dist/plugins/enrichment/MethodCallResolver.js.map +1 -0
- package/dist/plugins/enrichment/MountPointResolver.d.ts +1 -1
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +7 -23
- package/dist/plugins/enrichment/MountPointResolver.js.map +1 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +2 -2
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js.map +1 -0
- package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
- package/dist/plugins/enrichment/PrefixEvaluator.js +5 -4
- package/dist/plugins/enrichment/PrefixEvaluator.js.map +1 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.d.ts +30 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.js +190 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.js.map +1 -0
- package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js.map +1 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +4 -3
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js.map +1 -0
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts +3 -1
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/IncrementalModuleIndexer.js +22 -29
- package/dist/plugins/indexing/IncrementalModuleIndexer.js.map +1 -0
- package/dist/plugins/indexing/JSModuleIndexer.d.ts +3 -1
- package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +22 -31
- package/dist/plugins/indexing/JSModuleIndexer.js.map +1 -0
- package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +11 -5
- package/dist/plugins/indexing/RustModuleIndexer.js.map +1 -0
- package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -1
- package/dist/plugins/validation/BrokenImportValidator.js +3 -3
- package/dist/plugins/validation/BrokenImportValidator.js.map +1 -0
- package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
- package/dist/plugins/validation/CallResolverValidator.js +3 -3
- package/dist/plugins/validation/CallResolverValidator.js.map +1 -0
- package/dist/plugins/validation/DataFlowValidator.js +2 -1
- package/dist/plugins/validation/DataFlowValidator.js.map +1 -0
- package/dist/plugins/validation/EvalBanValidator.js +2 -1
- package/dist/plugins/validation/EvalBanValidator.js.map +1 -0
- package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js +2 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js.map +1 -0
- package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
- package/dist/plugins/validation/SQLInjectionValidator.js +4 -2
- package/dist/plugins/validation/SQLInjectionValidator.js.map +1 -0
- package/dist/plugins/validation/ShadowingDetector.js +2 -1
- package/dist/plugins/validation/ShadowingDetector.js.map +1 -0
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +3 -3
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.js.map +1 -0
- package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
- package/dist/plugins/vcs/GitPlugin.js +13 -6
- package/dist/plugins/vcs/GitPlugin.js.map +1 -0
- package/dist/plugins/vcs/VCSPlugin.js +1 -0
- package/dist/plugins/vcs/VCSPlugin.js.map +1 -0
- package/dist/plugins/vcs/index.js +1 -0
- package/dist/plugins/vcs/index.js.map +1 -0
- package/dist/queries/findCallsInFunction.d.ts +1 -1
- package/dist/queries/findCallsInFunction.d.ts.map +1 -1
- package/dist/queries/findCallsInFunction.js +3 -2
- package/dist/queries/findCallsInFunction.js.map +1 -0
- package/dist/queries/findContainingFunction.d.ts +1 -1
- package/dist/queries/findContainingFunction.d.ts.map +1 -1
- package/dist/queries/findContainingFunction.js +1 -0
- package/dist/queries/findContainingFunction.js.map +1 -0
- package/dist/queries/index.js +1 -0
- package/dist/queries/index.js.map +1 -0
- package/dist/queries/traceValues.d.ts.map +1 -1
- package/dist/queries/traceValues.js +1 -0
- package/dist/queries/traceValues.js.map +1 -0
- package/dist/queries/types.js +1 -0
- package/dist/queries/types.js.map +1 -0
- package/dist/schema/GraphSchemaExtractor.js +1 -0
- package/dist/schema/GraphSchemaExtractor.js.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js.map +1 -0
- package/dist/schema/index.js +1 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +25 -1
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +100 -22
- package/dist/storage/backends/RFDBServerBackend.js.map +1 -0
- package/dist/storage/backends/typeValidation.d.ts.map +1 -1
- package/dist/storage/backends/typeValidation.js +3 -0
- package/dist/storage/backends/typeValidation.js.map +1 -0
- package/dist/utils/findRfdbBinary.js +1 -0
- package/dist/utils/findRfdbBinary.js.map +1 -0
- package/dist/utils/moduleResolution.d.ts +134 -0
- package/dist/utils/moduleResolution.d.ts.map +1 -0
- package/dist/utils/moduleResolution.js +164 -0
- package/dist/utils/moduleResolution.js.map +1 -0
- package/dist/validation/PathValidator.d.ts.map +1 -1
- package/dist/validation/PathValidator.js +1 -0
- package/dist/validation/PathValidator.js.map +1 -0
- package/package.json +4 -3
- package/src/Orchestrator.ts +371 -41
- package/src/api/GraphAPI.ts +4 -2
- package/src/api/GuaranteeAPI.ts +3 -2
- package/src/config/ConfigLoader.ts +121 -3
- package/src/config/index.ts +7 -1
- package/src/core/ASTWorker.ts +8 -20
- package/src/core/ASTWorkerPool.ts +1 -1
- package/src/core/CoverageAnalyzer.ts +2 -2
- package/src/core/FileNodeManager.ts +3 -2
- package/src/core/GuaranteeManager.ts +1 -1
- package/src/core/IncrementalReanalyzer.ts +6 -3
- package/src/core/NodeFactory.ts +34 -1
- package/src/core/WorkerPool.ts +2 -1
- package/src/core/nodes/NodeKind.ts +11 -0
- package/src/core/nodes/PluginNode.ts +144 -0
- package/src/core/nodes/TypeNode.ts +1 -1
- package/src/core/nodes/index.ts +4 -0
- package/src/core/toposort.ts +160 -0
- package/src/diagnostics/DiagnosticCollector.ts +8 -1
- package/src/diagnostics/DiagnosticReporter.ts +87 -16
- package/src/diagnostics/categories.ts +104 -0
- package/src/diagnostics/index.ts +14 -0
- package/src/errors/GrafemaError.ts +58 -0
- package/src/index.ts +53 -9
- package/src/instructions/index.ts +21 -0
- package/src/instructions/onboarding.md +121 -0
- package/src/logging/Logger.ts +155 -4
- package/src/plugins/analysis/DatabaseAnalyzer.ts +22 -15
- package/src/plugins/analysis/ExpressAnalyzer.ts +30 -18
- package/src/plugins/analysis/ExpressResponseAnalyzer.ts +72 -88
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +54 -39
- package/src/plugins/analysis/FetchAnalyzer.ts +165 -113
- package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +6 -7
- package/src/plugins/analysis/JSASTAnalyzer.ts +1122 -487
- package/src/plugins/analysis/ReactAnalyzer.ts +27 -20
- package/src/plugins/analysis/RustAnalyzer.ts +41 -27
- package/src/plugins/analysis/SQLiteAnalyzer.ts +18 -8
- package/src/plugins/analysis/ServiceLayerAnalyzer.ts +38 -34
- package/src/plugins/analysis/SocketIOAnalyzer.ts +30 -15
- package/src/plugins/analysis/SystemDbAnalyzer.ts +24 -13
- package/src/plugins/analysis/ast/ExpressionEvaluator.ts +1 -3
- package/src/plugins/analysis/ast/GraphBuilder.ts +532 -66
- package/src/plugins/analysis/ast/types.ts +200 -2
- package/src/plugins/analysis/ast/utils/babelTraverse.ts +74 -0
- package/src/plugins/analysis/ast/utils/createParameterNodes.ts +1 -1
- package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +7 -2
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +163 -15
- package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +249 -3
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +9 -4
- package/src/plugins/analysis/ast/visitors/PropertyAccessVisitor.ts +342 -0
- package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +2 -3
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +1 -27
- package/src/plugins/analysis/ast/visitors/index.ts +2 -0
- package/src/plugins/discovery/DiscoveryPlugin.ts +42 -11
- package/src/plugins/discovery/MonorepoServiceDiscovery.ts +2 -2
- package/src/plugins/discovery/SimpleProjectDiscovery.ts +2 -2
- package/src/plugins/discovery/WorkspaceDiscovery.ts +2 -2
- package/src/plugins/discovery/workspaces/globResolver.ts +1 -1
- package/src/plugins/enrichment/AliasTracker.ts +2 -2
- package/src/plugins/enrichment/ArgumentParameterLinker.ts +0 -1
- package/src/plugins/enrichment/ClosureCaptureEnricher.ts +0 -1
- package/src/plugins/enrichment/ExpressHandlerLinker.ts +178 -0
- package/src/plugins/enrichment/ExternalCallResolver.ts +0 -1
- package/src/plugins/enrichment/FunctionCallResolver.ts +10 -15
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +65 -14
- package/src/plugins/enrichment/ImportExportLinker.ts +0 -1
- package/src/plugins/enrichment/InstanceOfResolver.ts +2 -2
- package/src/plugins/enrichment/MethodCallResolver.ts +526 -12
- package/src/plugins/enrichment/MountPointResolver.ts +6 -24
- package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +1 -2
- package/src/plugins/enrichment/PrefixEvaluator.ts +4 -4
- package/src/plugins/enrichment/RejectionPropagationEnricher.ts +253 -0
- package/src/plugins/enrichment/RustFFIEnricher.ts +0 -1
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +3 -3
- package/src/plugins/indexing/IncrementalModuleIndexer.ts +24 -30
- package/src/plugins/indexing/JSModuleIndexer.ts +21 -22
- package/src/plugins/indexing/RustModuleIndexer.ts +10 -5
- package/src/plugins/validation/BrokenImportValidator.ts +2 -3
- package/src/plugins/validation/CallResolverValidator.ts +2 -3
- package/src/plugins/validation/DataFlowValidator.ts +1 -1
- package/src/plugins/validation/EvalBanValidator.ts +1 -1
- package/src/plugins/validation/GraphConnectivityValidator.ts +1 -9
- package/src/plugins/validation/SQLInjectionValidator.ts +3 -2
- package/src/plugins/validation/ShadowingDetector.ts +1 -1
- package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +2 -3
- package/src/plugins/vcs/GitPlugin.ts +12 -6
- package/src/queries/findCallsInFunction.ts +4 -4
- package/src/queries/findContainingFunction.ts +1 -1
- package/src/queries/traceValues.ts +0 -1
- package/src/storage/backends/RFDBServerBackend.ts +115 -25
- package/src/storage/backends/typeValidation.ts +2 -0
- package/src/utils/moduleResolution.ts +244 -0
- package/src/validation/PathValidator.ts +0 -8
- package/src/plugins/validation/NodeCreationValidator.ts +0 -554
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImportExportLinker.d.ts","sourceRoot":"","sources":["../../../src/plugins/enrichment/ImportExportLinker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAmBhF,qBAAa,kBAAmB,SAAQ,MAAM;IAC5C,IAAI,QAAQ,IAAI,cAAc,
|
|
1
|
+
{"version":3,"file":"ImportExportLinker.d.ts","sourceRoot":"","sources":["../../../src/plugins/enrichment/ImportExportLinker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAmBhF,qBAAa,kBAAmB,SAAQ,MAAM;IAC5C,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA2I5D;;;OAGG;YACW,gBAAgB;IA+B9B;;OAEG;YACW,iBAAiB;CAWhC"}
|
|
@@ -19,7 +19,6 @@ export class ImportExportLinker extends Plugin {
|
|
|
19
19
|
return {
|
|
20
20
|
name: 'ImportExportLinker',
|
|
21
21
|
phase: 'ENRICHMENT',
|
|
22
|
-
priority: 90, // Run early in enrichment, after analysis
|
|
23
22
|
creates: {
|
|
24
23
|
nodes: [],
|
|
25
24
|
edges: ['IMPORTS', 'IMPORTS_FROM']
|
|
@@ -191,3 +190,4 @@ export class ImportExportLinker extends Plugin {
|
|
|
191
190
|
return lookup;
|
|
192
191
|
}
|
|
193
192
|
}
|
|
193
|
+
//# sourceMappingURL=ImportExportLinker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImportExportLinker.js","sourceRoot":"","sources":["../../../src/plugins/enrichment/ImportExportLinker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAoB3D,MAAM,OAAO,kBAAmB,SAAQ,MAAM;IAC5C,IAAI,QAAQ;QACV,OAAO;YACL,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE;gBACP,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC;aACnC;YACD,YAAY,EAAE,CAAC,eAAe,CAAC,CAAC,mCAAmC;SACpE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAsB;QAClC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEjC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,qEAAqE;QACrE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC;QAErF,sDAAsD;QACtD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAE/D,mCAAmC;QACnC,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,IAAkB,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAEhE,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAEvB,qBAAqB;YACrB,IAAI,UAAU,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;gBAChC,UAAU,CAAC;oBACT,KAAK,EAAE,YAAY;oBACnB,aAAa,EAAE,oBAAoB;oBACnC,OAAO,EAAE,mBAAmB,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;oBACjD,UAAU,EAAE,OAAO,CAAC,MAAM;oBAC1B,cAAc,EAAE,CAAC;iBAClB,CAAC,CAAC;YACL,CAAC;YAED,+CAA+C;YAC/C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/F,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YAED,2BAA2B;YAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,MAAO,CAAC,CAAC;YAElD,2BAA2B;YAC3B,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAChF,IAAI,UAAU,GAAkB,IAAI,CAAC;YACrC,IAAI,aAAa,GAAmC,IAAI,CAAC;YAEzD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;gBAChC,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9B,UAAU,GAAG,QAAQ,CAAC;oBACtB,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;oBAC3C,MAAM;gBACR,CAAC;gBACD,oEAAoE;gBACpE,IAAI,CAAC,UAAU,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/C,UAAU,GAAG,QAAQ,CAAC;oBACtB,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;oBACvD,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;gBAClC,QAAQ,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,+DAA+D;YAC/D,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC;YAClD,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACnD,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;gBACjC,MAAM,KAAK,CAAC,OAAO,CAAC;oBAClB,IAAI,EAAE,SAAS;oBACf,GAAG,EAAE,YAAY,CAAC,EAAE;oBACpB,GAAG,EAAE,YAAY,CAAC,EAAE;iBACrB,CAAC,CAAC;gBACH,YAAY,EAAE,CAAC;YACjB,CAAC;YAED,4CAA4C;YAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,qCAAqC;YACxE,IAAI,YAAoC,CAAC;YAEzC,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;gBAC/B,6DAA6D;gBAC7D,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;iBAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBACpC,iDAAiD;gBACjD,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,yDAAyD;gBACzD,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC1C,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9C,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,KAAK,CAAC,OAAO,CAAC;oBAClB,IAAI,EAAE,cAAc;oBACpB,GAAG,EAAE,GAAG,CAAC,EAAE;oBACX,GAAG,EAAE,YAAY,CAAC,EAAE;iBACrB,CAAC,CAAC;gBACH,YAAY,EAAE,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;YACtB,YAAY;YACZ,OAAO;YACP,QAAQ;YACR,IAAI,EAAE,GAAG,SAAS,GAAG;SACtB,CAAC,CAAC;QAEH,OAAO,mBAAmB,CACxB,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EACjC;YACE,gBAAgB,EAAE,OAAO,CAAC,MAAM;YAChC,YAAY;YACZ,OAAO;YACP,QAAQ;YACR,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SAC/B,CACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,gBAAgB,CAAC,KAA6B;QAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmC,CAAC;QAEzD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,IAAkB,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,IAAI;gBAAE,SAAS;YAE/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;YAEhD,iCAAiC;YACjC,IAAI,SAAiB,CAAC;YACtB,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACxC,SAAS,GAAG,SAAS,CAAC;YACxB,CAAC;iBAAM,IAAI,UAAU,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;gBAC7C,SAAS,GAAG,SAAS,UAAU,CAAC,IAAI,EAAE,CAAC;YACzC,CAAC;iBAAM,IAAI,UAAU,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;gBAC3C,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,WAAW,UAAU,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;YAC1D,CAAC;YAED,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,KAA6B;QAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;QAEjD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAClE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -19,11 +19,11 @@ export class InstanceOfResolver extends Plugin {
|
|
|
19
19
|
return {
|
|
20
20
|
name: 'InstanceOfResolver',
|
|
21
21
|
phase: 'ENRICHMENT',
|
|
22
|
-
priority: 100, // Высокий приоритет - должен выполняться перед другими enrichment плагинами
|
|
23
22
|
creates: {
|
|
24
23
|
nodes: [],
|
|
25
24
|
edges: ['INSTANCE_OF'] // Пере-создаёт INSTANCE_OF edges
|
|
26
|
-
}
|
|
25
|
+
},
|
|
26
|
+
dependencies: ['JSASTAnalyzer']
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
29
|
async execute(context) {
|
|
@@ -115,3 +115,4 @@ export class InstanceOfResolver extends Plugin {
|
|
|
115
115
|
return createSuccessResult({ nodes: 0, edges: resolvedCount }, { resolvedInstanceOf: resolvedCount, removedStubs: removedStubs });
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
+
//# sourceMappingURL=InstanceOfResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstanceOfResolver.js","sourceRoot":"","sources":["../../../src/plugins/enrichment/InstanceOfResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,26 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { Plugin } from '../Plugin.js';
|
|
14
14
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
15
|
+
/**
|
|
16
|
+
* Semantic groups for library coverage reporting.
|
|
17
|
+
* Maps library namespaces to their semantic category and suggested plugin.
|
|
18
|
+
*/
|
|
19
|
+
export declare const LIBRARY_SEMANTIC_GROUPS: Record<string, {
|
|
20
|
+
semantic: string;
|
|
21
|
+
suggestedPlugin: string;
|
|
22
|
+
description: string;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Library call statistics for coverage reporting
|
|
26
|
+
*/
|
|
27
|
+
export interface LibraryCallStats {
|
|
28
|
+
object: string;
|
|
29
|
+
methods: Map<string, number>;
|
|
30
|
+
totalCalls: number;
|
|
31
|
+
semantic?: string;
|
|
32
|
+
suggestedPlugin?: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
}
|
|
15
35
|
export declare class MethodCallResolver extends Plugin {
|
|
16
36
|
private _containingClassCache?;
|
|
17
37
|
get metadata(): PluginMetadata;
|
|
@@ -34,8 +54,26 @@ export declare class MethodCallResolver extends Plugin {
|
|
|
34
54
|
private findContainingClass;
|
|
35
55
|
private findContainingClassRecursive;
|
|
36
56
|
/**
|
|
37
|
-
*
|
|
57
|
+
* Checks if a method call is external (built-in or well-known library).
|
|
58
|
+
* In strict mode, external methods are skipped (no error if unresolved).
|
|
38
59
|
*/
|
|
39
60
|
private isExternalMethod;
|
|
61
|
+
/**
|
|
62
|
+
* Check if object is a built-in JavaScript global (not a library namespace)
|
|
63
|
+
*/
|
|
64
|
+
private isBuiltInObject;
|
|
65
|
+
/**
|
|
66
|
+
* Track a library method call for coverage reporting
|
|
67
|
+
*/
|
|
68
|
+
private trackLibraryCall;
|
|
69
|
+
/**
|
|
70
|
+
* Analyze why method resolution failed (REG-332).
|
|
71
|
+
* Returns the failure reason and resolution chain for context-aware suggestions.
|
|
72
|
+
*/
|
|
73
|
+
private analyzeResolutionFailure;
|
|
74
|
+
/**
|
|
75
|
+
* Generate context-aware suggestion based on failure reason (REG-332).
|
|
76
|
+
*/
|
|
77
|
+
private generateContextualSuggestion;
|
|
40
78
|
}
|
|
41
79
|
//# sourceMappingURL=MethodCallResolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MethodCallResolver.d.ts","sourceRoot":"","sources":["../../../src/plugins/enrichment/MethodCallResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"MethodCallResolver.d.ts","sourceRoot":"","sources":["../../../src/plugins/enrichment/MethodCallResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAuB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA6JhF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAkDtH,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoBD,qBAAa,kBAAmB,SAAQ,MAAM;IAC5C,OAAO,CAAC,qBAAqB,CAAC,CAAqC;IAEnE,IAAI,QAAQ,IAAI,cAAc,CAU7B;IAEK,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA+M5D;;OAEG;YACW,qBAAqB;IA0CnC;;OAEG;YACW,sBAAsB;IAkBpC;;OAEG;YACW,iBAAiB;IA0D/B;;OAEG;YACW,mBAAmB;YAqBnB,4BAA4B;IAyB1C;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA+CxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAwEhC;;OAEG;IACH,OAAO,CAAC,4BAA4B;CAwCrC"}
|
|
@@ -12,17 +12,187 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { Plugin, createSuccessResult } from '../Plugin.js';
|
|
14
14
|
import { StrictModeError } from '../../errors/GrafemaError.js';
|
|
15
|
+
/**
|
|
16
|
+
* Built-in JavaScript prototype methods that should never error in strict mode.
|
|
17
|
+
* These exist on primitive types and common objects.
|
|
18
|
+
*/
|
|
19
|
+
const BUILTIN_PROTOTYPE_METHODS = new Set([
|
|
20
|
+
// Array.prototype
|
|
21
|
+
'concat', 'copyWithin', 'entries', 'every', 'fill', 'filter', 'find',
|
|
22
|
+
'findIndex', 'findLast', 'findLastIndex', 'flat', 'flatMap', 'forEach',
|
|
23
|
+
'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'map', 'pop',
|
|
24
|
+
'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some',
|
|
25
|
+
'sort', 'splice', 'toLocaleString', 'toReversed', 'toSorted', 'toSpliced',
|
|
26
|
+
'toString', 'unshift', 'values', 'with', 'at',
|
|
27
|
+
// String.prototype
|
|
28
|
+
'charAt', 'charCodeAt', 'codePointAt', 'endsWith', 'localeCompare',
|
|
29
|
+
'match', 'matchAll', 'normalize', 'padEnd', 'padStart', 'repeat',
|
|
30
|
+
'replace', 'replaceAll', 'search', 'split', 'startsWith', 'substring',
|
|
31
|
+
'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase',
|
|
32
|
+
'trim', 'trimEnd', 'trimStart',
|
|
33
|
+
// Object.prototype (commonly called on objects)
|
|
34
|
+
'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'valueOf',
|
|
35
|
+
// Number.prototype
|
|
36
|
+
'toExponential', 'toFixed', 'toPrecision',
|
|
37
|
+
// Date.prototype
|
|
38
|
+
'getDate', 'getDay', 'getFullYear', 'getHours', 'getMilliseconds',
|
|
39
|
+
'getMinutes', 'getMonth', 'getSeconds', 'getTime', 'getTimezoneOffset',
|
|
40
|
+
'getUTCDate', 'getUTCDay', 'getUTCFullYear', 'getUTCHours',
|
|
41
|
+
'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth', 'getUTCSeconds',
|
|
42
|
+
'setDate', 'setFullYear', 'setHours', 'setMilliseconds', 'setMinutes',
|
|
43
|
+
'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear',
|
|
44
|
+
'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth',
|
|
45
|
+
'setUTCSeconds', 'toDateString', 'toISOString', 'toJSON',
|
|
46
|
+
'toLocaleDateString', 'toLocaleTimeString', 'toTimeString', 'toUTCString',
|
|
47
|
+
// Map.prototype
|
|
48
|
+
'clear', 'delete', 'get', 'has', 'set', 'size',
|
|
49
|
+
// Set.prototype (same as Map + add)
|
|
50
|
+
'add',
|
|
51
|
+
// Promise.prototype
|
|
52
|
+
'then', 'catch', 'finally',
|
|
53
|
+
// Function.prototype
|
|
54
|
+
'apply', 'bind', 'call',
|
|
55
|
+
// RegExp.prototype
|
|
56
|
+
'exec', 'test',
|
|
57
|
+
]);
|
|
58
|
+
/**
|
|
59
|
+
* Common library method patterns that should be treated as external.
|
|
60
|
+
* These are methods from well-known npm packages.
|
|
61
|
+
*/
|
|
62
|
+
const COMMON_LIBRARY_METHODS = new Set([
|
|
63
|
+
// Express/HTTP response
|
|
64
|
+
'json', 'status', 'send', 'redirect', 'render', 'sendFile', 'sendStatus',
|
|
65
|
+
'type', 'format', 'attachment', 'download', 'end', 'cookie', 'clearCookie',
|
|
66
|
+
'location', 'links', 'jsonp', 'vary', 'append', 'header', 'setHeader',
|
|
67
|
+
// Express router/app
|
|
68
|
+
'use', 'route', 'param', 'all', 'listen',
|
|
69
|
+
// HTTP methods (router.get, router.post, etc.)
|
|
70
|
+
// Note: 'get' is also in BUILTIN_PROTOTYPE_METHODS (Map.get)
|
|
71
|
+
'post', 'put', 'patch', 'options', 'head',
|
|
72
|
+
// Socket.io
|
|
73
|
+
'on', 'emit', 'to', 'in', 'join', 'leave', 'disconnect', 'broadcast',
|
|
74
|
+
'once', 'off', 'removeListener', 'removeAllListeners',
|
|
75
|
+
// EventEmitter
|
|
76
|
+
'addListener', 'prependListener', 'prependOnceListener', 'listeners',
|
|
77
|
+
'listenerCount', 'eventNames', 'rawListeners', 'setMaxListeners',
|
|
78
|
+
'getMaxListeners',
|
|
79
|
+
// Fetch API / Response
|
|
80
|
+
'text', 'blob', 'arrayBuffer', 'formData', 'clone', 'ok', 'redirected',
|
|
81
|
+
// Node.js streams
|
|
82
|
+
'pipe', 'unpipe', 'read', 'write', 'pause', 'resume', 'destroy', 'cork',
|
|
83
|
+
'uncork', 'setEncoding', 'setDefaultEncoding',
|
|
84
|
+
// Axios
|
|
85
|
+
'request', 'interceptors', 'create',
|
|
86
|
+
// JWT (jsonwebtoken)
|
|
87
|
+
'sign', 'verify', 'decode',
|
|
88
|
+
// Telegram bot API (node-telegram-bot-api)
|
|
89
|
+
'sendMessage', 'sendPhoto', 'sendDocument', 'sendVideo', 'sendAudio',
|
|
90
|
+
'sendSticker', 'sendVoice', 'sendLocation', 'sendVenue', 'sendContact',
|
|
91
|
+
'sendPoll', 'sendDice', 'sendChatAction', 'onText', 'onMessage',
|
|
92
|
+
'answerCallbackQuery', 'editMessageText', 'deleteMessage', 'forwardMessage',
|
|
93
|
+
'copyMessage', 'getUpdates', 'setWebHook', 'deleteWebHook', 'getWebHookInfo',
|
|
94
|
+
// Database (SQLite, better-sqlite3, knex, sequelize)
|
|
95
|
+
'run', 'all', 'prepare', 'exec', 'query', 'transaction', 'pragma',
|
|
96
|
+
'backup', 'serialize', 'parallelize', 'raw', 'select', 'insert', 'update',
|
|
97
|
+
'from', 'where', 'whereIn', 'whereNot', 'orWhere', 'andWhere',
|
|
98
|
+
'orderBy', 'groupBy', 'having', 'limit', 'offset', 'first',
|
|
99
|
+
// Express-validator
|
|
100
|
+
'custom', 'isEmail', 'isLength', 'isNumeric', 'isInt', 'isFloat',
|
|
101
|
+
'isBoolean', 'isDate', 'isURL', 'isUUID', 'isEmpty', 'isNotEmpty',
|
|
102
|
+
'exists', 'optional', 'notEmpty', 'bail', 'withMessage', 'sanitize',
|
|
103
|
+
'trim', 'escape', 'normalizeEmail', 'toInt', 'toFloat', 'toBoolean',
|
|
104
|
+
'toDate', 'check', 'body', 'param', 'validationResult',
|
|
105
|
+
// dotenv
|
|
106
|
+
'config', 'parse',
|
|
107
|
+
// SQLite (statement methods)
|
|
108
|
+
'finalize', 'step', 'bind', 'reset', 'columns', 'safeIntegers',
|
|
109
|
+
'pluck', 'expand', 'iterate', 'reader',
|
|
110
|
+
// Additional Telegram bot methods
|
|
111
|
+
'editMessageReplyMarkup', 'editMessageCaption', 'editMessageMedia',
|
|
112
|
+
'stopPoll', 'sendMediaGroup', 'sendAnimation', 'sendVideoNote',
|
|
113
|
+
'kickChatMember', 'banChatMember', 'unbanChatMember', 'restrictChatMember',
|
|
114
|
+
'promoteChatMember', 'setChatPermissions', 'setChatPhoto', 'deleteChatPhoto',
|
|
115
|
+
'setChatTitle', 'setChatDescription', 'pinChatMessage', 'unpinChatMessage',
|
|
116
|
+
'leaveChat', 'getChat', 'getChatMember', 'getChatMembersCount',
|
|
117
|
+
'getChatAdministrators', 'answerInlineQuery', 'sendInvoice',
|
|
118
|
+
'answerShippingQuery', 'answerPreCheckoutQuery', 'getMe',
|
|
119
|
+
// Crypto
|
|
120
|
+
'digest', 'update', 'hash', 'createHash', 'createHmac', 'createCipheriv',
|
|
121
|
+
'createDecipheriv', 'randomBytes', 'pbkdf2', 'scrypt', 'generateKeyPair',
|
|
122
|
+
// Express factory methods
|
|
123
|
+
'urlencoded', 'static', 'Router',
|
|
124
|
+
// DOM
|
|
125
|
+
'addEventListener', 'removeEventListener', 'dispatchEvent', 'querySelector',
|
|
126
|
+
'querySelectorAll', 'getElementById', 'getElementsByClassName',
|
|
127
|
+
'getElementsByTagName', 'createElement', 'createTextNode', 'appendChild',
|
|
128
|
+
'removeChild', 'insertBefore', 'replaceChild', 'cloneNode', 'getAttribute',
|
|
129
|
+
'setAttribute', 'removeAttribute', 'hasAttribute', 'classList', 'focus',
|
|
130
|
+
'blur', 'click', 'submit', 'reset', 'preventDefault', 'stopPropagation',
|
|
131
|
+
'stopImmediatePropagation',
|
|
132
|
+
// Browser storage
|
|
133
|
+
'getItem', 'setItem', 'removeItem', 'key', 'length',
|
|
134
|
+
// React
|
|
135
|
+
'createRoot', 'render', 'unmount', 'useState', 'useEffect', 'useCallback',
|
|
136
|
+
'useMemo', 'useRef', 'useContext', 'useReducer',
|
|
137
|
+
]);
|
|
138
|
+
/**
|
|
139
|
+
* Semantic groups for library coverage reporting.
|
|
140
|
+
* Maps library namespaces to their semantic category and suggested plugin.
|
|
141
|
+
*/
|
|
142
|
+
export const LIBRARY_SEMANTIC_GROUPS = {
|
|
143
|
+
// HTTP Clients
|
|
144
|
+
axios: { semantic: 'http-client', suggestedPlugin: 'FetchAnalyzer', description: 'HTTP requests not tracked' },
|
|
145
|
+
got: { semantic: 'http-client', suggestedPlugin: 'FetchAnalyzer', description: 'HTTP requests not tracked' },
|
|
146
|
+
superagent: { semantic: 'http-client', suggestedPlugin: 'FetchAnalyzer', description: 'HTTP requests not tracked' },
|
|
147
|
+
request: { semantic: 'http-client', suggestedPlugin: 'FetchAnalyzer', description: 'HTTP requests not tracked' },
|
|
148
|
+
ky: { semantic: 'http-client', suggestedPlugin: 'FetchAnalyzer', description: 'HTTP requests not tracked' },
|
|
149
|
+
// HTTP Response (Express-like)
|
|
150
|
+
res: { semantic: 'http-response', suggestedPlugin: 'ExpressResponseAnalyzer', description: 'Response data flow not tracked' },
|
|
151
|
+
ctx: { semantic: 'http-response', suggestedPlugin: 'KoaResponseAnalyzer', description: 'Response data flow not tracked' },
|
|
152
|
+
reply: { semantic: 'http-response', suggestedPlugin: 'FastifyResponseAnalyzer', description: 'Response data flow not tracked' },
|
|
153
|
+
// Routers
|
|
154
|
+
router: { semantic: 'http-router', suggestedPlugin: 'ExpressRouteAnalyzer', description: 'Routes may not be tracked' },
|
|
155
|
+
app: { semantic: 'http-router', suggestedPlugin: 'ExpressRouteAnalyzer', description: 'Routes may not be tracked' },
|
|
156
|
+
// WebSocket
|
|
157
|
+
socket: { semantic: 'websocket', suggestedPlugin: 'SocketIOAnalyzer', description: 'WebSocket events not tracked' },
|
|
158
|
+
io: { semantic: 'websocket', suggestedPlugin: 'SocketIOAnalyzer', description: 'WebSocket events not tracked' },
|
|
159
|
+
ws: { semantic: 'websocket', suggestedPlugin: 'WebSocketAnalyzer', description: 'WebSocket events not tracked' },
|
|
160
|
+
// Database
|
|
161
|
+
knex: { semantic: 'database', suggestedPlugin: 'KnexAnalyzer', description: 'Database queries not tracked' },
|
|
162
|
+
sequelize: { semantic: 'database', suggestedPlugin: 'SequelizeAnalyzer', description: 'Database queries not tracked' },
|
|
163
|
+
prisma: { semantic: 'database', suggestedPlugin: 'PrismaAnalyzer', description: 'Database queries not tracked' },
|
|
164
|
+
mongoose: { semantic: 'database', suggestedPlugin: 'MongooseAnalyzer', description: 'Database queries not tracked' },
|
|
165
|
+
db: { semantic: 'database', suggestedPlugin: 'DatabaseAnalyzer', description: 'Database queries not tracked' },
|
|
166
|
+
pool: { semantic: 'database', suggestedPlugin: 'DatabaseAnalyzer', description: 'Database queries not tracked' },
|
|
167
|
+
// Auth
|
|
168
|
+
jwt: { semantic: 'auth', suggestedPlugin: 'AuthAnalyzer', description: 'Auth flow not visible' },
|
|
169
|
+
jsonwebtoken: { semantic: 'auth', suggestedPlugin: 'AuthAnalyzer', description: 'Auth flow not visible' },
|
|
170
|
+
passport: { semantic: 'auth', suggestedPlugin: 'PassportAnalyzer', description: 'Auth strategies not tracked' },
|
|
171
|
+
bcrypt: { semantic: 'auth', suggestedPlugin: 'AuthAnalyzer', description: 'Password handling not tracked' },
|
|
172
|
+
// Validation
|
|
173
|
+
validator: { semantic: 'validation', suggestedPlugin: 'ValidationAnalyzer', description: 'Validation rules not tracked' },
|
|
174
|
+
joi: { semantic: 'validation', suggestedPlugin: 'JoiAnalyzer', description: 'Validation schemas not tracked' },
|
|
175
|
+
yup: { semantic: 'validation', suggestedPlugin: 'YupAnalyzer', description: 'Validation schemas not tracked' },
|
|
176
|
+
zod: { semantic: 'validation', suggestedPlugin: 'ZodAnalyzer', description: 'Validation schemas not tracked' },
|
|
177
|
+
// Logging
|
|
178
|
+
logger: { semantic: 'logging', suggestedPlugin: 'LoggingAnalyzer', description: 'Log statements not tracked' },
|
|
179
|
+
winston: { semantic: 'logging', suggestedPlugin: 'LoggingAnalyzer', description: 'Log statements not tracked' },
|
|
180
|
+
pino: { semantic: 'logging', suggestedPlugin: 'LoggingAnalyzer', description: 'Log statements not tracked' },
|
|
181
|
+
bunyan: { semantic: 'logging', suggestedPlugin: 'LoggingAnalyzer', description: 'Log statements not tracked' },
|
|
182
|
+
// Telegram bot
|
|
183
|
+
bot: { semantic: 'telegram-bot', suggestedPlugin: 'TelegramBotAnalyzer', description: 'Bot commands not tracked' },
|
|
184
|
+
};
|
|
15
185
|
export class MethodCallResolver extends Plugin {
|
|
16
186
|
_containingClassCache;
|
|
17
187
|
get metadata() {
|
|
18
188
|
return {
|
|
19
189
|
name: 'MethodCallResolver',
|
|
20
190
|
phase: 'ENRICHMENT',
|
|
21
|
-
priority: 50,
|
|
22
191
|
creates: {
|
|
23
192
|
nodes: [],
|
|
24
193
|
edges: ['CALLS']
|
|
25
|
-
}
|
|
194
|
+
},
|
|
195
|
+
dependencies: ['ImportExportLinker']
|
|
26
196
|
};
|
|
27
197
|
}
|
|
28
198
|
async execute(context) {
|
|
@@ -32,15 +202,40 @@ export class MethodCallResolver extends Plugin {
|
|
|
32
202
|
let methodCallsProcessed = 0;
|
|
33
203
|
let edgesCreated = 0;
|
|
34
204
|
let unresolved = 0;
|
|
205
|
+
let externalSkipped = 0;
|
|
206
|
+
let suppressedByIgnore = 0; // REG-332: Count of errors suppressed by grafema-ignore
|
|
35
207
|
const errors = [];
|
|
208
|
+
// Track library calls for coverage reporting
|
|
209
|
+
const libraryCallStats = new Map();
|
|
36
210
|
// Собираем все METHOD_CALL ноды (CALL с object атрибутом)
|
|
37
|
-
|
|
211
|
+
// REG-332: Deduplicate by (object, method, file, line), preferring nodes with grafemaIgnore
|
|
212
|
+
const methodCallMap = new Map();
|
|
38
213
|
for await (const node of graph.queryNodes({ nodeType: 'CALL' })) {
|
|
39
214
|
const callNode = node;
|
|
40
215
|
if (callNode.object) {
|
|
41
|
-
|
|
216
|
+
// REG-332: Extract grafemaIgnore from metadata if present
|
|
217
|
+
if (callNode.metadata) {
|
|
218
|
+
try {
|
|
219
|
+
const meta = typeof callNode.metadata === 'string'
|
|
220
|
+
? JSON.parse(callNode.metadata)
|
|
221
|
+
: callNode.metadata;
|
|
222
|
+
if (meta.grafemaIgnore) {
|
|
223
|
+
callNode.grafemaIgnore = meta.grafemaIgnore;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
// Ignore parse errors
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Deduplicate: prefer node with grafemaIgnore if one exists
|
|
231
|
+
const key = `${callNode.object}.${callNode.method}:${callNode.file}:${callNode.line}`;
|
|
232
|
+
const existing = methodCallMap.get(key);
|
|
233
|
+
if (!existing || (callNode.grafemaIgnore && !existing.grafemaIgnore)) {
|
|
234
|
+
methodCallMap.set(key, callNode);
|
|
235
|
+
}
|
|
42
236
|
}
|
|
43
237
|
}
|
|
238
|
+
const methodCalls = Array.from(methodCallMap.values());
|
|
44
239
|
logger.info('Found method calls to resolve', { count: methodCalls.length });
|
|
45
240
|
// Собираем все классы и их методы для быстрого поиска
|
|
46
241
|
const classMethodIndex = await this.buildClassMethodIndex(graph, logger);
|
|
@@ -74,6 +269,13 @@ export class MethodCallResolver extends Plugin {
|
|
|
74
269
|
}
|
|
75
270
|
// Пропускаем внешние методы (console, Array.prototype, etc.)
|
|
76
271
|
if (this.isExternalMethod(methodCall.object, methodCall.method)) {
|
|
272
|
+
externalSkipped++;
|
|
273
|
+
// Track library calls for coverage reporting (skip built-in objects)
|
|
274
|
+
const obj = methodCall.object;
|
|
275
|
+
const method = methodCall.method;
|
|
276
|
+
if (!this.isBuiltInObject(obj) && !BUILTIN_PROTOTYPE_METHODS.has(method)) {
|
|
277
|
+
this.trackLibraryCall(libraryCallStats, obj, method);
|
|
278
|
+
}
|
|
77
279
|
continue;
|
|
78
280
|
}
|
|
79
281
|
// Проверяем есть ли уже CALLS ребро
|
|
@@ -93,8 +295,21 @@ export class MethodCallResolver extends Plugin {
|
|
|
93
295
|
}
|
|
94
296
|
else {
|
|
95
297
|
unresolved++;
|
|
96
|
-
// In strict mode, collect error
|
|
298
|
+
// In strict mode, collect error with context-aware analysis (REG-332)
|
|
97
299
|
if (context.strictMode) {
|
|
300
|
+
// REG-332: Check for grafema-ignore suppression
|
|
301
|
+
if (methodCall.grafemaIgnore?.code === 'STRICT_UNRESOLVED_METHOD') {
|
|
302
|
+
suppressedByIgnore++;
|
|
303
|
+
logger.debug('Suppressed by grafema-ignore', {
|
|
304
|
+
call: `${methodCall.object}.${methodCall.method}`,
|
|
305
|
+
reason: methodCall.grafemaIgnore.reason,
|
|
306
|
+
});
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
// Analyze WHY resolution failed
|
|
310
|
+
const { reason, chain } = this.analyzeResolutionFailure(methodCall, classMethodIndex, variableTypes);
|
|
311
|
+
// Generate context-aware suggestion based on failure reason
|
|
312
|
+
const suggestion = this.generateContextualSuggestion(methodCall.object, methodCall.method, reason, chain);
|
|
98
313
|
const error = new StrictModeError(`Cannot resolve method call: ${methodCall.object}.${methodCall.method}`, 'STRICT_UNRESOLVED_METHOD', {
|
|
99
314
|
filePath: methodCall.file,
|
|
100
315
|
lineNumber: methodCall.line,
|
|
@@ -102,18 +317,44 @@ export class MethodCallResolver extends Plugin {
|
|
|
102
317
|
plugin: 'MethodCallResolver',
|
|
103
318
|
object: methodCall.object,
|
|
104
319
|
method: methodCall.method,
|
|
105
|
-
|
|
320
|
+
resolutionChain: chain,
|
|
321
|
+
failureReason: reason,
|
|
322
|
+
}, suggestion);
|
|
106
323
|
errors.push(error);
|
|
107
324
|
}
|
|
108
325
|
}
|
|
109
326
|
}
|
|
327
|
+
// Convert library stats to array for reporting
|
|
328
|
+
const libraryStats = Array.from(libraryCallStats.values())
|
|
329
|
+
.sort((a, b) => b.totalCalls - a.totalCalls);
|
|
110
330
|
const summary = {
|
|
111
331
|
methodCallsProcessed,
|
|
112
332
|
edgesCreated,
|
|
113
333
|
unresolved,
|
|
114
|
-
|
|
334
|
+
externalSkipped,
|
|
335
|
+
suppressedByIgnore, // REG-332
|
|
336
|
+
classesIndexed: classMethodIndex.size,
|
|
337
|
+
libraryStats
|
|
115
338
|
};
|
|
116
|
-
logger.info('Summary',
|
|
339
|
+
logger.info('Summary', {
|
|
340
|
+
methodCallsProcessed,
|
|
341
|
+
edgesCreated,
|
|
342
|
+
unresolved,
|
|
343
|
+
externalSkipped,
|
|
344
|
+
suppressedByIgnore, // REG-332
|
|
345
|
+
libraryCallsTracked: libraryStats.length
|
|
346
|
+
});
|
|
347
|
+
// Log library coverage report if there are tracked calls
|
|
348
|
+
if (libraryStats.length > 0) {
|
|
349
|
+
logger.info('Library coverage report', {
|
|
350
|
+
libraries: libraryStats.map(s => ({
|
|
351
|
+
library: s.object,
|
|
352
|
+
calls: s.totalCalls,
|
|
353
|
+
semantic: s.semantic,
|
|
354
|
+
suggestion: s.suggestedPlugin
|
|
355
|
+
}))
|
|
356
|
+
});
|
|
357
|
+
}
|
|
117
358
|
return createSuccessResult({ nodes: 0, edges: edgesCreated }, summary, errors);
|
|
118
359
|
}
|
|
119
360
|
/**
|
|
@@ -257,16 +498,186 @@ export class MethodCallResolver extends Plugin {
|
|
|
257
498
|
return null;
|
|
258
499
|
}
|
|
259
500
|
/**
|
|
260
|
-
*
|
|
501
|
+
* Checks if a method call is external (built-in or well-known library).
|
|
502
|
+
* In strict mode, external methods are skipped (no error if unresolved).
|
|
261
503
|
*/
|
|
262
504
|
isExternalMethod(object, method) {
|
|
505
|
+
// Known global objects (console, Math, etc.)
|
|
263
506
|
const externalObjects = new Set([
|
|
264
507
|
'console', 'Math', 'JSON', 'Object', 'Array', 'String', 'Number',
|
|
265
508
|
'Boolean', 'Date', 'RegExp', 'Error', 'Promise', 'Set', 'Map',
|
|
266
509
|
'WeakSet', 'WeakMap', 'Symbol', 'Proxy', 'Reflect', 'Intl',
|
|
267
510
|
'process', 'global', 'window', 'document', 'Buffer',
|
|
268
|
-
'fs', 'path', 'http', 'https', 'crypto', 'os', 'url', 'util'
|
|
511
|
+
'fs', 'path', 'http', 'https', 'crypto', 'os', 'url', 'util',
|
|
512
|
+
'localStorage', 'sessionStorage', 'navigator', 'location', 'history',
|
|
513
|
+
'performance', 'fetch', 'XMLHttpRequest', 'WebSocket',
|
|
514
|
+
'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval',
|
|
515
|
+
'requestAnimationFrame', 'cancelAnimationFrame',
|
|
516
|
+
'Atomics', 'SharedArrayBuffer', 'DataView', 'ArrayBuffer',
|
|
517
|
+
'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array',
|
|
518
|
+
'Uint16Array', 'Int32Array', 'Uint32Array', 'Float32Array',
|
|
519
|
+
'Float64Array', 'BigInt64Array', 'BigUint64Array',
|
|
520
|
+
// Common npm package namespaces
|
|
521
|
+
'dotenv', 'express', 'axios', 'lodash', '_', 'moment', 'dayjs',
|
|
522
|
+
'sqlite3', 'pg', 'mysql', 'mysql2', 'mongodb', 'mongoose', 'sequelize',
|
|
523
|
+
'knex', 'typeorm', 'prisma', 'jwt', 'jsonwebtoken', 'bcrypt', 'bcryptjs',
|
|
524
|
+
'passport', 'multer', 'nodemailer', 'winston', 'bunyan', 'pino',
|
|
525
|
+
'chalk', 'colors', 'yargs', 'commander', 'inquirer', 'ora', 'figlet',
|
|
526
|
+
'uuid', 'nanoid', 'shortid', 'validator', 'joi', 'yup', 'zod',
|
|
527
|
+
'cheerio', 'puppeteer', 'playwright', 'selenium', 'sharp', 'jimp',
|
|
528
|
+
'socket', 'io', 'ws', 'Redis', 'redis', 'ioredis', 'amqp', 'amqplib',
|
|
529
|
+
'aws', 'AWS', 's3', 'sqs', 'sns', 'lambda', 'dynamodb',
|
|
530
|
+
'React', 'ReactDOM', 'Vue', 'vue', 'angular', 'Angular',
|
|
531
|
+
]);
|
|
532
|
+
// Check if object is a known global
|
|
533
|
+
if (externalObjects.has(object)) {
|
|
534
|
+
return true;
|
|
535
|
+
}
|
|
536
|
+
// Check if method is a built-in prototype method
|
|
537
|
+
if (BUILTIN_PROTOTYPE_METHODS.has(method)) {
|
|
538
|
+
return true;
|
|
539
|
+
}
|
|
540
|
+
// Check if method is a common library method
|
|
541
|
+
if (COMMON_LIBRARY_METHODS.has(method)) {
|
|
542
|
+
return true;
|
|
543
|
+
}
|
|
544
|
+
return false;
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Check if object is a built-in JavaScript global (not a library namespace)
|
|
548
|
+
*/
|
|
549
|
+
isBuiltInObject(object) {
|
|
550
|
+
const builtInObjects = new Set([
|
|
551
|
+
'console', 'Math', 'JSON', 'Object', 'Array', 'String', 'Number',
|
|
552
|
+
'Boolean', 'Date', 'RegExp', 'Error', 'Promise', 'Set', 'Map',
|
|
553
|
+
'WeakSet', 'WeakMap', 'Symbol', 'Proxy', 'Reflect', 'Intl',
|
|
554
|
+
'process', 'global', 'window', 'document', 'Buffer',
|
|
555
|
+
'fs', 'path', 'http', 'https', 'crypto', 'os', 'url', 'util',
|
|
556
|
+
'localStorage', 'sessionStorage', 'navigator', 'location', 'history',
|
|
557
|
+
'performance', 'fetch', 'XMLHttpRequest', 'WebSocket',
|
|
558
|
+
'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval',
|
|
559
|
+
'requestAnimationFrame', 'cancelAnimationFrame',
|
|
560
|
+
'Atomics', 'SharedArrayBuffer', 'DataView', 'ArrayBuffer',
|
|
561
|
+
'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array',
|
|
562
|
+
'Uint16Array', 'Int32Array', 'Uint32Array', 'Float32Array',
|
|
563
|
+
'Float64Array', 'BigInt64Array', 'BigUint64Array',
|
|
269
564
|
]);
|
|
270
|
-
return
|
|
565
|
+
return builtInObjects.has(object);
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Track a library method call for coverage reporting
|
|
569
|
+
*/
|
|
570
|
+
trackLibraryCall(stats, object, method) {
|
|
571
|
+
if (!stats.has(object)) {
|
|
572
|
+
const semanticInfo = LIBRARY_SEMANTIC_GROUPS[object];
|
|
573
|
+
stats.set(object, {
|
|
574
|
+
object,
|
|
575
|
+
methods: new Map(),
|
|
576
|
+
totalCalls: 0,
|
|
577
|
+
semantic: semanticInfo?.semantic,
|
|
578
|
+
suggestedPlugin: semanticInfo?.suggestedPlugin,
|
|
579
|
+
description: semanticInfo?.description
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
const libStats = stats.get(object);
|
|
583
|
+
libStats.totalCalls++;
|
|
584
|
+
libStats.methods.set(method, (libStats.methods.get(method) || 0) + 1);
|
|
585
|
+
}
|
|
586
|
+
/**
|
|
587
|
+
* Analyze why method resolution failed (REG-332).
|
|
588
|
+
* Returns the failure reason and resolution chain for context-aware suggestions.
|
|
589
|
+
*/
|
|
590
|
+
analyzeResolutionFailure(methodCall, classMethodIndex, _variableTypes) {
|
|
591
|
+
const { object, method, file } = methodCall;
|
|
592
|
+
const chain = [];
|
|
593
|
+
if (!object || !method) {
|
|
594
|
+
return { reason: 'unknown', chain };
|
|
595
|
+
}
|
|
596
|
+
// Check if object is a known class name (static call)
|
|
597
|
+
if (classMethodIndex.has(object)) {
|
|
598
|
+
const classEntry = classMethodIndex.get(object);
|
|
599
|
+
chain.push({
|
|
600
|
+
step: `${object} class lookup`,
|
|
601
|
+
result: 'found',
|
|
602
|
+
file: classEntry.classNode.file,
|
|
603
|
+
line: classEntry.classNode.line,
|
|
604
|
+
});
|
|
605
|
+
if (!classEntry.methods.has(method)) {
|
|
606
|
+
chain.push({
|
|
607
|
+
step: `${object}.${method} method`,
|
|
608
|
+
result: 'NOT FOUND in class',
|
|
609
|
+
});
|
|
610
|
+
return { reason: 'method_not_found', chain };
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
// Check for local class in same file
|
|
614
|
+
const localKey = `${file}:${object}`;
|
|
615
|
+
if (classMethodIndex.has(localKey)) {
|
|
616
|
+
const classEntry = classMethodIndex.get(localKey);
|
|
617
|
+
chain.push({
|
|
618
|
+
step: `${object} local class`,
|
|
619
|
+
result: 'found in same file',
|
|
620
|
+
});
|
|
621
|
+
if (!classEntry.methods.has(method)) {
|
|
622
|
+
chain.push({
|
|
623
|
+
step: `${object}.${method} method`,
|
|
624
|
+
result: 'NOT FOUND',
|
|
625
|
+
});
|
|
626
|
+
return { reason: 'method_not_found', chain };
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
// Check if this is a library call
|
|
630
|
+
if (LIBRARY_SEMANTIC_GROUPS[object]) {
|
|
631
|
+
const libInfo = LIBRARY_SEMANTIC_GROUPS[object];
|
|
632
|
+
chain.push({
|
|
633
|
+
step: `${object} lookup`,
|
|
634
|
+
result: `external library (${libInfo.semantic})`,
|
|
635
|
+
});
|
|
636
|
+
return { reason: 'external_dependency', chain };
|
|
637
|
+
}
|
|
638
|
+
// Object type is unknown
|
|
639
|
+
chain.push({
|
|
640
|
+
step: `${object} type lookup`,
|
|
641
|
+
result: 'unknown (not in class index)',
|
|
642
|
+
});
|
|
643
|
+
chain.push({
|
|
644
|
+
step: `${object}.${method}`,
|
|
645
|
+
result: 'FAILED (no type information)',
|
|
646
|
+
});
|
|
647
|
+
return { reason: 'unknown_object_type', chain };
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* Generate context-aware suggestion based on failure reason (REG-332).
|
|
651
|
+
*/
|
|
652
|
+
generateContextualSuggestion(object, method, reason, chain) {
|
|
653
|
+
switch (reason) {
|
|
654
|
+
case 'unknown_object_type': {
|
|
655
|
+
// Find the source in chain that shows "unknown"
|
|
656
|
+
const sourceStep = chain.find(s => s.result.includes('unknown'));
|
|
657
|
+
const sourceDesc = sourceStep?.step || 'the source';
|
|
658
|
+
return `Variable "${object}" has unknown type from ${sourceDesc}. ` +
|
|
659
|
+
`Add JSDoc: /** @type {${object}Class} */ or check imports.`;
|
|
660
|
+
}
|
|
661
|
+
case 'class_not_imported':
|
|
662
|
+
return `Class "${object}" is not imported. Check your imports or ensure the class is defined.`;
|
|
663
|
+
case 'method_not_found':
|
|
664
|
+
return `Class "${object}" exists but has no method "${method}". ` +
|
|
665
|
+
`Check spelling or verify the method is defined in the class.`;
|
|
666
|
+
case 'external_dependency': {
|
|
667
|
+
const libInfo = LIBRARY_SEMANTIC_GROUPS[object];
|
|
668
|
+
if (libInfo?.suggestedPlugin) {
|
|
669
|
+
return `This call is to external library "${object}" (${libInfo.semantic}). ` +
|
|
670
|
+
`Consider using ${libInfo.suggestedPlugin} for semantic analysis.`;
|
|
671
|
+
}
|
|
672
|
+
return `This call is to external library "${object}". ` +
|
|
673
|
+
`Consider adding type stubs or a dedicated analyzer plugin.`;
|
|
674
|
+
}
|
|
675
|
+
case 'circular_reference':
|
|
676
|
+
return `Alias chain for "${object}" is too deep (possible cycle). ` +
|
|
677
|
+
`Simplify variable assignments or check for circular references.`;
|
|
678
|
+
default:
|
|
679
|
+
return `Check if class "${object}" is imported and has method "${method}".`;
|
|
680
|
+
}
|
|
271
681
|
}
|
|
272
682
|
}
|
|
683
|
+
//# sourceMappingURL=MethodCallResolver.js.map
|