@grafema/core 0.2.3-beta → 0.2.5-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Orchestrator.d.ts +37 -0
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +322 -35
- package/dist/Orchestrator.js.map +1 -0
- package/dist/api/GraphAPI.d.ts +1 -1
- package/dist/api/GraphAPI.d.ts.map +1 -1
- package/dist/api/GraphAPI.js +3 -1
- package/dist/api/GraphAPI.js.map +1 -0
- package/dist/api/GuaranteeAPI.d.ts.map +1 -1
- package/dist/api/GuaranteeAPI.js +4 -2
- package/dist/api/GuaranteeAPI.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +66 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -1
- package/dist/config/ConfigLoader.js +77 -3
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -1
- package/dist/config/index.js.map +1 -0
- package/dist/core/ASTWorker.d.ts.map +1 -1
- package/dist/core/ASTWorker.js +6 -4
- package/dist/core/ASTWorker.js.map +1 -0
- package/dist/core/ASTWorkerPool.js +2 -1
- package/dist/core/ASTWorkerPool.js.map +1 -0
- package/dist/core/AnalysisQueue.js +1 -0
- package/dist/core/AnalysisQueue.js.map +1 -0
- package/dist/core/CoverageAnalyzer.d.ts.map +1 -1
- package/dist/core/CoverageAnalyzer.js +1 -0
- package/dist/core/CoverageAnalyzer.js.map +1 -0
- package/dist/core/FileExplainer.js +1 -0
- package/dist/core/FileExplainer.js.map +1 -0
- package/dist/core/FileNodeManager.d.ts.map +1 -1
- package/dist/core/FileNodeManager.js +4 -2
- package/dist/core/FileNodeManager.js.map +1 -0
- package/dist/core/GraphBackend.js +1 -0
- package/dist/core/GraphBackend.js.map +1 -0
- package/dist/core/GraphFreshnessChecker.js +1 -0
- package/dist/core/GraphFreshnessChecker.js.map +1 -0
- package/dist/core/GuaranteeManager.js +2 -1
- package/dist/core/GuaranteeManager.js.map +1 -0
- package/dist/core/HashUtils.js +1 -0
- package/dist/core/HashUtils.js.map +1 -0
- package/dist/core/IncrementalReanalyzer.d.ts.map +1 -1
- package/dist/core/IncrementalReanalyzer.js +7 -3
- package/dist/core/IncrementalReanalyzer.js.map +1 -0
- package/dist/core/ManifestStore.js +1 -0
- package/dist/core/ManifestStore.js.map +1 -0
- package/dist/core/NodeFactory.d.ts +54 -34
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +20 -1
- package/dist/core/NodeFactory.js.map +1 -0
- package/dist/core/NodeId.js +1 -0
- package/dist/core/NodeId.js.map +1 -0
- package/dist/core/PriorityQueue.js +1 -0
- package/dist/core/PriorityQueue.js.map +1 -0
- package/dist/core/Profiler.js +1 -0
- package/dist/core/Profiler.js.map +1 -0
- package/dist/core/ScopeTracker.js +1 -0
- package/dist/core/ScopeTracker.js.map +1 -0
- package/dist/core/SemanticId.js +1 -0
- package/dist/core/SemanticId.js.map +1 -0
- package/dist/core/Task.js +1 -0
- package/dist/core/Task.js.map +1 -0
- package/dist/core/TaskTypes.js +1 -0
- package/dist/core/TaskTypes.js.map +1 -0
- package/dist/core/VersionManager.js +1 -0
- package/dist/core/VersionManager.js.map +1 -0
- package/dist/core/WorkerPool.d.ts.map +1 -1
- package/dist/core/WorkerPool.js +3 -1
- package/dist/core/WorkerPool.js.map +1 -0
- package/dist/core/nodes/ArgumentExpressionNode.js +1 -0
- package/dist/core/nodes/ArgumentExpressionNode.js.map +1 -0
- package/dist/core/nodes/ArrayLiteralNode.js +1 -0
- package/dist/core/nodes/ArrayLiteralNode.js.map +1 -0
- package/dist/core/nodes/BranchNode.js +1 -0
- package/dist/core/nodes/BranchNode.js.map +1 -0
- package/dist/core/nodes/CallSiteNode.js +1 -0
- package/dist/core/nodes/CallSiteNode.js.map +1 -0
- package/dist/core/nodes/CaseNode.js +1 -0
- package/dist/core/nodes/CaseNode.js.map +1 -0
- package/dist/core/nodes/ClassNode.js +1 -0
- package/dist/core/nodes/ClassNode.js.map +1 -0
- package/dist/core/nodes/ConstantNode.js +1 -0
- package/dist/core/nodes/ConstantNode.js.map +1 -0
- package/dist/core/nodes/ConstructorCallNode.js +1 -0
- package/dist/core/nodes/ConstructorCallNode.js.map +1 -0
- package/dist/core/nodes/DatabaseQueryNode.js +1 -0
- package/dist/core/nodes/DatabaseQueryNode.js.map +1 -0
- package/dist/core/nodes/DecoratorNode.js +1 -0
- package/dist/core/nodes/DecoratorNode.js.map +1 -0
- package/dist/core/nodes/EntrypointNode.js +1 -0
- package/dist/core/nodes/EntrypointNode.js.map +1 -0
- package/dist/core/nodes/EnumNode.js +1 -0
- package/dist/core/nodes/EnumNode.js.map +1 -0
- package/dist/core/nodes/EventListenerNode.js +1 -0
- package/dist/core/nodes/EventListenerNode.js.map +1 -0
- package/dist/core/nodes/ExportNode.js +1 -0
- package/dist/core/nodes/ExportNode.js.map +1 -0
- package/dist/core/nodes/ExpressionNode.js +1 -0
- package/dist/core/nodes/ExpressionNode.js.map +1 -0
- package/dist/core/nodes/ExternalModuleNode.js +1 -0
- package/dist/core/nodes/ExternalModuleNode.js.map +1 -0
- package/dist/core/nodes/ExternalStdioNode.js +1 -0
- package/dist/core/nodes/ExternalStdioNode.js.map +1 -0
- package/dist/core/nodes/FunctionNode.js +1 -0
- package/dist/core/nodes/FunctionNode.js.map +1 -0
- package/dist/core/nodes/GuaranteeNode.js +1 -0
- package/dist/core/nodes/GuaranteeNode.js.map +1 -0
- package/dist/core/nodes/HttpRequestNode.js +1 -0
- package/dist/core/nodes/HttpRequestNode.js.map +1 -0
- package/dist/core/nodes/ImportNode.js +1 -0
- package/dist/core/nodes/ImportNode.js.map +1 -0
- package/dist/core/nodes/InterfaceNode.js +1 -0
- package/dist/core/nodes/InterfaceNode.js.map +1 -0
- package/dist/core/nodes/IssueNode.js +1 -0
- package/dist/core/nodes/IssueNode.js.map +1 -0
- package/dist/core/nodes/LiteralNode.js +1 -0
- package/dist/core/nodes/LiteralNode.js.map +1 -0
- package/dist/core/nodes/MethodCallNode.js +1 -0
- package/dist/core/nodes/MethodCallNode.js.map +1 -0
- package/dist/core/nodes/MethodNode.js +1 -0
- package/dist/core/nodes/MethodNode.js.map +1 -0
- package/dist/core/nodes/ModuleNode.js +1 -0
- package/dist/core/nodes/ModuleNode.js.map +1 -0
- package/dist/core/nodes/NetworkRequestNode.js +1 -0
- package/dist/core/nodes/NetworkRequestNode.js.map +1 -0
- package/dist/core/nodes/NodeKind.d.ts +5 -0
- package/dist/core/nodes/NodeKind.d.ts.map +1 -1
- package/dist/core/nodes/NodeKind.js +11 -0
- package/dist/core/nodes/NodeKind.js.map +1 -0
- package/dist/core/nodes/ObjectLiteralNode.js +1 -0
- package/dist/core/nodes/ObjectLiteralNode.js.map +1 -0
- package/dist/core/nodes/ParameterNode.js +1 -0
- package/dist/core/nodes/ParameterNode.js.map +1 -0
- package/dist/core/nodes/PluginNode.d.ts +69 -0
- package/dist/core/nodes/PluginNode.d.ts.map +1 -0
- package/dist/core/nodes/PluginNode.js +106 -0
- package/dist/core/nodes/PluginNode.js.map +1 -0
- package/dist/core/nodes/ScopeNode.js +1 -0
- package/dist/core/nodes/ScopeNode.js.map +1 -0
- package/dist/core/nodes/ServiceNode.js +1 -0
- package/dist/core/nodes/ServiceNode.js.map +1 -0
- package/dist/core/nodes/TypeNode.js +2 -1
- package/dist/core/nodes/TypeNode.js.map +1 -0
- package/dist/core/nodes/VariableDeclarationNode.js +1 -0
- package/dist/core/nodes/VariableDeclarationNode.js.map +1 -0
- package/dist/core/nodes/index.d.ts +2 -1
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +4 -1
- package/dist/core/nodes/index.js.map +1 -0
- package/dist/core/toposort.d.ts +38 -0
- package/dist/core/toposort.d.ts.map +1 -0
- package/dist/core/toposort.js +129 -0
- package/dist/core/toposort.js.map +1 -0
- package/dist/data/builtins/BuiltinRegistry.js +1 -0
- package/dist/data/builtins/BuiltinRegistry.js.map +1 -0
- package/dist/data/builtins/definitions.js +1 -0
- package/dist/data/builtins/definitions.js.map +1 -0
- package/dist/data/builtins/index.js +1 -0
- package/dist/data/builtins/index.js.map +1 -0
- package/dist/data/builtins/jsGlobals.js +1 -0
- package/dist/data/builtins/jsGlobals.js.map +1 -0
- package/dist/data/builtins/types.js +1 -0
- package/dist/data/builtins/types.js.map +1 -0
- package/dist/data/globals/definitions.js +1 -0
- package/dist/data/globals/definitions.js.map +1 -0
- package/dist/data/globals/index.js +1 -0
- package/dist/data/globals/index.js.map +1 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts +5 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -1
- package/dist/diagnostics/DiagnosticCollector.js +4 -0
- package/dist/diagnostics/DiagnosticCollector.js.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts +23 -1
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -1
- package/dist/diagnostics/DiagnosticReporter.js +68 -15
- package/dist/diagnostics/DiagnosticReporter.js.map +1 -0
- package/dist/diagnostics/DiagnosticWriter.js +1 -0
- package/dist/diagnostics/DiagnosticWriter.js.map +1 -0
- package/dist/diagnostics/categories.d.ts +57 -0
- package/dist/diagnostics/categories.d.ts.map +1 -0
- package/dist/diagnostics/categories.js +71 -0
- package/dist/diagnostics/categories.js.map +1 -0
- package/dist/diagnostics/index.d.ts +3 -0
- package/dist/diagnostics/index.d.ts.map +1 -1
- package/dist/diagnostics/index.js +4 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/errors/GrafemaError.d.ts +39 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -1
- package/dist/errors/GrafemaError.js +28 -0
- package/dist/errors/GrafemaError.js.map +1 -0
- package/dist/index.d.ts +21 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -6
- package/dist/index.js.map +1 -0
- package/dist/instructions/index.d.ts +8 -0
- package/dist/instructions/index.d.ts.map +1 -0
- package/dist/instructions/index.js +20 -0
- package/dist/instructions/index.js.map +1 -0
- package/dist/instructions/onboarding.md +121 -0
- package/dist/logging/Logger.d.ts +53 -3
- package/dist/logging/Logger.d.ts.map +1 -1
- package/dist/logging/Logger.js +144 -4
- package/dist/logging/Logger.js.map +1 -0
- package/dist/plugins/Plugin.js +1 -0
- package/dist/plugins/Plugin.js.map +1 -0
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.js +20 -14
- package/dist/plugins/analysis/DatabaseAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +23 -16
- package/dist/plugins/analysis/ExpressAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +2 -1
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js +53 -76
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +47 -37
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +8 -14
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +144 -97
- package/dist/plugins/analysis/FetchAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +3 -5
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js.map +1 -0
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts +59 -2
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +926 -422
- package/dist/plugins/analysis/JSASTAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ReactAnalyzer.js +24 -19
- package/dist/plugins/analysis/ReactAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/RustAnalyzer.js +39 -26
- package/dist/plugins/analysis/RustAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +14 -7
- package/dist/plugins/analysis/SQLiteAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js +33 -28
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +24 -14
- package/dist/plugins/analysis/SocketIOAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SystemDbAnalyzer.js +19 -11
- package/dist/plugins/analysis/SystemDbAnalyzer.js.map +1 -0
- package/dist/plugins/analysis/ast/ConditionParser.js +1 -0
- package/dist/plugins/analysis/ast/ConditionParser.js.map +1 -0
- package/dist/plugins/analysis/ast/ExpressionEvaluator.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/ExpressionEvaluator.js +1 -0
- package/dist/plugins/analysis/ast/ExpressionEvaluator.js.map +1 -0
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts +58 -6
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +440 -56
- package/dist/plugins/analysis/ast/GraphBuilder.js.map +1 -0
- package/dist/plugins/analysis/ast/IdGenerator.js +1 -0
- package/dist/plugins/analysis/ast/IdGenerator.js.map +1 -0
- package/dist/plugins/analysis/ast/OxcAdapter.js +1 -0
- package/dist/plugins/analysis/ast/OxcAdapter.js.map +1 -0
- package/dist/plugins/analysis/ast/types.d.ts +152 -1
- package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/types.js +1 -0
- package/dist/plugins/analysis/ast/types.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.d.ts +27 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.js +45 -0
- package/dist/plugins/analysis/ast/utils/babelTraverse.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js +1 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/index.js +1 -0
- package/dist/plugins/analysis/ast/utils/index.js.map +1 -0
- package/dist/plugins/analysis/ast/utils/location.js +1 -0
- package/dist/plugins/analysis/ast/utils/location.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +3 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +9 -2
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +145 -14
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +198 -0
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +4 -3
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +5 -2
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts +83 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js +258 -0
- package/dist/plugins/analysis/ast/visitors/PropertyAccessVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +1 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js.map +1 -0
- package/dist/plugins/analysis/ast/visitors/index.d.ts +1 -0
- package/dist/plugins/analysis/ast/visitors/index.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/index.js +2 -0
- package/dist/plugins/analysis/ast/visitors/index.js.map +1 -0
- package/dist/plugins/discovery/DiscoveryPlugin.d.ts +42 -10
- package/dist/plugins/discovery/DiscoveryPlugin.d.ts.map +1 -1
- package/dist/plugins/discovery/DiscoveryPlugin.js +17 -1
- package/dist/plugins/discovery/DiscoveryPlugin.js.map +1 -0
- package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js.map +1 -0
- package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/SimpleProjectDiscovery.js +3 -2
- package/dist/plugins/discovery/SimpleProjectDiscovery.js.map +1 -0
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/WorkspaceDiscovery.js +3 -2
- package/dist/plugins/discovery/WorkspaceDiscovery.js.map +1 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.js +1 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.js.map +1 -0
- package/dist/plugins/discovery/workspaces/detector.js +1 -0
- package/dist/plugins/discovery/workspaces/detector.js.map +1 -0
- package/dist/plugins/discovery/workspaces/globResolver.js +1 -0
- package/dist/plugins/discovery/workspaces/globResolver.js.map +1 -0
- package/dist/plugins/discovery/workspaces/index.js +1 -0
- package/dist/plugins/discovery/workspaces/index.js.map +1 -0
- package/dist/plugins/discovery/workspaces/parsers.js +1 -0
- package/dist/plugins/discovery/workspaces/parsers.js.map +1 -0
- package/dist/plugins/enrichment/AliasTracker.js +3 -2
- package/dist/plugins/enrichment/AliasTracker.js.map +1 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.js +1 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.js.map +1 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js +1 -1
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js.map +1 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.d.ts +21 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.d.ts.map +1 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.js +137 -0
- package/dist/plugins/enrichment/ExpressHandlerLinker.js.map +1 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/ExternalCallResolver.js +1 -1
- package/dist/plugins/enrichment/ExternalCallResolver.js.map +1 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts +5 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/FunctionCallResolver.js +11 -9
- package/dist/plugins/enrichment/FunctionCallResolver.js.map +1 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +2 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +51 -13
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js.map +1 -0
- package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.js +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.js.map +1 -0
- package/dist/plugins/enrichment/InstanceOfResolver.js +3 -2
- package/dist/plugins/enrichment/InstanceOfResolver.js.map +1 -0
- package/dist/plugins/enrichment/MethodCallResolver.d.ts +39 -1
- package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MethodCallResolver.js +422 -11
- package/dist/plugins/enrichment/MethodCallResolver.js.map +1 -0
- package/dist/plugins/enrichment/MountPointResolver.d.ts +1 -1
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +7 -23
- package/dist/plugins/enrichment/MountPointResolver.js.map +1 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +2 -2
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js.map +1 -0
- package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
- package/dist/plugins/enrichment/PrefixEvaluator.js +5 -4
- package/dist/plugins/enrichment/PrefixEvaluator.js.map +1 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.d.ts +30 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.js +190 -0
- package/dist/plugins/enrichment/RejectionPropagationEnricher.js.map +1 -0
- package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js.map +1 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +4 -3
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js.map +1 -0
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts +3 -1
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/IncrementalModuleIndexer.js +22 -29
- package/dist/plugins/indexing/IncrementalModuleIndexer.js.map +1 -0
- package/dist/plugins/indexing/JSModuleIndexer.d.ts +3 -1
- package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +22 -31
- package/dist/plugins/indexing/JSModuleIndexer.js.map +1 -0
- package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +11 -5
- package/dist/plugins/indexing/RustModuleIndexer.js.map +1 -0
- package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -1
- package/dist/plugins/validation/BrokenImportValidator.js +3 -3
- package/dist/plugins/validation/BrokenImportValidator.js.map +1 -0
- package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
- package/dist/plugins/validation/CallResolverValidator.js +3 -3
- package/dist/plugins/validation/CallResolverValidator.js.map +1 -0
- package/dist/plugins/validation/DataFlowValidator.js +2 -1
- package/dist/plugins/validation/DataFlowValidator.js.map +1 -0
- package/dist/plugins/validation/EvalBanValidator.js +2 -1
- package/dist/plugins/validation/EvalBanValidator.js.map +1 -0
- package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js +2 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js.map +1 -0
- package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
- package/dist/plugins/validation/SQLInjectionValidator.js +4 -2
- package/dist/plugins/validation/SQLInjectionValidator.js.map +1 -0
- package/dist/plugins/validation/ShadowingDetector.js +2 -1
- package/dist/plugins/validation/ShadowingDetector.js.map +1 -0
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +3 -3
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.js.map +1 -0
- package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
- package/dist/plugins/vcs/GitPlugin.js +13 -6
- package/dist/plugins/vcs/GitPlugin.js.map +1 -0
- package/dist/plugins/vcs/VCSPlugin.js +1 -0
- package/dist/plugins/vcs/VCSPlugin.js.map +1 -0
- package/dist/plugins/vcs/index.js +1 -0
- package/dist/plugins/vcs/index.js.map +1 -0
- package/dist/queries/findCallsInFunction.d.ts +1 -1
- package/dist/queries/findCallsInFunction.d.ts.map +1 -1
- package/dist/queries/findCallsInFunction.js +3 -2
- package/dist/queries/findCallsInFunction.js.map +1 -0
- package/dist/queries/findContainingFunction.d.ts +1 -1
- package/dist/queries/findContainingFunction.d.ts.map +1 -1
- package/dist/queries/findContainingFunction.js +1 -0
- package/dist/queries/findContainingFunction.js.map +1 -0
- package/dist/queries/index.js +1 -0
- package/dist/queries/index.js.map +1 -0
- package/dist/queries/traceValues.d.ts.map +1 -1
- package/dist/queries/traceValues.js +1 -0
- package/dist/queries/traceValues.js.map +1 -0
- package/dist/queries/types.js +1 -0
- package/dist/queries/types.js.map +1 -0
- package/dist/schema/GraphSchemaExtractor.js +1 -0
- package/dist/schema/GraphSchemaExtractor.js.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js.map +1 -0
- package/dist/schema/index.js +1 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +20 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +47 -19
- package/dist/storage/backends/RFDBServerBackend.js.map +1 -0
- package/dist/storage/backends/typeValidation.d.ts.map +1 -1
- package/dist/storage/backends/typeValidation.js +3 -0
- package/dist/storage/backends/typeValidation.js.map +1 -0
- package/dist/utils/findRfdbBinary.d.ts +39 -0
- package/dist/utils/findRfdbBinary.d.ts.map +1 -0
- package/dist/utils/findRfdbBinary.js +141 -0
- package/dist/utils/findRfdbBinary.js.map +1 -0
- package/dist/utils/moduleResolution.d.ts +134 -0
- package/dist/utils/moduleResolution.d.ts.map +1 -0
- package/dist/utils/moduleResolution.js +164 -0
- package/dist/utils/moduleResolution.js.map +1 -0
- package/dist/validation/PathValidator.d.ts.map +1 -1
- package/dist/validation/PathValidator.js +1 -0
- package/dist/validation/PathValidator.js.map +1 -0
- package/package.json +4 -3
- package/src/Orchestrator.ts +371 -41
- package/src/api/GraphAPI.ts +4 -2
- package/src/api/GuaranteeAPI.ts +3 -2
- package/src/config/ConfigLoader.ts +121 -3
- package/src/config/index.ts +7 -1
- package/src/core/ASTWorker.ts +8 -20
- package/src/core/ASTWorkerPool.ts +1 -1
- package/src/core/CoverageAnalyzer.ts +2 -2
- package/src/core/FileNodeManager.ts +3 -2
- package/src/core/GuaranteeManager.ts +1 -1
- package/src/core/IncrementalReanalyzer.ts +6 -3
- package/src/core/NodeFactory.ts +34 -1
- package/src/core/WorkerPool.ts +2 -1
- package/src/core/nodes/NodeKind.ts +11 -0
- package/src/core/nodes/PluginNode.ts +144 -0
- package/src/core/nodes/TypeNode.ts +1 -1
- package/src/core/nodes/index.ts +4 -0
- package/src/core/toposort.ts +160 -0
- package/src/diagnostics/DiagnosticCollector.ts +8 -1
- package/src/diagnostics/DiagnosticReporter.ts +87 -16
- package/src/diagnostics/categories.ts +104 -0
- package/src/diagnostics/index.ts +14 -0
- package/src/errors/GrafemaError.ts +58 -0
- package/src/index.ts +53 -7
- package/src/instructions/index.ts +21 -0
- package/src/instructions/onboarding.md +121 -0
- package/src/logging/Logger.ts +155 -4
- package/src/plugins/analysis/DatabaseAnalyzer.ts +22 -15
- package/src/plugins/analysis/ExpressAnalyzer.ts +30 -18
- package/src/plugins/analysis/ExpressResponseAnalyzer.ts +72 -88
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +54 -39
- package/src/plugins/analysis/FetchAnalyzer.ts +165 -113
- package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +6 -7
- package/src/plugins/analysis/JSASTAnalyzer.ts +1122 -487
- package/src/plugins/analysis/ReactAnalyzer.ts +27 -20
- package/src/plugins/analysis/RustAnalyzer.ts +41 -27
- package/src/plugins/analysis/SQLiteAnalyzer.ts +18 -8
- package/src/plugins/analysis/ServiceLayerAnalyzer.ts +38 -34
- package/src/plugins/analysis/SocketIOAnalyzer.ts +30 -15
- package/src/plugins/analysis/SystemDbAnalyzer.ts +24 -13
- package/src/plugins/analysis/ast/ExpressionEvaluator.ts +1 -3
- package/src/plugins/analysis/ast/GraphBuilder.ts +532 -66
- package/src/plugins/analysis/ast/types.ts +200 -2
- package/src/plugins/analysis/ast/utils/babelTraverse.ts +74 -0
- package/src/plugins/analysis/ast/utils/createParameterNodes.ts +1 -1
- package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +7 -2
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +163 -15
- package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +249 -3
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +9 -4
- package/src/plugins/analysis/ast/visitors/PropertyAccessVisitor.ts +342 -0
- package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +2 -3
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +1 -27
- package/src/plugins/analysis/ast/visitors/index.ts +2 -0
- package/src/plugins/discovery/DiscoveryPlugin.ts +42 -11
- package/src/plugins/discovery/MonorepoServiceDiscovery.ts +2 -2
- package/src/plugins/discovery/SimpleProjectDiscovery.ts +2 -2
- package/src/plugins/discovery/WorkspaceDiscovery.ts +2 -2
- package/src/plugins/discovery/workspaces/globResolver.ts +1 -1
- package/src/plugins/enrichment/AliasTracker.ts +2 -2
- package/src/plugins/enrichment/ArgumentParameterLinker.ts +0 -1
- package/src/plugins/enrichment/ClosureCaptureEnricher.ts +0 -1
- package/src/plugins/enrichment/ExpressHandlerLinker.ts +178 -0
- package/src/plugins/enrichment/ExternalCallResolver.ts +0 -1
- package/src/plugins/enrichment/FunctionCallResolver.ts +10 -15
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +65 -14
- package/src/plugins/enrichment/ImportExportLinker.ts +0 -1
- package/src/plugins/enrichment/InstanceOfResolver.ts +2 -2
- package/src/plugins/enrichment/MethodCallResolver.ts +526 -12
- package/src/plugins/enrichment/MountPointResolver.ts +6 -24
- package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +1 -2
- package/src/plugins/enrichment/PrefixEvaluator.ts +4 -4
- package/src/plugins/enrichment/RejectionPropagationEnricher.ts +253 -0
- package/src/plugins/enrichment/RustFFIEnricher.ts +0 -1
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +3 -3
- package/src/plugins/indexing/IncrementalModuleIndexer.ts +24 -30
- package/src/plugins/indexing/JSModuleIndexer.ts +21 -22
- package/src/plugins/indexing/RustModuleIndexer.ts +10 -5
- package/src/plugins/validation/BrokenImportValidator.ts +2 -3
- package/src/plugins/validation/CallResolverValidator.ts +2 -3
- package/src/plugins/validation/DataFlowValidator.ts +1 -1
- package/src/plugins/validation/EvalBanValidator.ts +1 -1
- package/src/plugins/validation/GraphConnectivityValidator.ts +1 -9
- package/src/plugins/validation/SQLInjectionValidator.ts +3 -2
- package/src/plugins/validation/ShadowingDetector.ts +1 -1
- package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +2 -3
- package/src/plugins/vcs/GitPlugin.ts +12 -6
- package/src/queries/findCallsInFunction.ts +4 -4
- package/src/queries/findContainingFunction.ts +1 -1
- package/src/queries/traceValues.ts +0 -1
- package/src/storage/backends/RFDBServerBackend.ts +56 -22
- package/src/storage/backends/typeValidation.ts +2 -0
- package/src/utils/findRfdbBinary.ts +160 -0
- package/src/utils/moduleResolution.ts +244 -0
- package/src/validation/PathValidator.ts +0 -8
- package/src/plugins/validation/NodeCreationValidator.ts +0 -554
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Grafema Project Onboarding
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
Study the target project and create a `.grafema/config.yaml` that correctly
|
|
5
|
+
describes its services, entry points, and analysis configuration.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
- The project directory exists and contains source code
|
|
9
|
+
- `.grafema/` directory exists (run `grafema init` if not)
|
|
10
|
+
|
|
11
|
+
## Step 1: Initial Reconnaissance
|
|
12
|
+
|
|
13
|
+
Use `read_project_structure` to get the directory tree.
|
|
14
|
+
|
|
15
|
+
Look for:
|
|
16
|
+
- `package.json` in root and subdirectories (indicates JS/TS packages)
|
|
17
|
+
- `pnpm-workspace.yaml`, `lerna.json`, root `package.json` with `workspaces`
|
|
18
|
+
field (workspace/monorepo indicators)
|
|
19
|
+
- `tsconfig.json` files (TypeScript project)
|
|
20
|
+
- `Dockerfile`, `docker-compose.yml`, `k8s/`, `apps.json` (deployment configs
|
|
21
|
+
that may reveal service boundaries)
|
|
22
|
+
- Directories named `apps/`, `packages/`, `services/`, `pkg/`, `modules/`
|
|
23
|
+
(common monorepo structures)
|
|
24
|
+
|
|
25
|
+
## Step 2: Identify Services
|
|
26
|
+
|
|
27
|
+
A "service" in Grafema is an independently analyzable unit of code with its
|
|
28
|
+
own entry point. Typically:
|
|
29
|
+
- A standalone application (API server, web app, CLI tool)
|
|
30
|
+
- A package in a monorepo that other packages depend on
|
|
31
|
+
- A microservice in a deployment configuration
|
|
32
|
+
|
|
33
|
+
For each potential service, determine:
|
|
34
|
+
1. **Name** — human-readable identifier (e.g., "backend", "dashboard")
|
|
35
|
+
2. **Path** — directory path relative to project root
|
|
36
|
+
3. **Entry point** — the main source file (prefer TypeScript source over
|
|
37
|
+
compiled output)
|
|
38
|
+
|
|
39
|
+
### How to find entry points
|
|
40
|
+
Check in order:
|
|
41
|
+
1. `package.json` "source" field (TypeScript source entry)
|
|
42
|
+
2. `package.json` "main" field, but look for `.ts` equivalent in `src/`
|
|
43
|
+
3. Common patterns: `src/index.ts`, `src/main.ts`, `src/app.ts`,
|
|
44
|
+
`src/server.ts`, `index.ts`
|
|
45
|
+
4. For React apps: `src/App.tsx`, `src/index.tsx`
|
|
46
|
+
5. Check `bin` field in package.json for CLI tools
|
|
47
|
+
|
|
48
|
+
### When to ask the user
|
|
49
|
+
- "I found [X] that looks like [description]. Should I include it as a
|
|
50
|
+
service?"
|
|
51
|
+
- "This directory has multiple potential entry points: [list].
|
|
52
|
+
Which should I use?"
|
|
53
|
+
- "I found deployment configuration mentioning services not visible in
|
|
54
|
+
the code structure. Should I investigate?"
|
|
55
|
+
|
|
56
|
+
## Step 3: Run Auto-Discovery (Optional)
|
|
57
|
+
|
|
58
|
+
Use `discover_services` to see what Grafema's built-in detection finds.
|
|
59
|
+
Compare with your own findings from Steps 1-2. Note discrepancies —
|
|
60
|
+
auto-discovery may miss services or misidentify entry points.
|
|
61
|
+
|
|
62
|
+
## Step 4: Configure Plugins
|
|
63
|
+
|
|
64
|
+
Default plugins work for most JS/TS projects. Adjust if:
|
|
65
|
+
- Project uses specific frameworks (Express, React, Socket.IO) — ensure
|
|
66
|
+
corresponding analyzers are enabled
|
|
67
|
+
- Project has Rust components — add `RustModuleIndexer` and `RustAnalyzer`
|
|
68
|
+
- Project has unusual file patterns — configure `include`/`exclude`
|
|
69
|
+
|
|
70
|
+
Default plugin list (reference only — omit from config to use defaults):
|
|
71
|
+
indexing: [JSModuleIndexer]
|
|
72
|
+
analysis: [JSASTAnalyzer, ExpressRouteAnalyzer, ExpressResponseAnalyzer,
|
|
73
|
+
SocketIOAnalyzer, DatabaseAnalyzer, FetchAnalyzer, ServiceLayerAnalyzer]
|
|
74
|
+
enrichment: [MethodCallResolver, ArgumentParameterLinker, AliasTracker,
|
|
75
|
+
ClosureCaptureEnricher, RejectionPropagationEnricher, ValueDomainAnalyzer,
|
|
76
|
+
MountPointResolver, ExpressHandlerLinker, PrefixEvaluator,
|
|
77
|
+
ImportExportLinker, HTTPConnectionEnricher]
|
|
78
|
+
validation: [GraphConnectivityValidator, DataFlowValidator, EvalBanValidator,
|
|
79
|
+
CallResolverValidator, SQLInjectionValidator, ShadowingDetector,
|
|
80
|
+
TypeScriptDeadCodeValidator, BrokenImportValidator]
|
|
81
|
+
|
|
82
|
+
## Step 5: Write Configuration
|
|
83
|
+
|
|
84
|
+
Use `write_config` to save the discovered configuration.
|
|
85
|
+
|
|
86
|
+
The config should include:
|
|
87
|
+
- `services` array with all confirmed services (name, path, optional entryPoint)
|
|
88
|
+
- `plugins` section (only if overriding defaults)
|
|
89
|
+
- `include`/`exclude` patterns (only if needed)
|
|
90
|
+
- `workspace.roots` (for multi-root workspaces only)
|
|
91
|
+
|
|
92
|
+
## Step 6: Verify
|
|
93
|
+
|
|
94
|
+
Run `analyze_project` to build the graph. Then check:
|
|
95
|
+
- `get_stats` — are node/edge counts reasonable for the project size?
|
|
96
|
+
- `get_coverage` — are the expected files analyzed?
|
|
97
|
+
|
|
98
|
+
If coverage is low or results are unexpected, iterate:
|
|
99
|
+
revisit services, entry points, or include/exclude patterns.
|
|
100
|
+
|
|
101
|
+
## Common Patterns
|
|
102
|
+
|
|
103
|
+
### Monorepo with workspaces
|
|
104
|
+
Look for `pnpm-workspace.yaml` or `workspaces` in root `package.json`.
|
|
105
|
+
Each workspace package is typically a service. Use `read_project_structure`
|
|
106
|
+
with depth=2 to see the package layout.
|
|
107
|
+
|
|
108
|
+
### Legacy project with multiple entry points
|
|
109
|
+
Look for `scripts` in `package.json`, `bin` field, or multiple files
|
|
110
|
+
in `src/` that look like entry points (contain `app.listen()`,
|
|
111
|
+
`createServer()`, `express()`).
|
|
112
|
+
|
|
113
|
+
### Microservices with shared deployment
|
|
114
|
+
Look for `docker-compose.yml`, Kubernetes configs, or similar
|
|
115
|
+
deployment manifests that list services. Cross-reference with
|
|
116
|
+
code directories.
|
|
117
|
+
|
|
118
|
+
### Single-package project
|
|
119
|
+
If there is only one `package.json` at the root and no monorepo
|
|
120
|
+
structure, the project is likely a single service. The service path
|
|
121
|
+
is `.` (root), and the entry point is determined from `package.json`.
|
package/src/logging/Logger.ts
CHANGED
|
@@ -4,14 +4,20 @@
|
|
|
4
4
|
* Features:
|
|
5
5
|
* - 5 log levels: silent, errors, warnings, info, debug
|
|
6
6
|
* - Context support for structured logging
|
|
7
|
-
* -
|
|
7
|
+
* - Console and file output (or both via MultiLogger)
|
|
8
8
|
* - Safe handling of circular references
|
|
9
9
|
*
|
|
10
10
|
* Usage:
|
|
11
11
|
* const logger = createLogger('info');
|
|
12
12
|
* logger.info('Processing files', { count: 150 });
|
|
13
|
+
*
|
|
14
|
+
* // Write logs to file (REG-199):
|
|
15
|
+
* const logger = createLogger('info', { logFile: '.grafema/analysis.log' });
|
|
13
16
|
*/
|
|
14
17
|
|
|
18
|
+
import { createWriteStream, writeFileSync, mkdirSync, accessSync, statSync, constants, type WriteStream } from 'fs';
|
|
19
|
+
import { dirname, resolve } from 'path';
|
|
20
|
+
|
|
15
21
|
/**
|
|
16
22
|
* Log level type
|
|
17
23
|
*/
|
|
@@ -145,8 +151,153 @@ export class ConsoleLogger implements Logger {
|
|
|
145
151
|
}
|
|
146
152
|
|
|
147
153
|
/**
|
|
148
|
-
*
|
|
154
|
+
* File-based Logger implementation (REG-199)
|
|
155
|
+
*
|
|
156
|
+
* Writes log messages to a file with ISO timestamps using a write stream
|
|
157
|
+
* (non-blocking I/O). File is truncated on construction (overwritten each run).
|
|
158
|
+
* Parent directories are created automatically.
|
|
159
|
+
*
|
|
160
|
+
* Validates path on construction — throws if the directory is not writable
|
|
161
|
+
* or the path points to a directory.
|
|
162
|
+
*/
|
|
163
|
+
export class FileLogger implements Logger {
|
|
164
|
+
private readonly priority: number;
|
|
165
|
+
private readonly stream: WriteStream;
|
|
166
|
+
|
|
167
|
+
constructor(logLevel: LogLevel, filePath: string) {
|
|
168
|
+
this.priority = LOG_LEVEL_PRIORITY[logLevel];
|
|
169
|
+
const resolvedPath = resolve(filePath);
|
|
170
|
+
|
|
171
|
+
// Create parent directories
|
|
172
|
+
const dir = dirname(resolvedPath);
|
|
173
|
+
mkdirSync(dir, { recursive: true });
|
|
174
|
+
|
|
175
|
+
// Validate: parent directory must be writable
|
|
176
|
+
try {
|
|
177
|
+
accessSync(dir, constants.W_OK);
|
|
178
|
+
} catch {
|
|
179
|
+
throw new Error(`Cannot write log file: directory '${dir}' is not writable`);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Validate: path must not point to an existing directory
|
|
183
|
+
try {
|
|
184
|
+
if (statSync(resolvedPath).isDirectory()) {
|
|
185
|
+
throw new Error(`Cannot write log file: '${resolvedPath}' is a directory`);
|
|
186
|
+
}
|
|
187
|
+
} catch (e) {
|
|
188
|
+
// If stat throws, file doesn't exist yet — that's fine
|
|
189
|
+
if (e instanceof Error && e.message.includes('is a directory')) throw e;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Truncate/create file synchronously (validates writeability),
|
|
193
|
+
// then open stream in append mode for non-blocking writes
|
|
194
|
+
writeFileSync(resolvedPath, '');
|
|
195
|
+
this.stream = createWriteStream(resolvedPath, { flags: 'a' });
|
|
196
|
+
this.stream.on('error', () => {
|
|
197
|
+
// Silently ignore stream errors — don't crash analysis for logging failures
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
private shouldLog(methodLevel: number): boolean {
|
|
202
|
+
return this.priority >= methodLevel;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
private writeLine(level: string, message: string, context?: Record<string, unknown>): void {
|
|
206
|
+
const timestamp = new Date().toISOString();
|
|
207
|
+
const formatted = formatMessage(`${timestamp} [${level}] ${message}`, context);
|
|
208
|
+
this.stream.write(formatted + '\n');
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
error(message: string, context?: Record<string, unknown>): void {
|
|
212
|
+
if (!this.shouldLog(METHOD_LEVELS.error)) return;
|
|
213
|
+
this.writeLine('ERROR', message, context);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
warn(message: string, context?: Record<string, unknown>): void {
|
|
217
|
+
if (!this.shouldLog(METHOD_LEVELS.warn)) return;
|
|
218
|
+
this.writeLine('WARN', message, context);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
info(message: string, context?: Record<string, unknown>): void {
|
|
222
|
+
if (!this.shouldLog(METHOD_LEVELS.info)) return;
|
|
223
|
+
this.writeLine('INFO', message, context);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
debug(message: string, context?: Record<string, unknown>): void {
|
|
227
|
+
if (!this.shouldLog(METHOD_LEVELS.debug)) return;
|
|
228
|
+
this.writeLine('DEBUG', message, context);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
trace(message: string, context?: Record<string, unknown>): void {
|
|
232
|
+
if (!this.shouldLog(METHOD_LEVELS.trace)) return;
|
|
233
|
+
this.writeLine('TRACE', message, context);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** Flush and close the write stream. Returns when all data is written. */
|
|
237
|
+
close(): Promise<void> {
|
|
238
|
+
return new Promise((resolve) => {
|
|
239
|
+
this.stream.end(resolve);
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Multi-output Logger that delegates to multiple Logger instances.
|
|
246
|
+
*
|
|
247
|
+
* Each inner logger applies its own level filtering independently.
|
|
248
|
+
* Used to write to both console and file simultaneously.
|
|
249
|
+
*/
|
|
250
|
+
export class MultiLogger implements Logger {
|
|
251
|
+
private readonly loggers: Logger[];
|
|
252
|
+
|
|
253
|
+
constructor(loggers: Logger[]) {
|
|
254
|
+
this.loggers = loggers;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
error(message: string, context?: Record<string, unknown>): void {
|
|
258
|
+
for (const logger of this.loggers) logger.error(message, context);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
warn(message: string, context?: Record<string, unknown>): void {
|
|
262
|
+
for (const logger of this.loggers) logger.warn(message, context);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
info(message: string, context?: Record<string, unknown>): void {
|
|
266
|
+
for (const logger of this.loggers) logger.info(message, context);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
debug(message: string, context?: Record<string, unknown>): void {
|
|
270
|
+
for (const logger of this.loggers) logger.debug(message, context);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
trace(message: string, context?: Record<string, unknown>): void {
|
|
274
|
+
for (const logger of this.loggers) logger.trace(message, context);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/** Close all inner loggers that have a close() method (e.g., FileLogger). */
|
|
278
|
+
async close(): Promise<void> {
|
|
279
|
+
for (const logger of this.loggers) {
|
|
280
|
+
if (logger instanceof FileLogger) {
|
|
281
|
+
await logger.close();
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Create a Logger instance with the specified log level.
|
|
289
|
+
*
|
|
290
|
+
* When logFile is specified, returns a MultiLogger that writes to both
|
|
291
|
+
* console and file. The file logger always captures at 'debug' level
|
|
292
|
+
* for complete post-mortem debugging, regardless of the console level.
|
|
149
293
|
*/
|
|
150
|
-
export function createLogger(level: LogLevel): Logger {
|
|
151
|
-
|
|
294
|
+
export function createLogger(level: LogLevel, options?: { logFile?: string }): Logger {
|
|
295
|
+
const consoleLogger = new ConsoleLogger(level);
|
|
296
|
+
|
|
297
|
+
if (options?.logFile) {
|
|
298
|
+
const fileLogger = new FileLogger('debug', options.logFile);
|
|
299
|
+
return new MultiLogger([consoleLogger, fileLogger]);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return consoleLogger;
|
|
152
303
|
}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { readFileSync } from 'fs';
|
|
7
|
-
import {
|
|
7
|
+
import type { ParserPlugin } from '@babel/parser';
|
|
8
|
+
import { parse } from '@babel/parser';
|
|
8
9
|
import traverseModule from '@babel/traverse';
|
|
9
10
|
import type { CallExpression, Identifier } from '@babel/types';
|
|
10
11
|
import type { NodePath } from '@babel/traverse';
|
|
@@ -12,9 +13,9 @@ import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
|
12
13
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
13
14
|
import type { NodeRecord } from '@grafema/types';
|
|
14
15
|
import { getLine, getColumn } from './ast/utils/location.js';
|
|
16
|
+
import { getTraverseFunction } from './ast/utils/babelTraverse.js';
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
const traverse = (traverseModule as any).default || traverseModule;
|
|
18
|
+
const traverse = getTraverseFunction(traverseModule);
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* Database query node
|
|
@@ -47,7 +48,6 @@ export class DatabaseAnalyzer extends Plugin {
|
|
|
47
48
|
return {
|
|
48
49
|
name: 'DatabaseAnalyzer',
|
|
49
50
|
phase: 'ANALYSIS',
|
|
50
|
-
priority: 75, // После JSASTAnalyzer (80)
|
|
51
51
|
creates: {
|
|
52
52
|
nodes: ['db:query', 'db:table', 'db:connection'],
|
|
53
53
|
edges: ['MAKES_QUERY', 'TARGETS', 'READS_FROM', 'WRITES_TO']
|
|
@@ -109,7 +109,8 @@ export class DatabaseAnalyzer extends Plugin {
|
|
|
109
109
|
);
|
|
110
110
|
} catch (error) {
|
|
111
111
|
logger.error('Analysis failed', { error });
|
|
112
|
-
|
|
112
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
113
|
+
return createErrorResult(err);
|
|
113
114
|
}
|
|
114
115
|
}
|
|
115
116
|
|
|
@@ -234,30 +235,32 @@ export class DatabaseAnalyzer extends Plugin {
|
|
|
234
235
|
}
|
|
235
236
|
});
|
|
236
237
|
|
|
237
|
-
//
|
|
238
|
+
// Collect all nodes and edges for batch operations
|
|
238
239
|
if (databaseQueries.length > 0) {
|
|
239
240
|
const databaseId = 'EXTERNAL_DATABASE:__database__';
|
|
241
|
+
const nodes: NodeRecord[] = [];
|
|
242
|
+
const edges: Array<{ type: string; src: string; dst: string }> = [];
|
|
240
243
|
|
|
241
244
|
const existingDb = await graph.getNode(databaseId);
|
|
242
245
|
if (!existingDb) {
|
|
243
|
-
|
|
246
|
+
nodes.push({
|
|
244
247
|
id: databaseId,
|
|
245
248
|
type: 'db:connection',
|
|
246
249
|
name: '__database__'
|
|
247
250
|
} as NodeRecord);
|
|
248
251
|
}
|
|
249
252
|
|
|
250
|
-
//
|
|
253
|
+
// Prepare DATABASE_QUERY and TABLE nodes
|
|
251
254
|
for (const query of databaseQueries) {
|
|
252
|
-
|
|
255
|
+
nodes.push(query as unknown as NodeRecord);
|
|
253
256
|
queriesCreated++;
|
|
254
257
|
|
|
255
|
-
//
|
|
258
|
+
// Prepare TABLE node if has tableName
|
|
256
259
|
if (query.tableName) {
|
|
257
260
|
const tableId = `TABLE:${query.tableName}`;
|
|
258
261
|
|
|
259
262
|
if (!createdTables.has(tableId)) {
|
|
260
|
-
|
|
263
|
+
nodes.push({
|
|
261
264
|
id: tableId,
|
|
262
265
|
type: 'db:table',
|
|
263
266
|
name: query.tableName
|
|
@@ -267,7 +270,7 @@ export class DatabaseAnalyzer extends Plugin {
|
|
|
267
270
|
}
|
|
268
271
|
|
|
269
272
|
// DATABASE_QUERY -> TARGETS -> TABLE
|
|
270
|
-
|
|
273
|
+
edges.push({
|
|
271
274
|
type: 'TARGETS',
|
|
272
275
|
src: query.id,
|
|
273
276
|
dst: tableId
|
|
@@ -279,7 +282,7 @@ export class DatabaseAnalyzer extends Plugin {
|
|
|
279
282
|
const isReadOperation = query.operation === 'SELECT';
|
|
280
283
|
const edgeType = isReadOperation ? 'READS_FROM' : 'WRITES_TO';
|
|
281
284
|
|
|
282
|
-
|
|
285
|
+
edges.push({
|
|
283
286
|
type: edgeType,
|
|
284
287
|
src: query.id,
|
|
285
288
|
dst: databaseId
|
|
@@ -290,7 +293,7 @@ export class DatabaseAnalyzer extends Plugin {
|
|
|
290
293
|
const parentFunction = this.findParentFunction(query, functions);
|
|
291
294
|
|
|
292
295
|
if (parentFunction) {
|
|
293
|
-
|
|
296
|
+
edges.push({
|
|
294
297
|
type: 'MAKES_QUERY',
|
|
295
298
|
src: parentFunction.id,
|
|
296
299
|
dst: query.id
|
|
@@ -298,8 +301,12 @@ export class DatabaseAnalyzer extends Plugin {
|
|
|
298
301
|
edgesCreated++;
|
|
299
302
|
}
|
|
300
303
|
}
|
|
304
|
+
|
|
305
|
+
// Flush all nodes and edges
|
|
306
|
+
await graph.addNodes(nodes);
|
|
307
|
+
await graph.addEdges(edges);
|
|
301
308
|
}
|
|
302
|
-
} catch
|
|
309
|
+
} catch {
|
|
303
310
|
// Silent - per-module errors shouldn't spam logs
|
|
304
311
|
}
|
|
305
312
|
|
|
@@ -4,19 +4,20 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { readFileSync } from 'fs';
|
|
7
|
-
import {
|
|
7
|
+
import type { ParserPlugin } from '@babel/parser';
|
|
8
|
+
import { parse } from '@babel/parser';
|
|
8
9
|
import traverseModule from '@babel/traverse';
|
|
9
10
|
import { dirname, resolve, relative } from 'path';
|
|
10
|
-
import type { CallExpression, ImportDeclaration,
|
|
11
|
+
import type { CallExpression, ImportDeclaration, Identifier, MemberExpression } from '@babel/types';
|
|
11
12
|
import type { NodePath } from '@babel/traverse';
|
|
12
13
|
import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
13
14
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
14
15
|
import type { NodeRecord } from '@grafema/types';
|
|
15
16
|
import { NetworkRequestNode } from '../../core/nodes/NetworkRequestNode.js';
|
|
16
17
|
import { getLine, getColumn } from './ast/utils/location.js';
|
|
18
|
+
import { getTraverseFunction } from './ast/utils/babelTraverse.js';
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
const traverse = (traverseModule as any).default || traverseModule;
|
|
20
|
+
const traverse = getTraverseFunction(traverseModule);
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* Endpoint node
|
|
@@ -71,7 +72,6 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
71
72
|
return {
|
|
72
73
|
name: 'ExpressAnalyzer',
|
|
73
74
|
phase: 'ANALYSIS',
|
|
74
|
-
priority: 75, // После JSASTAnalyzer (80)
|
|
75
75
|
creates: {
|
|
76
76
|
nodes: ['http:route', 'express:mount'],
|
|
77
77
|
edges: ['EXPOSES', 'MOUNTS', 'DEFINES']
|
|
@@ -86,9 +86,13 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
86
86
|
try {
|
|
87
87
|
const { graph } = context;
|
|
88
88
|
|
|
89
|
+
// Batch arrays
|
|
90
|
+
const nodes: NodeRecord[] = [];
|
|
91
|
+
const edges: Array<{type: string; src: string; dst: string; [key: string]: unknown}> = [];
|
|
92
|
+
|
|
89
93
|
// Create net:request singleton (GraphBackend handles deduplication)
|
|
90
94
|
const networkNode = NetworkRequestNode.create();
|
|
91
|
-
|
|
95
|
+
nodes.push(networkNode as unknown as NodeRecord);
|
|
92
96
|
|
|
93
97
|
// Получаем все MODULE ноды
|
|
94
98
|
const modules = await this.getModules(graph);
|
|
@@ -99,12 +103,16 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
99
103
|
|
|
100
104
|
// Анализируем каждый модуль
|
|
101
105
|
for (const module of modules) {
|
|
102
|
-
const result = await this.analyzeModule(module, graph, networkNode.id);
|
|
106
|
+
const result = await this.analyzeModule(module, graph, networkNode.id, nodes, edges);
|
|
103
107
|
endpointsCreated += result.endpoints;
|
|
104
108
|
mountPointsCreated += result.mountPoints;
|
|
105
109
|
edgesCreated += result.edges;
|
|
106
110
|
}
|
|
107
111
|
|
|
112
|
+
// Add all nodes and edges in batch
|
|
113
|
+
await graph.addNodes(nodes);
|
|
114
|
+
await graph.addEdges(edges);
|
|
115
|
+
|
|
108
116
|
logger.info('Analysis complete', { endpointsCreated, mountPointsCreated });
|
|
109
117
|
|
|
110
118
|
return createSuccessResult(
|
|
@@ -119,7 +127,8 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
119
127
|
);
|
|
120
128
|
} catch (error) {
|
|
121
129
|
logger.error('Analysis failed', { error });
|
|
122
|
-
|
|
130
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
131
|
+
return createErrorResult(err);
|
|
123
132
|
}
|
|
124
133
|
}
|
|
125
134
|
|
|
@@ -129,7 +138,9 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
129
138
|
private async analyzeModule(
|
|
130
139
|
module: NodeRecord,
|
|
131
140
|
graph: PluginContext['graph'],
|
|
132
|
-
networkId: string
|
|
141
|
+
networkId: string,
|
|
142
|
+
nodes: NodeRecord[],
|
|
143
|
+
edges: Array<{type: string; src: string; dst: string; [key: string]: unknown}>
|
|
133
144
|
): Promise<AnalysisResult> {
|
|
134
145
|
let endpointsCreated = 0;
|
|
135
146
|
let mountPointsCreated = 0;
|
|
@@ -301,11 +312,11 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
301
312
|
|
|
302
313
|
// Создаём ENDPOINT ноды
|
|
303
314
|
for (const endpoint of endpoints) {
|
|
304
|
-
|
|
315
|
+
nodes.push(endpoint as unknown as NodeRecord);
|
|
305
316
|
endpointsCreated++;
|
|
306
317
|
|
|
307
318
|
// MODULE --EXPOSES--> ENDPOINT
|
|
308
|
-
|
|
319
|
+
edges.push({
|
|
309
320
|
type: 'EXPOSES',
|
|
310
321
|
src: module.id,
|
|
311
322
|
dst: endpoint.id
|
|
@@ -313,7 +324,7 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
313
324
|
edgesCreated++;
|
|
314
325
|
|
|
315
326
|
// ENDPOINT --INTERACTS_WITH--> EXTERNAL_NETWORK
|
|
316
|
-
|
|
327
|
+
edges.push({
|
|
317
328
|
type: 'INTERACTS_WITH',
|
|
318
329
|
src: endpoint.id,
|
|
319
330
|
dst: networkId
|
|
@@ -323,11 +334,11 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
323
334
|
|
|
324
335
|
// Создаём MOUNT_POINT ноды
|
|
325
336
|
for (const mountPoint of mountPoints) {
|
|
326
|
-
|
|
337
|
+
nodes.push(mountPoint as unknown as NodeRecord);
|
|
327
338
|
mountPointsCreated++;
|
|
328
339
|
|
|
329
340
|
// MODULE --DEFINES--> MOUNT_POINT
|
|
330
|
-
|
|
341
|
+
edges.push({
|
|
331
342
|
type: 'DEFINES',
|
|
332
343
|
src: module.id,
|
|
333
344
|
dst: mountPoint.id
|
|
@@ -335,10 +346,10 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
335
346
|
edgesCreated++;
|
|
336
347
|
|
|
337
348
|
// Создаём MOUNTS рёбра
|
|
338
|
-
const mountEdges = await this.createMountEdges(mountPoint, module, imports, graph);
|
|
349
|
+
const mountEdges = await this.createMountEdges(mountPoint, module, imports, graph, edges);
|
|
339
350
|
edgesCreated += mountEdges;
|
|
340
351
|
}
|
|
341
|
-
} catch
|
|
352
|
+
} catch {
|
|
342
353
|
// Silent - per-module errors shouldn't spam logs
|
|
343
354
|
}
|
|
344
355
|
|
|
@@ -356,7 +367,8 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
356
367
|
mountPoint: MountPointNode,
|
|
357
368
|
module: NodeRecord,
|
|
358
369
|
imports: ImportInfo[],
|
|
359
|
-
graph: PluginContext['graph']
|
|
370
|
+
graph: PluginContext['graph'],
|
|
371
|
+
edges: Array<{type: string; src: string; dst: string; [key: string]: unknown}>
|
|
360
372
|
): Promise<number> {
|
|
361
373
|
let edgesCreated = 0;
|
|
362
374
|
|
|
@@ -401,7 +413,7 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
401
413
|
// Проверяем что модуль существует в графе
|
|
402
414
|
const targetModule = await graph.getNode(targetModuleId);
|
|
403
415
|
if (targetModule) {
|
|
404
|
-
|
|
416
|
+
edges.push({
|
|
405
417
|
type: 'MOUNTS',
|
|
406
418
|
src: mountPoint.id,
|
|
407
419
|
dst: targetModuleId
|