@grafema/core 0.1.0-alpha.4 → 0.1.1-alpha
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/README.md +0 -1
- package/dist/Orchestrator.d.ts +24 -2
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +197 -24
- package/dist/config/ConfigLoader.d.ts +72 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +187 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +4 -0
- package/dist/core/ASTWorker.d.ts +11 -36
- package/dist/core/ASTWorker.d.ts.map +1 -1
- package/dist/core/ASTWorker.js +93 -99
- package/dist/core/CoverageAnalyzer.d.ts +65 -0
- package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
- package/dist/core/CoverageAnalyzer.js +198 -0
- package/dist/core/FileNodeManager.d.ts +40 -0
- package/dist/core/FileNodeManager.d.ts.map +1 -0
- package/dist/core/FileNodeManager.js +84 -0
- package/dist/core/GraphFreshnessChecker.d.ts +33 -0
- package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
- package/dist/core/GraphFreshnessChecker.js +101 -0
- package/dist/core/HashUtils.d.ts +24 -0
- package/dist/core/HashUtils.d.ts.map +1 -0
- package/dist/core/HashUtils.js +45 -0
- package/dist/core/IncrementalReanalyzer.d.ts +36 -0
- package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
- package/dist/core/IncrementalReanalyzer.js +132 -0
- package/dist/core/NodeFactory.d.ts +225 -17
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +208 -18
- package/dist/core/ScopeTracker.d.ts +84 -0
- package/dist/core/ScopeTracker.d.ts.map +1 -0
- package/dist/core/ScopeTracker.js +116 -0
- package/dist/core/SemanticId.d.ts +90 -0
- package/dist/core/SemanticId.d.ts.map +1 -0
- package/dist/core/SemanticId.js +115 -0
- package/dist/core/VersionManager.d.ts.map +1 -1
- package/dist/core/VersionManager.js +3 -2
- package/dist/core/nodes/ArgumentExpressionNode.d.ts +43 -0
- package/dist/core/nodes/ArgumentExpressionNode.d.ts.map +1 -0
- package/dist/core/nodes/ArgumentExpressionNode.js +60 -0
- package/dist/core/nodes/ArrayLiteralNode.d.ts +27 -0
- package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -0
- package/dist/core/nodes/ArrayLiteralNode.js +41 -0
- package/dist/core/nodes/CallSiteNode.d.ts +28 -0
- package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
- package/dist/core/nodes/CallSiteNode.js +46 -0
- package/dist/core/nodes/ClassNode.d.ts +33 -1
- package/dist/core/nodes/ClassNode.d.ts.map +1 -1
- package/dist/core/nodes/ClassNode.js +46 -2
- package/dist/core/nodes/DecoratorNode.d.ts +42 -0
- package/dist/core/nodes/DecoratorNode.d.ts.map +1 -0
- package/dist/core/nodes/DecoratorNode.js +62 -0
- package/dist/core/nodes/EnumNode.d.ts +42 -0
- package/dist/core/nodes/EnumNode.d.ts.map +1 -0
- package/dist/core/nodes/EnumNode.js +54 -0
- package/dist/core/nodes/ExportNode.d.ts +37 -1
- package/dist/core/nodes/ExportNode.d.ts.map +1 -1
- package/dist/core/nodes/ExportNode.js +48 -2
- package/dist/core/nodes/ExpressionNode.d.ts +97 -0
- package/dist/core/nodes/ExpressionNode.d.ts.map +1 -0
- package/dist/core/nodes/ExpressionNode.js +178 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts +28 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -0
- package/dist/core/nodes/ExternalModuleNode.js +41 -0
- package/dist/core/nodes/ExternalStdioNode.d.ts +13 -6
- package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -1
- package/dist/core/nodes/ExternalStdioNode.js +15 -8
- package/dist/core/nodes/FunctionNode.d.ts +36 -0
- package/dist/core/nodes/FunctionNode.d.ts.map +1 -1
- package/dist/core/nodes/FunctionNode.js +80 -1
- package/dist/core/nodes/ImportNode.d.ts +19 -5
- package/dist/core/nodes/ImportNode.d.ts.map +1 -1
- package/dist/core/nodes/ImportNode.js +23 -5
- package/dist/core/nodes/InterfaceNode.d.ts +46 -0
- package/dist/core/nodes/InterfaceNode.d.ts.map +1 -0
- package/dist/core/nodes/InterfaceNode.js +55 -0
- package/dist/core/nodes/IssueNode.d.ts +73 -0
- package/dist/core/nodes/IssueNode.d.ts.map +1 -0
- package/dist/core/nodes/IssueNode.js +129 -0
- package/dist/core/nodes/MethodCallNode.d.ts +30 -0
- package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodCallNode.js +49 -0
- package/dist/core/nodes/MethodNode.d.ts +32 -0
- package/dist/core/nodes/MethodNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodNode.js +48 -0
- package/dist/core/nodes/ModuleNode.d.ts +31 -0
- package/dist/core/nodes/ModuleNode.d.ts.map +1 -1
- package/dist/core/nodes/ModuleNode.js +37 -0
- package/dist/core/nodes/NetworkRequestNode.d.ts +54 -0
- package/dist/core/nodes/NetworkRequestNode.d.ts.map +1 -0
- package/dist/core/nodes/NetworkRequestNode.js +65 -0
- package/dist/core/nodes/ObjectLiteralNode.d.ts +27 -0
- package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -0
- package/dist/core/nodes/ObjectLiteralNode.js +41 -0
- package/dist/core/nodes/ScopeNode.d.ts +31 -0
- package/dist/core/nodes/ScopeNode.d.ts.map +1 -1
- package/dist/core/nodes/ScopeNode.js +49 -0
- package/dist/core/nodes/TypeNode.d.ts +36 -0
- package/dist/core/nodes/TypeNode.d.ts.map +1 -0
- package/dist/core/nodes/TypeNode.js +53 -0
- package/dist/core/nodes/VariableDeclarationNode.d.ts +27 -0
- package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
- package/dist/core/nodes/VariableDeclarationNode.js +40 -0
- package/dist/core/nodes/index.d.ts +12 -1
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +14 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts +98 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticCollector.js +129 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts +77 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.js +159 -0
- package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
- package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticWriter.js +43 -0
- package/dist/diagnostics/index.d.ts +14 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +11 -0
- package/dist/errors/GrafemaError.d.ts +118 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -0
- package/dist/errors/GrafemaError.js +131 -0
- package/dist/index.d.ts +57 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -1
- package/dist/logging/Logger.d.ts +48 -0
- package/dist/logging/Logger.d.ts.map +1 -0
- package/dist/logging/Logger.js +134 -0
- package/dist/plugins/Plugin.d.ts +5 -1
- package/dist/plugins/Plugin.d.ts.map +1 -1
- package/dist/plugins/Plugin.js +33 -0
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.js +13 -6
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +27 -19
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +21 -14
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +1 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +34 -14
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +6 -3
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -1
- package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +76 -80
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts +180 -17
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +1171 -471
- package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ReactAnalyzer.js +56 -57
- package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/RustAnalyzer.js +15 -10
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +9 -7
- package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ServiceLayerAnalyzer.js +21 -9
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +27 -15
- package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SystemDbAnalyzer.js +15 -5
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts +34 -4
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +318 -298
- package/dist/plugins/analysis/ast/IdGenerator.d.ts +105 -0
- package/dist/plugins/analysis/ast/IdGenerator.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/IdGenerator.js +116 -0
- package/dist/plugins/analysis/ast/types.d.ts +176 -5
- package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts +33 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/createParameterNodes.js +89 -0
- package/dist/plugins/analysis/ast/utils/index.d.ts +6 -0
- package/dist/plugins/analysis/ast/utils/index.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/index.js +5 -0
- package/dist/plugins/analysis/ast/utils/location.d.ts +87 -0
- package/dist/plugins/analysis/ast/utils/location.d.ts.map +1 -0
- package/dist/plugins/analysis/ast/utils/location.js +78 -0
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +9 -4
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +6 -5
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +99 -9
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +663 -125
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +4 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +72 -32
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +4 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +128 -63
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +11 -8
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +12 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +36 -14
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +4 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +17 -13
- package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/MonorepoServiceDiscovery.js +3 -2
- package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/SimpleProjectDiscovery.js +5 -1
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts +22 -0
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -0
- package/dist/plugins/discovery/WorkspaceDiscovery.js +136 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts +46 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.d.ts.map +1 -0
- package/dist/plugins/discovery/resolveSourceEntrypoint.js +86 -0
- package/dist/plugins/discovery/workspaces/detector.d.ts +21 -0
- package/dist/plugins/discovery/workspaces/detector.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/detector.js +49 -0
- package/dist/plugins/discovery/workspaces/globResolver.d.ts +35 -0
- package/dist/plugins/discovery/workspaces/globResolver.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/globResolver.js +184 -0
- package/dist/plugins/discovery/workspaces/index.d.ts +9 -0
- package/dist/plugins/discovery/workspaces/index.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/index.js +8 -0
- package/dist/plugins/discovery/workspaces/parsers.d.ts +38 -0
- package/dist/plugins/discovery/workspaces/parsers.d.ts.map +1 -0
- package/dist/plugins/discovery/workspaces/parsers.js +80 -0
- package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
- package/dist/plugins/enrichment/AliasTracker.js +14 -8
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +14 -7
- package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -1
- package/dist/plugins/enrichment/ImportExportLinker.js +23 -6
- package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MethodCallResolver.js +18 -12
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +8 -3
- package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -1
- package/dist/plugins/enrichment/PrefixEvaluator.js +16 -7
- package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/RustFFIEnricher.js +6 -5
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +17 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +129 -10
- package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/IncrementalModuleIndexer.js +23 -14
- package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +63 -31
- package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +5 -4
- package/dist/plugins/indexing/ServiceDetector.d.ts +10 -0
- package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -1
- package/dist/plugins/indexing/ServiceDetector.js +28 -15
- package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
- package/dist/plugins/validation/CallResolverValidator.js +8 -7
- package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
- package/dist/plugins/validation/DataFlowValidator.js +17 -12
- package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -1
- package/dist/plugins/validation/EvalBanValidator.js +17 -16
- package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js +19 -23
- package/dist/plugins/validation/NodeCreationValidator.d.ts +85 -0
- package/dist/plugins/validation/NodeCreationValidator.d.ts.map +1 -0
- package/dist/plugins/validation/NodeCreationValidator.js +415 -0
- package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
- package/dist/plugins/validation/SQLInjectionValidator.js +59 -16
- package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -1
- package/dist/plugins/validation/ShadowingDetector.js +6 -5
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -1
- package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +12 -11
- package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -1
- package/dist/plugins/vcs/GitPlugin.js +10 -12
- package/dist/plugins/vcs/VCSPlugin.d.ts +3 -2
- package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -1
- package/dist/plugins/vcs/VCSPlugin.js +5 -5
- package/dist/storage/backends/RFDBServerBackend.d.ts +10 -17
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +31 -10
- package/dist/validation/PathValidator.d.ts +1 -2
- package/dist/validation/PathValidator.d.ts.map +1 -1
- package/package.json +6 -3
- package/src/Orchestrator.ts +237 -24
- package/src/config/ConfigLoader.ts +263 -0
- package/src/config/index.ts +5 -0
- package/src/core/ASTWorker.ts +143 -139
- package/src/core/CoverageAnalyzer.ts +243 -0
- package/src/core/FileNodeManager.ts +100 -0
- package/src/core/GraphFreshnessChecker.ts +143 -0
- package/src/core/HashUtils.ts +48 -0
- package/src/core/IncrementalReanalyzer.ts +192 -0
- package/src/core/NodeFactory.ts +401 -18
- package/src/core/ScopeTracker.ts +154 -0
- package/src/core/SemanticId.ts +192 -0
- package/src/core/VersionManager.ts +3 -2
- package/src/core/nodes/ArgumentExpressionNode.ts +89 -0
- package/src/core/nodes/ArrayLiteralNode.ts +65 -0
- package/src/core/nodes/CallSiteNode.ts +58 -0
- package/src/core/nodes/ClassNode.ts +63 -2
- package/src/core/nodes/DecoratorNode.ts +91 -0
- package/src/core/nodes/EnumNode.ts +86 -0
- package/src/core/nodes/ExportNode.ts +70 -2
- package/src/core/nodes/ExpressionNode.ts +231 -0
- package/src/core/nodes/ExternalModuleNode.ts +56 -0
- package/src/core/nodes/ExternalStdioNode.ts +17 -9
- package/src/core/nodes/FunctionNode.ts +101 -1
- package/src/core/nodes/ImportNode.ts +32 -10
- package/src/core/nodes/InterfaceNode.ts +91 -0
- package/src/core/nodes/IssueNode.ts +177 -0
- package/src/core/nodes/MethodCallNode.ts +64 -0
- package/src/core/nodes/MethodNode.ts +63 -0
- package/src/core/nodes/ModuleNode.ts +50 -0
- package/src/core/nodes/NetworkRequestNode.ts +77 -0
- package/src/core/nodes/ObjectLiteralNode.ts +65 -0
- package/src/core/nodes/ScopeNode.ts +65 -0
- package/src/core/nodes/TypeNode.ts +78 -0
- package/src/core/nodes/VariableDeclarationNode.ts +52 -0
- package/src/core/nodes/index.ts +18 -1
- package/src/diagnostics/DiagnosticCollector.ts +163 -0
- package/src/diagnostics/DiagnosticReporter.ts +204 -0
- package/src/diagnostics/DiagnosticWriter.ts +50 -0
- package/src/diagnostics/index.ts +16 -0
- package/src/errors/GrafemaError.ts +174 -0
- package/src/index.ts +148 -1
- package/src/logging/Logger.ts +152 -0
- package/src/plugins/Plugin.ts +42 -0
- package/src/plugins/analysis/DatabaseAnalyzer.ts +14 -8
- package/src/plugins/analysis/ExpressAnalyzer.ts +29 -19
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +22 -21
- package/src/plugins/analysis/FetchAnalyzer.ts +39 -16
- package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +84 -101
- package/src/plugins/analysis/JSASTAnalyzer.ts +1483 -503
- package/src/plugins/analysis/ReactAnalyzer.ts +57 -57
- package/src/plugins/analysis/RustAnalyzer.ts +15 -10
- package/src/plugins/analysis/SQLiteAnalyzer.ts +10 -7
- package/src/plugins/analysis/ServiceLayerAnalyzer.ts +22 -16
- package/src/plugins/analysis/SocketIOAnalyzer.ts +31 -22
- package/src/plugins/analysis/SystemDbAnalyzer.ts +16 -11
- package/src/plugins/analysis/ast/GraphBuilder.ts +439 -327
- package/src/plugins/analysis/ast/IdGenerator.ts +177 -0
- package/src/plugins/analysis/ast/types.ts +209 -6
- package/src/plugins/analysis/ast/utils/createParameterNodes.ts +104 -0
- package/src/plugins/analysis/ast/utils/index.ts +12 -0
- package/src/plugins/analysis/ast/utils/location.ts +103 -0
- package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +11 -8
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +909 -83
- package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +97 -44
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +159 -93
- package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +12 -8
- package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +41 -14
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +37 -17
- package/src/plugins/discovery/MonorepoServiceDiscovery.ts +3 -2
- package/src/plugins/discovery/SimpleProjectDiscovery.ts +6 -1
- package/src/plugins/discovery/WorkspaceDiscovery.ts +177 -0
- package/src/plugins/discovery/resolveSourceEntrypoint.ts +103 -0
- package/src/plugins/discovery/workspaces/detector.ts +63 -0
- package/src/plugins/discovery/workspaces/globResolver.ts +229 -0
- package/src/plugins/discovery/workspaces/index.ts +23 -0
- package/src/plugins/discovery/workspaces/parsers.ts +99 -0
- package/src/plugins/enrichment/AliasTracker.ts +14 -8
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +14 -7
- package/src/plugins/enrichment/ImportExportLinker.ts +24 -6
- package/src/plugins/enrichment/MethodCallResolver.ts +18 -12
- package/src/plugins/enrichment/MountPointResolver.ts +8 -3
- package/src/plugins/enrichment/PrefixEvaluator.ts +16 -7
- package/src/plugins/enrichment/RustFFIEnricher.ts +6 -5
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +149 -12
- package/src/plugins/indexing/IncrementalModuleIndexer.ts +23 -14
- package/src/plugins/indexing/JSModuleIndexer.ts +74 -34
- package/src/plugins/indexing/RustModuleIndexer.ts +5 -4
- package/src/plugins/validation/CallResolverValidator.ts +8 -7
- package/src/plugins/validation/DataFlowValidator.ts +16 -12
- package/src/plugins/validation/EvalBanValidator.ts +17 -16
- package/src/plugins/validation/GraphConnectivityValidator.ts +19 -23
- package/src/plugins/validation/NodeCreationValidator.ts +554 -0
- package/src/plugins/validation/SQLInjectionValidator.ts +61 -15
- package/src/plugins/validation/ShadowingDetector.ts +6 -5
- package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +12 -11
- package/src/plugins/vcs/GitPlugin.ts +40 -12
- package/src/plugins/vcs/VCSPlugin.ts +7 -5
- package/src/storage/backends/RFDBServerBackend.ts +43 -29
- package/src/validation/PathValidator.ts +1 -1
- package/dist/core/AnalysisWorker.d.ts +0 -14
- package/dist/core/AnalysisWorker.d.ts.map +0 -1
- package/dist/core/AnalysisWorker.js +0 -307
- package/dist/core/ParallelAnalyzer.d.ts +0 -120
- package/dist/core/ParallelAnalyzer.d.ts.map +0 -1
- package/dist/core/ParallelAnalyzer.js +0 -331
- package/dist/core/QueueWorker.d.ts +0 -12
- package/dist/core/QueueWorker.d.ts.map +0 -1
- package/dist/core/QueueWorker.js +0 -567
- package/dist/core/RFDBClient.d.ts +0 -179
- package/dist/core/RFDBClient.d.ts.map +0 -1
- package/dist/core/RFDBClient.js +0 -429
- package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +0 -19
- package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +0 -1
- package/dist/plugins/discovery/ZonServiceDiscovery.js +0 -204
- package/src/core/AnalysisWorker.ts +0 -410
- package/src/core/ParallelAnalyzer.ts +0 -476
- package/src/core/QueueWorker.ts +0 -780
- package/src/plugins/indexing/ServiceDetector.ts +0 -230
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SemanticId - Stable identifiers for code elements
|
|
3
|
+
*
|
|
4
|
+
* Semantic IDs provide stable identifiers for code elements that don't change
|
|
5
|
+
* when unrelated code is added/removed (no line numbers in IDs).
|
|
6
|
+
*
|
|
7
|
+
* Format: {file}->{scope_path}->{type}->{name}[#discriminator]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* src/app.js->global->FUNCTION->processData
|
|
11
|
+
* src/app.js->UserService->METHOD->login
|
|
12
|
+
* src/app.js->getUser->if#0->CALL->console.log#0
|
|
13
|
+
*
|
|
14
|
+
* Special formats:
|
|
15
|
+
* Singletons: net:stdio->__stdio__
|
|
16
|
+
* External modules: EXTERNAL_MODULE->lodash
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Compute semantic ID for any node type.
|
|
20
|
+
*
|
|
21
|
+
* @param type - Node type (FUNCTION, CALL, VARIABLE, etc.)
|
|
22
|
+
* @param name - Node name
|
|
23
|
+
* @param context - Scope context from ScopeTracker
|
|
24
|
+
* @param options - Optional discriminator or context
|
|
25
|
+
* @returns Semantic ID string
|
|
26
|
+
*/
|
|
27
|
+
export function computeSemanticId(type, name, context, options) {
|
|
28
|
+
const { file, scopePath } = context;
|
|
29
|
+
const scope = scopePath.length > 0 ? scopePath.join('->') : 'global';
|
|
30
|
+
let id = `${file}->${scope}->${type}->${name}`;
|
|
31
|
+
if (options?.discriminator !== undefined) {
|
|
32
|
+
id += `#${options.discriminator}`;
|
|
33
|
+
}
|
|
34
|
+
else if (options?.context) {
|
|
35
|
+
id += `[${options.context}]`;
|
|
36
|
+
}
|
|
37
|
+
return id;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parse semantic ID back to components.
|
|
41
|
+
*
|
|
42
|
+
* @param id - Semantic ID to parse
|
|
43
|
+
* @returns Parsed components or null if invalid
|
|
44
|
+
*/
|
|
45
|
+
export function parseSemanticId(id) {
|
|
46
|
+
// Handle singletons
|
|
47
|
+
if (id.startsWith('net:stdio') || id.startsWith('net:request')) {
|
|
48
|
+
const [prefix, name] = id.split('->');
|
|
49
|
+
return {
|
|
50
|
+
file: '',
|
|
51
|
+
scopePath: [prefix],
|
|
52
|
+
type: 'SINGLETON',
|
|
53
|
+
name,
|
|
54
|
+
discriminator: undefined
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (id.startsWith('EXTERNAL_MODULE')) {
|
|
58
|
+
const [, name] = id.split('->');
|
|
59
|
+
return {
|
|
60
|
+
file: '',
|
|
61
|
+
scopePath: [],
|
|
62
|
+
type: 'EXTERNAL_MODULE',
|
|
63
|
+
name,
|
|
64
|
+
discriminator: undefined
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const parts = id.split('->');
|
|
68
|
+
if (parts.length < 4)
|
|
69
|
+
return null;
|
|
70
|
+
const file = parts[0];
|
|
71
|
+
const type = parts[parts.length - 2];
|
|
72
|
+
let name = parts[parts.length - 1];
|
|
73
|
+
const scopePath = parts.slice(1, -2);
|
|
74
|
+
// Parse discriminator or context
|
|
75
|
+
let discriminator;
|
|
76
|
+
let context;
|
|
77
|
+
const hashMatch = name.match(/^(.+)#(\d+)$/);
|
|
78
|
+
if (hashMatch) {
|
|
79
|
+
name = hashMatch[1];
|
|
80
|
+
discriminator = parseInt(hashMatch[2], 10);
|
|
81
|
+
}
|
|
82
|
+
const bracketMatch = name.match(/^(.+)\[(.+)\]$/);
|
|
83
|
+
if (bracketMatch) {
|
|
84
|
+
name = bracketMatch[1];
|
|
85
|
+
context = bracketMatch[2];
|
|
86
|
+
}
|
|
87
|
+
return { file, scopePath, type, name, discriminator, context };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Compute discriminator for items with same name in same scope.
|
|
91
|
+
* Uses line/column for stable ordering.
|
|
92
|
+
*
|
|
93
|
+
* @param items - All items in scope
|
|
94
|
+
* @param targetName - Name to find discriminator for
|
|
95
|
+
* @param targetLocation - Location of target item
|
|
96
|
+
* @returns Discriminator (0-based index among same-named items)
|
|
97
|
+
*/
|
|
98
|
+
export function computeDiscriminator(items, targetName, targetLocation) {
|
|
99
|
+
// Filter items with same name
|
|
100
|
+
const sameNameItems = items.filter(item => item.name === targetName);
|
|
101
|
+
if (sameNameItems.length <= 1) {
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
// Sort by line, then by column for stable ordering
|
|
105
|
+
sameNameItems.sort((a, b) => {
|
|
106
|
+
if (a.location.line !== b.location.line) {
|
|
107
|
+
return a.location.line - b.location.line;
|
|
108
|
+
}
|
|
109
|
+
return a.location.column - b.location.column;
|
|
110
|
+
});
|
|
111
|
+
// Find index of target
|
|
112
|
+
const index = sameNameItems.findIndex(item => item.location.line === targetLocation.line &&
|
|
113
|
+
item.location.column === targetLocation.column);
|
|
114
|
+
return index >= 0 ? index : 0;
|
|
115
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionManager.d.ts","sourceRoot":"","sources":["../../src/core/VersionManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"VersionManager.d.ts","sourceRoot":"","sources":["../../src/core/VersionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,9 +36,10 @@ export class VersionManager {
|
|
|
36
36
|
if (type === 'VARIABLE_DECLARATION') {
|
|
37
37
|
return `${type}:${name}:${file}:${line || 0}`;
|
|
38
38
|
}
|
|
39
|
-
// Для MODULE -
|
|
39
|
+
// Для MODULE - use semantic ID format with name (relative path)
|
|
40
40
|
if (type === 'MODULE') {
|
|
41
|
-
|
|
41
|
+
// name stores the relative path for MODULE nodes
|
|
42
|
+
return `${name}->global->MODULE->module`;
|
|
42
43
|
}
|
|
43
44
|
// Для SERVICE - используем имя или file
|
|
44
45
|
if (type === 'SERVICE') {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArgumentExpressionNode - EXPRESSION node with call argument context
|
|
3
|
+
*
|
|
4
|
+
* Extends ExpressionNode with fields tracking which call and argument position
|
|
5
|
+
* this expression appears in. Used for argument data flow tracking.
|
|
6
|
+
*
|
|
7
|
+
* ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
|
|
8
|
+
* With counter: {file}:EXPRESSION:{expressionType}:{line}:{column}:{counter}
|
|
9
|
+
*
|
|
10
|
+
* Example: /src/app.ts:EXPRESSION:BinaryExpression:25:10
|
|
11
|
+
*
|
|
12
|
+
* Note: Uses counter suffix since same expression at same position can appear
|
|
13
|
+
* multiple times in different argument contexts.
|
|
14
|
+
*/
|
|
15
|
+
import { type ExpressionNodeRecord, type ExpressionNodeOptions } from './ExpressionNode.js';
|
|
16
|
+
interface ArgumentExpressionNodeRecord extends ExpressionNodeRecord {
|
|
17
|
+
parentCallId: string;
|
|
18
|
+
argIndex: number;
|
|
19
|
+
}
|
|
20
|
+
interface ArgumentExpressionNodeOptions extends ExpressionNodeOptions {
|
|
21
|
+
parentCallId: string;
|
|
22
|
+
argIndex: number;
|
|
23
|
+
counter?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class ArgumentExpressionNode {
|
|
26
|
+
static readonly TYPE: "EXPRESSION";
|
|
27
|
+
static readonly REQUIRED: readonly string[];
|
|
28
|
+
static readonly OPTIONAL: readonly string[];
|
|
29
|
+
/**
|
|
30
|
+
* Create EXPRESSION node with argument context
|
|
31
|
+
*
|
|
32
|
+
* @param expressionType - Type of expression (BinaryExpression, LogicalExpression, etc.)
|
|
33
|
+
* @param file - File path
|
|
34
|
+
* @param line - Line number
|
|
35
|
+
* @param column - Column position
|
|
36
|
+
* @param options - Required: parentCallId, argIndex; Optional: expression properties, counter
|
|
37
|
+
* @returns ArgumentExpressionNodeRecord
|
|
38
|
+
*/
|
|
39
|
+
static create(expressionType: string, file: string, line: number, column: number, options: ArgumentExpressionNodeOptions): ArgumentExpressionNodeRecord;
|
|
40
|
+
static validate(node: ArgumentExpressionNodeRecord): string[];
|
|
41
|
+
}
|
|
42
|
+
export type { ArgumentExpressionNodeRecord, ArgumentExpressionNodeOptions };
|
|
43
|
+
//# sourceMappingURL=ArgumentExpressionNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArgumentExpressionNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ArgumentExpressionNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAkB,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5G,UAAU,4BAA6B,SAAQ,oBAAoB;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,6BAA8B,SAAQ,qBAAqB;IACnE,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,sBAAsB;IAEjC,MAAM,CAAC,QAAQ,CAAC,IAAI,eAAuB;IAC3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAA4D;IACvG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAA2C;IAEtF;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,CACX,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,6BAA6B,GACrC,4BAA4B;IAuB/B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,4BAA4B,GAAG,MAAM,EAAE;CAa9D;AAED,YAAY,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArgumentExpressionNode - EXPRESSION node with call argument context
|
|
3
|
+
*
|
|
4
|
+
* Extends ExpressionNode with fields tracking which call and argument position
|
|
5
|
+
* this expression appears in. Used for argument data flow tracking.
|
|
6
|
+
*
|
|
7
|
+
* ID format: {file}:EXPRESSION:{expressionType}:{line}:{column}
|
|
8
|
+
* With counter: {file}:EXPRESSION:{expressionType}:{line}:{column}:{counter}
|
|
9
|
+
*
|
|
10
|
+
* Example: /src/app.ts:EXPRESSION:BinaryExpression:25:10
|
|
11
|
+
*
|
|
12
|
+
* Note: Uses counter suffix since same expression at same position can appear
|
|
13
|
+
* multiple times in different argument contexts.
|
|
14
|
+
*/
|
|
15
|
+
import { ExpressionNode } from './ExpressionNode.js';
|
|
16
|
+
export class ArgumentExpressionNode {
|
|
17
|
+
// Inherit TYPE from ExpressionNode
|
|
18
|
+
static TYPE = ExpressionNode.TYPE;
|
|
19
|
+
static REQUIRED = [...ExpressionNode.REQUIRED, 'parentCallId', 'argIndex'];
|
|
20
|
+
static OPTIONAL = [...ExpressionNode.OPTIONAL, 'counter'];
|
|
21
|
+
/**
|
|
22
|
+
* Create EXPRESSION node with argument context
|
|
23
|
+
*
|
|
24
|
+
* @param expressionType - Type of expression (BinaryExpression, LogicalExpression, etc.)
|
|
25
|
+
* @param file - File path
|
|
26
|
+
* @param line - Line number
|
|
27
|
+
* @param column - Column position
|
|
28
|
+
* @param options - Required: parentCallId, argIndex; Optional: expression properties, counter
|
|
29
|
+
* @returns ArgumentExpressionNodeRecord
|
|
30
|
+
*/
|
|
31
|
+
static create(expressionType, file, line, column, options) {
|
|
32
|
+
if (!options.parentCallId) {
|
|
33
|
+
throw new Error('ArgumentExpressionNode.create: parentCallId is required');
|
|
34
|
+
}
|
|
35
|
+
if (options.argIndex === undefined) {
|
|
36
|
+
throw new Error('ArgumentExpressionNode.create: argIndex is required');
|
|
37
|
+
}
|
|
38
|
+
// Create base EXPRESSION node using parent class
|
|
39
|
+
const baseNode = ExpressionNode.create(expressionType, file, line, column, options);
|
|
40
|
+
// Override ID with counter suffix (since same location can have multiple expressions)
|
|
41
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
42
|
+
const id = `${file}:EXPRESSION:${expressionType}:${line}:${column}${counter}`;
|
|
43
|
+
return {
|
|
44
|
+
...baseNode,
|
|
45
|
+
id,
|
|
46
|
+
parentCallId: options.parentCallId,
|
|
47
|
+
argIndex: options.argIndex
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
static validate(node) {
|
|
51
|
+
const errors = ExpressionNode.validate(node);
|
|
52
|
+
if (!node.parentCallId) {
|
|
53
|
+
errors.push('Missing required field: parentCallId');
|
|
54
|
+
}
|
|
55
|
+
if (node.argIndex === undefined) {
|
|
56
|
+
errors.push('Missing required field: argIndex');
|
|
57
|
+
}
|
|
58
|
+
return errors;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArrayLiteralNode - contract for ARRAY_LITERAL node
|
|
3
|
+
*
|
|
4
|
+
* Represents an array literal expression: [elem1, elem2, ...]
|
|
5
|
+
* Used for tracking data flow through array construction.
|
|
6
|
+
*/
|
|
7
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
8
|
+
interface ArrayLiteralNodeRecord extends BaseNodeRecord {
|
|
9
|
+
type: 'ARRAY_LITERAL';
|
|
10
|
+
column: number;
|
|
11
|
+
parentCallId?: string;
|
|
12
|
+
argIndex?: number;
|
|
13
|
+
}
|
|
14
|
+
interface ArrayLiteralNodeOptions {
|
|
15
|
+
parentCallId?: string;
|
|
16
|
+
argIndex?: number;
|
|
17
|
+
counter?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare class ArrayLiteralNode {
|
|
20
|
+
static readonly TYPE: "ARRAY_LITERAL";
|
|
21
|
+
static readonly REQUIRED: readonly ["file", "line", "column"];
|
|
22
|
+
static readonly OPTIONAL: readonly ["parentCallId", "argIndex"];
|
|
23
|
+
static create(file: string, line: number, column: number, options?: ArrayLiteralNodeOptions): ArrayLiteralNodeRecord;
|
|
24
|
+
static validate(node: ArrayLiteralNodeRecord): string[];
|
|
25
|
+
}
|
|
26
|
+
export type { ArrayLiteralNodeRecord, ArrayLiteralNodeOptions };
|
|
27
|
+
//# sourceMappingURL=ArrayLiteralNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrayLiteralNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ArrayLiteralNode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,sBAAuB,SAAQ,cAAc;IACrD,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,uBAAuB;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,eAAe,CAAU;IAEhD,MAAM,CAAC,QAAQ,CAAC,QAAQ,sCAAuC;IAC/D,MAAM,CAAC,QAAQ,CAAC,QAAQ,wCAAyC;IAEjE,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,uBAA4B,GACpC,sBAAsB;IAoBzB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,EAAE;CASxD;AAED,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArrayLiteralNode - contract for ARRAY_LITERAL node
|
|
3
|
+
*
|
|
4
|
+
* Represents an array literal expression: [elem1, elem2, ...]
|
|
5
|
+
* Used for tracking data flow through array construction.
|
|
6
|
+
*/
|
|
7
|
+
export class ArrayLiteralNode {
|
|
8
|
+
static TYPE = 'ARRAY_LITERAL';
|
|
9
|
+
static REQUIRED = ['file', 'line', 'column'];
|
|
10
|
+
static OPTIONAL = ['parentCallId', 'argIndex'];
|
|
11
|
+
static create(file, line, column, options = {}) {
|
|
12
|
+
if (!file)
|
|
13
|
+
throw new Error('ArrayLiteralNode.create: file is required');
|
|
14
|
+
if (line === undefined)
|
|
15
|
+
throw new Error('ArrayLiteralNode.create: line is required');
|
|
16
|
+
const counter = options.counter !== undefined ? `:${options.counter}` : '';
|
|
17
|
+
const argSuffix = options.argIndex !== undefined ? `arg${options.argIndex}` : 'arr';
|
|
18
|
+
const id = `ARRAY_LITERAL#${argSuffix}#${file}#${line}:${column || 0}${counter}`;
|
|
19
|
+
return {
|
|
20
|
+
id,
|
|
21
|
+
type: this.TYPE,
|
|
22
|
+
name: `<array>`,
|
|
23
|
+
file,
|
|
24
|
+
line,
|
|
25
|
+
column: column || 0,
|
|
26
|
+
parentCallId: options.parentCallId,
|
|
27
|
+
argIndex: options.argIndex
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
static validate(node) {
|
|
31
|
+
const errors = [];
|
|
32
|
+
if (node.type !== this.TYPE)
|
|
33
|
+
errors.push(`Expected type ${this.TYPE}`);
|
|
34
|
+
const nodeRecord = node;
|
|
35
|
+
for (const field of this.REQUIRED) {
|
|
36
|
+
if (nodeRecord[field] === undefined)
|
|
37
|
+
errors.push(`Missing: ${field}`);
|
|
38
|
+
}
|
|
39
|
+
return errors;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CallSiteNode - contract for CALL_SITE node
|
|
3
|
+
*
|
|
4
|
+
* Supports two creation modes:
|
|
5
|
+
* 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
|
|
6
|
+
* 2. create() - LEGACY: Uses line-based IDs for backward compatibility
|
|
7
|
+
*
|
|
8
|
+
* Semantic ID format: {file}->{scope_path}->CALL->{calleeName}#N
|
|
9
|
+
* Example: src/app.js->handler->CALL->console.log#0
|
|
3
10
|
*/
|
|
4
11
|
import type { BaseNodeRecord } from '@grafema/types';
|
|
12
|
+
import { type ScopeContext, type Location } from '../SemanticId.js';
|
|
5
13
|
interface CallSiteNodeRecord extends BaseNodeRecord {
|
|
6
14
|
type: 'CALL_SITE';
|
|
7
15
|
column: number;
|
|
@@ -12,6 +20,13 @@ interface CallSiteNodeOptions {
|
|
|
12
20
|
parentScopeId?: string;
|
|
13
21
|
counter?: number;
|
|
14
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Options for createWithContext
|
|
25
|
+
*/
|
|
26
|
+
interface CallSiteContextOptions {
|
|
27
|
+
discriminator: number;
|
|
28
|
+
parentScopeId?: string;
|
|
29
|
+
}
|
|
15
30
|
export declare class CallSiteNode {
|
|
16
31
|
static readonly TYPE: "CALL_SITE";
|
|
17
32
|
static readonly REQUIRED: readonly ["name", "file", "line"];
|
|
@@ -20,6 +35,19 @@ export declare class CallSiteNode {
|
|
|
20
35
|
* Create CALL_SITE node
|
|
21
36
|
*/
|
|
22
37
|
static create(targetName: string, file: string, line: number, column: number, options?: CallSiteNodeOptions): CallSiteNodeRecord;
|
|
38
|
+
/**
|
|
39
|
+
* Create CALL_SITE node with semantic ID (NEW API)
|
|
40
|
+
*
|
|
41
|
+
* Uses ScopeContext from ScopeTracker for stable identifiers.
|
|
42
|
+
* Requires discriminator for multiple calls to same function within scope.
|
|
43
|
+
*
|
|
44
|
+
* @param targetName - Name of called function (e.g., 'console.log', 'db.query')
|
|
45
|
+
* @param context - Scope context from ScopeTracker.getContext()
|
|
46
|
+
* @param location - Source location { line, column }
|
|
47
|
+
* @param options - Options including required discriminator
|
|
48
|
+
* @returns CallSiteNodeRecord with semantic ID
|
|
49
|
+
*/
|
|
50
|
+
static createWithContext(targetName: string, context: ScopeContext, location: Partial<Location>, options: CallSiteContextOptions): CallSiteNodeRecord;
|
|
23
51
|
static validate(node: CallSiteNodeRecord): string[];
|
|
24
52
|
}
|
|
25
53
|
export type { CallSiteNodeRecord };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallSiteNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/CallSiteNode.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"CallSiteNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/CallSiteNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvF,UAAU,kBAAmB,SAAQ,cAAc;IACjD,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,mBAAmB;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,sBAAsB;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,YAAY;IACvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IAE5C,MAAM,CAAC,QAAQ,CAAC,QAAQ,oCAAqC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,6DAA8D;IAEtF;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB;IAoBrB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,iBAAiB,CACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC3B,OAAO,EAAE,sBAAsB,GAC9B,kBAAkB;IAyBrB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,EAAE;CAgBpD;AAED,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CallSiteNode - contract for CALL_SITE node
|
|
3
|
+
*
|
|
4
|
+
* Supports two creation modes:
|
|
5
|
+
* 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
|
|
6
|
+
* 2. create() - LEGACY: Uses line-based IDs for backward compatibility
|
|
7
|
+
*
|
|
8
|
+
* Semantic ID format: {file}->{scope_path}->CALL->{calleeName}#N
|
|
9
|
+
* Example: src/app.js->handler->CALL->console.log#0
|
|
3
10
|
*/
|
|
11
|
+
import { computeSemanticId } from '../SemanticId.js';
|
|
4
12
|
export class CallSiteNode {
|
|
5
13
|
static TYPE = 'CALL_SITE';
|
|
6
14
|
static REQUIRED = ['name', 'file', 'line'];
|
|
@@ -28,6 +36,44 @@ export class CallSiteNode {
|
|
|
28
36
|
targetFunctionName: targetName
|
|
29
37
|
};
|
|
30
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Create CALL_SITE node with semantic ID (NEW API)
|
|
41
|
+
*
|
|
42
|
+
* Uses ScopeContext from ScopeTracker for stable identifiers.
|
|
43
|
+
* Requires discriminator for multiple calls to same function within scope.
|
|
44
|
+
*
|
|
45
|
+
* @param targetName - Name of called function (e.g., 'console.log', 'db.query')
|
|
46
|
+
* @param context - Scope context from ScopeTracker.getContext()
|
|
47
|
+
* @param location - Source location { line, column }
|
|
48
|
+
* @param options - Options including required discriminator
|
|
49
|
+
* @returns CallSiteNodeRecord with semantic ID
|
|
50
|
+
*/
|
|
51
|
+
static createWithContext(targetName, context, location, options) {
|
|
52
|
+
// Validate required fields
|
|
53
|
+
if (!targetName)
|
|
54
|
+
throw new Error('CallSiteNode.createWithContext: targetName is required');
|
|
55
|
+
if (!context.file)
|
|
56
|
+
throw new Error('CallSiteNode.createWithContext: file is required');
|
|
57
|
+
if (location.line === undefined)
|
|
58
|
+
throw new Error('CallSiteNode.createWithContext: line is required');
|
|
59
|
+
if (options.discriminator === undefined)
|
|
60
|
+
throw new Error('CallSiteNode.createWithContext: discriminator is required');
|
|
61
|
+
// Compute semantic ID with discriminator
|
|
62
|
+
// Use 'CALL' as the type for cleaner IDs (matches spec)
|
|
63
|
+
const id = computeSemanticId('CALL', targetName, context, {
|
|
64
|
+
discriminator: options.discriminator
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
id,
|
|
68
|
+
type: this.TYPE,
|
|
69
|
+
name: targetName,
|
|
70
|
+
file: context.file,
|
|
71
|
+
line: location.line,
|
|
72
|
+
column: location.column ?? 0,
|
|
73
|
+
parentScopeId: options.parentScopeId,
|
|
74
|
+
targetFunctionName: targetName
|
|
75
|
+
};
|
|
76
|
+
}
|
|
31
77
|
static validate(node) {
|
|
32
78
|
const errors = [];
|
|
33
79
|
if (node.type !== this.TYPE) {
|
|
@@ -1,24 +1,56 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ClassNode - contract for CLASS node
|
|
3
|
+
*
|
|
4
|
+
* Supports two creation modes:
|
|
5
|
+
* 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
|
|
6
|
+
* 2. create() - LEGACY: Uses line-based IDs for backward compatibility
|
|
7
|
+
*
|
|
8
|
+
* Semantic ID format: {file}->{scope_path}->CLASS->{name}
|
|
9
|
+
* Example: src/models/User.js->global->CLASS->User
|
|
3
10
|
*/
|
|
4
11
|
import type { BaseNodeRecord } from '@grafema/types';
|
|
12
|
+
import { type ScopeContext, type Location } from '../SemanticId.js';
|
|
5
13
|
interface ClassNodeRecord extends BaseNodeRecord {
|
|
6
14
|
type: 'CLASS';
|
|
7
15
|
column: number;
|
|
8
16
|
exported: boolean;
|
|
9
17
|
superClass?: string;
|
|
10
18
|
methods: string[];
|
|
19
|
+
isInstantiationRef?: boolean;
|
|
11
20
|
}
|
|
12
21
|
interface ClassNodeOptions {
|
|
13
22
|
exported?: boolean;
|
|
14
23
|
superClass?: string;
|
|
15
24
|
methods?: string[];
|
|
25
|
+
isInstantiationRef?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Options for createWithContext
|
|
29
|
+
*/
|
|
30
|
+
interface ClassContextOptions {
|
|
31
|
+
exported?: boolean;
|
|
32
|
+
superClass?: string;
|
|
33
|
+
methods?: string[];
|
|
34
|
+
isInstantiationRef?: boolean;
|
|
16
35
|
}
|
|
17
36
|
export declare class ClassNode {
|
|
18
37
|
static readonly TYPE: "CLASS";
|
|
19
38
|
static readonly REQUIRED: readonly ["name", "file", "line"];
|
|
20
|
-
static readonly OPTIONAL: readonly ["column", "exported", "superClass", "methods"];
|
|
39
|
+
static readonly OPTIONAL: readonly ["column", "exported", "superClass", "methods", "isInstantiationRef"];
|
|
21
40
|
static create(name: string, file: string, line: number, column: number, options?: ClassNodeOptions): ClassNodeRecord;
|
|
41
|
+
/**
|
|
42
|
+
* Create CLASS node with semantic ID (NEW API)
|
|
43
|
+
*
|
|
44
|
+
* Uses ScopeContext from ScopeTracker for stable identifiers.
|
|
45
|
+
* Class names are unique within scope, so no discriminator needed.
|
|
46
|
+
*
|
|
47
|
+
* @param name - Class name
|
|
48
|
+
* @param context - Scope context from ScopeTracker.getContext()
|
|
49
|
+
* @param location - Source location { line, column }
|
|
50
|
+
* @param options - Optional class properties
|
|
51
|
+
* @returns ClassNodeRecord with semantic ID
|
|
52
|
+
*/
|
|
53
|
+
static createWithContext(name: string, context: ScopeContext, location: Partial<Location>, options?: ClassContextOptions): ClassNodeRecord;
|
|
22
54
|
static validate(node: ClassNodeRecord): string[];
|
|
23
55
|
}
|
|
24
56
|
export type { ClassNodeRecord };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ClassNode.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ClassNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/ClassNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvF,UAAU,eAAgB,SAAQ,cAAc;IAC9C,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBAAa,SAAS;IACpB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAExC,MAAM,CAAC,QAAQ,CAAC,QAAQ,oCAAqC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,iFAAkF;IAE1G,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,gBAAqB,GAC7B,eAAe;IAmBlB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC3B,OAAO,GAAE,mBAAwB,GAChC,eAAe;IAuBlB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,EAAE;CAgBjD;AAED,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ClassNode - contract for CLASS node
|
|
3
|
+
*
|
|
4
|
+
* Supports two creation modes:
|
|
5
|
+
* 1. createWithContext() - NEW: Uses ScopeContext + Location for semantic IDs
|
|
6
|
+
* 2. create() - LEGACY: Uses line-based IDs for backward compatibility
|
|
7
|
+
*
|
|
8
|
+
* Semantic ID format: {file}->{scope_path}->CLASS->{name}
|
|
9
|
+
* Example: src/models/User.js->global->CLASS->User
|
|
3
10
|
*/
|
|
11
|
+
import { computeSemanticId } from '../SemanticId.js';
|
|
4
12
|
export class ClassNode {
|
|
5
13
|
static TYPE = 'CLASS';
|
|
6
14
|
static REQUIRED = ['name', 'file', 'line'];
|
|
7
|
-
static OPTIONAL = ['column', 'exported', 'superClass', 'methods'];
|
|
15
|
+
static OPTIONAL = ['column', 'exported', 'superClass', 'methods', 'isInstantiationRef'];
|
|
8
16
|
static create(name, file, line, column, options = {}) {
|
|
9
17
|
if (!name)
|
|
10
18
|
throw new Error('ClassNode.create: name is required');
|
|
@@ -21,7 +29,43 @@ export class ClassNode {
|
|
|
21
29
|
column: column || 0,
|
|
22
30
|
exported: options.exported || false,
|
|
23
31
|
superClass: options.superClass,
|
|
24
|
-
methods: options.methods || []
|
|
32
|
+
methods: options.methods || [],
|
|
33
|
+
...(options.isInstantiationRef !== undefined && { isInstantiationRef: options.isInstantiationRef })
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create CLASS node with semantic ID (NEW API)
|
|
38
|
+
*
|
|
39
|
+
* Uses ScopeContext from ScopeTracker for stable identifiers.
|
|
40
|
+
* Class names are unique within scope, so no discriminator needed.
|
|
41
|
+
*
|
|
42
|
+
* @param name - Class name
|
|
43
|
+
* @param context - Scope context from ScopeTracker.getContext()
|
|
44
|
+
* @param location - Source location { line, column }
|
|
45
|
+
* @param options - Optional class properties
|
|
46
|
+
* @returns ClassNodeRecord with semantic ID
|
|
47
|
+
*/
|
|
48
|
+
static createWithContext(name, context, location, options = {}) {
|
|
49
|
+
// Validate required fields
|
|
50
|
+
if (!name)
|
|
51
|
+
throw new Error('ClassNode.createWithContext: name is required');
|
|
52
|
+
if (!context.file)
|
|
53
|
+
throw new Error('ClassNode.createWithContext: file is required');
|
|
54
|
+
if (location.line === undefined)
|
|
55
|
+
throw new Error('ClassNode.createWithContext: line is required');
|
|
56
|
+
// Compute semantic ID
|
|
57
|
+
const id = computeSemanticId(this.TYPE, name, context);
|
|
58
|
+
return {
|
|
59
|
+
id,
|
|
60
|
+
type: this.TYPE,
|
|
61
|
+
name,
|
|
62
|
+
file: context.file,
|
|
63
|
+
line: location.line,
|
|
64
|
+
column: location.column ?? 0,
|
|
65
|
+
exported: options.exported || false,
|
|
66
|
+
superClass: options.superClass,
|
|
67
|
+
methods: options.methods || [],
|
|
68
|
+
...(options.isInstantiationRef !== undefined && { isInstantiationRef: options.isInstantiationRef })
|
|
25
69
|
};
|
|
26
70
|
}
|
|
27
71
|
static validate(node) {
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DecoratorNode - contract for DECORATOR node
|
|
3
|
+
*
|
|
4
|
+
* Represents TypeScript/JavaScript decorators applied to
|
|
5
|
+
* classes, methods, properties, or parameters.
|
|
6
|
+
*
|
|
7
|
+
* ID format: {file}:DECORATOR:{name}:{line}:{column}
|
|
8
|
+
* Example: /src/services/UserService.ts:DECORATOR:Injectable:5:0
|
|
9
|
+
*/
|
|
10
|
+
import type { BaseNodeRecord } from '@grafema/types';
|
|
11
|
+
type DecoratorTargetType = 'CLASS' | 'METHOD' | 'PROPERTY' | 'PARAMETER';
|
|
12
|
+
interface DecoratorNodeRecord extends BaseNodeRecord {
|
|
13
|
+
type: 'DECORATOR';
|
|
14
|
+
column: number;
|
|
15
|
+
arguments: unknown[];
|
|
16
|
+
targetId: string;
|
|
17
|
+
targetType: DecoratorTargetType;
|
|
18
|
+
}
|
|
19
|
+
interface DecoratorNodeOptions {
|
|
20
|
+
arguments?: unknown[];
|
|
21
|
+
}
|
|
22
|
+
export declare class DecoratorNode {
|
|
23
|
+
static readonly TYPE: "DECORATOR";
|
|
24
|
+
static readonly REQUIRED: readonly ["name", "file", "line", "targetId", "targetType"];
|
|
25
|
+
static readonly OPTIONAL: readonly ["column", "arguments"];
|
|
26
|
+
/**
|
|
27
|
+
* Create DECORATOR node
|
|
28
|
+
*
|
|
29
|
+
* @param name - Decorator name
|
|
30
|
+
* @param file - File path
|
|
31
|
+
* @param line - Line number
|
|
32
|
+
* @param column - Column position
|
|
33
|
+
* @param targetId - ID of decorated element
|
|
34
|
+
* @param targetType - Type of decorated element
|
|
35
|
+
* @param options - Optional decorator properties
|
|
36
|
+
* @returns DecoratorNodeRecord
|
|
37
|
+
*/
|
|
38
|
+
static create(name: string, file: string, line: number, column: number, targetId: string, targetType: DecoratorTargetType, options?: DecoratorNodeOptions): DecoratorNodeRecord;
|
|
39
|
+
static validate(node: DecoratorNodeRecord): string[];
|
|
40
|
+
}
|
|
41
|
+
export type { DecoratorNodeRecord, DecoratorTargetType };
|
|
42
|
+
//# sourceMappingURL=DecoratorNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DecoratorNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/DecoratorNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,KAAK,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzE,UAAU,mBAAoB,SAAQ,cAAc;IAClD,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAED,UAAU,oBAAoB;IAC5B,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;CACvB;AAED,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IAE5C,MAAM,CAAC,QAAQ,CAAC,QAAQ,8DAA+D;IACvF,MAAM,CAAC,QAAQ,CAAC,QAAQ,mCAAoC;IAE5D;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,mBAAmB,EAC/B,OAAO,GAAE,oBAAyB,GACjC,mBAAmB;IAoBtB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE;CAgBrD;AAED,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,CAAC"}
|