@grafema/core 0.1.0-alpha.1
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/LICENSE +190 -0
- package/README.md +76 -0
- package/dist/Orchestrator.d.ts +142 -0
- package/dist/Orchestrator.d.ts.map +1 -0
- package/dist/Orchestrator.js +481 -0
- package/dist/api/GraphAPI.d.ts +87 -0
- package/dist/api/GraphAPI.d.ts.map +1 -0
- package/dist/api/GraphAPI.js +210 -0
- package/dist/api/GuaranteeAPI.d.ts +147 -0
- package/dist/api/GuaranteeAPI.d.ts.map +1 -0
- package/dist/api/GuaranteeAPI.js +288 -0
- package/dist/core/ASTWorker.d.ts +133 -0
- package/dist/core/ASTWorker.d.ts.map +1 -0
- package/dist/core/ASTWorker.js +352 -0
- package/dist/core/ASTWorkerPool.d.ts +85 -0
- package/dist/core/ASTWorkerPool.d.ts.map +1 -0
- package/dist/core/ASTWorkerPool.js +207 -0
- package/dist/core/AnalysisQueue.d.ts +104 -0
- package/dist/core/AnalysisQueue.d.ts.map +1 -0
- package/dist/core/AnalysisQueue.js +299 -0
- package/dist/core/AnalysisWorker.d.ts +14 -0
- package/dist/core/AnalysisWorker.d.ts.map +1 -0
- package/dist/core/AnalysisWorker.js +307 -0
- package/dist/core/GraphBackend.d.ts +156 -0
- package/dist/core/GraphBackend.d.ts.map +1 -0
- package/dist/core/GraphBackend.js +85 -0
- package/dist/core/GuaranteeManager.d.ts +230 -0
- package/dist/core/GuaranteeManager.d.ts.map +1 -0
- package/dist/core/GuaranteeManager.js +352 -0
- package/dist/core/ManifestStore.d.ts +71 -0
- package/dist/core/ManifestStore.d.ts.map +1 -0
- package/dist/core/ManifestStore.js +146 -0
- package/dist/core/NodeFactory.d.ts +160 -0
- package/dist/core/NodeFactory.d.ts.map +1 -0
- package/dist/core/NodeFactory.js +137 -0
- package/dist/core/NodeId.d.ts +88 -0
- package/dist/core/NodeId.d.ts.map +1 -0
- package/dist/core/NodeId.js +170 -0
- package/dist/core/ParallelAnalyzer.d.ts +120 -0
- package/dist/core/ParallelAnalyzer.d.ts.map +1 -0
- package/dist/core/ParallelAnalyzer.js +331 -0
- package/dist/core/PriorityQueue.d.ts +106 -0
- package/dist/core/PriorityQueue.d.ts.map +1 -0
- package/dist/core/PriorityQueue.js +168 -0
- package/dist/core/Profiler.d.ts +75 -0
- package/dist/core/Profiler.d.ts.map +1 -0
- package/dist/core/Profiler.js +149 -0
- package/dist/core/QueueWorker.d.ts +12 -0
- package/dist/core/QueueWorker.d.ts.map +1 -0
- package/dist/core/QueueWorker.js +567 -0
- package/dist/core/RFDBClient.d.ts +179 -0
- package/dist/core/RFDBClient.d.ts.map +1 -0
- package/dist/core/RFDBClient.js +429 -0
- package/dist/core/Task.d.ts +56 -0
- package/dist/core/Task.d.ts.map +1 -0
- package/dist/core/Task.js +85 -0
- package/dist/core/TaskTypes.d.ts +20 -0
- package/dist/core/TaskTypes.d.ts.map +1 -0
- package/dist/core/TaskTypes.js +10 -0
- package/dist/core/VersionManager.d.ts +166 -0
- package/dist/core/VersionManager.d.ts.map +1 -0
- package/dist/core/VersionManager.js +237 -0
- package/dist/core/WorkerPool.d.ts +82 -0
- package/dist/core/WorkerPool.d.ts.map +1 -0
- package/dist/core/WorkerPool.js +109 -0
- package/dist/core/nodes/CallSiteNode.d.ts +26 -0
- package/dist/core/nodes/CallSiteNode.d.ts.map +1 -0
- package/dist/core/nodes/CallSiteNode.js +44 -0
- package/dist/core/nodes/ClassNode.d.ts +25 -0
- package/dist/core/nodes/ClassNode.d.ts.map +1 -0
- package/dist/core/nodes/ClassNode.js +40 -0
- package/dist/core/nodes/ConstantNode.d.ts +24 -0
- package/dist/core/nodes/ConstantNode.d.ts.map +1 -0
- package/dist/core/nodes/ConstantNode.js +39 -0
- package/dist/core/nodes/DatabaseQueryNode.d.ts +22 -0
- package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -0
- package/dist/core/nodes/DatabaseQueryNode.js +37 -0
- package/dist/core/nodes/EntrypointNode.d.ts +102 -0
- package/dist/core/nodes/EntrypointNode.d.ts.map +1 -0
- package/dist/core/nodes/EntrypointNode.js +119 -0
- package/dist/core/nodes/EventListenerNode.d.ts +25 -0
- package/dist/core/nodes/EventListenerNode.d.ts.map +1 -0
- package/dist/core/nodes/EventListenerNode.js +39 -0
- package/dist/core/nodes/ExportNode.d.ts +26 -0
- package/dist/core/nodes/ExportNode.d.ts.map +1 -0
- package/dist/core/nodes/ExportNode.js +40 -0
- package/dist/core/nodes/ExternalStdioNode.d.ts +17 -0
- package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -0
- package/dist/core/nodes/ExternalStdioNode.js +26 -0
- package/dist/core/nodes/FunctionNode.d.ts +27 -0
- package/dist/core/nodes/FunctionNode.d.ts.map +1 -0
- package/dist/core/nodes/FunctionNode.js +53 -0
- package/dist/core/nodes/GuaranteeNode.d.ts +76 -0
- package/dist/core/nodes/GuaranteeNode.d.ts.map +1 -0
- package/dist/core/nodes/GuaranteeNode.js +117 -0
- package/dist/core/nodes/HttpRequestNode.d.ts +24 -0
- package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -0
- package/dist/core/nodes/HttpRequestNode.js +38 -0
- package/dist/core/nodes/ImportNode.d.ts +27 -0
- package/dist/core/nodes/ImportNode.d.ts.map +1 -0
- package/dist/core/nodes/ImportNode.js +43 -0
- package/dist/core/nodes/LiteralNode.d.ts +26 -0
- package/dist/core/nodes/LiteralNode.d.ts.map +1 -0
- package/dist/core/nodes/LiteralNode.js +40 -0
- package/dist/core/nodes/MethodCallNode.d.ts +29 -0
- package/dist/core/nodes/MethodCallNode.d.ts.map +1 -0
- package/dist/core/nodes/MethodCallNode.js +47 -0
- package/dist/core/nodes/MethodNode.d.ts +29 -0
- package/dist/core/nodes/MethodNode.d.ts.map +1 -0
- package/dist/core/nodes/MethodNode.js +44 -0
- package/dist/core/nodes/ModuleNode.d.ts +29 -0
- package/dist/core/nodes/ModuleNode.d.ts.map +1 -0
- package/dist/core/nodes/ModuleNode.js +49 -0
- package/dist/core/nodes/NodeKind.d.ts +91 -0
- package/dist/core/nodes/NodeKind.d.ts.map +1 -0
- package/dist/core/nodes/NodeKind.js +146 -0
- package/dist/core/nodes/ParameterNode.d.ts +26 -0
- package/dist/core/nodes/ParameterNode.d.ts.map +1 -0
- package/dist/core/nodes/ParameterNode.js +43 -0
- package/dist/core/nodes/ScopeNode.d.ts +32 -0
- package/dist/core/nodes/ScopeNode.d.ts.map +1 -0
- package/dist/core/nodes/ScopeNode.js +47 -0
- package/dist/core/nodes/ServiceNode.d.ts +44 -0
- package/dist/core/nodes/ServiceNode.d.ts.map +1 -0
- package/dist/core/nodes/ServiceNode.js +49 -0
- package/dist/core/nodes/VariableDeclarationNode.d.ts +22 -0
- package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -0
- package/dist/core/nodes/VariableDeclarationNode.js +38 -0
- package/dist/core/nodes/index.d.ts +25 -0
- package/dist/core/nodes/index.d.ts.map +1 -0
- package/dist/core/nodes/index.js +30 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/plugins/Plugin.d.ts +44 -0
- package/dist/plugins/Plugin.d.ts.map +1 -0
- package/dist/plugins/Plugin.js +46 -0
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts +23 -0
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/DatabaseAnalyzer.js +260 -0
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts +19 -0
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/ExpressAnalyzer.js +306 -0
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts +17 -0
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +308 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +38 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/FetchAnalyzer.js +344 -0
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +65 -0
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -0
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +472 -0
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts +84 -0
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/JSASTAnalyzer.js +1378 -0
- package/dist/plugins/analysis/ReactAnalyzer.d.ts +90 -0
- package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/ReactAnalyzer.js +1153 -0
- package/dist/plugins/analysis/RustAnalyzer.d.ts +13 -0
- package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/RustAnalyzer.js +259 -0
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts +21 -0
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/SQLiteAnalyzer.js +317 -0
- package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts +35 -0
- package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js +303 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +33 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.js +283 -0
- package/dist/plugins/analysis/SystemDbAnalyzer.d.ts +27 -0
- package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/SystemDbAnalyzer.js +211 -0
- package/dist/plugins/analysis/ast/ConditionParser.d.ts +85 -0
- package/dist/plugins/analysis/ast/ConditionParser.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/ConditionParser.js +277 -0
- package/dist/plugins/analysis/ast/ExpressionEvaluator.d.ts +15 -0
- package/dist/plugins/analysis/ast/ExpressionEvaluator.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/ExpressionEvaluator.js +91 -0
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts +77 -0
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/GraphBuilder.js +1077 -0
- package/dist/plugins/analysis/ast/OxcAdapter.d.ts +41 -0
- package/dist/plugins/analysis/ast/OxcAdapter.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/OxcAdapter.js +40 -0
- package/dist/plugins/analysis/ast/types.d.ts +346 -0
- package/dist/plugins/analysis/ast/types.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/types.js +4 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +93 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +24 -0
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +77 -0
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +377 -0
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +27 -0
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +232 -0
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +25 -0
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +172 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +29 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +180 -0
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +14 -0
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +200 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +45 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +150 -0
- package/dist/plugins/analysis/ast/visitors/index.d.ts +17 -0
- package/dist/plugins/analysis/ast/visitors/index.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/visitors/index.js +13 -0
- package/dist/plugins/discovery/DiscoveryPlugin.d.ts +34 -0
- package/dist/plugins/discovery/DiscoveryPlugin.d.ts.map +1 -0
- package/dist/plugins/discovery/DiscoveryPlugin.js +26 -0
- package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts +26 -0
- package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -0
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js +79 -0
- package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts +14 -0
- package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -0
- package/dist/plugins/discovery/SimpleProjectDiscovery.js +65 -0
- package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +19 -0
- package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +1 -0
- package/dist/plugins/discovery/ZonServiceDiscovery.js +204 -0
- package/dist/plugins/enrichment/AliasTracker.d.ts +40 -0
- package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -0
- package/dist/plugins/enrichment/AliasTracker.js +290 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +30 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +135 -0
- package/dist/plugins/enrichment/ImportExportLinker.d.ts +30 -0
- package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -0
- package/dist/plugins/enrichment/ImportExportLinker.js +176 -0
- package/dist/plugins/enrichment/InstanceOfResolver.d.ts +21 -0
- package/dist/plugins/enrichment/InstanceOfResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/InstanceOfResolver.js +117 -0
- package/dist/plugins/enrichment/MethodCallResolver.d.ts +41 -0
- package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/MethodCallResolver.js +252 -0
- package/dist/plugins/enrichment/MountPointResolver.d.ts +26 -0
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/MountPointResolver.js +189 -0
- package/dist/plugins/enrichment/PrefixEvaluator.d.ts +89 -0
- package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -0
- package/dist/plugins/enrichment/PrefixEvaluator.js +415 -0
- package/dist/plugins/enrichment/RustFFIEnricher.d.ts +25 -0
- package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/RustFFIEnricher.js +170 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +114 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +464 -0
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts +27 -0
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -0
- package/dist/plugins/indexing/IncrementalModuleIndexer.js +238 -0
- package/dist/plugins/indexing/JSModuleIndexer.d.ts +33 -0
- package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -0
- package/dist/plugins/indexing/JSModuleIndexer.js +299 -0
- package/dist/plugins/indexing/RustModuleIndexer.d.ts +28 -0
- package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -0
- package/dist/plugins/indexing/RustModuleIndexer.js +140 -0
- package/dist/plugins/indexing/ServiceDetector.d.ts +46 -0
- package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -0
- package/dist/plugins/indexing/ServiceDetector.js +164 -0
- package/dist/plugins/validation/CallResolverValidator.d.ts +23 -0
- package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -0
- package/dist/plugins/validation/CallResolverValidator.js +108 -0
- package/dist/plugins/validation/DataFlowValidator.d.ts +24 -0
- package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -0
- package/dist/plugins/validation/DataFlowValidator.js +148 -0
- package/dist/plugins/validation/EvalBanValidator.d.ts +25 -0
- package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -0
- package/dist/plugins/validation/EvalBanValidator.js +123 -0
- package/dist/plugins/validation/GraphConnectivityValidator.d.ts +11 -0
- package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -0
- package/dist/plugins/validation/GraphConnectivityValidator.js +135 -0
- package/dist/plugins/validation/SQLInjectionValidator.d.ts +43 -0
- package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -0
- package/dist/plugins/validation/SQLInjectionValidator.js +251 -0
- package/dist/plugins/validation/ShadowingDetector.d.ts +26 -0
- package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -0
- package/dist/plugins/validation/ShadowingDetector.js +119 -0
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts +21 -0
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -0
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +151 -0
- package/dist/plugins/vcs/GitPlugin.d.ts +84 -0
- package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -0
- package/dist/plugins/vcs/GitPlugin.js +295 -0
- package/dist/plugins/vcs/VCSPlugin.d.ts +133 -0
- package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -0
- package/dist/plugins/vcs/VCSPlugin.js +82 -0
- package/dist/plugins/vcs/index.d.ts +10 -0
- package/dist/plugins/vcs/index.d.ts.map +1 -0
- package/dist/plugins/vcs/index.js +18 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +258 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -0
- package/dist/storage/backends/RFDBServerBackend.js +565 -0
- package/dist/storage/backends/typeValidation.d.ts +47 -0
- package/dist/storage/backends/typeValidation.d.ts.map +1 -0
- package/dist/storage/backends/typeValidation.js +137 -0
- package/dist/validation/PathValidator.d.ts +81 -0
- package/dist/validation/PathValidator.d.ts.map +1 -0
- package/dist/validation/PathValidator.js +251 -0
- package/package.json +57 -0
- package/src/.rfguard/current-session.txt +1 -0
- package/src/Orchestrator.ts +673 -0
- package/src/api/GraphAPI.ts +305 -0
- package/src/api/GuaranteeAPI.ts +401 -0
- package/src/core/ASTWorker.ts +567 -0
- package/src/core/ASTWorkerPool.ts +299 -0
- package/src/core/AnalysisQueue.ts +447 -0
- package/src/core/AnalysisWorker.ts +410 -0
- package/src/core/GraphBackend.ts +265 -0
- package/src/core/GuaranteeManager.ts +581 -0
- package/src/core/ManifestStore.ts +196 -0
- package/src/core/NodeFactory.ts +274 -0
- package/src/core/NodeId.ts +257 -0
- package/src/core/ParallelAnalyzer.ts +476 -0
- package/src/core/PriorityQueue.ts +227 -0
- package/src/core/Profiler.ts +188 -0
- package/src/core/QueueWorker.ts +780 -0
- package/src/core/Task.ts +107 -0
- package/src/core/TaskTypes.ts +40 -0
- package/src/core/VersionManager.ts +404 -0
- package/src/core/WorkerPool.ts +180 -0
- package/src/core/nodes/CallSiteNode.ts +72 -0
- package/src/core/nodes/ClassNode.ts +69 -0
- package/src/core/nodes/ConstantNode.ts +63 -0
- package/src/core/nodes/DatabaseQueryNode.ts +60 -0
- package/src/core/nodes/EntrypointNode.ts +164 -0
- package/src/core/nodes/EventListenerNode.ts +64 -0
- package/src/core/nodes/ExportNode.ts +71 -0
- package/src/core/nodes/ExternalStdioNode.ts +36 -0
- package/src/core/nodes/FunctionNode.ts +78 -0
- package/src/core/nodes/GuaranteeNode.ts +162 -0
- package/src/core/nodes/HttpRequestNode.ts +63 -0
- package/src/core/nodes/ImportNode.ts +75 -0
- package/src/core/nodes/LiteralNode.ts +67 -0
- package/src/core/nodes/MethodCallNode.ts +79 -0
- package/src/core/nodes/MethodNode.ts +78 -0
- package/src/core/nodes/ModuleNode.ts +74 -0
- package/src/core/nodes/NodeKind.ts +171 -0
- package/src/core/nodes/ParameterNode.ts +73 -0
- package/src/core/nodes/ScopeNode.ts +80 -0
- package/src/core/nodes/ServiceNode.ts +86 -0
- package/src/core/nodes/VariableDeclarationNode.ts +60 -0
- package/src/core/nodes/index.ts +49 -0
- package/src/index.ts +93 -0
- package/src/plugins/Plugin.ts +74 -0
- package/src/plugins/analysis/DatabaseAnalyzer.ts +322 -0
- package/src/plugins/analysis/ExpressAnalyzer.ts +401 -0
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +414 -0
- package/src/plugins/analysis/FetchAnalyzer.ts +441 -0
- package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +686 -0
- package/src/plugins/analysis/JSASTAnalyzer.ts +1680 -0
- package/src/plugins/analysis/ReactAnalyzer.ts +1368 -0
- package/src/plugins/analysis/RustAnalyzer.ts +438 -0
- package/src/plugins/analysis/SQLiteAnalyzer.ts +388 -0
- package/src/plugins/analysis/ServiceLayerAnalyzer.ts +429 -0
- package/src/plugins/analysis/SocketIOAnalyzer.ts +395 -0
- package/src/plugins/analysis/SystemDbAnalyzer.ts +284 -0
- package/src/plugins/analysis/ast/ConditionParser.ts +333 -0
- package/src/plugins/analysis/ast/ExpressionEvaluator.ts +117 -0
- package/src/plugins/analysis/ast/GraphBuilder.ts +1371 -0
- package/src/plugins/analysis/ast/OxcAdapter.ts +63 -0
- package/src/plugins/analysis/ast/types.ts +400 -0
- package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +137 -0
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +528 -0
- package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +339 -0
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +273 -0
- package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +259 -0
- package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +235 -0
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +268 -0
- package/src/plugins/analysis/ast/visitors/index.ts +36 -0
- package/src/plugins/discovery/DiscoveryPlugin.ts +50 -0
- package/src/plugins/discovery/MonorepoServiceDiscovery.ts +117 -0
- package/src/plugins/discovery/SimpleProjectDiscovery.ts +102 -0
- package/src/plugins/enrichment/AliasTracker.ts +399 -0
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +192 -0
- package/src/plugins/enrichment/ImportExportLinker.ts +221 -0
- package/src/plugins/enrichment/InstanceOfResolver.ts +165 -0
- package/src/plugins/enrichment/MethodCallResolver.ts +333 -0
- package/src/plugins/enrichment/MountPointResolver.ts +264 -0
- package/src/plugins/enrichment/PrefixEvaluator.ts +527 -0
- package/src/plugins/enrichment/RustFFIEnricher.ts +218 -0
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +682 -0
- package/src/plugins/indexing/IncrementalModuleIndexer.ts +287 -0
- package/src/plugins/indexing/JSModuleIndexer.ts +374 -0
- package/src/plugins/indexing/RustModuleIndexer.ts +160 -0
- package/src/plugins/indexing/ServiceDetector.ts +230 -0
- package/src/plugins/validation/CallResolverValidator.ts +170 -0
- package/src/plugins/validation/DataFlowValidator.ts +233 -0
- package/src/plugins/validation/EvalBanValidator.ts +175 -0
- package/src/plugins/validation/GraphConnectivityValidator.ts +201 -0
- package/src/plugins/validation/SQLInjectionValidator.ts +363 -0
- package/src/plugins/validation/ShadowingDetector.ts +173 -0
- package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +203 -0
- package/src/plugins/vcs/GitPlugin.ts +344 -0
- package/src/plugins/vcs/VCSPlugin.ts +190 -0
- package/src/plugins/vcs/index.ts +32 -0
- package/src/storage/backends/RFDBServerBackend.ts +687 -0
- package/src/storage/backends/typeValidation.ts +151 -0
- package/src/validation/PathValidator.ts +342 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VariableVisitor - handles module-level variable declarations
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - VariableDeclaration (const, let, var at module level)
|
|
6
|
+
* - NewExpression tracking for class instantiation
|
|
7
|
+
* - Destructuring patterns
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type {
|
|
11
|
+
VariableDeclaration,
|
|
12
|
+
VariableDeclarator,
|
|
13
|
+
NewExpression,
|
|
14
|
+
Identifier,
|
|
15
|
+
Node
|
|
16
|
+
} from '@babel/types';
|
|
17
|
+
import type { NodePath } from '@babel/traverse';
|
|
18
|
+
import { ASTVisitor, type VisitorModule, type VisitorCollections, type VisitorHandlers, type CounterRef } from './ASTVisitor.js';
|
|
19
|
+
import { ExpressionEvaluator } from '../ExpressionEvaluator.js';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Variable info extracted from pattern
|
|
23
|
+
*/
|
|
24
|
+
export interface VariableInfo {
|
|
25
|
+
name: string;
|
|
26
|
+
loc: { start: { line: number; column: number } };
|
|
27
|
+
propertyPath?: string[];
|
|
28
|
+
arrayIndex?: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Callback type for extracting variable names from patterns
|
|
33
|
+
*/
|
|
34
|
+
export type ExtractVariableNamesCallback = (pattern: Node) => VariableInfo[];
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Callback type for tracking variable assignments
|
|
38
|
+
*/
|
|
39
|
+
export type TrackVariableAssignmentCallback = (
|
|
40
|
+
initNode: Node,
|
|
41
|
+
variableId: string,
|
|
42
|
+
variableName: string,
|
|
43
|
+
module: VisitorModule,
|
|
44
|
+
line: number,
|
|
45
|
+
literals: unknown[],
|
|
46
|
+
variableAssignments: unknown[],
|
|
47
|
+
literalCounterRef: CounterRef
|
|
48
|
+
) => void;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Variable declaration info
|
|
52
|
+
*/
|
|
53
|
+
interface VariableDeclarationInfo {
|
|
54
|
+
id: string;
|
|
55
|
+
type: 'VARIABLE' | 'CONSTANT';
|
|
56
|
+
name: string;
|
|
57
|
+
file: string;
|
|
58
|
+
line: number;
|
|
59
|
+
parentScopeId: string;
|
|
60
|
+
value?: unknown;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Class instantiation info
|
|
65
|
+
*/
|
|
66
|
+
interface ClassInstantiationInfo {
|
|
67
|
+
variableId: string;
|
|
68
|
+
variableName: string;
|
|
69
|
+
className: string;
|
|
70
|
+
line: number;
|
|
71
|
+
parentScopeId: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Literal/expression info for data flow
|
|
76
|
+
*/
|
|
77
|
+
interface LiteralExpressionInfo {
|
|
78
|
+
id: string;
|
|
79
|
+
type: 'EXPRESSION';
|
|
80
|
+
expressionType: string;
|
|
81
|
+
path: string;
|
|
82
|
+
baseName: string;
|
|
83
|
+
propertyPath: string[] | null;
|
|
84
|
+
arrayIndex?: number;
|
|
85
|
+
file: string;
|
|
86
|
+
line: number;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Variable assignment info for data flow
|
|
91
|
+
*/
|
|
92
|
+
interface VariableAssignmentInfo {
|
|
93
|
+
variableId: string;
|
|
94
|
+
sourceId: string | null;
|
|
95
|
+
sourceName?: string;
|
|
96
|
+
sourceType: string;
|
|
97
|
+
file?: string;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export class VariableVisitor extends ASTVisitor {
|
|
101
|
+
private extractVariableNamesFromPattern: ExtractVariableNamesCallback;
|
|
102
|
+
private trackVariableAssignment: TrackVariableAssignmentCallback;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @param module - Current module being analyzed
|
|
106
|
+
* @param collections - Must contain arrays and counter refs
|
|
107
|
+
* @param extractVariableNamesFromPattern - Helper for destructuring
|
|
108
|
+
* @param trackVariableAssignment - Helper for data flow tracking
|
|
109
|
+
*/
|
|
110
|
+
constructor(
|
|
111
|
+
module: VisitorModule,
|
|
112
|
+
collections: VisitorCollections,
|
|
113
|
+
extractVariableNamesFromPattern: ExtractVariableNamesCallback,
|
|
114
|
+
trackVariableAssignment: TrackVariableAssignmentCallback
|
|
115
|
+
) {
|
|
116
|
+
super(module, collections);
|
|
117
|
+
this.extractVariableNamesFromPattern = extractVariableNamesFromPattern;
|
|
118
|
+
this.trackVariableAssignment = trackVariableAssignment;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
getHandlers(): VisitorHandlers {
|
|
122
|
+
const { module } = this;
|
|
123
|
+
const variableDeclarations = this.collections.variableDeclarations ?? [];
|
|
124
|
+
const classInstantiations = this.collections.classInstantiations ?? [];
|
|
125
|
+
const literals = (this.collections.literals ?? []) as unknown[];
|
|
126
|
+
const variableAssignments = this.collections.variableAssignments ?? [];
|
|
127
|
+
const varDeclCounterRef = (this.collections.varDeclCounterRef ?? { value: 0 }) as CounterRef;
|
|
128
|
+
const literalCounterRef = (this.collections.literalCounterRef ?? { value: 0 }) as CounterRef;
|
|
129
|
+
|
|
130
|
+
const extractVariableNamesFromPattern = this.extractVariableNamesFromPattern;
|
|
131
|
+
const trackVariableAssignment = this.trackVariableAssignment;
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
VariableDeclaration: (path: NodePath) => {
|
|
135
|
+
// Only module-level variables
|
|
136
|
+
const functionParent = path.getFunctionParent();
|
|
137
|
+
if (!functionParent) {
|
|
138
|
+
const varNode = path.node as VariableDeclaration;
|
|
139
|
+
const isConst = varNode.kind === 'const';
|
|
140
|
+
|
|
141
|
+
varNode.declarations.forEach((declarator: VariableDeclarator) => {
|
|
142
|
+
// Extract all variable names from the pattern (handles destructuring)
|
|
143
|
+
const variables = extractVariableNamesFromPattern(declarator.id);
|
|
144
|
+
|
|
145
|
+
variables.forEach((varInfo: VariableInfo) => {
|
|
146
|
+
const literalValue = ExpressionEvaluator.extractLiteralValue(declarator.init);
|
|
147
|
+
const isLiteral = literalValue !== null;
|
|
148
|
+
const isNewExpression = declarator.init && declarator.init.type === 'NewExpression';
|
|
149
|
+
|
|
150
|
+
// For const with literal or NewExpression create CONSTANT
|
|
151
|
+
// For everything else - VARIABLE
|
|
152
|
+
const shouldBeConstant = isConst && (isLiteral || isNewExpression);
|
|
153
|
+
|
|
154
|
+
const varId = shouldBeConstant
|
|
155
|
+
? `CONSTANT#${varInfo.name}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}:${(varDeclCounterRef as CounterRef).value++}`
|
|
156
|
+
: `VARIABLE#${varInfo.name}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}:${(varDeclCounterRef as CounterRef).value++}`;
|
|
157
|
+
|
|
158
|
+
if (shouldBeConstant) {
|
|
159
|
+
// CONSTANT node
|
|
160
|
+
const constantData: VariableDeclarationInfo = {
|
|
161
|
+
id: varId,
|
|
162
|
+
type: 'CONSTANT',
|
|
163
|
+
name: varInfo.name,
|
|
164
|
+
file: module.file,
|
|
165
|
+
line: varInfo.loc.start.line,
|
|
166
|
+
parentScopeId: module.id
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
if (isLiteral) {
|
|
170
|
+
constantData.value = literalValue;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
(variableDeclarations as VariableDeclarationInfo[]).push(constantData);
|
|
174
|
+
|
|
175
|
+
// If NewExpression, track for CLASS and INSTANCE_OF
|
|
176
|
+
if (isNewExpression) {
|
|
177
|
+
const newExpr = declarator.init as NewExpression;
|
|
178
|
+
if (newExpr.callee.type === 'Identifier') {
|
|
179
|
+
const className = (newExpr.callee as Identifier).name;
|
|
180
|
+
(classInstantiations as ClassInstantiationInfo[]).push({
|
|
181
|
+
variableId: varId,
|
|
182
|
+
variableName: varInfo.name,
|
|
183
|
+
className: className,
|
|
184
|
+
line: varInfo.loc.start.line,
|
|
185
|
+
parentScopeId: module.id
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
} else {
|
|
190
|
+
(variableDeclarations as VariableDeclarationInfo[]).push({
|
|
191
|
+
id: varId,
|
|
192
|
+
type: 'VARIABLE',
|
|
193
|
+
name: varInfo.name,
|
|
194
|
+
file: module.file,
|
|
195
|
+
line: varInfo.loc.start.line,
|
|
196
|
+
parentScopeId: module.id
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Track assignment for data flow analysis
|
|
201
|
+
if (declarator.init) {
|
|
202
|
+
// Handle destructuring - create EXPRESSION for property path
|
|
203
|
+
if (varInfo.propertyPath || varInfo.arrayIndex !== undefined) {
|
|
204
|
+
// Create EXPRESSION node for the property access
|
|
205
|
+
const initName = declarator.init.type === 'Identifier'
|
|
206
|
+
? (declarator.init as Identifier).name
|
|
207
|
+
: 'expr';
|
|
208
|
+
let expressionPath = initName;
|
|
209
|
+
|
|
210
|
+
if (varInfo.propertyPath) {
|
|
211
|
+
expressionPath = `${initName}.${varInfo.propertyPath.join('.')}`;
|
|
212
|
+
} else if (varInfo.arrayIndex !== undefined) {
|
|
213
|
+
expressionPath = `${initName}[${varInfo.arrayIndex}]`;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const expressionId = `EXPRESSION#${expressionPath}#${module.file}#${varInfo.loc.start.line}:${varInfo.loc.start.column}`;
|
|
217
|
+
|
|
218
|
+
// Create EXPRESSION node representing the property access
|
|
219
|
+
(literals as LiteralExpressionInfo[]).push({
|
|
220
|
+
id: expressionId,
|
|
221
|
+
type: 'EXPRESSION',
|
|
222
|
+
expressionType: varInfo.propertyPath ? 'MemberExpression' : 'ArrayAccess',
|
|
223
|
+
path: expressionPath,
|
|
224
|
+
baseName: initName,
|
|
225
|
+
propertyPath: varInfo.propertyPath || null,
|
|
226
|
+
arrayIndex: varInfo.arrayIndex,
|
|
227
|
+
file: module.file,
|
|
228
|
+
line: varInfo.loc.start.line
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
// Create ASSIGNED_FROM edge: VARIABLE -> EXPRESSION
|
|
232
|
+
(variableAssignments as VariableAssignmentInfo[]).push({
|
|
233
|
+
variableId: varId,
|
|
234
|
+
sourceId: expressionId,
|
|
235
|
+
sourceType: 'EXPRESSION'
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
// Also create DERIVES_FROM edge: EXPRESSION -> base variable (if identifier)
|
|
239
|
+
if (declarator.init.type === 'Identifier') {
|
|
240
|
+
(variableAssignments as VariableAssignmentInfo[]).push({
|
|
241
|
+
variableId: expressionId,
|
|
242
|
+
sourceId: null, // Will be resolved by name
|
|
243
|
+
sourceName: (declarator.init as Identifier).name,
|
|
244
|
+
sourceType: 'DERIVES_FROM_VARIABLE',
|
|
245
|
+
file: module.file
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
} else {
|
|
249
|
+
// Normal assignment tracking
|
|
250
|
+
trackVariableAssignment(
|
|
251
|
+
declarator.init,
|
|
252
|
+
varId,
|
|
253
|
+
varInfo.name,
|
|
254
|
+
module,
|
|
255
|
+
varInfo.loc.start.line,
|
|
256
|
+
literals,
|
|
257
|
+
variableAssignments,
|
|
258
|
+
literalCounterRef as CounterRef
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST Visitors for JSASTAnalyzer
|
|
3
|
+
*
|
|
4
|
+
* Each visitor handles specific AST node types and extracts relevant data
|
|
5
|
+
* into shared collections.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export { ASTVisitor } from './ASTVisitor.js';
|
|
9
|
+
export type {
|
|
10
|
+
VisitorModule,
|
|
11
|
+
VisitorCollections,
|
|
12
|
+
VisitorHandlers,
|
|
13
|
+
VisitorHandler,
|
|
14
|
+
CounterRef,
|
|
15
|
+
ProcessedNodes,
|
|
16
|
+
VariableAssignment,
|
|
17
|
+
LocationInfo
|
|
18
|
+
} from './ASTVisitor.js';
|
|
19
|
+
|
|
20
|
+
export { ImportExportVisitor } from './ImportExportVisitor.js';
|
|
21
|
+
|
|
22
|
+
export { VariableVisitor } from './VariableVisitor.js';
|
|
23
|
+
export type {
|
|
24
|
+
VariableInfo,
|
|
25
|
+
ExtractVariableNamesCallback,
|
|
26
|
+
TrackVariableAssignmentCallback
|
|
27
|
+
} from './VariableVisitor.js';
|
|
28
|
+
|
|
29
|
+
export { FunctionVisitor } from './FunctionVisitor.js';
|
|
30
|
+
export type { AnalyzeFunctionBodyCallback } from './FunctionVisitor.js';
|
|
31
|
+
|
|
32
|
+
export { ClassVisitor } from './ClassVisitor.js';
|
|
33
|
+
|
|
34
|
+
export { CallExpressionVisitor } from './CallExpressionVisitor.js';
|
|
35
|
+
|
|
36
|
+
export { TypeScriptVisitor } from './TypeScriptVisitor.js';
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Базовый класс для плагинов DISCOVERY фазы
|
|
3
|
+
*
|
|
4
|
+
* DISCOVERY фаза отвечает за:
|
|
5
|
+
* 1. Поиск сервисов/компонентов в проекте
|
|
6
|
+
* 2. Создание SERVICE нод
|
|
7
|
+
* 3. Возврат манифеста для последующих фаз
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Plugin } from '../Plugin.js';
|
|
11
|
+
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
12
|
+
|
|
13
|
+
export abstract class DiscoveryPlugin extends Plugin {
|
|
14
|
+
constructor(config: Record<string, unknown> = {}) {
|
|
15
|
+
super(config);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
get metadata(): PluginMetadata {
|
|
19
|
+
return {
|
|
20
|
+
name: this.constructor.name,
|
|
21
|
+
phase: 'DISCOVERY',
|
|
22
|
+
priority: 100,
|
|
23
|
+
creates: {
|
|
24
|
+
nodes: ['SERVICE'],
|
|
25
|
+
edges: []
|
|
26
|
+
},
|
|
27
|
+
dependencies: []
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Выполнить discovery
|
|
33
|
+
*
|
|
34
|
+
* @param context - PluginContext
|
|
35
|
+
* context.projectPath - корневая директория проекта
|
|
36
|
+
*
|
|
37
|
+
* @returns Promise<PluginResult>
|
|
38
|
+
* result.metadata.services - массив найденных сервисов
|
|
39
|
+
* [
|
|
40
|
+
* {
|
|
41
|
+
* id: string,
|
|
42
|
+
* name: string,
|
|
43
|
+
* path: string,
|
|
44
|
+
* type: string,
|
|
45
|
+
* metadata: Object
|
|
46
|
+
* }
|
|
47
|
+
* ]
|
|
48
|
+
*/
|
|
49
|
+
abstract execute(context: PluginContext): Promise<PluginResult>;
|
|
50
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MonorepoServiceDiscovery - плагин для поиска сервисов в монорепозитории
|
|
3
|
+
*
|
|
4
|
+
* Стратегия discovery:
|
|
5
|
+
* 1. Ищет директорию pkg/ в корне проекта
|
|
6
|
+
* 2. Каждая поддиректория в pkg/ считается сервисом
|
|
7
|
+
* 3. Создаёт SERVICE ноды для каждого найденного сервиса
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { DiscoveryPlugin } from './DiscoveryPlugin.js';
|
|
11
|
+
import { createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
12
|
+
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
13
|
+
import type { NodeRecord } from '@grafema/types';
|
|
14
|
+
import { readdirSync, statSync, existsSync } from 'fs';
|
|
15
|
+
import { join } from 'path';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Service info returned in metadata
|
|
19
|
+
*/
|
|
20
|
+
interface ServiceInfo {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
path: string;
|
|
24
|
+
type: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Configuration options
|
|
29
|
+
*/
|
|
30
|
+
interface MonorepoConfig extends Record<string, unknown> {
|
|
31
|
+
servicesDir?: string;
|
|
32
|
+
excludeDirs?: string[];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class MonorepoServiceDiscovery extends DiscoveryPlugin {
|
|
36
|
+
private servicesDir: string;
|
|
37
|
+
private excludeDirs: string[];
|
|
38
|
+
|
|
39
|
+
constructor(config: MonorepoConfig = {}) {
|
|
40
|
+
super(config);
|
|
41
|
+
// Настройки по умолчанию
|
|
42
|
+
this.servicesDir = config.servicesDir || 'pkg';
|
|
43
|
+
this.excludeDirs = config.excludeDirs || ['.git', 'node_modules', 'build', 'dist'];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
get metadata(): PluginMetadata {
|
|
47
|
+
return {
|
|
48
|
+
name: 'MonorepoServiceDiscovery',
|
|
49
|
+
phase: 'DISCOVERY',
|
|
50
|
+
priority: 100,
|
|
51
|
+
creates: {
|
|
52
|
+
nodes: ['SERVICE'],
|
|
53
|
+
edges: []
|
|
54
|
+
},
|
|
55
|
+
dependencies: []
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async execute(context: PluginContext): Promise<PluginResult> {
|
|
60
|
+
const { projectPath, graph } = context;
|
|
61
|
+
const servicesPath = join(projectPath!, this.servicesDir);
|
|
62
|
+
|
|
63
|
+
console.log(`[MonorepoServiceDiscovery] Looking for services in: ${servicesPath}`);
|
|
64
|
+
|
|
65
|
+
if (!existsSync(servicesPath)) {
|
|
66
|
+
return createErrorResult(
|
|
67
|
+
new Error(`Services directory not found: ${servicesPath}`)
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
const services: ServiceInfo[] = [];
|
|
73
|
+
const entries = readdirSync(servicesPath);
|
|
74
|
+
console.log(`[MonorepoServiceDiscovery] Found ${entries.length} entries`);
|
|
75
|
+
|
|
76
|
+
for (const entry of entries) {
|
|
77
|
+
const fullPath = join(servicesPath, entry);
|
|
78
|
+
const stat = statSync(fullPath);
|
|
79
|
+
|
|
80
|
+
// Пропускаем файлы и исключённые директории
|
|
81
|
+
if (!stat.isDirectory() || this.excludeDirs.includes(entry)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Создаём SERVICE ноду
|
|
86
|
+
const serviceId = `service:${entry}`;
|
|
87
|
+
// Cast through unknown since we're creating a dynamic service node
|
|
88
|
+
const serviceNode = {
|
|
89
|
+
id: serviceId,
|
|
90
|
+
type: 'SERVICE',
|
|
91
|
+
name: entry,
|
|
92
|
+
path: fullPath,
|
|
93
|
+
metadata: {
|
|
94
|
+
discoveryMethod: 'monorepo',
|
|
95
|
+
servicePath: fullPath
|
|
96
|
+
}
|
|
97
|
+
} as unknown as NodeRecord;
|
|
98
|
+
|
|
99
|
+
await graph.addNode(serviceNode);
|
|
100
|
+
|
|
101
|
+
services.push({
|
|
102
|
+
id: serviceId,
|
|
103
|
+
name: entry,
|
|
104
|
+
path: fullPath,
|
|
105
|
+
type: 'monorepo-service'
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return createSuccessResult(
|
|
110
|
+
{ nodes: services.length, edges: 0 },
|
|
111
|
+
{ services }
|
|
112
|
+
);
|
|
113
|
+
} catch (error) {
|
|
114
|
+
return createErrorResult(error as Error);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SimpleProjectDiscovery - универсальный discovery плагин
|
|
3
|
+
*
|
|
4
|
+
* Находит сервис по package.json в корне проекта.
|
|
5
|
+
* Работает для любого JS/TS проекта.
|
|
6
|
+
* Используется как дефолтный discovery когда нет специфичных плагинов.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { existsSync, readFileSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { NodeFactory } from '../../core/NodeFactory.js';
|
|
12
|
+
import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
13
|
+
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Service info returned in metadata
|
|
17
|
+
*/
|
|
18
|
+
interface ServiceInfo {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
path: string;
|
|
22
|
+
type: string;
|
|
23
|
+
metadata: {
|
|
24
|
+
entrypoint: string;
|
|
25
|
+
packageJson: PackageJson;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Package.json structure (relevant fields)
|
|
31
|
+
*/
|
|
32
|
+
interface PackageJson {
|
|
33
|
+
name?: string;
|
|
34
|
+
version?: string;
|
|
35
|
+
main?: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
dependencies?: Record<string, string>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export class SimpleProjectDiscovery extends Plugin {
|
|
41
|
+
|
|
42
|
+
get metadata(): PluginMetadata {
|
|
43
|
+
return {
|
|
44
|
+
name: 'SimpleProjectDiscovery',
|
|
45
|
+
phase: 'DISCOVERY',
|
|
46
|
+
priority: 50, // Lower priority than specialized discovery plugins
|
|
47
|
+
creates: {
|
|
48
|
+
nodes: ['SERVICE'],
|
|
49
|
+
edges: []
|
|
50
|
+
},
|
|
51
|
+
dependencies: []
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async execute(context: PluginContext): Promise<PluginResult> {
|
|
56
|
+
const { graph } = context;
|
|
57
|
+
// projectPath can be at top level (DISCOVERY phase) or in manifest/config
|
|
58
|
+
const projectPath = context.projectPath || (context.manifest as { projectPath?: string })?.projectPath || context.config?.projectPath;
|
|
59
|
+
|
|
60
|
+
if (!projectPath) {
|
|
61
|
+
return createErrorResult(new Error('projectPath not found in context'));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const packageJsonPath = join(projectPath, 'package.json');
|
|
65
|
+
|
|
66
|
+
if (!existsSync(packageJsonPath)) {
|
|
67
|
+
return createErrorResult(new Error(`package.json not found: ${packageJsonPath}`));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
const packageJson: PackageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
72
|
+
const serviceName = packageJson.name || 'unnamed-service';
|
|
73
|
+
const entrypoint = packageJson.main || 'index.js';
|
|
74
|
+
|
|
75
|
+
// Используем NodeFactory для создания SERVICE ноды
|
|
76
|
+
const serviceNode = NodeFactory.createService(serviceName, projectPath, {
|
|
77
|
+
discoveryMethod: 'simple',
|
|
78
|
+
entrypoint,
|
|
79
|
+
version: packageJson.version,
|
|
80
|
+
description: packageJson.description,
|
|
81
|
+
dependencies: Object.keys(packageJson.dependencies || {})
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
await graph.addNode(serviceNode);
|
|
85
|
+
|
|
86
|
+
const service: ServiceInfo = {
|
|
87
|
+
id: serviceNode.id,
|
|
88
|
+
name: serviceName,
|
|
89
|
+
path: join(projectPath, entrypoint),
|
|
90
|
+
type: 'simple-project',
|
|
91
|
+
metadata: {
|
|
92
|
+
entrypoint: join(projectPath, entrypoint),
|
|
93
|
+
packageJson
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
return createSuccessResult({ nodes: 1, edges: 0 }, { services: [service] });
|
|
98
|
+
} catch (error) {
|
|
99
|
+
return createErrorResult(error as Error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|