@grafema/core 0.1.0-alpha.4 → 0.1.1-alpha
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 +24 -2
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +197 -24
- package/dist/config/ConfigLoader.d.ts +72 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +187 -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/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 +225 -17
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +208 -18
- 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 +41 -0
- package/dist/core/nodes/CallSiteNode.d.ts +28 -0
- package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
- package/dist/core/nodes/CallSiteNode.js +46 -0
- package/dist/core/nodes/ClassNode.d.ts +33 -1
- package/dist/core/nodes/ClassNode.d.ts.map +1 -1
- package/dist/core/nodes/ClassNode.js +46 -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 +62 -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 +54 -0
- package/dist/core/nodes/ExportNode.d.ts +37 -1
- package/dist/core/nodes/ExportNode.d.ts.map +1 -1
- package/dist/core/nodes/ExportNode.js +48 -2
- 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 +178 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts +28 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
- package/dist/core/nodes/ExternalModuleNode.js +41 -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/ImportNode.d.ts +19 -5
- package/dist/core/nodes/ImportNode.d.ts.map +1 -1
- package/dist/core/nodes/ImportNode.js +23 -5
- 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 +55 -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/MethodCallNode.d.ts +30 -0
- package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodCallNode.js +49 -0
- package/dist/core/nodes/MethodNode.d.ts +32 -0
- package/dist/core/nodes/MethodNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodNode.js +48 -0
- 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 +41 -0
- 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 +53 -0
- package/dist/core/nodes/VariableDeclarationNode.d.ts +27 -0
- package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
- package/dist/core/nodes/VariableDeclarationNode.js +40 -0
- package/dist/core/nodes/index.d.ts +12 -1
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +14 -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 +77 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.js +159 -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 +118 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -0
- package/dist/errors/GrafemaError.js +131 -0
- package/dist/index.d.ts +57 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -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 +13 -6
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +27 -19
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +21 -14
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +1 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +34 -14
- 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 +180 -17
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +1171 -471
- 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 +15 -10
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +9 -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.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +27 -15
- 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 +34 -4
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +318 -298
- 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 +176 -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 +9 -4
- 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 +99 -9
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +663 -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 +4 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +128 -63
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +11 -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 +4 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +17 -13
- 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 +136 -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 +14 -8
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +14 -7
- 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 +18 -12
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +8 -3
- 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 +17 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +129 -10
- 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.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +63 -31
- package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +5 -4
- 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/CallResolverValidator.d.ts.map +1 -1
- package/dist/plugins/validation/CallResolverValidator.js +8 -7
- package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
- package/dist/plugins/validation/DataFlowValidator.js +17 -12
- 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 +19 -23
- 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 +59 -16
- 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/storage/backends/RFDBServerBackend.d.ts +10 -17
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +31 -10
- package/dist/validation/PathValidator.d.ts +1 -2
- package/dist/validation/PathValidator.d.ts.map +1 -1
- package/package.json +6 -3
- package/src/Orchestrator.ts +237 -24
- package/src/config/ConfigLoader.ts +263 -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/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 +401 -18
- 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 +65 -0
- package/src/core/nodes/CallSiteNode.ts +58 -0
- package/src/core/nodes/ClassNode.ts +63 -2
- package/src/core/nodes/DecoratorNode.ts +91 -0
- package/src/core/nodes/EnumNode.ts +86 -0
- package/src/core/nodes/ExportNode.ts +70 -2
- package/src/core/nodes/ExpressionNode.ts +231 -0
- package/src/core/nodes/ExternalModuleNode.ts +56 -0
- package/src/core/nodes/ExternalStdioNode.ts +17 -9
- package/src/core/nodes/FunctionNode.ts +101 -1
- package/src/core/nodes/ImportNode.ts +32 -10
- package/src/core/nodes/InterfaceNode.ts +91 -0
- package/src/core/nodes/IssueNode.ts +177 -0
- package/src/core/nodes/MethodCallNode.ts +64 -0
- package/src/core/nodes/MethodNode.ts +63 -0
- package/src/core/nodes/ModuleNode.ts +50 -0
- package/src/core/nodes/NetworkRequestNode.ts +77 -0
- package/src/core/nodes/ObjectLiteralNode.ts +65 -0
- package/src/core/nodes/ScopeNode.ts +65 -0
- package/src/core/nodes/TypeNode.ts +78 -0
- package/src/core/nodes/VariableDeclarationNode.ts +52 -0
- package/src/core/nodes/index.ts +18 -1
- package/src/diagnostics/DiagnosticCollector.ts +163 -0
- package/src/diagnostics/DiagnosticReporter.ts +204 -0
- package/src/diagnostics/DiagnosticWriter.ts +50 -0
- package/src/diagnostics/index.ts +16 -0
- package/src/errors/GrafemaError.ts +174 -0
- package/src/index.ts +148 -1
- package/src/logging/Logger.ts +152 -0
- package/src/plugins/Plugin.ts +42 -0
- package/src/plugins/analysis/DatabaseAnalyzer.ts +14 -8
- package/src/plugins/analysis/ExpressAnalyzer.ts +29 -19
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +22 -21
- package/src/plugins/analysis/FetchAnalyzer.ts +39 -16
- package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
- package/src/plugins/analysis/JSASTAnalyzer.ts +1483 -503
- package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
- package/src/plugins/analysis/RustAnalyzer.ts +15 -10
- package/src/plugins/analysis/SQLiteAnalyzer.ts +10 -7
- package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
- package/src/plugins/analysis/SocketIOAnalyzer.ts +31 -22
- package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
- package/src/plugins/analysis/ast/GraphBuilder.ts +439 -327
- package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
- package/src/plugins/analysis/ast/types.ts +209 -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 +11 -8
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +909 -83
- package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +159 -93
- package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +12 -8
- package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +37 -17
- package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
- package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
- package/src/plugins/discovery/WorkspaceDiscovery.ts +177 -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 +14 -8
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +14 -7
- package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
- package/src/plugins/enrichment/MethodCallResolver.ts +18 -12
- package/src/plugins/enrichment/MountPointResolver.ts +8 -3
- package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
- package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +149 -12
- package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
- package/src/plugins/indexing/JSModuleIndexer.ts +74 -34
- package/src/plugins/indexing/RustModuleIndexer.ts +5 -4
- package/src/plugins/validation/CallResolverValidator.ts +8 -7
- package/src/plugins/validation/DataFlowValidator.ts +16 -12
- package/src/plugins/validation/EvalBanValidator.ts +17 -16
- package/src/plugins/validation/GraphConnectivityValidator.ts +19 -23
- package/src/plugins/validation/NodeCreationValidator.ts +554 -0
- package/src/plugins/validation/SQLInjectionValidator.ts +61 -15
- 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/storage/backends/RFDBServerBackend.ts +43 -29
- package/src/validation/PathValidator.ts +1 -1
- package/dist/core/AnalysisWorker.d.ts +0 -14
- package/dist/core/AnalysisWorker.d.ts.map +0 -1
- package/dist/core/AnalysisWorker.js +0 -307
- package/dist/core/ParallelAnalyzer.d.ts +0 -120
- package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
- package/dist/core/ParallelAnalyzer.js +0 -331
- package/dist/core/QueueWorker.d.ts +0 -12
- package/dist/core/QueueWorker.d.ts.map +0 -1
- package/dist/core/QueueWorker.js +0 -567
- package/dist/core/RFDBClient.d.ts +0 -179
- package/dist/core/RFDBClient.d.ts.map +0 -1
- package/dist/core/RFDBClient.js +0 -429
- package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
- package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
- package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
- package/src/core/AnalysisWorker.ts +0 -410
- package/src/core/ParallelAnalyzer.ts +0 -476
- package/src/core/QueueWorker.ts +0 -780
- package/src/plugins/indexing/ServiceDetector.ts +0 -230
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DiagnosticWriter - Writes diagnostics to .grafema/diagnostics.log
|
|
3
|
+
*
|
|
4
|
+
* Writes diagnostics in JSON lines format (one JSON object per line).
|
|
5
|
+
* This format is:
|
|
6
|
+
* - Easy to parse line-by-line
|
|
7
|
+
* - Appendable without reading entire file
|
|
8
|
+
* - Compatible with streaming tools (grep, jq, etc.)
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const writer = new DiagnosticWriter();
|
|
12
|
+
* await writer.write(collector, '/project/.grafema');
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
16
|
+
import { join, dirname } from 'path';
|
|
17
|
+
|
|
18
|
+
import type { DiagnosticCollector } from './DiagnosticCollector.js';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* DiagnosticWriter - writes diagnostics.log file
|
|
22
|
+
*/
|
|
23
|
+
export class DiagnosticWriter {
|
|
24
|
+
/**
|
|
25
|
+
* Write all diagnostics to .grafema/diagnostics.log
|
|
26
|
+
*
|
|
27
|
+
* Creates the directory if it doesn't exist.
|
|
28
|
+
* Overwrites existing file.
|
|
29
|
+
*/
|
|
30
|
+
async write(collector: DiagnosticCollector, grafemaDir: string): Promise<void> {
|
|
31
|
+
const logPath = this.getLogPath(grafemaDir);
|
|
32
|
+
|
|
33
|
+
// Create directory if it doesn't exist
|
|
34
|
+
const dir = dirname(logPath);
|
|
35
|
+
if (!existsSync(dir)) {
|
|
36
|
+
mkdirSync(dir, { recursive: true });
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Write diagnostics as JSON lines
|
|
40
|
+
const content = collector.toDiagnosticsLog();
|
|
41
|
+
writeFileSync(logPath, content, 'utf-8');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Get the path to the diagnostics.log file
|
|
46
|
+
*/
|
|
47
|
+
getLogPath(grafemaDir: string): string {
|
|
48
|
+
return join(grafemaDir, 'diagnostics.log');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostics - Error collection, reporting, and logging
|
|
3
|
+
*
|
|
4
|
+
* This module provides the diagnostics infrastructure for Grafema:
|
|
5
|
+
* - DiagnosticCollector: Collects errors from plugin execution
|
|
6
|
+
* - DiagnosticReporter: Formats diagnostics for output (text/json/csv)
|
|
7
|
+
* - DiagnosticWriter: Writes diagnostics.log file
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export { DiagnosticCollector } from './DiagnosticCollector.js';
|
|
11
|
+
export type { Diagnostic, DiagnosticInput } from './DiagnosticCollector.js';
|
|
12
|
+
|
|
13
|
+
export { DiagnosticReporter } from './DiagnosticReporter.js';
|
|
14
|
+
export type { ReportOptions, SummaryStats } from './DiagnosticReporter.js';
|
|
15
|
+
|
|
16
|
+
export { DiagnosticWriter } from './DiagnosticWriter.js';
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GrafemaError - Error hierarchy for Grafema
|
|
3
|
+
*
|
|
4
|
+
* All errors extend the native JavaScript Error class for compatibility
|
|
5
|
+
* with PluginResult.errors[] (Error[]).
|
|
6
|
+
*
|
|
7
|
+
* Error types:
|
|
8
|
+
* - ConfigError: Configuration parsing/validation errors (fatal)
|
|
9
|
+
* - FileAccessError: File system access errors (error)
|
|
10
|
+
* - LanguageError: Unsupported language/parsing errors (warning)
|
|
11
|
+
* - DatabaseError: RFDB database errors (fatal)
|
|
12
|
+
* - PluginError: Plugin execution errors (error)
|
|
13
|
+
* - AnalysisError: Analysis/timeout errors (error)
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import type { PluginPhase } from '@grafema/types';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Context for error reporting
|
|
20
|
+
*/
|
|
21
|
+
export interface ErrorContext {
|
|
22
|
+
filePath?: string;
|
|
23
|
+
lineNumber?: number;
|
|
24
|
+
phase?: PluginPhase;
|
|
25
|
+
plugin?: string;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* JSON representation of GrafemaError
|
|
31
|
+
*/
|
|
32
|
+
export interface GrafemaErrorJSON {
|
|
33
|
+
code: string;
|
|
34
|
+
severity: 'fatal' | 'error' | 'warning';
|
|
35
|
+
message: string;
|
|
36
|
+
context: ErrorContext;
|
|
37
|
+
suggestion?: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Abstract base class for all Grafema errors.
|
|
42
|
+
*
|
|
43
|
+
* Extends native Error for compatibility with PluginResult.errors[].
|
|
44
|
+
*/
|
|
45
|
+
export abstract class GrafemaError extends Error {
|
|
46
|
+
abstract readonly code: string;
|
|
47
|
+
abstract readonly severity: 'fatal' | 'error' | 'warning';
|
|
48
|
+
readonly context: ErrorContext;
|
|
49
|
+
readonly suggestion?: string;
|
|
50
|
+
|
|
51
|
+
constructor(message: string, context: ErrorContext = {}, suggestion?: string) {
|
|
52
|
+
super(message);
|
|
53
|
+
this.name = this.constructor.name;
|
|
54
|
+
this.context = context;
|
|
55
|
+
this.suggestion = suggestion;
|
|
56
|
+
|
|
57
|
+
// Ensure proper prototype chain for instanceof checks
|
|
58
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
59
|
+
|
|
60
|
+
// Capture stack trace (V8 specific)
|
|
61
|
+
if (Error.captureStackTrace) {
|
|
62
|
+
Error.captureStackTrace(this, this.constructor);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Serialize error to JSON for diagnostics.log
|
|
68
|
+
*/
|
|
69
|
+
toJSON(): GrafemaErrorJSON {
|
|
70
|
+
return {
|
|
71
|
+
code: this.code,
|
|
72
|
+
severity: this.severity,
|
|
73
|
+
message: this.message,
|
|
74
|
+
context: this.context,
|
|
75
|
+
suggestion: this.suggestion,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Configuration error - config.json parsing, validation, missing required fields
|
|
82
|
+
*
|
|
83
|
+
* Severity: fatal (always)
|
|
84
|
+
* Codes: ERR_CONFIG_INVALID, ERR_CONFIG_MISSING_FIELD
|
|
85
|
+
*/
|
|
86
|
+
export class ConfigError extends GrafemaError {
|
|
87
|
+
readonly code: string;
|
|
88
|
+
readonly severity = 'fatal' as const;
|
|
89
|
+
|
|
90
|
+
constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
|
|
91
|
+
super(message, context, suggestion);
|
|
92
|
+
this.code = code;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* File access error - unreadable files, missing git, permissions
|
|
98
|
+
*
|
|
99
|
+
* Severity: error (default)
|
|
100
|
+
* Codes: ERR_FILE_UNREADABLE, ERR_GIT_NOT_FOUND, ERR_GIT_ACCESS_DENIED
|
|
101
|
+
*/
|
|
102
|
+
export class FileAccessError extends GrafemaError {
|
|
103
|
+
readonly code: string;
|
|
104
|
+
readonly severity = 'error' as const;
|
|
105
|
+
|
|
106
|
+
constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
|
|
107
|
+
super(message, context, suggestion);
|
|
108
|
+
this.code = code;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Language error - unsupported file type, unparseable syntax
|
|
114
|
+
*
|
|
115
|
+
* Severity: warning (always)
|
|
116
|
+
* Codes: ERR_UNSUPPORTED_LANG, ERR_PARSE_FAILURE
|
|
117
|
+
*/
|
|
118
|
+
export class LanguageError extends GrafemaError {
|
|
119
|
+
readonly code: string;
|
|
120
|
+
readonly severity = 'warning' as const;
|
|
121
|
+
|
|
122
|
+
constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
|
|
123
|
+
super(message, context, suggestion);
|
|
124
|
+
this.code = code;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Database error - RFDB connection, corruption, lock
|
|
130
|
+
*
|
|
131
|
+
* Severity: fatal (always)
|
|
132
|
+
* Codes: ERR_DATABASE_LOCKED, ERR_DATABASE_CORRUPTED
|
|
133
|
+
*/
|
|
134
|
+
export class DatabaseError extends GrafemaError {
|
|
135
|
+
readonly code: string;
|
|
136
|
+
readonly severity = 'fatal' as const;
|
|
137
|
+
|
|
138
|
+
constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
|
|
139
|
+
super(message, context, suggestion);
|
|
140
|
+
this.code = code;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Plugin error - plugin execution failed, dependency missing
|
|
146
|
+
*
|
|
147
|
+
* Severity: error (default)
|
|
148
|
+
* Codes: ERR_PLUGIN_FAILED, ERR_PLUGIN_DEPENDENCY_MISSING
|
|
149
|
+
*/
|
|
150
|
+
export class PluginError extends GrafemaError {
|
|
151
|
+
readonly code: string;
|
|
152
|
+
readonly severity = 'error' as const;
|
|
153
|
+
|
|
154
|
+
constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
|
|
155
|
+
super(message, context, suggestion);
|
|
156
|
+
this.code = code;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Analysis error - internal analyzer failure, timeout
|
|
162
|
+
*
|
|
163
|
+
* Severity: error (default)
|
|
164
|
+
* Codes: ERR_ANALYSIS_TIMEOUT, ERR_ANALYSIS_INTERNAL
|
|
165
|
+
*/
|
|
166
|
+
export class AnalysisError extends GrafemaError {
|
|
167
|
+
readonly code: string;
|
|
168
|
+
readonly severity = 'error' as const;
|
|
169
|
+
|
|
170
|
+
constructor(message: string, code: string, context: ErrorContext = {}, suggestion?: string) {
|
|
171
|
+
super(message, context, suggestion);
|
|
172
|
+
this.code = code;
|
|
173
|
+
}
|
|
174
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
* @grafema/core - Core analysis engine for GraphDD
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
+
// Error types
|
|
6
|
+
export {
|
|
7
|
+
GrafemaError,
|
|
8
|
+
ConfigError,
|
|
9
|
+
FileAccessError,
|
|
10
|
+
LanguageError,
|
|
11
|
+
DatabaseError,
|
|
12
|
+
PluginError,
|
|
13
|
+
AnalysisError,
|
|
14
|
+
} from './errors/GrafemaError.js';
|
|
15
|
+
export type { ErrorContext, GrafemaErrorJSON } from './errors/GrafemaError.js';
|
|
16
|
+
|
|
17
|
+
// Logging
|
|
18
|
+
export { Logger, ConsoleLogger, createLogger } from './logging/Logger.js';
|
|
19
|
+
export type { LogLevel } from './logging/Logger.js';
|
|
20
|
+
|
|
21
|
+
// Diagnostics
|
|
22
|
+
export { DiagnosticCollector, DiagnosticReporter, DiagnosticWriter } from './diagnostics/index.js';
|
|
23
|
+
export type { Diagnostic, DiagnosticInput, ReportOptions, SummaryStats } from './diagnostics/index.js';
|
|
24
|
+
|
|
25
|
+
// Config
|
|
26
|
+
export { loadConfig, DEFAULT_CONFIG } from './config/index.js';
|
|
27
|
+
export type { GrafemaConfig } from './config/index.js';
|
|
28
|
+
|
|
5
29
|
// Main orchestrator
|
|
6
30
|
export { Orchestrator } from './Orchestrator.js';
|
|
7
31
|
export type {
|
|
@@ -30,9 +54,50 @@ export { RFDBServerBackend } from './storage/backends/RFDBServerBackend.js';
|
|
|
30
54
|
// Core utilities
|
|
31
55
|
export { NodeFactory } from './core/NodeFactory.js';
|
|
32
56
|
export { Profiler } from './core/Profiler.js';
|
|
57
|
+
export {
|
|
58
|
+
computeSemanticId,
|
|
59
|
+
parseSemanticId,
|
|
60
|
+
computeDiscriminator
|
|
61
|
+
} from './core/SemanticId.js';
|
|
62
|
+
export type {
|
|
63
|
+
Location,
|
|
64
|
+
ScopeContext,
|
|
65
|
+
SemanticIdOptions,
|
|
66
|
+
ParsedSemanticId,
|
|
67
|
+
LocatedItem
|
|
68
|
+
} from './core/SemanticId.js';
|
|
69
|
+
export { ScopeTracker } from './core/ScopeTracker.js';
|
|
70
|
+
export type { ScopeEntry, CountedScopeResult } from './core/ScopeTracker.js';
|
|
33
71
|
export { AnalysisQueue } from './core/AnalysisQueue.js';
|
|
72
|
+
export { ASTWorkerPool, type ModuleInfo as ASTModuleInfo, type ParseResult, type ASTWorkerPoolStats } from './core/ASTWorkerPool.js';
|
|
34
73
|
export { GuaranteeManager } from './core/GuaranteeManager.js';
|
|
35
74
|
export type { GuaranteeGraph } from './core/GuaranteeManager.js';
|
|
75
|
+
export { clearFileNodesIfNeeded, clearServiceNodeIfExists } from './core/FileNodeManager.js';
|
|
76
|
+
export { CoverageAnalyzer } from './core/CoverageAnalyzer.js';
|
|
77
|
+
export type { CoverageResult } from './core/CoverageAnalyzer.js';
|
|
78
|
+
|
|
79
|
+
// Hash utilities
|
|
80
|
+
export { calculateFileHash, calculateFileHashAsync, calculateContentHash } from './core/HashUtils.js';
|
|
81
|
+
|
|
82
|
+
// Type validation and path validation
|
|
83
|
+
export {
|
|
84
|
+
levenshtein,
|
|
85
|
+
checkTypoAgainstKnownTypes,
|
|
86
|
+
resetKnownNodeTypes,
|
|
87
|
+
getKnownNodeTypes
|
|
88
|
+
} from './storage/backends/typeValidation.js';
|
|
89
|
+
export { PathValidator } from './validation/PathValidator.js';
|
|
90
|
+
export type { PathValidationResult, EndpointDiff } from './validation/PathValidator.js';
|
|
91
|
+
|
|
92
|
+
// Version management
|
|
93
|
+
export { VersionManager, versionManager } from './core/VersionManager.js';
|
|
94
|
+
export type { VersionedNode, VersionConstants, EnrichOptions, ModifiedNodeInfo, ChangesSummary, ClassifyChangesResult } from './core/VersionManager.js';
|
|
95
|
+
|
|
96
|
+
// Freshness checking and incremental reanalysis
|
|
97
|
+
export { GraphFreshnessChecker } from './core/GraphFreshnessChecker.js';
|
|
98
|
+
export type { FreshnessGraph, FreshnessResult, StaleModule } from './core/GraphFreshnessChecker.js';
|
|
99
|
+
export { IncrementalReanalyzer } from './core/IncrementalReanalyzer.js';
|
|
100
|
+
export type { ReanalysisOptions, ReanalysisProgress, ReanalysisResult } from './core/IncrementalReanalyzer.js';
|
|
36
101
|
|
|
37
102
|
// API
|
|
38
103
|
export { GraphAPI } from './api/GraphAPI.js';
|
|
@@ -42,13 +107,64 @@ export type { GuaranteeGraphBackend } from './api/GuaranteeAPI.js';
|
|
|
42
107
|
// Node kinds
|
|
43
108
|
export { isGuaranteeType } from './core/nodes/NodeKind.js';
|
|
44
109
|
|
|
110
|
+
// Issue nodes (detected problems)
|
|
111
|
+
export { IssueNode, type IssueNodeRecord, type IssueSeverity, type IssueType } from './core/nodes/IssueNode.js';
|
|
112
|
+
|
|
113
|
+
// Node contracts
|
|
114
|
+
export { FunctionNode } from './core/nodes/FunctionNode.js';
|
|
115
|
+
export { CallSiteNode } from './core/nodes/CallSiteNode.js';
|
|
116
|
+
export { MethodCallNode } from './core/nodes/MethodCallNode.js';
|
|
117
|
+
export { ScopeNode } from './core/nodes/ScopeNode.js';
|
|
118
|
+
export { ClassNode } from './core/nodes/ClassNode.js';
|
|
119
|
+
export { MethodNode } from './core/nodes/MethodNode.js';
|
|
120
|
+
export { ExportNode } from './core/nodes/ExportNode.js';
|
|
121
|
+
export { VariableDeclarationNode } from './core/nodes/VariableDeclarationNode.js';
|
|
122
|
+
export { ExternalModuleNode } from './core/nodes/ExternalModuleNode.js';
|
|
123
|
+
export { NetworkRequestNode } from './core/nodes/NetworkRequestNode.js';
|
|
124
|
+
export { InterfaceNode, type InterfacePropertyRecord } from './core/nodes/InterfaceNode.js';
|
|
125
|
+
export { TypeNode } from './core/nodes/TypeNode.js';
|
|
126
|
+
export { EnumNode, type EnumMemberRecord } from './core/nodes/EnumNode.js';
|
|
127
|
+
export { DecoratorNode, type DecoratorTargetType } from './core/nodes/DecoratorNode.js';
|
|
128
|
+
export { ExpressionNode, type ExpressionNodeOptions } from './core/nodes/ExpressionNode.js';
|
|
129
|
+
export { ArgumentExpressionNode, type ArgumentExpressionNodeRecord, type ArgumentExpressionNodeOptions } from './core/nodes/ArgumentExpressionNode.js';
|
|
130
|
+
|
|
131
|
+
// AST Visitors (for advanced usage)
|
|
132
|
+
export {
|
|
133
|
+
ASTVisitor,
|
|
134
|
+
ImportExportVisitor,
|
|
135
|
+
VariableVisitor,
|
|
136
|
+
FunctionVisitor,
|
|
137
|
+
ClassVisitor,
|
|
138
|
+
CallExpressionVisitor,
|
|
139
|
+
TypeScriptVisitor
|
|
140
|
+
} from './plugins/analysis/ast/visitors/index.js';
|
|
141
|
+
export type {
|
|
142
|
+
VisitorModule,
|
|
143
|
+
VisitorCollections,
|
|
144
|
+
VisitorHandlers,
|
|
145
|
+
VisitorHandler,
|
|
146
|
+
VariableInfo,
|
|
147
|
+
ExtractVariableNamesCallback,
|
|
148
|
+
TrackVariableAssignmentCallback,
|
|
149
|
+
AnalyzeFunctionBodyCallback
|
|
150
|
+
} from './plugins/analysis/ast/visitors/index.js';
|
|
151
|
+
|
|
152
|
+
// AST Location utilities (REG-122)
|
|
153
|
+
export {
|
|
154
|
+
getNodeLocation,
|
|
155
|
+
getLine,
|
|
156
|
+
getColumn,
|
|
157
|
+
getEndLocation,
|
|
158
|
+
UNKNOWN_LOCATION
|
|
159
|
+
} from './plugins/analysis/ast/utils/location.js';
|
|
160
|
+
export type { NodeLocation } from './plugins/analysis/ast/utils/location.js';
|
|
161
|
+
|
|
45
162
|
// === PLUGINS ===
|
|
46
163
|
|
|
47
164
|
// Indexing plugins
|
|
48
165
|
export { JSModuleIndexer } from './plugins/indexing/JSModuleIndexer.js';
|
|
49
166
|
export { IncrementalModuleIndexer } from './plugins/indexing/IncrementalModuleIndexer.js';
|
|
50
167
|
export { RustModuleIndexer } from './plugins/indexing/RustModuleIndexer.js';
|
|
51
|
-
export { ServiceDetector } from './plugins/indexing/ServiceDetector.js';
|
|
52
168
|
|
|
53
169
|
// Analysis plugins
|
|
54
170
|
export { JSASTAnalyzer } from './plugins/analysis/JSASTAnalyzer.js';
|
|
@@ -83,11 +199,42 @@ export { ShadowingDetector } from './plugins/validation/ShadowingDetector.js';
|
|
|
83
199
|
export { GraphConnectivityValidator } from './plugins/validation/GraphConnectivityValidator.js';
|
|
84
200
|
export { DataFlowValidator } from './plugins/validation/DataFlowValidator.js';
|
|
85
201
|
export { TypeScriptDeadCodeValidator } from './plugins/validation/TypeScriptDeadCodeValidator.js';
|
|
202
|
+
export { NodeCreationValidator } from './plugins/validation/NodeCreationValidator.js';
|
|
86
203
|
|
|
87
204
|
// Discovery plugins
|
|
88
205
|
export { SimpleProjectDiscovery } from './plugins/discovery/SimpleProjectDiscovery.js';
|
|
89
206
|
export { DiscoveryPlugin } from './plugins/discovery/DiscoveryPlugin.js';
|
|
90
207
|
export { MonorepoServiceDiscovery } from './plugins/discovery/MonorepoServiceDiscovery.js';
|
|
208
|
+
export { WorkspaceDiscovery } from './plugins/discovery/WorkspaceDiscovery.js';
|
|
209
|
+
export { resolveSourceEntrypoint } from './plugins/discovery/resolveSourceEntrypoint.js';
|
|
210
|
+
export type { PackageJsonForResolution } from './plugins/discovery/resolveSourceEntrypoint.js';
|
|
211
|
+
|
|
212
|
+
// Workspace detection utilities
|
|
213
|
+
export {
|
|
214
|
+
detectWorkspaceType,
|
|
215
|
+
parsePnpmWorkspace,
|
|
216
|
+
parseNpmWorkspace,
|
|
217
|
+
parseLernaConfig,
|
|
218
|
+
resolveWorkspacePackages
|
|
219
|
+
} from './plugins/discovery/workspaces/index.js';
|
|
220
|
+
export type {
|
|
221
|
+
WorkspaceType,
|
|
222
|
+
WorkspaceDetectionResult,
|
|
223
|
+
WorkspaceConfig,
|
|
224
|
+
WorkspacePackage
|
|
225
|
+
} from './plugins/discovery/workspaces/index.js';
|
|
226
|
+
|
|
227
|
+
// VCS plugins
|
|
228
|
+
export { GitPlugin } from './plugins/vcs/GitPlugin.js';
|
|
229
|
+
export { VCSPlugin, VCSPluginFactory, FileStatus } from './plugins/vcs/VCSPlugin.js';
|
|
230
|
+
export type {
|
|
231
|
+
VCSConfig,
|
|
232
|
+
VCSPluginMetadata,
|
|
233
|
+
ChangedFile,
|
|
234
|
+
FileDiff,
|
|
235
|
+
DiffHunk,
|
|
236
|
+
} from './plugins/vcs/VCSPlugin.js';
|
|
237
|
+
export type { CommitInfo } from './plugins/vcs/GitPlugin.js';
|
|
91
238
|
|
|
92
239
|
// Re-export types for convenience
|
|
93
240
|
export type * from '@grafema/types';
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger - Lightweight logging for Grafema
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - 5 log levels: silent, errors, warnings, info, debug
|
|
6
|
+
* - Context support for structured logging
|
|
7
|
+
* - No external dependencies
|
|
8
|
+
* - Safe handling of circular references
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const logger = createLogger('info');
|
|
12
|
+
* logger.info('Processing files', { count: 150 });
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Log level type
|
|
17
|
+
*/
|
|
18
|
+
export type LogLevel = 'silent' | 'errors' | 'warnings' | 'info' | 'debug';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Logger interface
|
|
22
|
+
*/
|
|
23
|
+
export interface Logger {
|
|
24
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
25
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
26
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
27
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
28
|
+
trace(message: string, context?: Record<string, unknown>): void;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Log level priorities (higher = more verbose)
|
|
33
|
+
*/
|
|
34
|
+
const LOG_LEVEL_PRIORITY: Record<LogLevel, number> = {
|
|
35
|
+
silent: 0,
|
|
36
|
+
errors: 1,
|
|
37
|
+
warnings: 2,
|
|
38
|
+
info: 3,
|
|
39
|
+
debug: 4,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Minimum level required for each method
|
|
44
|
+
*/
|
|
45
|
+
const METHOD_LEVELS = {
|
|
46
|
+
error: LOG_LEVEL_PRIORITY.errors,
|
|
47
|
+
warn: LOG_LEVEL_PRIORITY.warnings,
|
|
48
|
+
info: LOG_LEVEL_PRIORITY.info,
|
|
49
|
+
debug: LOG_LEVEL_PRIORITY.debug,
|
|
50
|
+
trace: LOG_LEVEL_PRIORITY.debug,
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Safe JSON stringify that handles circular references
|
|
55
|
+
*/
|
|
56
|
+
function safeStringify(obj: unknown): string {
|
|
57
|
+
const seen = new WeakSet();
|
|
58
|
+
return JSON.stringify(obj, (_key, value) => {
|
|
59
|
+
if (typeof value === 'object' && value !== null) {
|
|
60
|
+
if (seen.has(value)) {
|
|
61
|
+
return '[Circular]';
|
|
62
|
+
}
|
|
63
|
+
seen.add(value);
|
|
64
|
+
}
|
|
65
|
+
return value;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Format log message with optional context
|
|
71
|
+
*/
|
|
72
|
+
function formatMessage(message: string, context?: Record<string, unknown>): string {
|
|
73
|
+
if (!context || Object.keys(context).length === 0) {
|
|
74
|
+
return message;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
return `${message} ${safeStringify(context)}`;
|
|
78
|
+
} catch {
|
|
79
|
+
return `${message} [context serialization failed]`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Console-based Logger implementation
|
|
85
|
+
*
|
|
86
|
+
* Respects log level threshold - methods below threshold are no-ops.
|
|
87
|
+
*/
|
|
88
|
+
export class ConsoleLogger implements Logger {
|
|
89
|
+
private readonly level: LogLevel;
|
|
90
|
+
private readonly priority: number;
|
|
91
|
+
|
|
92
|
+
constructor(logLevel: LogLevel = 'info') {
|
|
93
|
+
this.level = logLevel;
|
|
94
|
+
this.priority = LOG_LEVEL_PRIORITY[logLevel];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
private shouldLog(methodLevel: number): boolean {
|
|
98
|
+
return this.priority >= methodLevel;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
error(message: string, context?: Record<string, unknown>): void {
|
|
102
|
+
if (!this.shouldLog(METHOD_LEVELS.error)) return;
|
|
103
|
+
try {
|
|
104
|
+
console.error(formatMessage(`[ERROR] ${message}`, context));
|
|
105
|
+
} catch {
|
|
106
|
+
console.log(`[ERROR] ${message} [logging failed]`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
warn(message: string, context?: Record<string, unknown>): void {
|
|
111
|
+
if (!this.shouldLog(METHOD_LEVELS.warn)) return;
|
|
112
|
+
try {
|
|
113
|
+
console.warn(formatMessage(`[WARN] ${message}`, context));
|
|
114
|
+
} catch {
|
|
115
|
+
console.log(`[WARN] ${message} [logging failed]`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
info(message: string, context?: Record<string, unknown>): void {
|
|
120
|
+
if (!this.shouldLog(METHOD_LEVELS.info)) return;
|
|
121
|
+
try {
|
|
122
|
+
console.info(formatMessage(`[INFO] ${message}`, context));
|
|
123
|
+
} catch {
|
|
124
|
+
console.log(`[INFO] ${message} [logging failed]`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
debug(message: string, context?: Record<string, unknown>): void {
|
|
129
|
+
if (!this.shouldLog(METHOD_LEVELS.debug)) return;
|
|
130
|
+
try {
|
|
131
|
+
console.debug(formatMessage(`[DEBUG] ${message}`, context));
|
|
132
|
+
} catch {
|
|
133
|
+
console.log(`[DEBUG] ${message} [logging failed]`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
trace(message: string, context?: Record<string, unknown>): void {
|
|
138
|
+
if (!this.shouldLog(METHOD_LEVELS.trace)) return;
|
|
139
|
+
try {
|
|
140
|
+
console.debug(formatMessage(`[TRACE] ${message}`, context));
|
|
141
|
+
} catch {
|
|
142
|
+
console.log(`[TRACE] ${message} [logging failed]`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Create a Logger instance with the specified log level
|
|
149
|
+
*/
|
|
150
|
+
export function createLogger(level: LogLevel): Logger {
|
|
151
|
+
return new ConsoleLogger(level);
|
|
152
|
+
}
|
package/src/plugins/Plugin.ts
CHANGED
|
@@ -14,6 +14,7 @@ import type {
|
|
|
14
14
|
PluginResult,
|
|
15
15
|
IPlugin,
|
|
16
16
|
NodeFilter,
|
|
17
|
+
Logger,
|
|
17
18
|
} from '@grafema/types';
|
|
18
19
|
import type { NodeRecord } from '@grafema/types';
|
|
19
20
|
|
|
@@ -71,4 +72,45 @@ export abstract class Plugin implements IPlugin {
|
|
|
71
72
|
}
|
|
72
73
|
return modules;
|
|
73
74
|
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Get a logger from context with console fallback for backward compatibility.
|
|
78
|
+
*/
|
|
79
|
+
protected log(context: PluginContext): Logger {
|
|
80
|
+
if (context.logger) {
|
|
81
|
+
return context.logger;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Fallback to console for backward compatibility
|
|
85
|
+
const safeStringify = (obj: Record<string, unknown>): string => {
|
|
86
|
+
try {
|
|
87
|
+
const seen = new WeakSet();
|
|
88
|
+
return JSON.stringify(obj, (_key, value) => {
|
|
89
|
+
if (typeof value === 'object' && value !== null) {
|
|
90
|
+
if (seen.has(value)) return '[Circular]';
|
|
91
|
+
seen.add(value);
|
|
92
|
+
}
|
|
93
|
+
return value;
|
|
94
|
+
});
|
|
95
|
+
} catch {
|
|
96
|
+
return '[serialization failed]';
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const format = (msg: string, ctx?: Record<string, unknown>) =>
|
|
101
|
+
ctx ? `${msg} ${safeStringify(ctx)}` : msg;
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
error: (msg: string, ctx?: Record<string, unknown>) =>
|
|
105
|
+
console.error(`[ERROR] ${format(msg, ctx)}`),
|
|
106
|
+
warn: (msg: string, ctx?: Record<string, unknown>) =>
|
|
107
|
+
console.warn(`[WARN] ${format(msg, ctx)}`),
|
|
108
|
+
info: (msg: string, ctx?: Record<string, unknown>) =>
|
|
109
|
+
console.log(`[INFO] ${format(msg, ctx)}`),
|
|
110
|
+
debug: (msg: string, ctx?: Record<string, unknown>) =>
|
|
111
|
+
console.debug(`[DEBUG] ${format(msg, ctx)}`),
|
|
112
|
+
trace: (msg: string, ctx?: Record<string, unknown>) =>
|
|
113
|
+
console.debug(`[TRACE] ${format(msg, ctx)}`),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
74
116
|
}
|