@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
package/dist/core/ASTWorker.js
CHANGED
|
@@ -3,17 +3,30 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Receives: { filePath, moduleId, moduleName }
|
|
5
5
|
* Returns: { collections } - extracted AST data for GraphBuilder
|
|
6
|
+
*
|
|
7
|
+
* Uses ScopeTracker for semantic ID generation (REG-133).
|
|
8
|
+
* IDs are stable and don't change when unrelated code is added/removed.
|
|
6
9
|
*/
|
|
7
10
|
import { parentPort } from 'worker_threads';
|
|
8
11
|
import { readFileSync } from 'fs';
|
|
12
|
+
import { basename } from 'path';
|
|
9
13
|
import { parse } from '@babel/parser';
|
|
10
14
|
import traverseModule from '@babel/traverse';
|
|
15
|
+
import { ClassNode } from './nodes/ClassNode.js';
|
|
16
|
+
import { ImportNode } from './nodes/ImportNode.js';
|
|
17
|
+
import { ExportNode } from './nodes/ExportNode.js';
|
|
18
|
+
import { ScopeTracker } from './ScopeTracker.js';
|
|
19
|
+
import { computeSemanticId } from './SemanticId.js';
|
|
20
|
+
import { getLine, getColumn } from '../plugins/analysis/ast/utils/location.js';
|
|
11
21
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
22
|
const traverse = traverseModule.default || traverseModule;
|
|
13
23
|
// Simplified visitors for extraction (no graph access needed)
|
|
14
24
|
import { ExpressionEvaluator } from '../plugins/analysis/ast/ExpressionEvaluator.js';
|
|
15
25
|
/**
|
|
16
26
|
* Parse a single module and extract all collections
|
|
27
|
+
*
|
|
28
|
+
* Uses ScopeTracker for semantic ID generation - IDs are stable
|
|
29
|
+
* and don't change when unrelated code is added/removed.
|
|
17
30
|
*/
|
|
18
31
|
function parseModule(filePath, moduleId, moduleName) {
|
|
19
32
|
const code = readFileSync(filePath, 'utf-8');
|
|
@@ -21,6 +34,9 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
21
34
|
sourceType: 'module',
|
|
22
35
|
plugins: ['jsx', 'typescript']
|
|
23
36
|
});
|
|
37
|
+
// Create ScopeTracker for semantic ID generation
|
|
38
|
+
// Use basename for shorter, more readable IDs
|
|
39
|
+
const scopeTracker = new ScopeTracker(basename(filePath));
|
|
24
40
|
// Collections to extract
|
|
25
41
|
const collections = {
|
|
26
42
|
functions: [],
|
|
@@ -40,17 +56,7 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
40
56
|
literals: [],
|
|
41
57
|
variableAssignments: []
|
|
42
58
|
};
|
|
43
|
-
//
|
|
44
|
-
const counters = {
|
|
45
|
-
ifScope: 0,
|
|
46
|
-
scope: 0,
|
|
47
|
-
varDecl: 0,
|
|
48
|
-
callSite: 0,
|
|
49
|
-
function: 0,
|
|
50
|
-
httpRequest: 0,
|
|
51
|
-
literal: 0
|
|
52
|
-
};
|
|
53
|
-
// Processed nodes tracking
|
|
59
|
+
// Processed nodes tracking (still needed for deduplication)
|
|
54
60
|
const processed = {
|
|
55
61
|
callSites: new Set(),
|
|
56
62
|
methodCalls: new Set(),
|
|
@@ -78,54 +84,35 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
78
84
|
importedName = spec.imported?.name || spec.local.name;
|
|
79
85
|
localName = spec.local.name;
|
|
80
86
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
});
|
|
87
|
+
// Babel AST guarantees node.loc exists with locations: true option
|
|
88
|
+
const importNode = ImportNode.create(localName, // name
|
|
89
|
+
filePath, // file
|
|
90
|
+
getLine(node), // line (non-null - Babel guarantees location)
|
|
91
|
+
0, // column (not available in this worker)
|
|
92
|
+
source, // source
|
|
93
|
+
{ imported: importedName, local: localName });
|
|
94
|
+
collections.imports.push(importNode);
|
|
90
95
|
});
|
|
91
96
|
}
|
|
92
97
|
});
|
|
93
|
-
// Extract exports
|
|
98
|
+
// Extract exports using semantic IDs (via createWithContext)
|
|
94
99
|
traverse(ast, {
|
|
95
100
|
ExportNamedDeclaration(path) {
|
|
96
101
|
const node = path.node;
|
|
97
102
|
if (node.declaration) {
|
|
98
103
|
if (node.declaration.type === 'FunctionDeclaration' && node.declaration.id) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
type: 'EXPORT',
|
|
102
|
-
name: node.declaration.id.name,
|
|
103
|
-
exportType: 'function',
|
|
104
|
-
file: filePath,
|
|
105
|
-
line: node.loc.start.line
|
|
106
|
-
});
|
|
104
|
+
const exportNode = ExportNode.createWithContext(node.declaration.id.name, scopeTracker.getContext(), { line: getLine(node), column: 0 }, { exportType: 'named' });
|
|
105
|
+
collections.exports.push(exportNode);
|
|
107
106
|
}
|
|
108
107
|
else if (node.declaration.type === 'ClassDeclaration' && node.declaration.id) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
type: 'EXPORT',
|
|
112
|
-
name: node.declaration.id.name,
|
|
113
|
-
exportType: 'class',
|
|
114
|
-
file: filePath,
|
|
115
|
-
line: node.loc.start.line
|
|
116
|
-
});
|
|
108
|
+
const exportNode = ExportNode.createWithContext(node.declaration.id.name, scopeTracker.getContext(), { line: getLine(node), column: 0 }, { exportType: 'named' });
|
|
109
|
+
collections.exports.push(exportNode);
|
|
117
110
|
}
|
|
118
111
|
else if (node.declaration.type === 'VariableDeclaration') {
|
|
119
112
|
node.declaration.declarations.forEach(decl => {
|
|
120
113
|
if (decl.id.type === 'Identifier') {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
type: 'EXPORT',
|
|
124
|
-
name: decl.id.name,
|
|
125
|
-
exportType: 'variable',
|
|
126
|
-
file: filePath,
|
|
127
|
-
line: node.loc.start.line
|
|
128
|
-
});
|
|
114
|
+
const exportNode = ExportNode.createWithContext(decl.id.name, scopeTracker.getContext(), { line: getLine(node), column: 0 }, { exportType: 'named' });
|
|
115
|
+
collections.exports.push(exportNode);
|
|
129
116
|
}
|
|
130
117
|
});
|
|
131
118
|
}
|
|
@@ -135,38 +122,32 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
135
122
|
if (spec.type !== 'ExportSpecifier')
|
|
136
123
|
return;
|
|
137
124
|
const exportedName = spec.exported.type === 'Identifier' ? spec.exported.name : spec.exported.value;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
name: exportedName,
|
|
142
|
-
localName: spec.local.name,
|
|
143
|
-
file: filePath,
|
|
144
|
-
line: node.loc.start.line
|
|
125
|
+
const exportNode = ExportNode.createWithContext(exportedName, scopeTracker.getContext(), { line: getLine(node), column: 0 }, {
|
|
126
|
+
local: spec.local.name,
|
|
127
|
+
exportType: 'named'
|
|
145
128
|
});
|
|
129
|
+
collections.exports.push(exportNode);
|
|
146
130
|
});
|
|
147
131
|
}
|
|
148
132
|
},
|
|
149
133
|
ExportDefaultDeclaration(path) {
|
|
150
134
|
const node = path.node;
|
|
151
|
-
let
|
|
135
|
+
let localName = 'default';
|
|
152
136
|
if (node.declaration.type === 'Identifier') {
|
|
153
|
-
|
|
137
|
+
localName = node.declaration.name;
|
|
154
138
|
}
|
|
155
139
|
else if ('id' in node.declaration && node.declaration.id) {
|
|
156
|
-
|
|
140
|
+
localName = node.declaration.id.name;
|
|
157
141
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
localName: name,
|
|
163
|
-
isDefault: true,
|
|
164
|
-
file: filePath,
|
|
165
|
-
line: node.loc.start.line
|
|
142
|
+
const exportNode = ExportNode.createWithContext('default', scopeTracker.getContext(), { line: getLine(node), column: 0 }, {
|
|
143
|
+
local: localName,
|
|
144
|
+
default: true,
|
|
145
|
+
exportType: 'default'
|
|
166
146
|
});
|
|
147
|
+
collections.exports.push(exportNode);
|
|
167
148
|
}
|
|
168
149
|
});
|
|
169
|
-
// Extract top-level variables
|
|
150
|
+
// Extract top-level variables using semantic IDs
|
|
170
151
|
traverse(ast, {
|
|
171
152
|
VariableDeclaration(path) {
|
|
172
153
|
if (path.getFunctionParent())
|
|
@@ -176,15 +157,14 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
176
157
|
node.declarations.forEach(decl => {
|
|
177
158
|
if (decl.id.type === 'Identifier') {
|
|
178
159
|
const varName = decl.id.name;
|
|
179
|
-
const line = decl.id
|
|
180
|
-
const column = decl.id.loc.start.column;
|
|
160
|
+
const line = getLine(decl.id);
|
|
181
161
|
const literalValue = ExpressionEvaluator.extractLiteralValue(decl.init);
|
|
182
162
|
const isLiteral = literalValue !== null;
|
|
183
163
|
const isNewExpr = decl.init?.type === 'NewExpression';
|
|
184
164
|
const shouldBeConstant = isConst && (isLiteral || isNewExpr);
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
165
|
+
// Generate semantic ID using ScopeTracker
|
|
166
|
+
const nodeType = shouldBeConstant ? 'CONSTANT' : 'VARIABLE';
|
|
167
|
+
const varId = computeSemanticId(nodeType, varName, scopeTracker.getContext());
|
|
188
168
|
collections.variableDeclarations.push({
|
|
189
169
|
id: varId,
|
|
190
170
|
type: shouldBeConstant ? 'CONSTANT' : 'VARIABLE',
|
|
@@ -207,7 +187,7 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
207
187
|
});
|
|
208
188
|
}
|
|
209
189
|
});
|
|
210
|
-
// Extract functions and classes
|
|
190
|
+
// Extract functions and classes using semantic IDs
|
|
211
191
|
traverse(ast, {
|
|
212
192
|
FunctionDeclaration(path) {
|
|
213
193
|
if (path.getFunctionParent())
|
|
@@ -216,33 +196,38 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
216
196
|
if (!node.id)
|
|
217
197
|
return;
|
|
218
198
|
const funcName = node.id.name;
|
|
219
|
-
|
|
199
|
+
// Generate semantic ID using ScopeTracker
|
|
200
|
+
const functionId = computeSemanticId('FUNCTION', funcName, scopeTracker.getContext());
|
|
220
201
|
collections.functions.push({
|
|
221
202
|
id: functionId,
|
|
222
|
-
stableId: functionId,
|
|
223
203
|
type: 'FUNCTION',
|
|
224
204
|
name: funcName,
|
|
225
205
|
file: filePath,
|
|
226
|
-
line: node
|
|
227
|
-
column: node
|
|
206
|
+
line: getLine(node),
|
|
207
|
+
column: getColumn(node),
|
|
228
208
|
async: node.async || false,
|
|
229
209
|
generator: node.generator || false,
|
|
230
210
|
exported: path.parent?.type === 'ExportNamedDeclaration' || path.parent?.type === 'ExportDefaultDeclaration'
|
|
231
211
|
});
|
|
232
|
-
//
|
|
212
|
+
// Enter function scope for parameter extraction
|
|
213
|
+
scopeTracker.enterScope(funcName, 'FUNCTION');
|
|
214
|
+
// Extract parameters with semantic IDs
|
|
233
215
|
node.params.forEach((param, index) => {
|
|
234
216
|
if (param.type === 'Identifier') {
|
|
217
|
+
const paramId = computeSemanticId('PARAMETER', param.name, scopeTracker.getContext(), { discriminator: index });
|
|
235
218
|
collections.parameters.push({
|
|
236
|
-
id:
|
|
219
|
+
id: paramId,
|
|
237
220
|
type: 'PARAMETER',
|
|
238
221
|
name: param.name,
|
|
239
222
|
index,
|
|
240
223
|
functionId,
|
|
241
224
|
file: filePath,
|
|
242
|
-
line: param
|
|
225
|
+
line: getLine(param)
|
|
243
226
|
});
|
|
244
227
|
}
|
|
245
228
|
});
|
|
229
|
+
// Exit function scope
|
|
230
|
+
scopeTracker.exitScope();
|
|
246
231
|
},
|
|
247
232
|
ClassDeclaration(path) {
|
|
248
233
|
if (path.getFunctionParent())
|
|
@@ -251,30 +236,30 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
251
236
|
if (!node.id)
|
|
252
237
|
return;
|
|
253
238
|
const className = node.id.name;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
// Extract methods
|
|
239
|
+
// Extract superClass name
|
|
240
|
+
const superClassName = node.superClass && node.superClass.type === 'Identifier'
|
|
241
|
+
? node.superClass.name
|
|
242
|
+
: null;
|
|
243
|
+
// Create CLASS node using ClassNode.createWithContext() for semantic IDs
|
|
244
|
+
const classRecord = ClassNode.createWithContext(className, scopeTracker.getContext(), { line: getLine(node), column: getColumn(node) }, { superClass: superClassName || undefined });
|
|
245
|
+
collections.classDeclarations.push(classRecord);
|
|
246
|
+
// Enter class scope for method extraction
|
|
247
|
+
scopeTracker.enterScope(className, 'CLASS');
|
|
248
|
+
// Extract methods with semantic IDs (including class scope)
|
|
264
249
|
node.body.body.forEach(member => {
|
|
265
250
|
if (member.type === 'ClassMethod' && member.key.type === 'Identifier') {
|
|
266
251
|
const methodName = member.key.name;
|
|
267
|
-
|
|
252
|
+
// Method ID includes class scope: file->ClassName->FUNCTION->methodName
|
|
253
|
+
const methodId = computeSemanticId('FUNCTION', methodName, scopeTracker.getContext());
|
|
268
254
|
collections.functions.push({
|
|
269
255
|
id: methodId,
|
|
270
|
-
stableId: methodId,
|
|
271
256
|
type: 'METHOD',
|
|
272
257
|
name: methodName,
|
|
273
258
|
className,
|
|
274
|
-
classId,
|
|
259
|
+
classId: classRecord.id,
|
|
275
260
|
file: filePath,
|
|
276
|
-
line: member
|
|
277
|
-
column: member
|
|
261
|
+
line: getLine(member),
|
|
262
|
+
column: getColumn(member),
|
|
278
263
|
async: member.async || false,
|
|
279
264
|
isClassMethod: true,
|
|
280
265
|
isConstructor: member.kind === 'constructor',
|
|
@@ -282,9 +267,11 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
282
267
|
});
|
|
283
268
|
}
|
|
284
269
|
});
|
|
270
|
+
// Exit class scope
|
|
271
|
+
scopeTracker.exitScope();
|
|
285
272
|
}
|
|
286
273
|
});
|
|
287
|
-
// Extract call expressions at module level
|
|
274
|
+
// Extract call expressions at module level using semantic IDs with discriminators
|
|
288
275
|
traverse(ast, {
|
|
289
276
|
CallExpression(path) {
|
|
290
277
|
if (path.getFunctionParent())
|
|
@@ -295,14 +282,18 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
295
282
|
if (processed.callSites.has(nodeKey))
|
|
296
283
|
return;
|
|
297
284
|
processed.callSites.add(nodeKey);
|
|
285
|
+
// Get discriminator for same-named calls in current scope
|
|
286
|
+
const calleeName = node.callee.name;
|
|
287
|
+
const discriminator = scopeTracker.getItemCounter(`CALL:${calleeName}`);
|
|
288
|
+
const callId = computeSemanticId('CALL', calleeName, scopeTracker.getContext(), { discriminator });
|
|
298
289
|
collections.callSites.push({
|
|
299
|
-
id:
|
|
290
|
+
id: callId,
|
|
300
291
|
type: 'CALL',
|
|
301
|
-
name:
|
|
292
|
+
name: calleeName,
|
|
302
293
|
file: filePath,
|
|
303
|
-
line: node
|
|
294
|
+
line: getLine(node),
|
|
304
295
|
parentScopeId: moduleId,
|
|
305
|
-
targetFunctionName:
|
|
296
|
+
targetFunctionName: calleeName
|
|
306
297
|
});
|
|
307
298
|
}
|
|
308
299
|
else if (node.callee.type === 'MemberExpression') {
|
|
@@ -315,14 +306,17 @@ function parseModule(filePath, moduleId, moduleName) {
|
|
|
315
306
|
const objectName = obj.type === 'Identifier' ? obj.name : 'this';
|
|
316
307
|
const methodName = prop.name;
|
|
317
308
|
const fullName = `${objectName}.${methodName}`;
|
|
309
|
+
// Get discriminator for same-named method calls
|
|
310
|
+
const discriminator = scopeTracker.getItemCounter(`CALL:${fullName}`);
|
|
311
|
+
const callId = computeSemanticId('CALL', fullName, scopeTracker.getContext(), { discriminator });
|
|
318
312
|
collections.methodCalls.push({
|
|
319
|
-
id:
|
|
313
|
+
id: callId,
|
|
320
314
|
type: 'CALL',
|
|
321
315
|
name: fullName,
|
|
322
316
|
object: objectName,
|
|
323
317
|
method: methodName,
|
|
324
318
|
file: filePath,
|
|
325
|
-
line: node
|
|
319
|
+
line: getLine(node),
|
|
326
320
|
parentScopeId: moduleId
|
|
327
321
|
});
|
|
328
322
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CoverageAnalyzer - Calculates analysis coverage for a project
|
|
3
|
+
*
|
|
4
|
+
* Determines which files in a project have been analyzed and categorizes
|
|
5
|
+
* files into three groups:
|
|
6
|
+
* - Analyzed: Files that appear as MODULE nodes in the graph
|
|
7
|
+
* - Unsupported: Files with extensions that no indexer can handle
|
|
8
|
+
* - Unreachable: Files with supported extensions but not in the graph
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const analyzer = new CoverageAnalyzer(graphBackend, '/path/to/project');
|
|
12
|
+
* const result = await analyzer.analyze();
|
|
13
|
+
*/
|
|
14
|
+
import type { GraphBackend } from '@grafema/types';
|
|
15
|
+
/**
|
|
16
|
+
* Coverage analysis result
|
|
17
|
+
*/
|
|
18
|
+
export interface CoverageResult {
|
|
19
|
+
projectPath: string;
|
|
20
|
+
total: number;
|
|
21
|
+
analyzed: {
|
|
22
|
+
count: number;
|
|
23
|
+
files: string[];
|
|
24
|
+
};
|
|
25
|
+
unsupported: {
|
|
26
|
+
count: number;
|
|
27
|
+
byExtension: Record<string, string[]>;
|
|
28
|
+
};
|
|
29
|
+
unreachable: {
|
|
30
|
+
count: number;
|
|
31
|
+
files: string[];
|
|
32
|
+
byExtension: Record<string, string[]>;
|
|
33
|
+
};
|
|
34
|
+
percentages: {
|
|
35
|
+
analyzed: number;
|
|
36
|
+
unsupported: number;
|
|
37
|
+
unreachable: number;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* CoverageAnalyzer calculates what percentage of a codebase has been analyzed.
|
|
42
|
+
*/
|
|
43
|
+
export declare class CoverageAnalyzer {
|
|
44
|
+
private graph;
|
|
45
|
+
private projectPath;
|
|
46
|
+
constructor(graph: GraphBackend, projectPath: string);
|
|
47
|
+
/**
|
|
48
|
+
* Analyze the project and return coverage statistics
|
|
49
|
+
*/
|
|
50
|
+
analyze(): Promise<CoverageResult>;
|
|
51
|
+
/**
|
|
52
|
+
* Get list of analyzed files from the graph (MODULE nodes)
|
|
53
|
+
*/
|
|
54
|
+
private getAnalyzedFiles;
|
|
55
|
+
/**
|
|
56
|
+
* Scan project directory for all code files
|
|
57
|
+
* Respects common ignore patterns (node_modules, .git, etc.)
|
|
58
|
+
*/
|
|
59
|
+
private scanProjectFiles;
|
|
60
|
+
/**
|
|
61
|
+
* Recursively walk directory and collect code files
|
|
62
|
+
*/
|
|
63
|
+
private walkDirectory;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=CoverageAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CoverageAnalyzer.d.ts","sourceRoot":"","sources":["../../src/core/CoverageAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAwC/D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACvC,CAAC;IACF,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACvC,CAAC;IACF,WAAW,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,WAAW,CAAS;gBAEhB,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IAKpD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAsExC;;OAEG;YACW,gBAAgB;IAiB9B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,aAAa;CA0CtB"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CoverageAnalyzer - Calculates analysis coverage for a project
|
|
3
|
+
*
|
|
4
|
+
* Determines which files in a project have been analyzed and categorizes
|
|
5
|
+
* files into three groups:
|
|
6
|
+
* - Analyzed: Files that appear as MODULE nodes in the graph
|
|
7
|
+
* - Unsupported: Files with extensions that no indexer can handle
|
|
8
|
+
* - Unreachable: Files with supported extensions but not in the graph
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const analyzer = new CoverageAnalyzer(graphBackend, '/path/to/project');
|
|
12
|
+
* const result = await analyzer.analyze();
|
|
13
|
+
*/
|
|
14
|
+
import { readdirSync, existsSync, lstatSync } from 'fs';
|
|
15
|
+
import { join, relative, extname } from 'path';
|
|
16
|
+
/**
|
|
17
|
+
* Supported file extensions by language
|
|
18
|
+
*/
|
|
19
|
+
const JS_SUPPORTED = ['.js', '.mjs', '.cjs', '.jsx', '.ts', '.tsx'];
|
|
20
|
+
const RUST_SUPPORTED = ['.rs'];
|
|
21
|
+
const SUPPORTED_EXTENSIONS = new Set([...JS_SUPPORTED, ...RUST_SUPPORTED]);
|
|
22
|
+
/**
|
|
23
|
+
* Known code file extensions (for scanning)
|
|
24
|
+
* Files with these extensions are considered source code
|
|
25
|
+
*/
|
|
26
|
+
const CODE_EXTENSIONS = new Set([
|
|
27
|
+
// Supported
|
|
28
|
+
...JS_SUPPORTED,
|
|
29
|
+
...RUST_SUPPORTED,
|
|
30
|
+
// Unsupported but tracked
|
|
31
|
+
'.go', '.kt', '.java', '.py', '.rb', '.php', '.c', '.cpp', '.h', '.hpp',
|
|
32
|
+
'.cs', '.swift', '.scala', '.sql', '.graphql', '.gql',
|
|
33
|
+
]);
|
|
34
|
+
/**
|
|
35
|
+
* Directories to always skip during scanning
|
|
36
|
+
*/
|
|
37
|
+
const SKIP_DIRS = new Set([
|
|
38
|
+
'node_modules',
|
|
39
|
+
'.git',
|
|
40
|
+
'.grafema',
|
|
41
|
+
'dist',
|
|
42
|
+
'build',
|
|
43
|
+
'out',
|
|
44
|
+
'coverage',
|
|
45
|
+
'.next',
|
|
46
|
+
'.nuxt',
|
|
47
|
+
'__pycache__',
|
|
48
|
+
'target', // Rust
|
|
49
|
+
'vendor',
|
|
50
|
+
]);
|
|
51
|
+
/**
|
|
52
|
+
* CoverageAnalyzer calculates what percentage of a codebase has been analyzed.
|
|
53
|
+
*/
|
|
54
|
+
export class CoverageAnalyzer {
|
|
55
|
+
graph;
|
|
56
|
+
projectPath;
|
|
57
|
+
constructor(graph, projectPath) {
|
|
58
|
+
this.graph = graph;
|
|
59
|
+
this.projectPath = projectPath;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Analyze the project and return coverage statistics
|
|
63
|
+
*/
|
|
64
|
+
async analyze() {
|
|
65
|
+
// Step 1: Get all MODULE nodes from the graph
|
|
66
|
+
const analyzedFiles = await this.getAnalyzedFiles();
|
|
67
|
+
const analyzedSet = new Set(analyzedFiles);
|
|
68
|
+
// Step 2: Scan project for all code files
|
|
69
|
+
const allCodeFiles = this.scanProjectFiles();
|
|
70
|
+
// Step 3: Categorize files
|
|
71
|
+
const unsupportedByExt = {};
|
|
72
|
+
const unreachableByExt = {};
|
|
73
|
+
const unreachableFiles = [];
|
|
74
|
+
for (const file of allCodeFiles) {
|
|
75
|
+
if (analyzedSet.has(file)) {
|
|
76
|
+
continue; // Already analyzed
|
|
77
|
+
}
|
|
78
|
+
const ext = extname(file).toLowerCase();
|
|
79
|
+
if (SUPPORTED_EXTENSIONS.has(ext)) {
|
|
80
|
+
// Supported but not in graph = unreachable
|
|
81
|
+
unreachableFiles.push(file);
|
|
82
|
+
if (!unreachableByExt[ext]) {
|
|
83
|
+
unreachableByExt[ext] = [];
|
|
84
|
+
}
|
|
85
|
+
unreachableByExt[ext].push(file);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Not supported = unsupported
|
|
89
|
+
if (!unsupportedByExt[ext]) {
|
|
90
|
+
unsupportedByExt[ext] = [];
|
|
91
|
+
}
|
|
92
|
+
unsupportedByExt[ext].push(file);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Calculate counts
|
|
96
|
+
const unsupportedCount = Object.values(unsupportedByExt)
|
|
97
|
+
.reduce((sum, files) => sum + files.length, 0);
|
|
98
|
+
const unreachableCount = unreachableFiles.length;
|
|
99
|
+
const analyzedCount = analyzedFiles.length;
|
|
100
|
+
const total = analyzedCount + unsupportedCount + unreachableCount;
|
|
101
|
+
// Calculate percentages (handle division by zero)
|
|
102
|
+
const percentages = {
|
|
103
|
+
analyzed: total > 0 ? Math.round((analyzedCount / total) * 100) : 0,
|
|
104
|
+
unsupported: total > 0 ? Math.round((unsupportedCount / total) * 100) : 0,
|
|
105
|
+
unreachable: total > 0 ? Math.round((unreachableCount / total) * 100) : 0,
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
projectPath: this.projectPath,
|
|
109
|
+
total,
|
|
110
|
+
analyzed: {
|
|
111
|
+
count: analyzedCount,
|
|
112
|
+
files: analyzedFiles,
|
|
113
|
+
},
|
|
114
|
+
unsupported: {
|
|
115
|
+
count: unsupportedCount,
|
|
116
|
+
byExtension: unsupportedByExt,
|
|
117
|
+
},
|
|
118
|
+
unreachable: {
|
|
119
|
+
count: unreachableCount,
|
|
120
|
+
files: unreachableFiles,
|
|
121
|
+
byExtension: unreachableByExt,
|
|
122
|
+
},
|
|
123
|
+
percentages,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get list of analyzed files from the graph (MODULE nodes)
|
|
128
|
+
*/
|
|
129
|
+
async getAnalyzedFiles() {
|
|
130
|
+
const files = [];
|
|
131
|
+
// Use queryNodes with type: 'MODULE'
|
|
132
|
+
for await (const node of this.graph.queryNodes({ type: 'MODULE' })) {
|
|
133
|
+
if (node.file) {
|
|
134
|
+
// Store relative path for consistency
|
|
135
|
+
const relativePath = node.file.startsWith(this.projectPath)
|
|
136
|
+
? relative(this.projectPath, node.file)
|
|
137
|
+
: node.file;
|
|
138
|
+
files.push(relativePath);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return files;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Scan project directory for all code files
|
|
145
|
+
* Respects common ignore patterns (node_modules, .git, etc.)
|
|
146
|
+
*/
|
|
147
|
+
scanProjectFiles() {
|
|
148
|
+
const files = [];
|
|
149
|
+
this.walkDirectory(this.projectPath, files);
|
|
150
|
+
return files;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Recursively walk directory and collect code files
|
|
154
|
+
*/
|
|
155
|
+
walkDirectory(dir, files, depth = 0) {
|
|
156
|
+
// Safety: limit recursion depth
|
|
157
|
+
if (depth > 20)
|
|
158
|
+
return;
|
|
159
|
+
if (!existsSync(dir))
|
|
160
|
+
return;
|
|
161
|
+
let entries;
|
|
162
|
+
try {
|
|
163
|
+
entries = readdirSync(dir);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return; // Skip directories we can't read
|
|
167
|
+
}
|
|
168
|
+
for (const entry of entries) {
|
|
169
|
+
// Skip hidden files and directories
|
|
170
|
+
if (entry.startsWith('.'))
|
|
171
|
+
continue;
|
|
172
|
+
// Skip known non-source directories
|
|
173
|
+
if (SKIP_DIRS.has(entry))
|
|
174
|
+
continue;
|
|
175
|
+
const fullPath = join(dir, entry);
|
|
176
|
+
// Skip symlinks to avoid infinite loops
|
|
177
|
+
try {
|
|
178
|
+
const stat = lstatSync(fullPath);
|
|
179
|
+
if (stat.isSymbolicLink())
|
|
180
|
+
continue;
|
|
181
|
+
if (stat.isDirectory()) {
|
|
182
|
+
this.walkDirectory(fullPath, files, depth + 1);
|
|
183
|
+
}
|
|
184
|
+
else if (stat.isFile()) {
|
|
185
|
+
const ext = extname(entry).toLowerCase();
|
|
186
|
+
if (CODE_EXTENSIONS.has(ext)) {
|
|
187
|
+
// Store relative path
|
|
188
|
+
files.push(relative(this.projectPath, fullPath));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// Skip files we can't stat
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|