@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,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type Validation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Levenshtein distance and typo detection for node/edge types.
|
|
5
|
+
* Extracted from ReginaFlowBackend for use in multiple contexts.
|
|
6
|
+
*/
|
|
7
|
+
// Known node types - source of truth for validation
|
|
8
|
+
// Initial set of types, dynamically expanded as new valid types are encountered
|
|
9
|
+
const KNOWN_NODE_TYPES = new Set([
|
|
10
|
+
// Base types
|
|
11
|
+
'FUNCTION', 'CLASS', 'METHOD', 'VARIABLE', 'PARAMETER', 'CONSTANT', 'LITERAL',
|
|
12
|
+
'MODULE', 'IMPORT', 'EXPORT', 'CALL', 'PROJECT', 'SERVICE', 'FILE', 'SCOPE',
|
|
13
|
+
'EXTERNAL', 'EXTERNAL_MODULE', 'SIDE_EFFECT',
|
|
14
|
+
// Namespaced types - HTTP/Express
|
|
15
|
+
'http:route', 'http:request',
|
|
16
|
+
'express:router', 'express:middleware', 'express:mount',
|
|
17
|
+
// Namespaced types - Socket.IO
|
|
18
|
+
'socketio:emit', 'socketio:on', 'socketio:namespace', 'socketio:room',
|
|
19
|
+
// Namespaced types - Database
|
|
20
|
+
'db:query', 'db:connection', 'db:table',
|
|
21
|
+
// Namespaced types - File System
|
|
22
|
+
'fs:read', 'fs:write', 'fs:operation',
|
|
23
|
+
// Namespaced types - Network/IO
|
|
24
|
+
'net:request', 'net:stdio',
|
|
25
|
+
// Namespaced types - Events
|
|
26
|
+
'event:listener', 'event:emit',
|
|
27
|
+
// Service layer types (legacy, to be refactored)
|
|
28
|
+
'SERVICE_CLASS', 'SERVICE_INSTANCE', 'SERVICE_REGISTRATION', 'SERVICE_USAGE',
|
|
29
|
+
// Guarantees/Invariants
|
|
30
|
+
'GUARANTEE',
|
|
31
|
+
]);
|
|
32
|
+
// Store initial types for reset
|
|
33
|
+
const INITIAL_NODE_TYPES = [...KNOWN_NODE_TYPES];
|
|
34
|
+
// Known edge types - source of truth for validation
|
|
35
|
+
const KNOWN_EDGE_TYPES = new Set([
|
|
36
|
+
// Base edge types
|
|
37
|
+
'UNKNOWN', 'CONTAINS', 'DEPENDS_ON', 'CALLS', 'EXTENDS', 'IMPLEMENTS',
|
|
38
|
+
'USES', 'DEFINES', 'IMPORTS', 'EXPORTS', 'ROUTES_TO', 'HAS_SCOPE',
|
|
39
|
+
'CAPTURES', 'MODIFIES', 'DECLARES', 'WRITES_TO', 'INSTANCE_OF',
|
|
40
|
+
'HAS_CALLBACK', 'IMPORTS_FROM', 'HANDLED_BY', 'MAKES_REQUEST',
|
|
41
|
+
'PASSES_ARGUMENT', 'ASSIGNED_FROM', 'EXPORTS_TO', 'MOUNTS', 'EXPOSES',
|
|
42
|
+
'INTERACTS_WITH', 'CALLS_API', 'LISTENS_TO', 'JOINS_ROOM', 'EMITS_EVENT',
|
|
43
|
+
'RETURNS', 'RECEIVES_ARGUMENT', 'READS_FROM', 'THROWS', 'REGISTERS_VIEW',
|
|
44
|
+
'GOVERNS', 'VIOLATES', 'HAS_PARAMETER', 'DERIVES_FROM',
|
|
45
|
+
]);
|
|
46
|
+
// Store initial edge types for reset
|
|
47
|
+
const INITIAL_EDGE_TYPES = [...KNOWN_EDGE_TYPES];
|
|
48
|
+
/**
|
|
49
|
+
* Levenshtein distance for typo detection
|
|
50
|
+
*/
|
|
51
|
+
export function levenshtein(a, b) {
|
|
52
|
+
if (a.length === 0)
|
|
53
|
+
return b.length;
|
|
54
|
+
if (b.length === 0)
|
|
55
|
+
return a.length;
|
|
56
|
+
const matrix = [];
|
|
57
|
+
for (let i = 0; i <= b.length; i++)
|
|
58
|
+
matrix[i] = [i];
|
|
59
|
+
for (let j = 0; j <= a.length; j++)
|
|
60
|
+
matrix[0][j] = j;
|
|
61
|
+
for (let i = 1; i <= b.length; i++) {
|
|
62
|
+
for (let j = 1; j <= a.length; j++) {
|
|
63
|
+
matrix[i][j] = b[i - 1] === a[j - 1]
|
|
64
|
+
? matrix[i - 1][j - 1]
|
|
65
|
+
: Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return matrix[b.length][a.length];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check if a type is too similar to any existing known type (possible typo)
|
|
72
|
+
*/
|
|
73
|
+
export function checkTypoAgainstKnownTypes(newType) {
|
|
74
|
+
const newTypeLower = newType.toLowerCase();
|
|
75
|
+
for (const known of KNOWN_NODE_TYPES) {
|
|
76
|
+
const dist = levenshtein(newTypeLower, known.toLowerCase());
|
|
77
|
+
if (dist > 0 && dist <= 2) {
|
|
78
|
+
return { isTooSimilar: true, similarTo: known };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { isTooSimilar: false, similarTo: null };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Reset KNOWN_NODE_TYPES to initial state (for testing)
|
|
85
|
+
*/
|
|
86
|
+
export function resetKnownNodeTypes() {
|
|
87
|
+
KNOWN_NODE_TYPES.clear();
|
|
88
|
+
for (const t of INITIAL_NODE_TYPES) {
|
|
89
|
+
KNOWN_NODE_TYPES.add(t);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get current known node types (for testing/debugging)
|
|
94
|
+
*/
|
|
95
|
+
export function getKnownNodeTypes() {
|
|
96
|
+
return new Set(KNOWN_NODE_TYPES);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if an edge type is too similar to any existing known edge type (possible typo)
|
|
100
|
+
*/
|
|
101
|
+
export function checkTypoAgainstKnownEdgeTypes(newType) {
|
|
102
|
+
const newTypeLower = newType.toLowerCase();
|
|
103
|
+
for (const known of KNOWN_EDGE_TYPES) {
|
|
104
|
+
const dist = levenshtein(newTypeLower, known.toLowerCase());
|
|
105
|
+
if (dist > 0 && dist <= 2) {
|
|
106
|
+
return { isTooSimilar: true, similarTo: known };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { isTooSimilar: false, similarTo: null };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Reset KNOWN_EDGE_TYPES to initial state (for testing)
|
|
113
|
+
*/
|
|
114
|
+
export function resetKnownEdgeTypes() {
|
|
115
|
+
KNOWN_EDGE_TYPES.clear();
|
|
116
|
+
for (const t of INITIAL_EDGE_TYPES) {
|
|
117
|
+
KNOWN_EDGE_TYPES.add(t);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get current known edge types (for testing/debugging)
|
|
122
|
+
*/
|
|
123
|
+
export function getKnownEdgeTypes() {
|
|
124
|
+
return new Set(KNOWN_EDGE_TYPES);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Add a new node type to the known types set
|
|
128
|
+
*/
|
|
129
|
+
export function addKnownNodeType(nodeType) {
|
|
130
|
+
KNOWN_NODE_TYPES.add(nodeType);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Add a new edge type to the known types set
|
|
134
|
+
*/
|
|
135
|
+
export function addKnownEdgeType(edgeType) {
|
|
136
|
+
KNOWN_EDGE_TYPES.add(edgeType);
|
|
137
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PathValidator - проверяет безопасность рефакторинга через path equivalence
|
|
3
|
+
*
|
|
4
|
+
* КОНЦЕПЦИЯ:
|
|
5
|
+
* 1. Трассируем пути от main версии функции до endpoints (DATABASE, HTTP, EXTERNAL)
|
|
6
|
+
* 2. Трассируем пути от __local версии до тех же endpoints
|
|
7
|
+
* 3. Сравниваем: если все пути сохранились → safe, если нет → breaking change
|
|
8
|
+
*
|
|
9
|
+
* ENDPOINTS (критические точки):
|
|
10
|
+
* - DATABASE_QUERY: запросы к БД
|
|
11
|
+
* - HTTP_REQUEST: HTTP запросы
|
|
12
|
+
* - EXTERNAL: внешние сервисы
|
|
13
|
+
* - FILESYSTEM: операции с файлами
|
|
14
|
+
* - MODULE_BOUNDARY: exported functions
|
|
15
|
+
* - SIDE_EFFECTS: console.log, process.exit и т.д.
|
|
16
|
+
*/
|
|
17
|
+
import type { GraphBackend } from '@grafema/types';
|
|
18
|
+
/**
|
|
19
|
+
* Validation result
|
|
20
|
+
*/
|
|
21
|
+
export interface PathValidationResult {
|
|
22
|
+
safe: boolean;
|
|
23
|
+
severity: 'info' | 'warning' | 'error';
|
|
24
|
+
message: string;
|
|
25
|
+
deleted?: boolean;
|
|
26
|
+
missing?: EndpointDiff[];
|
|
27
|
+
added?: EndpointDiff[];
|
|
28
|
+
endpointsChecked: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Endpoint diff info
|
|
32
|
+
*/
|
|
33
|
+
interface EndpointDiff {
|
|
34
|
+
type: string;
|
|
35
|
+
name: string;
|
|
36
|
+
reason: string;
|
|
37
|
+
}
|
|
38
|
+
export declare class PathValidator {
|
|
39
|
+
private backend;
|
|
40
|
+
constructor(backend: GraphBackend);
|
|
41
|
+
/**
|
|
42
|
+
* Проверить эквивалентность путей между main и __local версиями функции
|
|
43
|
+
*
|
|
44
|
+
* @param functionName - Имя функции
|
|
45
|
+
* @param file - Путь к файлу
|
|
46
|
+
* @returns Результат валидации
|
|
47
|
+
*/
|
|
48
|
+
checkPathEquivalence(functionName: string, file: string): Promise<PathValidationResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Получить все достижимые endpoints из данной ноды
|
|
51
|
+
*
|
|
52
|
+
* @param nodeId - ID начальной ноды
|
|
53
|
+
* @returns Массив endpoint нод
|
|
54
|
+
*/
|
|
55
|
+
private _getReachableEndpoints;
|
|
56
|
+
/**
|
|
57
|
+
* Сравнить два набора endpoints
|
|
58
|
+
*
|
|
59
|
+
* @param mainEndpoints - Endpoints из main версии
|
|
60
|
+
* @param localEndpoints - Endpoints из __local версии
|
|
61
|
+
* @returns { missing: [], added: [] }
|
|
62
|
+
*/
|
|
63
|
+
private _compareEndpoints;
|
|
64
|
+
/**
|
|
65
|
+
* Получить уникальный ключ для endpoint
|
|
66
|
+
*
|
|
67
|
+
* @param endpoint - Endpoint нода
|
|
68
|
+
* @returns Уникальный ключ
|
|
69
|
+
*/
|
|
70
|
+
private _getEndpointKey;
|
|
71
|
+
/**
|
|
72
|
+
* Получить reason для missing endpoint
|
|
73
|
+
*/
|
|
74
|
+
private _getMissingReason;
|
|
75
|
+
/**
|
|
76
|
+
* Получить reason для added endpoint
|
|
77
|
+
*/
|
|
78
|
+
private _getAddedReason;
|
|
79
|
+
}
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=PathValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathValidator.d.ts","sourceRoot":"","sources":["../../src/validation/PathValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAmBnD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,YAAY;IAIjC;;;;;;OAMG;IACG,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAsF7F;;;;;OAKG;YACW,sBAAsB;IAwDpC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IA0CzB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAexB"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PathValidator - проверяет безопасность рефакторинга через path equivalence
|
|
3
|
+
*
|
|
4
|
+
* КОНЦЕПЦИЯ:
|
|
5
|
+
* 1. Трассируем пути от main версии функции до endpoints (DATABASE, HTTP, EXTERNAL)
|
|
6
|
+
* 2. Трассируем пути от __local версии до тех же endpoints
|
|
7
|
+
* 3. Сравниваем: если все пути сохранились → safe, если нет → breaking change
|
|
8
|
+
*
|
|
9
|
+
* ENDPOINTS (критические точки):
|
|
10
|
+
* - DATABASE_QUERY: запросы к БД
|
|
11
|
+
* - HTTP_REQUEST: HTTP запросы
|
|
12
|
+
* - EXTERNAL: внешние сервисы
|
|
13
|
+
* - FILESYSTEM: операции с файлами
|
|
14
|
+
* - MODULE_BOUNDARY: exported functions
|
|
15
|
+
* - SIDE_EFFECTS: console.log, process.exit и т.д.
|
|
16
|
+
*/
|
|
17
|
+
export class PathValidator {
|
|
18
|
+
backend;
|
|
19
|
+
constructor(backend) {
|
|
20
|
+
this.backend = backend;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Проверить эквивалентность путей между main и __local версиями функции
|
|
24
|
+
*
|
|
25
|
+
* @param functionName - Имя функции
|
|
26
|
+
* @param file - Путь к файлу
|
|
27
|
+
* @returns Результат валидации
|
|
28
|
+
*/
|
|
29
|
+
async checkPathEquivalence(functionName, file) {
|
|
30
|
+
// 1. Найти все версии функции (main и __local) по имени
|
|
31
|
+
const allVersions = [];
|
|
32
|
+
for await (const node of this.backend.queryNodes({ type: 'FUNCTION', name: functionName })) {
|
|
33
|
+
// Дополнительно фильтруем по file если он указан
|
|
34
|
+
if (node.file === file || node.file === undefined) {
|
|
35
|
+
allVersions.push(node);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const mainFunction = allVersions.find(n => n.version === 'main');
|
|
39
|
+
const localFunction = allVersions.find(n => n.version === '__local');
|
|
40
|
+
// 3. Обработать случаи: deleted, added, exists
|
|
41
|
+
if (!mainFunction && localFunction) {
|
|
42
|
+
// Новая функция
|
|
43
|
+
return {
|
|
44
|
+
safe: true,
|
|
45
|
+
severity: 'info',
|
|
46
|
+
message: `New function added: ${functionName}`,
|
|
47
|
+
endpointsChecked: 0
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (mainFunction && !localFunction) {
|
|
51
|
+
// Функция удалена
|
|
52
|
+
return {
|
|
53
|
+
safe: false,
|
|
54
|
+
severity: 'error',
|
|
55
|
+
deleted: true,
|
|
56
|
+
message: `Function deleted: ${functionName}`,
|
|
57
|
+
endpointsChecked: 0
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (!mainFunction && !localFunction) {
|
|
61
|
+
// Функция не найдена вообще
|
|
62
|
+
return {
|
|
63
|
+
safe: false,
|
|
64
|
+
severity: 'error',
|
|
65
|
+
message: `Function not found: ${functionName}`,
|
|
66
|
+
endpointsChecked: 0
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// 4. Получить все endpoints для main версии
|
|
70
|
+
const mainEndpoints = await this._getReachableEndpoints(mainFunction.id);
|
|
71
|
+
// 5. Получить все endpoints для local версии
|
|
72
|
+
const localEndpoints = await this._getReachableEndpoints(localFunction.id);
|
|
73
|
+
// 6. Сравнить endpoints
|
|
74
|
+
const comparison = this._compareEndpoints(mainEndpoints, localEndpoints);
|
|
75
|
+
// 7. Определить результат
|
|
76
|
+
if (comparison.missing.length > 0) {
|
|
77
|
+
// Breaking change - критические endpoints удалены
|
|
78
|
+
return {
|
|
79
|
+
safe: false,
|
|
80
|
+
severity: 'error',
|
|
81
|
+
message: `Breaking change detected: ${comparison.missing.length} endpoint(s) no longer reachable`,
|
|
82
|
+
missing: comparison.missing,
|
|
83
|
+
endpointsChecked: mainEndpoints.length
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (comparison.added.length > 0) {
|
|
87
|
+
// Warning - новые endpoints добавлены
|
|
88
|
+
return {
|
|
89
|
+
safe: true,
|
|
90
|
+
severity: 'warning',
|
|
91
|
+
message: `New behavior added: ${comparison.added.length} new endpoint(s) reachable`,
|
|
92
|
+
added: comparison.added,
|
|
93
|
+
endpointsChecked: mainEndpoints.length
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Safe refactoring - все endpoints сохранены
|
|
97
|
+
return {
|
|
98
|
+
safe: true,
|
|
99
|
+
severity: 'info',
|
|
100
|
+
message: `Safe refactoring: all endpoints preserved`,
|
|
101
|
+
endpointsChecked: mainEndpoints.length
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Получить все достижимые endpoints из данной ноды
|
|
106
|
+
*
|
|
107
|
+
* @param nodeId - ID начальной ноды
|
|
108
|
+
* @returns Массив endpoint нод
|
|
109
|
+
*/
|
|
110
|
+
async _getReachableEndpoints(nodeId) {
|
|
111
|
+
// Трассируем пути через CALLS рёбра (BFS до глубины 10)
|
|
112
|
+
// Endpoints - это ноды типа: DATABASE_QUERY, HTTP_REQUEST, EXTERNAL, FILESYSTEM, SIDE_EFFECT
|
|
113
|
+
// Или exported FUNCTION (MODULE_BOUNDARY)
|
|
114
|
+
const CALLS_EDGE_TYPE = 'CALLS';
|
|
115
|
+
const MAX_DEPTH = 10;
|
|
116
|
+
// BFS для поиска всех достижимых нод
|
|
117
|
+
const visited = new Set();
|
|
118
|
+
const queue = [{ id: nodeId, depth: 0 }];
|
|
119
|
+
const endpoints = [];
|
|
120
|
+
while (queue.length > 0) {
|
|
121
|
+
const { id, depth } = queue.shift();
|
|
122
|
+
if (visited.has(id) || depth > MAX_DEPTH) {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
visited.add(id);
|
|
126
|
+
// Получить ноду и проверить является ли она endpoint
|
|
127
|
+
const node = await this.backend.getNode(id);
|
|
128
|
+
if (node && id !== nodeId) {
|
|
129
|
+
// Check for endpoint types (new namespaced types + legacy names for backward compat)
|
|
130
|
+
const endpointTypes = [
|
|
131
|
+
'db:query', 'DATABASE_QUERY',
|
|
132
|
+
'http:request', 'HTTP_REQUEST',
|
|
133
|
+
'EXTERNAL',
|
|
134
|
+
'fs:operation', 'FILESYSTEM',
|
|
135
|
+
'SIDE_EFFECT',
|
|
136
|
+
'net:request', 'EXTERNAL_NETWORK',
|
|
137
|
+
'net:stdio', 'EXTERNAL_STDIO'
|
|
138
|
+
];
|
|
139
|
+
const isEndpoint = endpointTypes.includes(node.type) ||
|
|
140
|
+
(node.type === 'FUNCTION' && node.exported === true);
|
|
141
|
+
if (isEndpoint) {
|
|
142
|
+
endpoints.push(node);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Получить исходящие CALLS рёбра
|
|
146
|
+
const outgoingEdges = await this.backend.getOutgoingEdges(id, [CALLS_EDGE_TYPE]);
|
|
147
|
+
for (const edge of outgoingEdges) {
|
|
148
|
+
const dstId = typeof edge.dst === 'string' ? edge.dst : String(edge.dst);
|
|
149
|
+
if (!visited.has(dstId)) {
|
|
150
|
+
queue.push({ id: dstId, depth: depth + 1 });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return endpoints;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Сравнить два набора endpoints
|
|
158
|
+
*
|
|
159
|
+
* @param mainEndpoints - Endpoints из main версии
|
|
160
|
+
* @param localEndpoints - Endpoints из __local версии
|
|
161
|
+
* @returns { missing: [], added: [] }
|
|
162
|
+
*/
|
|
163
|
+
_compareEndpoints(mainEndpoints, localEndpoints) {
|
|
164
|
+
const missing = [];
|
|
165
|
+
const added = [];
|
|
166
|
+
// Создаём Map для быстрого поиска
|
|
167
|
+
const localMap = new Map();
|
|
168
|
+
localEndpoints.forEach(ep => {
|
|
169
|
+
const key = this._getEndpointKey(ep);
|
|
170
|
+
localMap.set(key, ep);
|
|
171
|
+
});
|
|
172
|
+
const mainMap = new Map();
|
|
173
|
+
mainEndpoints.forEach(ep => {
|
|
174
|
+
const key = this._getEndpointKey(ep);
|
|
175
|
+
mainMap.set(key, ep);
|
|
176
|
+
});
|
|
177
|
+
// Находим missing endpoints (есть в main, но нет в local)
|
|
178
|
+
for (const [key, endpoint] of mainMap.entries()) {
|
|
179
|
+
if (!localMap.has(key)) {
|
|
180
|
+
missing.push({
|
|
181
|
+
type: endpoint.type,
|
|
182
|
+
name: endpoint.name || endpoint.query || 'unknown',
|
|
183
|
+
reason: this._getMissingReason(endpoint)
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Находим added endpoints (есть в local, но нет в main)
|
|
188
|
+
for (const [key, endpoint] of localMap.entries()) {
|
|
189
|
+
if (!mainMap.has(key)) {
|
|
190
|
+
added.push({
|
|
191
|
+
type: endpoint.type,
|
|
192
|
+
name: endpoint.name || endpoint.query || 'unknown',
|
|
193
|
+
reason: this._getAddedReason(endpoint)
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return { missing, added };
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Получить уникальный ключ для endpoint
|
|
201
|
+
*
|
|
202
|
+
* @param endpoint - Endpoint нода
|
|
203
|
+
* @returns Уникальный ключ
|
|
204
|
+
*/
|
|
205
|
+
_getEndpointKey(endpoint) {
|
|
206
|
+
if (endpoint.type === 'DATABASE_QUERY' || endpoint.type === 'db:query') {
|
|
207
|
+
// Для DB query используем query text
|
|
208
|
+
return `db:query:${endpoint.query || endpoint.name}`;
|
|
209
|
+
}
|
|
210
|
+
if (endpoint.type === 'FUNCTION' && endpoint.exported) {
|
|
211
|
+
// Для exported functions используем stable ID
|
|
212
|
+
return `${endpoint.type}:${endpoint.name}:${endpoint.file}`;
|
|
213
|
+
}
|
|
214
|
+
if (endpoint.type === 'EXTERNAL') {
|
|
215
|
+
// Для external используем service + name
|
|
216
|
+
return `${endpoint.type}:${endpoint.service}:${endpoint.name}`;
|
|
217
|
+
}
|
|
218
|
+
// Для остальных используем type + name
|
|
219
|
+
return `${endpoint.type}:${endpoint.name}`;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Получить reason для missing endpoint
|
|
223
|
+
*/
|
|
224
|
+
_getMissingReason(endpoint) {
|
|
225
|
+
if (endpoint.type === 'DATABASE_QUERY') {
|
|
226
|
+
return `Database query no longer executed: ${endpoint.query}`;
|
|
227
|
+
}
|
|
228
|
+
if (endpoint.type === 'FUNCTION' && endpoint.exported) {
|
|
229
|
+
return `Exported function no longer called: ${endpoint.name}`;
|
|
230
|
+
}
|
|
231
|
+
if (endpoint.type === 'EXTERNAL') {
|
|
232
|
+
return `External service no longer called: ${endpoint.service}/${endpoint.name}`;
|
|
233
|
+
}
|
|
234
|
+
return `Endpoint no longer reachable: ${endpoint.name}`;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Получить reason для added endpoint
|
|
238
|
+
*/
|
|
239
|
+
_getAddedReason(endpoint) {
|
|
240
|
+
if (endpoint.type === 'DATABASE_QUERY') {
|
|
241
|
+
return `New database query added: ${endpoint.query}`;
|
|
242
|
+
}
|
|
243
|
+
if (endpoint.type === 'FUNCTION' && endpoint.exported) {
|
|
244
|
+
return `New call to exported function: ${endpoint.name}`;
|
|
245
|
+
}
|
|
246
|
+
if (endpoint.type === 'EXTERNAL') {
|
|
247
|
+
return `New external service call: ${endpoint.service}/${endpoint.name}`;
|
|
248
|
+
}
|
|
249
|
+
return `New endpoint reachable: ${endpoint.name}`;
|
|
250
|
+
}
|
|
251
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grafema/core",
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
|
+
"description": "Core analysis engine for Grafema code analysis toolkit",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./*": {
|
|
14
|
+
"types": "./dist/*.d.ts",
|
|
15
|
+
"import": "./dist/*.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"src"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc",
|
|
24
|
+
"clean": "rm -rf dist"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"grafema",
|
|
28
|
+
"code-analysis",
|
|
29
|
+
"ast",
|
|
30
|
+
"static-analysis"
|
|
31
|
+
],
|
|
32
|
+
"license": "Apache-2.0",
|
|
33
|
+
"author": "Vadim Reshetnikov",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/Disentinel/grafema.git",
|
|
37
|
+
"directory": "packages/core"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@babel/parser": "^7.26.3",
|
|
41
|
+
"@babel/traverse": "^7.26.4",
|
|
42
|
+
"@babel/types": "^7.26.3",
|
|
43
|
+
"@grafema/rfdb-client": "workspace:*",
|
|
44
|
+
"@grafema/types": "workspace:*",
|
|
45
|
+
"ajv": "^8.17.1",
|
|
46
|
+
"chokidar": "^4.0.3",
|
|
47
|
+
"minimatch": "^10.1.1",
|
|
48
|
+
"node-source-walk": "^7.0.1",
|
|
49
|
+
"oxc-parser": "^0.96.0",
|
|
50
|
+
"yaml": "^2.8.2"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/babel__traverse": "^7.20.6",
|
|
54
|
+
"@types/node": "^25.0.8",
|
|
55
|
+
"typescript": "^5.9.3"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
118083cf-1249-4311-b452-79bb704fcf13
|