@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,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MethodCallNode - contract for METHOD_CALL node
|
|
3
|
+
*/
|
|
4
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
5
|
+
interface MethodCallNodeRecord extends BaseNodeRecord {
|
|
6
|
+
type: 'METHOD_CALL';
|
|
7
|
+
object?: string;
|
|
8
|
+
method: string;
|
|
9
|
+
column: number;
|
|
10
|
+
parentScopeId?: string;
|
|
11
|
+
args: unknown[];
|
|
12
|
+
}
|
|
13
|
+
interface MethodCallNodeOptions {
|
|
14
|
+
parentScopeId?: string;
|
|
15
|
+
args?: unknown[];
|
|
16
|
+
counter?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class MethodCallNode {
|
|
19
|
+
static readonly TYPE: "METHOD_CALL";
|
|
20
|
+
static readonly REQUIRED: readonly ["name", "file", "line", "args"];
|
|
21
|
+
static readonly OPTIONAL: readonly ["object", "method", "column", "parentScopeId"];
|
|
22
|
+
/**
|
|
23
|
+
* Create METHOD_CALL node
|
|
24
|
+
*/
|
|
25
|
+
static create(objectName: string | undefined, methodName: string, file: string, line: number, column: number, options?: MethodCallNodeOptions): MethodCallNodeRecord;
|
|
26
|
+
static validate(node: MethodCallNodeRecord): string[];
|
|
27
|
+
}
|
|
28
|
+
export type { MethodCallNodeRecord };
|
|
29
|
+
//# sourceMappingURL=MethodCallNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MethodCallNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/MethodCallNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,oBAAqB,SAAQ,cAAc;IACnD,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB;AAED,UAAU,qBAAqB;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,aAAa,CAAU;IAE9C,MAAM,CAAC,QAAQ,CAAC,QAAQ,4CAA6C;IACrE,MAAM,CAAC,QAAQ,CAAC,QAAQ,2DAA4D;IAEpF;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,oBAAoB;IAuBvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,EAAE;CAgBtD;AAED,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MethodCallNode - contract for METHOD_CALL node
|
|
3
|
+
*/
|
|
4
|
+
export class MethodCallNode {
|
|
5
|
+
static TYPE = 'METHOD_CALL';
|
|
6
|
+
static REQUIRED = ['name', 'file', 'line', 'args'];
|
|
7
|
+
static OPTIONAL = ['object', 'method', 'column', 'parentScopeId'];
|
|
8
|
+
/**
|
|
9
|
+
* Create METHOD_CALL node
|
|
10
|
+
*/
|
|
11
|
+
static create(objectName, methodName, file, line, column, options = {}) {
|
|
12
|
+
if (!methodName)
|
|
13
|
+
throw new Error('MethodCallNode.create: methodName is required');
|
|
14
|
+
if (!file)
|
|
15
|
+
throw new Error('MethodCallNode.create: file is required');
|
|
16
|
+
if (line === undefined)
|
|
17
|
+
throw new Error('MethodCallNode.create: line is required');
|
|
18
|
+
const fullName = objectName ? `${objectName}.${methodName}` : methodName;
|
|
19
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
20
|
+
const id = `${file}:METHOD_CALL:${fullName}:${line}:${column || 0}${counter}`;
|
|
21
|
+
return {
|
|
22
|
+
id,
|
|
23
|
+
type: this.TYPE,
|
|
24
|
+
name: fullName,
|
|
25
|
+
object: objectName,
|
|
26
|
+
method: methodName,
|
|
27
|
+
file,
|
|
28
|
+
line,
|
|
29
|
+
column: column || 0,
|
|
30
|
+
parentScopeId: options.parentScopeId,
|
|
31
|
+
args: options.args || []
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
static validate(node) {
|
|
35
|
+
const errors = [];
|
|
36
|
+
if (node.type !== this.TYPE) {
|
|
37
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
38
|
+
}
|
|
39
|
+
const nodeRecord = node;
|
|
40
|
+
for (const field of this.REQUIRED) {
|
|
41
|
+
if (nodeRecord[field] === undefined || nodeRecord[field] === null) {
|
|
42
|
+
errors.push(`Missing required field: ${field}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return errors;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MethodNode - contract for METHOD node (class method)
|
|
3
|
+
*/
|
|
4
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
5
|
+
type MethodKind = 'method' | 'get' | 'set' | 'constructor';
|
|
6
|
+
interface MethodNodeRecord extends BaseNodeRecord {
|
|
7
|
+
type: 'METHOD';
|
|
8
|
+
column: number;
|
|
9
|
+
className: string;
|
|
10
|
+
async: boolean;
|
|
11
|
+
generator: boolean;
|
|
12
|
+
static: boolean;
|
|
13
|
+
kind: MethodKind;
|
|
14
|
+
}
|
|
15
|
+
interface MethodNodeOptions {
|
|
16
|
+
async?: boolean;
|
|
17
|
+
generator?: boolean;
|
|
18
|
+
static?: boolean;
|
|
19
|
+
kind?: MethodKind;
|
|
20
|
+
}
|
|
21
|
+
export declare class MethodNode {
|
|
22
|
+
static readonly TYPE: "METHOD";
|
|
23
|
+
static readonly REQUIRED: readonly ["name", "file", "line", "className"];
|
|
24
|
+
static readonly OPTIONAL: readonly ["column", "async", "generator", "static", "kind"];
|
|
25
|
+
static create(name: string, file: string, line: number, column: number, className: string, options?: MethodNodeOptions): MethodNodeRecord;
|
|
26
|
+
static validate(node: MethodNodeRecord): string[];
|
|
27
|
+
}
|
|
28
|
+
export type { MethodNodeRecord, MethodKind };
|
|
29
|
+
//# sourceMappingURL=MethodNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MethodNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/MethodNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,KAAK,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,aAAa,CAAC;AAE3D,UAAU,gBAAiB,SAAQ,cAAc;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAEzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,iDAAkD;IAC1E,MAAM,CAAC,QAAQ,CAAC,QAAQ,8DAA+D;IAEvF,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB;IAqBnB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE;CAgBlD;AAED,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MethodNode - contract for METHOD node (class method)
|
|
3
|
+
*/
|
|
4
|
+
export class MethodNode {
|
|
5
|
+
static TYPE = 'METHOD';
|
|
6
|
+
static REQUIRED = ['name', 'file', 'line', 'className'];
|
|
7
|
+
static OPTIONAL = ['column', 'async', 'generator', 'static', 'kind'];
|
|
8
|
+
static create(name, file, line, column, className, options = {}) {
|
|
9
|
+
if (!name)
|
|
10
|
+
throw new Error('MethodNode.create: name is required');
|
|
11
|
+
if (!file)
|
|
12
|
+
throw new Error('MethodNode.create: file is required');
|
|
13
|
+
if (!line)
|
|
14
|
+
throw new Error('MethodNode.create: line is required');
|
|
15
|
+
if (!className)
|
|
16
|
+
throw new Error('MethodNode.create: className is required');
|
|
17
|
+
return {
|
|
18
|
+
id: `${file}:METHOD:${className}.${name}:${line}`,
|
|
19
|
+
type: this.TYPE,
|
|
20
|
+
name,
|
|
21
|
+
file,
|
|
22
|
+
line,
|
|
23
|
+
column: column || 0,
|
|
24
|
+
className,
|
|
25
|
+
async: options.async || false,
|
|
26
|
+
generator: options.generator || false,
|
|
27
|
+
static: options.static || false,
|
|
28
|
+
kind: options.kind || 'method'
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
static validate(node) {
|
|
32
|
+
const errors = [];
|
|
33
|
+
if (node.type !== this.TYPE) {
|
|
34
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
35
|
+
}
|
|
36
|
+
const nodeRecord = node;
|
|
37
|
+
for (const field of this.REQUIRED) {
|
|
38
|
+
if (!nodeRecord[field]) {
|
|
39
|
+
errors.push(`Missing required field: ${field}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return errors;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModuleNode - contract for MODULE node
|
|
3
|
+
*/
|
|
4
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
5
|
+
interface ModuleNodeRecord extends BaseNodeRecord {
|
|
6
|
+
type: 'MODULE';
|
|
7
|
+
contentHash: string;
|
|
8
|
+
isTest: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface ModuleNodeOptions {
|
|
11
|
+
isTest?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class ModuleNode {
|
|
14
|
+
static readonly TYPE: "MODULE";
|
|
15
|
+
static readonly REQUIRED: readonly ["name", "file", "contentHash"];
|
|
16
|
+
static readonly OPTIONAL: readonly ["isTest"];
|
|
17
|
+
/**
|
|
18
|
+
* Create MODULE node
|
|
19
|
+
* @param filePath - Full file path
|
|
20
|
+
* @param relativePath - Relative path (module name)
|
|
21
|
+
* @param contentHash - Content hash
|
|
22
|
+
* @param options - Additional options (isTest, etc.)
|
|
23
|
+
*/
|
|
24
|
+
static create(filePath: string, relativePath: string, contentHash: string, options?: ModuleNodeOptions): ModuleNodeRecord;
|
|
25
|
+
static _hashPath(path: string): string;
|
|
26
|
+
static validate(node: ModuleNodeRecord): string[];
|
|
27
|
+
}
|
|
28
|
+
export type { ModuleNodeRecord };
|
|
29
|
+
//# sourceMappingURL=ModuleNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModuleNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ModuleNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,gBAAiB,SAAQ,cAAc;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAEzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,2CAA4C;IACpE,MAAM,CAAC,QAAQ,CAAC,QAAQ,sBAAuB;IAE/C;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CACX,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB;IAgBnB,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAItC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE;CAgBlD;AAED,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModuleNode - contract for MODULE node
|
|
3
|
+
*/
|
|
4
|
+
import { createHash } from 'crypto';
|
|
5
|
+
export class ModuleNode {
|
|
6
|
+
static TYPE = 'MODULE';
|
|
7
|
+
static REQUIRED = ['name', 'file', 'contentHash'];
|
|
8
|
+
static OPTIONAL = ['isTest'];
|
|
9
|
+
/**
|
|
10
|
+
* Create MODULE node
|
|
11
|
+
* @param filePath - Full file path
|
|
12
|
+
* @param relativePath - Relative path (module name)
|
|
13
|
+
* @param contentHash - Content hash
|
|
14
|
+
* @param options - Additional options (isTest, etc.)
|
|
15
|
+
*/
|
|
16
|
+
static create(filePath, relativePath, contentHash, options = {}) {
|
|
17
|
+
if (!filePath)
|
|
18
|
+
throw new Error('ModuleNode.create: filePath is required');
|
|
19
|
+
if (!relativePath)
|
|
20
|
+
throw new Error('ModuleNode.create: relativePath is required');
|
|
21
|
+
if (!contentHash)
|
|
22
|
+
throw new Error('ModuleNode.create: contentHash is required');
|
|
23
|
+
return {
|
|
24
|
+
id: `MODULE:${contentHash}`,
|
|
25
|
+
type: this.TYPE,
|
|
26
|
+
name: relativePath,
|
|
27
|
+
file: filePath,
|
|
28
|
+
line: 0,
|
|
29
|
+
contentHash,
|
|
30
|
+
isTest: options.isTest || false
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
static _hashPath(path) {
|
|
34
|
+
return createHash('md5').update(path).digest('hex').substring(0, 12);
|
|
35
|
+
}
|
|
36
|
+
static validate(node) {
|
|
37
|
+
const errors = [];
|
|
38
|
+
if (node.type !== this.TYPE) {
|
|
39
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
40
|
+
}
|
|
41
|
+
const nodeRecord = node;
|
|
42
|
+
for (const field of this.REQUIRED) {
|
|
43
|
+
if (!nodeRecord[field]) {
|
|
44
|
+
errors.push(`Missing required field: ${field}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return errors;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
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
|
+
export declare const NODE_TYPE: {
|
|
15
|
+
readonly FUNCTION: "FUNCTION";
|
|
16
|
+
readonly CLASS: "CLASS";
|
|
17
|
+
readonly METHOD: "METHOD";
|
|
18
|
+
readonly VARIABLE: "VARIABLE";
|
|
19
|
+
readonly PARAMETER: "PARAMETER";
|
|
20
|
+
readonly CONSTANT: "CONSTANT";
|
|
21
|
+
readonly LITERAL: "LITERAL";
|
|
22
|
+
readonly EXPRESSION: "EXPRESSION";
|
|
23
|
+
readonly MODULE: "MODULE";
|
|
24
|
+
readonly IMPORT: "IMPORT";
|
|
25
|
+
readonly EXPORT: "EXPORT";
|
|
26
|
+
readonly CALL: "CALL";
|
|
27
|
+
readonly PROJECT: "PROJECT";
|
|
28
|
+
readonly SERVICE: "SERVICE";
|
|
29
|
+
readonly FILE: "FILE";
|
|
30
|
+
readonly SCOPE: "SCOPE";
|
|
31
|
+
readonly EXTERNAL: "EXTERNAL";
|
|
32
|
+
readonly EXTERNAL_MODULE: "EXTERNAL_MODULE";
|
|
33
|
+
readonly SIDE_EFFECT: "SIDE_EFFECT";
|
|
34
|
+
};
|
|
35
|
+
export type BaseNodeType = typeof NODE_TYPE[keyof typeof NODE_TYPE];
|
|
36
|
+
export declare const NAMESPACED_TYPE: {
|
|
37
|
+
readonly HTTP_ROUTE: "http:route";
|
|
38
|
+
readonly HTTP_REQUEST: "http:request";
|
|
39
|
+
readonly EXPRESS_ROUTER: "express:router";
|
|
40
|
+
readonly EXPRESS_MIDDLEWARE: "express:middleware";
|
|
41
|
+
readonly EXPRESS_MOUNT: "express:mount";
|
|
42
|
+
readonly SOCKETIO_EMIT: "socketio:emit";
|
|
43
|
+
readonly SOCKETIO_ON: "socketio:on";
|
|
44
|
+
readonly SOCKETIO_NAMESPACE: "socketio:namespace";
|
|
45
|
+
readonly DB_QUERY: "db:query";
|
|
46
|
+
readonly DB_CONNECTION: "db:connection";
|
|
47
|
+
readonly FS_READ: "fs:read";
|
|
48
|
+
readonly FS_WRITE: "fs:write";
|
|
49
|
+
readonly FS_OPERATION: "fs:operation";
|
|
50
|
+
readonly NET_REQUEST: "net:request";
|
|
51
|
+
readonly NET_STDIO: "net:stdio";
|
|
52
|
+
readonly EVENT_LISTENER: "event:listener";
|
|
53
|
+
readonly EVENT_EMIT: "event:emit";
|
|
54
|
+
readonly GUARANTEE_QUEUE: "guarantee:queue";
|
|
55
|
+
readonly GUARANTEE_API: "guarantee:api";
|
|
56
|
+
readonly GUARANTEE_PERMISSION: "guarantee:permission";
|
|
57
|
+
};
|
|
58
|
+
export type NamespacedNodeType = typeof NAMESPACED_TYPE[keyof typeof NAMESPACED_TYPE];
|
|
59
|
+
export type NodeType = BaseNodeType | NamespacedNodeType | string;
|
|
60
|
+
/**
|
|
61
|
+
* Check if type is namespaced (contains :)
|
|
62
|
+
*/
|
|
63
|
+
export declare function isNamespacedType(nodeType: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Get namespace from type
|
|
66
|
+
* @returns namespace or null for base types
|
|
67
|
+
*/
|
|
68
|
+
export declare function getNamespace(nodeType: string): string | null;
|
|
69
|
+
/**
|
|
70
|
+
* Get base name from namespaced type
|
|
71
|
+
*/
|
|
72
|
+
export declare function getBaseName(nodeType: string): string;
|
|
73
|
+
/**
|
|
74
|
+
* Check if type is an endpoint (HTTP route, WebSocket handler, etc.)
|
|
75
|
+
*/
|
|
76
|
+
export declare function isEndpointType(nodeType: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Check if type is a side effect (DB, FS, Network)
|
|
79
|
+
*/
|
|
80
|
+
export declare function isSideEffectType(nodeType: string): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Check if type matches a pattern with wildcard
|
|
83
|
+
* @param nodeType - node type
|
|
84
|
+
* @param pattern - pattern (e.g., "http:*", "FUNCTION")
|
|
85
|
+
*/
|
|
86
|
+
export declare function matchesTypePattern(nodeType: string, pattern: string): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Check if type is a guarantee type (guarantee:queue, guarantee:api, etc.)
|
|
89
|
+
*/
|
|
90
|
+
export declare function isGuaranteeType(nodeType: string): boolean;
|
|
91
|
+
//# sourceMappingURL=NodeKind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeKind.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/NodeKind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;CA+BZ,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAKpE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;CAoClB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAGtF,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,kBAAkB,GAAG,MAAM,CAAC;AAIlE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAK1D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAa7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGzD"}
|
|
@@ -0,0 +1,146 @@
|
|
|
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
|
+
// === BASE TYPES ===
|
|
15
|
+
// Abstract types, not tied to language or framework
|
|
16
|
+
export const NODE_TYPE = {
|
|
17
|
+
// Core code entities
|
|
18
|
+
FUNCTION: 'FUNCTION',
|
|
19
|
+
CLASS: 'CLASS',
|
|
20
|
+
METHOD: 'METHOD',
|
|
21
|
+
VARIABLE: 'VARIABLE',
|
|
22
|
+
PARAMETER: 'PARAMETER',
|
|
23
|
+
CONSTANT: 'CONSTANT',
|
|
24
|
+
LITERAL: 'LITERAL',
|
|
25
|
+
EXPRESSION: 'EXPRESSION', // Generic expression node for data flow tracking
|
|
26
|
+
// Module system
|
|
27
|
+
MODULE: 'MODULE',
|
|
28
|
+
IMPORT: 'IMPORT',
|
|
29
|
+
EXPORT: 'EXPORT',
|
|
30
|
+
// Call graph
|
|
31
|
+
CALL: 'CALL', // unified METHOD_CALL + CALL_SITE
|
|
32
|
+
// Project structure
|
|
33
|
+
PROJECT: 'PROJECT',
|
|
34
|
+
SERVICE: 'SERVICE',
|
|
35
|
+
FILE: 'FILE',
|
|
36
|
+
SCOPE: 'SCOPE',
|
|
37
|
+
// External dependencies
|
|
38
|
+
EXTERNAL: 'EXTERNAL',
|
|
39
|
+
EXTERNAL_MODULE: 'EXTERNAL_MODULE',
|
|
40
|
+
// Generic side effects
|
|
41
|
+
SIDE_EFFECT: 'SIDE_EFFECT',
|
|
42
|
+
};
|
|
43
|
+
// === NAMESPACED TYPES ===
|
|
44
|
+
// Types specific to frameworks and libraries
|
|
45
|
+
export const NAMESPACED_TYPE = {
|
|
46
|
+
// HTTP (generic)
|
|
47
|
+
HTTP_ROUTE: 'http:route',
|
|
48
|
+
HTTP_REQUEST: 'http:request',
|
|
49
|
+
// Express.js
|
|
50
|
+
EXPRESS_ROUTER: 'express:router',
|
|
51
|
+
EXPRESS_MIDDLEWARE: 'express:middleware',
|
|
52
|
+
EXPRESS_MOUNT: 'express:mount',
|
|
53
|
+
// Socket.IO
|
|
54
|
+
SOCKETIO_EMIT: 'socketio:emit',
|
|
55
|
+
SOCKETIO_ON: 'socketio:on',
|
|
56
|
+
SOCKETIO_NAMESPACE: 'socketio:namespace',
|
|
57
|
+
// Database
|
|
58
|
+
DB_QUERY: 'db:query',
|
|
59
|
+
DB_CONNECTION: 'db:connection',
|
|
60
|
+
// Filesystem
|
|
61
|
+
FS_READ: 'fs:read',
|
|
62
|
+
FS_WRITE: 'fs:write',
|
|
63
|
+
FS_OPERATION: 'fs:operation',
|
|
64
|
+
// Network
|
|
65
|
+
NET_REQUEST: 'net:request',
|
|
66
|
+
NET_STDIO: 'net:stdio',
|
|
67
|
+
// Events
|
|
68
|
+
EVENT_LISTENER: 'event:listener',
|
|
69
|
+
EVENT_EMIT: 'event:emit',
|
|
70
|
+
// Guarantees (contract-based)
|
|
71
|
+
GUARANTEE_QUEUE: 'guarantee:queue',
|
|
72
|
+
GUARANTEE_API: 'guarantee:api',
|
|
73
|
+
GUARANTEE_PERMISSION: 'guarantee:permission',
|
|
74
|
+
};
|
|
75
|
+
// === HELPERS ===
|
|
76
|
+
/**
|
|
77
|
+
* Check if type is namespaced (contains :)
|
|
78
|
+
*/
|
|
79
|
+
export function isNamespacedType(nodeType) {
|
|
80
|
+
return nodeType !== undefined && nodeType !== null && nodeType.includes(':');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get namespace from type
|
|
84
|
+
* @returns namespace or null for base types
|
|
85
|
+
*/
|
|
86
|
+
export function getNamespace(nodeType) {
|
|
87
|
+
if (!nodeType || !nodeType.includes(':'))
|
|
88
|
+
return null;
|
|
89
|
+
return nodeType.split(':')[0];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get base name from namespaced type
|
|
93
|
+
*/
|
|
94
|
+
export function getBaseName(nodeType) {
|
|
95
|
+
if (!nodeType)
|
|
96
|
+
return '';
|
|
97
|
+
if (!nodeType.includes(':'))
|
|
98
|
+
return nodeType;
|
|
99
|
+
return nodeType.split(':').slice(1).join(':');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if type is an endpoint (HTTP route, WebSocket handler, etc.)
|
|
103
|
+
*/
|
|
104
|
+
export function isEndpointType(nodeType) {
|
|
105
|
+
if (!nodeType)
|
|
106
|
+
return false;
|
|
107
|
+
const ns = getNamespace(nodeType);
|
|
108
|
+
return ns === 'http' || ns === 'express' || ns === 'socketio';
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if type is a side effect (DB, FS, Network)
|
|
112
|
+
*/
|
|
113
|
+
export function isSideEffectType(nodeType) {
|
|
114
|
+
if (!nodeType)
|
|
115
|
+
return false;
|
|
116
|
+
if (nodeType === NODE_TYPE.SIDE_EFFECT)
|
|
117
|
+
return true;
|
|
118
|
+
const ns = getNamespace(nodeType);
|
|
119
|
+
return ns === 'db' || ns === 'fs' || ns === 'net';
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Check if type matches a pattern with wildcard
|
|
123
|
+
* @param nodeType - node type
|
|
124
|
+
* @param pattern - pattern (e.g., "http:*", "FUNCTION")
|
|
125
|
+
*/
|
|
126
|
+
export function matchesTypePattern(nodeType, pattern) {
|
|
127
|
+
if (!nodeType || !pattern)
|
|
128
|
+
return false;
|
|
129
|
+
// Exact match
|
|
130
|
+
if (nodeType === pattern)
|
|
131
|
+
return true;
|
|
132
|
+
// Wildcard match (e.g., "http:*" matches "http:route")
|
|
133
|
+
if (pattern.endsWith(':*')) {
|
|
134
|
+
const patternNs = pattern.slice(0, -2);
|
|
135
|
+
return getNamespace(nodeType) === patternNs;
|
|
136
|
+
}
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Check if type is a guarantee type (guarantee:queue, guarantee:api, etc.)
|
|
141
|
+
*/
|
|
142
|
+
export function isGuaranteeType(nodeType) {
|
|
143
|
+
if (!nodeType)
|
|
144
|
+
return false;
|
|
145
|
+
return getNamespace(nodeType) === 'guarantee';
|
|
146
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ParameterNode - contract for PARAMETER node
|
|
3
|
+
*/
|
|
4
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
5
|
+
interface ParameterNodeRecord extends BaseNodeRecord {
|
|
6
|
+
type: 'PARAMETER';
|
|
7
|
+
column: number;
|
|
8
|
+
functionId: string;
|
|
9
|
+
index: number;
|
|
10
|
+
defaultValue?: unknown;
|
|
11
|
+
rest: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface ParameterNodeOptions {
|
|
14
|
+
index?: number;
|
|
15
|
+
defaultValue?: unknown;
|
|
16
|
+
rest?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class ParameterNode {
|
|
19
|
+
static readonly TYPE: "PARAMETER";
|
|
20
|
+
static readonly REQUIRED: readonly ["name", "file", "line", "functionId"];
|
|
21
|
+
static readonly OPTIONAL: readonly ["column", "index", "defaultValue", "rest"];
|
|
22
|
+
static create(name: string, file: string, line: number, column: number, functionId: string, options?: ParameterNodeOptions): ParameterNodeRecord;
|
|
23
|
+
static validate(node: ParameterNodeRecord): string[];
|
|
24
|
+
}
|
|
25
|
+
export type { ParameterNodeRecord };
|
|
26
|
+
//# sourceMappingURL=ParameterNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParameterNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ParameterNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,mBAAoB,SAAQ,cAAc;IAClD,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IAE5C,MAAM,CAAC,QAAQ,CAAC,QAAQ,kDAAmD;IAC3E,MAAM,CAAC,QAAQ,CAAC,QAAQ,uDAAwD;IAEhF,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,oBAAyB,GACjC,mBAAmB;IAoBtB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE;CAgBrD;AAED,YAAY,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ParameterNode - contract for PARAMETER node
|
|
3
|
+
*/
|
|
4
|
+
export class ParameterNode {
|
|
5
|
+
static TYPE = 'PARAMETER';
|
|
6
|
+
static REQUIRED = ['name', 'file', 'line', 'functionId'];
|
|
7
|
+
static OPTIONAL = ['column', 'index', 'defaultValue', 'rest'];
|
|
8
|
+
static create(name, file, line, column, functionId, options = {}) {
|
|
9
|
+
if (!name)
|
|
10
|
+
throw new Error('ParameterNode.create: name is required');
|
|
11
|
+
if (!file)
|
|
12
|
+
throw new Error('ParameterNode.create: file is required');
|
|
13
|
+
if (!line)
|
|
14
|
+
throw new Error('ParameterNode.create: line is required');
|
|
15
|
+
if (!functionId)
|
|
16
|
+
throw new Error('ParameterNode.create: functionId is required');
|
|
17
|
+
return {
|
|
18
|
+
id: `${file}:PARAMETER:${name}:${line}:${options.index || 0}`,
|
|
19
|
+
type: this.TYPE,
|
|
20
|
+
name,
|
|
21
|
+
file,
|
|
22
|
+
line,
|
|
23
|
+
column: column || 0,
|
|
24
|
+
functionId,
|
|
25
|
+
index: options.index || 0,
|
|
26
|
+
defaultValue: options.defaultValue,
|
|
27
|
+
rest: options.rest || false
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
static validate(node) {
|
|
31
|
+
const errors = [];
|
|
32
|
+
if (node.type !== this.TYPE) {
|
|
33
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
34
|
+
}
|
|
35
|
+
const nodeRecord = node;
|
|
36
|
+
for (const field of this.REQUIRED) {
|
|
37
|
+
if (!nodeRecord[field]) {
|
|
38
|
+
errors.push(`Missing required field: ${field}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return errors;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ScopeNode - contract for SCOPE node
|
|
3
|
+
*/
|
|
4
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
5
|
+
interface ScopeNodeRecord extends BaseNodeRecord {
|
|
6
|
+
type: 'SCOPE';
|
|
7
|
+
scopeType: string;
|
|
8
|
+
conditional: boolean;
|
|
9
|
+
parentScopeId?: string;
|
|
10
|
+
parentFunctionId?: string;
|
|
11
|
+
capturesFrom?: string[];
|
|
12
|
+
}
|
|
13
|
+
interface ScopeNodeOptions {
|
|
14
|
+
name?: string;
|
|
15
|
+
conditional?: boolean;
|
|
16
|
+
parentScopeId?: string;
|
|
17
|
+
parentFunctionId?: string;
|
|
18
|
+
capturesFrom?: string[];
|
|
19
|
+
counter?: number;
|
|
20
|
+
}
|
|
21
|
+
export declare class ScopeNode {
|
|
22
|
+
static readonly TYPE: "SCOPE";
|
|
23
|
+
static readonly REQUIRED: readonly ["scopeType", "file", "line"];
|
|
24
|
+
static readonly OPTIONAL: readonly ["name", "conditional", "parentScopeId", "parentFunctionId", "capturesFrom"];
|
|
25
|
+
/**
|
|
26
|
+
* Create SCOPE node
|
|
27
|
+
*/
|
|
28
|
+
static create(scopeType: string, file: string, line: number, options?: ScopeNodeOptions): ScopeNodeRecord;
|
|
29
|
+
static validate(node: ScopeNodeRecord): string[];
|
|
30
|
+
}
|
|
31
|
+
export type { ScopeNodeRecord };
|
|
32
|
+
//# sourceMappingURL=ScopeNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ScopeNode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,eAAgB,SAAQ,cAAc;IAC9C,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAS;IACpB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAExC,MAAM,CAAC,QAAQ,CAAC,QAAQ,yCAA0C;IAClE,MAAM,CAAC,QAAQ,CAAC,QAAQ,wFAAyF;IAEjH;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,gBAAqB,GAC7B,eAAe;IAuBlB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,EAAE;CAgBjD;AAED,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ScopeNode - contract for SCOPE node
|
|
3
|
+
*/
|
|
4
|
+
export class ScopeNode {
|
|
5
|
+
static TYPE = 'SCOPE';
|
|
6
|
+
static REQUIRED = ['scopeType', 'file', 'line'];
|
|
7
|
+
static OPTIONAL = ['name', 'conditional', 'parentScopeId', 'parentFunctionId', 'capturesFrom'];
|
|
8
|
+
/**
|
|
9
|
+
* Create SCOPE node
|
|
10
|
+
*/
|
|
11
|
+
static create(scopeType, file, line, options = {}) {
|
|
12
|
+
if (!scopeType)
|
|
13
|
+
throw new Error('ScopeNode.create: scopeType is required');
|
|
14
|
+
if (!file)
|
|
15
|
+
throw new Error('ScopeNode.create: file is required');
|
|
16
|
+
if (line === undefined)
|
|
17
|
+
throw new Error('ScopeNode.create: line is required');
|
|
18
|
+
const name = options.name || scopeType;
|
|
19
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
20
|
+
const id = `${file}:SCOPE:${name}:${line}${counter}`;
|
|
21
|
+
return {
|
|
22
|
+
id,
|
|
23
|
+
type: this.TYPE,
|
|
24
|
+
scopeType,
|
|
25
|
+
name,
|
|
26
|
+
file,
|
|
27
|
+
line,
|
|
28
|
+
conditional: options.conditional || false,
|
|
29
|
+
parentScopeId: options.parentScopeId,
|
|
30
|
+
parentFunctionId: options.parentFunctionId,
|
|
31
|
+
capturesFrom: options.capturesFrom
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
static validate(node) {
|
|
35
|
+
const errors = [];
|
|
36
|
+
if (node.type !== this.TYPE) {
|
|
37
|
+
errors.push(`Expected type ${this.TYPE}, got ${node.type}`);
|
|
38
|
+
}
|
|
39
|
+
const nodeRecord = node;
|
|
40
|
+
for (const field of this.REQUIRED) {
|
|
41
|
+
if (nodeRecord[field] === undefined || nodeRecord[field] === null) {
|
|
42
|
+
errors.push(`Missing required field: ${field}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return errors;
|
|
46
|
+
}
|
|
47
|
+
}
|