@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,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MethodNode - contract for METHOD node (class method)
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
6
|
+
|
|
7
|
+
type MethodKind = 'method' | 'get' | 'set' | 'constructor';
|
|
8
|
+
|
|
9
|
+
interface MethodNodeRecord extends BaseNodeRecord {
|
|
10
|
+
type: 'METHOD';
|
|
11
|
+
column: number;
|
|
12
|
+
className: string;
|
|
13
|
+
async: boolean;
|
|
14
|
+
generator: boolean;
|
|
15
|
+
static: boolean;
|
|
16
|
+
kind: MethodKind;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
interface MethodNodeOptions {
|
|
20
|
+
async?: boolean;
|
|
21
|
+
generator?: boolean;
|
|
22
|
+
static?: boolean;
|
|
23
|
+
kind?: MethodKind;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class MethodNode {
|
|
27
|
+
static readonly TYPE = 'METHOD' as const;
|
|
28
|
+
|
|
29
|
+
static readonly REQUIRED = ['name', 'file', 'line', 'className'] as const;
|
|
30
|
+
static readonly OPTIONAL = ['column', 'async', 'generator', 'static', 'kind'] as const;
|
|
31
|
+
|
|
32
|
+
static create(
|
|
33
|
+
name: string,
|
|
34
|
+
file: string,
|
|
35
|
+
line: number,
|
|
36
|
+
column: number,
|
|
37
|
+
className: string,
|
|
38
|
+
options: MethodNodeOptions = {}
|
|
39
|
+
): MethodNodeRecord {
|
|
40
|
+
if (!name) throw new Error('MethodNode.create: name is required');
|
|
41
|
+
if (!file) throw new Error('MethodNode.create: file is required');
|
|
42
|
+
if (!line) throw new Error('MethodNode.create: line is required');
|
|
43
|
+
if (!className) throw new Error('MethodNode.create: className is required');
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
id: `${file}:METHOD:${className}.${name}:${line}`,
|
|
47
|
+
type: this.TYPE,
|
|
48
|
+
name,
|
|
49
|
+
file,
|
|
50
|
+
line,
|
|
51
|
+
column: column || 0,
|
|
52
|
+
className,
|
|
53
|
+
async: options.async || false,
|
|
54
|
+
generator: options.generator || false,
|
|
55
|
+
static: options.static || false,
|
|
56
|
+
kind: options.kind || 'method'
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
static validate(node: MethodNodeRecord): string[] {
|
|
61
|
+
const errors: string[] = [];
|
|
62
|
+
|
|
63
|
+
if (node.type !== this.TYPE) {
|
|
64
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const nodeRecord = node as unknown as Record<string, unknown>;
|
|
68
|
+
for (const field of this.REQUIRED) {
|
|
69
|
+
if (!nodeRecord[field]) {
|
|
70
|
+
errors.push(`Missing required field: ${field}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return errors;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export type { MethodNodeRecord, MethodKind };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModuleNode - contract for MODULE node
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { createHash } from 'crypto';
|
|
6
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
7
|
+
|
|
8
|
+
interface ModuleNodeRecord extends BaseNodeRecord {
|
|
9
|
+
type: 'MODULE';
|
|
10
|
+
contentHash: string;
|
|
11
|
+
isTest: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface ModuleNodeOptions {
|
|
15
|
+
isTest?: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class ModuleNode {
|
|
19
|
+
static readonly TYPE = 'MODULE' as const;
|
|
20
|
+
|
|
21
|
+
static readonly REQUIRED = ['name', 'file', 'contentHash'] as const;
|
|
22
|
+
static readonly OPTIONAL = ['isTest'] as const;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Create MODULE node
|
|
26
|
+
* @param filePath - Full file path
|
|
27
|
+
* @param relativePath - Relative path (module name)
|
|
28
|
+
* @param contentHash - Content hash
|
|
29
|
+
* @param options - Additional options (isTest, etc.)
|
|
30
|
+
*/
|
|
31
|
+
static create(
|
|
32
|
+
filePath: string,
|
|
33
|
+
relativePath: string,
|
|
34
|
+
contentHash: string,
|
|
35
|
+
options: ModuleNodeOptions = {}
|
|
36
|
+
): ModuleNodeRecord {
|
|
37
|
+
if (!filePath) throw new Error('ModuleNode.create: filePath is required');
|
|
38
|
+
if (!relativePath) throw new Error('ModuleNode.create: relativePath is required');
|
|
39
|
+
if (!contentHash) throw new Error('ModuleNode.create: contentHash is required');
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
id: `MODULE:${contentHash}`,
|
|
43
|
+
type: this.TYPE,
|
|
44
|
+
name: relativePath,
|
|
45
|
+
file: filePath,
|
|
46
|
+
line: 0,
|
|
47
|
+
contentHash,
|
|
48
|
+
isTest: options.isTest || false
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static _hashPath(path: string): string {
|
|
53
|
+
return createHash('md5').update(path).digest('hex').substring(0, 12);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static validate(node: ModuleNodeRecord): string[] {
|
|
57
|
+
const errors: string[] = [];
|
|
58
|
+
|
|
59
|
+
if (node.type !== this.TYPE) {
|
|
60
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const nodeRecord = node as unknown as Record<string, unknown>;
|
|
64
|
+
for (const field of this.REQUIRED) {
|
|
65
|
+
if (!nodeRecord[field]) {
|
|
66
|
+
errors.push(`Missing required field: ${field}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return errors;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export type { ModuleNodeRecord };
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node Types - string type system for nodes
|
|
3
|
+
*
|
|
4
|
+
* Base types: FUNCTION, CLASS, METHOD, etc.
|
|
5
|
+
* Namespaced types: http:route, socketio:emit, express:router, etc.
|
|
6
|
+
*
|
|
7
|
+
* Namespace convention:
|
|
8
|
+
* - http:* - HTTP endpoints and requests
|
|
9
|
+
* - express:* - Express.js specifics
|
|
10
|
+
* - socketio:* - Socket.IO
|
|
11
|
+
* - db:* - Database queries
|
|
12
|
+
* - fs:* - Filesystem operations
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
// === BASE TYPES ===
|
|
16
|
+
// Abstract types, not tied to language or framework
|
|
17
|
+
|
|
18
|
+
export const NODE_TYPE = {
|
|
19
|
+
// Core code entities
|
|
20
|
+
FUNCTION: 'FUNCTION',
|
|
21
|
+
CLASS: 'CLASS',
|
|
22
|
+
METHOD: 'METHOD',
|
|
23
|
+
VARIABLE: 'VARIABLE',
|
|
24
|
+
PARAMETER: 'PARAMETER',
|
|
25
|
+
CONSTANT: 'CONSTANT',
|
|
26
|
+
LITERAL: 'LITERAL',
|
|
27
|
+
EXPRESSION: 'EXPRESSION', // Generic expression node for data flow tracking
|
|
28
|
+
|
|
29
|
+
// Module system
|
|
30
|
+
MODULE: 'MODULE',
|
|
31
|
+
IMPORT: 'IMPORT',
|
|
32
|
+
EXPORT: 'EXPORT',
|
|
33
|
+
|
|
34
|
+
// Call graph
|
|
35
|
+
CALL: 'CALL', // unified METHOD_CALL + CALL_SITE
|
|
36
|
+
|
|
37
|
+
// Project structure
|
|
38
|
+
PROJECT: 'PROJECT',
|
|
39
|
+
SERVICE: 'SERVICE',
|
|
40
|
+
FILE: 'FILE',
|
|
41
|
+
SCOPE: 'SCOPE',
|
|
42
|
+
|
|
43
|
+
// External dependencies
|
|
44
|
+
EXTERNAL: 'EXTERNAL',
|
|
45
|
+
EXTERNAL_MODULE: 'EXTERNAL_MODULE',
|
|
46
|
+
|
|
47
|
+
// Generic side effects
|
|
48
|
+
SIDE_EFFECT: 'SIDE_EFFECT',
|
|
49
|
+
} as const;
|
|
50
|
+
|
|
51
|
+
export type BaseNodeType = typeof NODE_TYPE[keyof typeof NODE_TYPE];
|
|
52
|
+
|
|
53
|
+
// === NAMESPACED TYPES ===
|
|
54
|
+
// Types specific to frameworks and libraries
|
|
55
|
+
|
|
56
|
+
export const NAMESPACED_TYPE = {
|
|
57
|
+
// HTTP (generic)
|
|
58
|
+
HTTP_ROUTE: 'http:route',
|
|
59
|
+
HTTP_REQUEST: 'http:request',
|
|
60
|
+
|
|
61
|
+
// Express.js
|
|
62
|
+
EXPRESS_ROUTER: 'express:router',
|
|
63
|
+
EXPRESS_MIDDLEWARE: 'express:middleware',
|
|
64
|
+
EXPRESS_MOUNT: 'express:mount',
|
|
65
|
+
|
|
66
|
+
// Socket.IO
|
|
67
|
+
SOCKETIO_EMIT: 'socketio:emit',
|
|
68
|
+
SOCKETIO_ON: 'socketio:on',
|
|
69
|
+
SOCKETIO_NAMESPACE: 'socketio:namespace',
|
|
70
|
+
|
|
71
|
+
// Database
|
|
72
|
+
DB_QUERY: 'db:query',
|
|
73
|
+
DB_CONNECTION: 'db:connection',
|
|
74
|
+
|
|
75
|
+
// Filesystem
|
|
76
|
+
FS_READ: 'fs:read',
|
|
77
|
+
FS_WRITE: 'fs:write',
|
|
78
|
+
FS_OPERATION: 'fs:operation',
|
|
79
|
+
|
|
80
|
+
// Network
|
|
81
|
+
NET_REQUEST: 'net:request',
|
|
82
|
+
NET_STDIO: 'net:stdio',
|
|
83
|
+
|
|
84
|
+
// Events
|
|
85
|
+
EVENT_LISTENER: 'event:listener',
|
|
86
|
+
EVENT_EMIT: 'event:emit',
|
|
87
|
+
|
|
88
|
+
// Guarantees (contract-based)
|
|
89
|
+
GUARANTEE_QUEUE: 'guarantee:queue',
|
|
90
|
+
GUARANTEE_API: 'guarantee:api',
|
|
91
|
+
GUARANTEE_PERMISSION: 'guarantee:permission',
|
|
92
|
+
} as const;
|
|
93
|
+
|
|
94
|
+
export type NamespacedNodeType = typeof NAMESPACED_TYPE[keyof typeof NAMESPACED_TYPE];
|
|
95
|
+
|
|
96
|
+
// Combined node type
|
|
97
|
+
export type NodeType = BaseNodeType | NamespacedNodeType | string;
|
|
98
|
+
|
|
99
|
+
// === HELPERS ===
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Check if type is namespaced (contains :)
|
|
103
|
+
*/
|
|
104
|
+
export function isNamespacedType(nodeType: string): boolean {
|
|
105
|
+
return nodeType !== undefined && nodeType !== null && nodeType.includes(':');
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Get namespace from type
|
|
110
|
+
* @returns namespace or null for base types
|
|
111
|
+
*/
|
|
112
|
+
export function getNamespace(nodeType: string): string | null {
|
|
113
|
+
if (!nodeType || !nodeType.includes(':')) return null;
|
|
114
|
+
return nodeType.split(':')[0];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Get base name from namespaced type
|
|
119
|
+
*/
|
|
120
|
+
export function getBaseName(nodeType: string): string {
|
|
121
|
+
if (!nodeType) return '';
|
|
122
|
+
if (!nodeType.includes(':')) return nodeType;
|
|
123
|
+
return nodeType.split(':').slice(1).join(':');
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Check if type is an endpoint (HTTP route, WebSocket handler, etc.)
|
|
128
|
+
*/
|
|
129
|
+
export function isEndpointType(nodeType: string): boolean {
|
|
130
|
+
if (!nodeType) return false;
|
|
131
|
+
const ns = getNamespace(nodeType);
|
|
132
|
+
return ns === 'http' || ns === 'express' || ns === 'socketio';
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Check if type is a side effect (DB, FS, Network)
|
|
137
|
+
*/
|
|
138
|
+
export function isSideEffectType(nodeType: string): boolean {
|
|
139
|
+
if (!nodeType) return false;
|
|
140
|
+
if (nodeType === NODE_TYPE.SIDE_EFFECT) return true;
|
|
141
|
+
const ns = getNamespace(nodeType);
|
|
142
|
+
return ns === 'db' || ns === 'fs' || ns === 'net';
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Check if type matches a pattern with wildcard
|
|
147
|
+
* @param nodeType - node type
|
|
148
|
+
* @param pattern - pattern (e.g., "http:*", "FUNCTION")
|
|
149
|
+
*/
|
|
150
|
+
export function matchesTypePattern(nodeType: string, pattern: string): boolean {
|
|
151
|
+
if (!nodeType || !pattern) return false;
|
|
152
|
+
|
|
153
|
+
// Exact match
|
|
154
|
+
if (nodeType === pattern) return true;
|
|
155
|
+
|
|
156
|
+
// Wildcard match (e.g., "http:*" matches "http:route")
|
|
157
|
+
if (pattern.endsWith(':*')) {
|
|
158
|
+
const patternNs = pattern.slice(0, -2);
|
|
159
|
+
return getNamespace(nodeType) === patternNs;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Check if type is a guarantee type (guarantee:queue, guarantee:api, etc.)
|
|
167
|
+
*/
|
|
168
|
+
export function isGuaranteeType(nodeType: string): boolean {
|
|
169
|
+
if (!nodeType) return false;
|
|
170
|
+
return getNamespace(nodeType) === 'guarantee';
|
|
171
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ParameterNode - contract for PARAMETER node
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
6
|
+
|
|
7
|
+
interface ParameterNodeRecord extends BaseNodeRecord {
|
|
8
|
+
type: 'PARAMETER';
|
|
9
|
+
column: number;
|
|
10
|
+
functionId: string;
|
|
11
|
+
index: number;
|
|
12
|
+
defaultValue?: unknown;
|
|
13
|
+
rest: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface ParameterNodeOptions {
|
|
17
|
+
index?: number;
|
|
18
|
+
defaultValue?: unknown;
|
|
19
|
+
rest?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class ParameterNode {
|
|
23
|
+
static readonly TYPE = 'PARAMETER' as const;
|
|
24
|
+
|
|
25
|
+
static readonly REQUIRED = ['name', 'file', 'line', 'functionId'] as const;
|
|
26
|
+
static readonly OPTIONAL = ['column', 'index', 'defaultValue', 'rest'] as const;
|
|
27
|
+
|
|
28
|
+
static create(
|
|
29
|
+
name: string,
|
|
30
|
+
file: string,
|
|
31
|
+
line: number,
|
|
32
|
+
column: number,
|
|
33
|
+
functionId: string,
|
|
34
|
+
options: ParameterNodeOptions = {}
|
|
35
|
+
): ParameterNodeRecord {
|
|
36
|
+
if (!name) throw new Error('ParameterNode.create: name is required');
|
|
37
|
+
if (!file) throw new Error('ParameterNode.create: file is required');
|
|
38
|
+
if (!line) throw new Error('ParameterNode.create: line is required');
|
|
39
|
+
if (!functionId) throw new Error('ParameterNode.create: functionId is required');
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
id: `${file}:PARAMETER:${name}:${line}:${options.index || 0}`,
|
|
43
|
+
type: this.TYPE,
|
|
44
|
+
name,
|
|
45
|
+
file,
|
|
46
|
+
line,
|
|
47
|
+
column: column || 0,
|
|
48
|
+
functionId,
|
|
49
|
+
index: options.index || 0,
|
|
50
|
+
defaultValue: options.defaultValue,
|
|
51
|
+
rest: options.rest || false
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static validate(node: ParameterNodeRecord): string[] {
|
|
56
|
+
const errors: string[] = [];
|
|
57
|
+
|
|
58
|
+
if (node.type !== this.TYPE) {
|
|
59
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const nodeRecord = node as unknown as Record<string, unknown>;
|
|
63
|
+
for (const field of this.REQUIRED) {
|
|
64
|
+
if (!nodeRecord[field]) {
|
|
65
|
+
errors.push(`Missing required field: ${field}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return errors;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export type { ParameterNodeRecord };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ScopeNode - contract for SCOPE node
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
6
|
+
|
|
7
|
+
interface ScopeNodeRecord extends BaseNodeRecord {
|
|
8
|
+
type: 'SCOPE';
|
|
9
|
+
scopeType: string;
|
|
10
|
+
conditional: boolean;
|
|
11
|
+
parentScopeId?: string;
|
|
12
|
+
parentFunctionId?: string;
|
|
13
|
+
capturesFrom?: string[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface ScopeNodeOptions {
|
|
17
|
+
name?: string;
|
|
18
|
+
conditional?: boolean;
|
|
19
|
+
parentScopeId?: string;
|
|
20
|
+
parentFunctionId?: string;
|
|
21
|
+
capturesFrom?: string[];
|
|
22
|
+
counter?: number;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class ScopeNode {
|
|
26
|
+
static readonly TYPE = 'SCOPE' as const;
|
|
27
|
+
|
|
28
|
+
static readonly REQUIRED = ['scopeType', 'file', 'line'] as const;
|
|
29
|
+
static readonly OPTIONAL = ['name', 'conditional', 'parentScopeId', 'parentFunctionId', 'capturesFrom'] as const;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Create SCOPE node
|
|
33
|
+
*/
|
|
34
|
+
static create(
|
|
35
|
+
scopeType: string,
|
|
36
|
+
file: string,
|
|
37
|
+
line: number,
|
|
38
|
+
options: ScopeNodeOptions = {}
|
|
39
|
+
): ScopeNodeRecord {
|
|
40
|
+
if (!scopeType) throw new Error('ScopeNode.create: scopeType is required');
|
|
41
|
+
if (!file) throw new Error('ScopeNode.create: file is required');
|
|
42
|
+
if (line === undefined) throw new Error('ScopeNode.create: line is required');
|
|
43
|
+
|
|
44
|
+
const name = options.name || scopeType;
|
|
45
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
46
|
+
const id = `${file}:SCOPE:${name}:${line}${counter}`;
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
id,
|
|
50
|
+
type: this.TYPE,
|
|
51
|
+
scopeType,
|
|
52
|
+
name,
|
|
53
|
+
file,
|
|
54
|
+
line,
|
|
55
|
+
conditional: options.conditional || false,
|
|
56
|
+
parentScopeId: options.parentScopeId,
|
|
57
|
+
parentFunctionId: options.parentFunctionId,
|
|
58
|
+
capturesFrom: options.capturesFrom
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static validate(node: ScopeNodeRecord): string[] {
|
|
63
|
+
const errors: string[] = [];
|
|
64
|
+
|
|
65
|
+
if (node.type !== this.TYPE) {
|
|
66
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const nodeRecord = node as unknown as Record<string, unknown>;
|
|
70
|
+
for (const field of this.REQUIRED) {
|
|
71
|
+
if (nodeRecord[field] === undefined || nodeRecord[field] === null) {
|
|
72
|
+
errors.push(`Missing required field: ${field}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return errors;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export type { ScopeNodeRecord };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServiceNode - contract for SERVICE node
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
6
|
+
|
|
7
|
+
interface ServiceNodeRecord extends BaseNodeRecord {
|
|
8
|
+
type: 'SERVICE';
|
|
9
|
+
kind: 'SERVICE';
|
|
10
|
+
filePath: string;
|
|
11
|
+
version: string;
|
|
12
|
+
entrypoint: string;
|
|
13
|
+
discoveryMethod: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
dependencies: string[];
|
|
16
|
+
serviceType?: string;
|
|
17
|
+
testFiles?: string[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface ServiceNodeOptions {
|
|
21
|
+
version?: string;
|
|
22
|
+
entrypoint?: string;
|
|
23
|
+
discoveryMethod?: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
dependencies?: string[];
|
|
26
|
+
serviceType?: string;
|
|
27
|
+
testFiles?: string[];
|
|
28
|
+
metadata?: {
|
|
29
|
+
type?: string;
|
|
30
|
+
testFiles?: string[];
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class ServiceNode {
|
|
35
|
+
static readonly TYPE = 'SERVICE' as const;
|
|
36
|
+
|
|
37
|
+
static readonly REQUIRED = ['name', 'file'] as const;
|
|
38
|
+
static readonly OPTIONAL = ['version', 'entrypoint', 'discoveryMethod', 'description', 'dependencies', 'metadata', 'testFiles', 'serviceType'] as const;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Create SERVICE node
|
|
42
|
+
*/
|
|
43
|
+
static create(name: string, projectPath: string, options: ServiceNodeOptions = {}): ServiceNodeRecord {
|
|
44
|
+
if (!name) throw new Error('ServiceNode.create: name is required');
|
|
45
|
+
if (!projectPath) throw new Error('ServiceNode.create: projectPath is required');
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
id: `SERVICE:${name}`,
|
|
49
|
+
type: this.TYPE,
|
|
50
|
+
kind: this.TYPE,
|
|
51
|
+
name,
|
|
52
|
+
file: projectPath,
|
|
53
|
+
line: 0,
|
|
54
|
+
filePath: projectPath,
|
|
55
|
+
version: options.version || '0.0.0',
|
|
56
|
+
entrypoint: options.entrypoint || 'index.js',
|
|
57
|
+
discoveryMethod: options.discoveryMethod || 'unknown',
|
|
58
|
+
description: options.description,
|
|
59
|
+
dependencies: options.dependencies || [],
|
|
60
|
+
serviceType: options.metadata?.type || options.serviceType,
|
|
61
|
+
testFiles: options.metadata?.testFiles || options.testFiles
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Validate SERVICE node
|
|
67
|
+
*/
|
|
68
|
+
static validate(node: ServiceNodeRecord): string[] {
|
|
69
|
+
const errors: string[] = [];
|
|
70
|
+
|
|
71
|
+
if (node.type !== this.TYPE) {
|
|
72
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const nodeRecord = node as unknown as Record<string, unknown>;
|
|
76
|
+
for (const field of this.REQUIRED) {
|
|
77
|
+
if (!nodeRecord[field]) {
|
|
78
|
+
errors.push(`Missing required field: ${field}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return errors;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export type { ServiceNodeRecord };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VariableDeclarationNode - contract for VARIABLE_DECLARATION node
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
6
|
+
|
|
7
|
+
interface VariableDeclarationNodeRecord extends BaseNodeRecord {
|
|
8
|
+
type: 'VARIABLE_DECLARATION';
|
|
9
|
+
column: number;
|
|
10
|
+
parentScopeId?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface VariableDeclarationNodeOptions {
|
|
14
|
+
parentScopeId?: string;
|
|
15
|
+
counter?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class VariableDeclarationNode {
|
|
19
|
+
static readonly TYPE = 'VARIABLE_DECLARATION' as const;
|
|
20
|
+
|
|
21
|
+
static readonly REQUIRED = ['name', 'file', 'line'] as const;
|
|
22
|
+
static readonly OPTIONAL = ['column', 'parentScopeId'] as const;
|
|
23
|
+
|
|
24
|
+
static create(
|
|
25
|
+
name: string,
|
|
26
|
+
file: string,
|
|
27
|
+
line: number,
|
|
28
|
+
column: number,
|
|
29
|
+
options: VariableDeclarationNodeOptions = {}
|
|
30
|
+
): VariableDeclarationNodeRecord {
|
|
31
|
+
if (!name) throw new Error('VariableDeclarationNode.create: name is required');
|
|
32
|
+
if (!file) throw new Error('VariableDeclarationNode.create: file is required');
|
|
33
|
+
if (line === undefined) throw new Error('VariableDeclarationNode.create: line is required');
|
|
34
|
+
|
|
35
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
36
|
+
const id = `${file}:VARIABLE_DECLARATION:${name}:${line}:${column || 0}${counter}`;
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
id,
|
|
40
|
+
type: this.TYPE,
|
|
41
|
+
name,
|
|
42
|
+
file,
|
|
43
|
+
line,
|
|
44
|
+
column: column || 0,
|
|
45
|
+
parentScopeId: options.parentScopeId
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
static validate(node: VariableDeclarationNodeRecord): string[] {
|
|
50
|
+
const errors: string[] = [];
|
|
51
|
+
if (node.type !== this.TYPE) errors.push(`Expected type ${this.TYPE}`);
|
|
52
|
+
const nodeRecord = node as unknown as Record<string, unknown>;
|
|
53
|
+
for (const field of this.REQUIRED) {
|
|
54
|
+
if (nodeRecord[field] === undefined) errors.push(`Missing: ${field}`);
|
|
55
|
+
}
|
|
56
|
+
return errors;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export type { VariableDeclarationNodeRecord };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node Types - export all node types and their contracts
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// Core nodes
|
|
6
|
+
export { ServiceNode, type ServiceNodeRecord } from './ServiceNode.js';
|
|
7
|
+
export { EntrypointNode, type EntrypointNodeRecord, type EntrypointType, type EntrypointTrigger, type EntrypointSource, ENTRYPOINT_TYPES, ENTRYPOINT_TRIGGERS, ENTRYPOINT_SOURCES } from './EntrypointNode.js';
|
|
8
|
+
export { ModuleNode, type ModuleNodeRecord } from './ModuleNode.js';
|
|
9
|
+
export { FunctionNode } from './FunctionNode.js';
|
|
10
|
+
export { ClassNode, type ClassNodeRecord } from './ClassNode.js';
|
|
11
|
+
export { MethodNode, type MethodNodeRecord, type MethodKind } from './MethodNode.js';
|
|
12
|
+
export { ParameterNode, type ParameterNodeRecord } from './ParameterNode.js';
|
|
13
|
+
export { ScopeNode, type ScopeNodeRecord } from './ScopeNode.js';
|
|
14
|
+
|
|
15
|
+
// Call/reference nodes
|
|
16
|
+
export { CallSiteNode, type CallSiteNodeRecord } from './CallSiteNode.js';
|
|
17
|
+
export { MethodCallNode, type MethodCallNodeRecord } from './MethodCallNode.js';
|
|
18
|
+
export { VariableDeclarationNode, type VariableDeclarationNodeRecord } from './VariableDeclarationNode.js';
|
|
19
|
+
export { ConstantNode, type ConstantNodeRecord } from './ConstantNode.js';
|
|
20
|
+
export { LiteralNode, type LiteralNodeRecord } from './LiteralNode.js';
|
|
21
|
+
|
|
22
|
+
// Import/Export nodes
|
|
23
|
+
export { ImportNode, type ImportNodeRecord, type ImportKind } from './ImportNode.js';
|
|
24
|
+
export { ExportNode, type ExportNodeRecord, type ExportKind } from './ExportNode.js';
|
|
25
|
+
|
|
26
|
+
// External/IO nodes
|
|
27
|
+
export { ExternalStdioNode, type ExternalStdioNodeRecord } from './ExternalStdioNode.js';
|
|
28
|
+
export { EventListenerNode, type EventListenerNodeRecord } from './EventListenerNode.js';
|
|
29
|
+
export { HttpRequestNode, type HttpRequestNodeRecord } from './HttpRequestNode.js';
|
|
30
|
+
export { DatabaseQueryNode, type DatabaseQueryNodeRecord } from './DatabaseQueryNode.js';
|
|
31
|
+
|
|
32
|
+
// Guarantee nodes (contract-based)
|
|
33
|
+
export { GuaranteeNode, type GuaranteeNodeRecord, type GuaranteePriority, type GuaranteeStatus, type GuaranteeType } from './GuaranteeNode.js';
|
|
34
|
+
|
|
35
|
+
// Node type constants and helpers
|
|
36
|
+
export {
|
|
37
|
+
NODE_TYPE,
|
|
38
|
+
NAMESPACED_TYPE,
|
|
39
|
+
isNamespacedType,
|
|
40
|
+
getNamespace,
|
|
41
|
+
getBaseName,
|
|
42
|
+
isEndpointType,
|
|
43
|
+
isSideEffectType,
|
|
44
|
+
matchesTypePattern,
|
|
45
|
+
isGuaranteeType,
|
|
46
|
+
type BaseNodeType,
|
|
47
|
+
type NamespacedNodeType,
|
|
48
|
+
type NodeType,
|
|
49
|
+
} from './NodeKind.js';
|