brighterscript 1.0.0-alpha.5 → 1.0.0-alpha.51
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 +79 -138
- package/bsconfig.schema.json +196 -5
- package/dist/ActionPipeline.d.ts +10 -0
- package/dist/ActionPipeline.js +40 -0
- package/dist/ActionPipeline.js.map +1 -0
- package/dist/AstValidationSegmenter.d.ts +45 -0
- package/dist/AstValidationSegmenter.js +322 -0
- package/dist/AstValidationSegmenter.js.map +1 -0
- package/dist/BsConfig.d.ts +161 -43
- package/dist/BusyStatusTracker.d.ts +61 -0
- package/dist/BusyStatusTracker.js +148 -0
- package/dist/BusyStatusTracker.js.map +1 -0
- package/dist/Cache.d.ts +3 -8
- package/dist/Cache.js +9 -14
- package/dist/Cache.js.map +1 -1
- package/dist/CacheVerifier.d.ts +7 -0
- package/dist/CacheVerifier.js +20 -0
- package/dist/CacheVerifier.js.map +1 -0
- package/dist/CodeActionUtil.d.ts +29 -4
- package/dist/CodeActionUtil.js +22 -5
- package/dist/CodeActionUtil.js.map +1 -1
- package/dist/CommentFlagProcessor.d.ts +20 -15
- package/dist/CommentFlagProcessor.js +143 -58
- package/dist/CommentFlagProcessor.js.map +1 -1
- package/dist/CrossScopeValidator.d.ts +68 -0
- package/dist/CrossScopeValidator.js +650 -0
- package/dist/CrossScopeValidator.js.map +1 -0
- package/dist/DependencyGraph.d.ts +8 -3
- package/dist/DependencyGraph.js +49 -16
- package/dist/DependencyGraph.js.map +1 -1
- package/dist/DiagnosticCollection.d.ts +21 -5
- package/dist/DiagnosticCollection.js +77 -24
- package/dist/DiagnosticCollection.js.map +1 -1
- package/dist/DiagnosticFilterer.d.ts +27 -6
- package/dist/DiagnosticFilterer.js +273 -60
- package/dist/DiagnosticFilterer.js.map +1 -1
- package/dist/DiagnosticManager.d.ts +83 -0
- package/dist/DiagnosticManager.js +422 -0
- package/dist/DiagnosticManager.js.map +1 -0
- package/dist/DiagnosticMessages.d.ts +602 -196
- package/dist/DiagnosticMessages.js +926 -342
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
- package/dist/DiagnosticSeverityAdjuster.js +45 -0
- package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
- package/dist/FunctionScope.d.ts +28 -0
- package/dist/FunctionScope.js +52 -0
- package/dist/FunctionScope.js.map +1 -0
- package/dist/KeyedThrottler.d.ts +3 -3
- package/dist/KeyedThrottler.js +3 -3
- package/dist/KeyedThrottler.js.map +1 -1
- package/dist/LanguageServer.d.ts +136 -104
- package/dist/LanguageServer.js +577 -741
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Logger.d.ts +17 -13
- package/dist/Logger.js +64 -34
- package/dist/Logger.js.map +1 -1
- package/dist/PluginInterface.d.ts +32 -10
- package/dist/PluginInterface.js +117 -7
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +302 -98
- package/dist/Program.js +1613 -726
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +39 -22
- package/dist/ProgramBuilder.js +245 -179
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +227 -106
- package/dist/Scope.js +609 -557
- package/dist/Scope.js.map +1 -1
- package/dist/ScopeNamespaceLookup.d.ts +73 -0
- package/dist/ScopeNamespaceLookup.js +242 -0
- package/dist/ScopeNamespaceLookup.js.map +1 -0
- package/dist/SemanticTokenUtils.js +5 -1
- package/dist/SemanticTokenUtils.js.map +1 -1
- package/dist/Stopwatch.d.ts +4 -0
- package/dist/Stopwatch.js +8 -1
- package/dist/Stopwatch.js.map +1 -1
- package/dist/SymbolTable.d.ts +145 -26
- package/dist/SymbolTable.js +575 -64
- package/dist/SymbolTable.js.map +1 -1
- package/dist/SymbolTypeFlag.d.ts +9 -0
- package/dist/SymbolTypeFlag.js +14 -0
- package/dist/SymbolTypeFlag.js.map +1 -0
- package/dist/Throttler.d.ts +12 -0
- package/dist/Throttler.js +39 -0
- package/dist/Throttler.js.map +1 -1
- package/dist/Watcher.d.ts +0 -3
- package/dist/Watcher.js +0 -3
- package/dist/Watcher.js.map +1 -1
- package/dist/XmlScope.d.ts +5 -15
- package/dist/XmlScope.js +34 -90
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/CachedLookups.d.ts +50 -0
- package/dist/astUtils/CachedLookups.js +337 -0
- package/dist/astUtils/CachedLookups.js.map +1 -0
- package/dist/astUtils/Editor.d.ts +69 -0
- package/dist/astUtils/Editor.js +245 -0
- package/dist/astUtils/Editor.js.map +1 -0
- package/dist/astUtils/creators.d.ts +54 -19
- package/dist/astUtils/creators.js +242 -42
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +199 -85
- package/dist/astUtils/reflection.js +518 -145
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/stackedVisitor.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +117 -53
- package/dist/astUtils/visitors.js +95 -15
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/xml.d.ts +9 -8
- package/dist/astUtils/xml.js +12 -7
- package/dist/astUtils/xml.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +26 -4
- package/dist/bscPlugin/BscPlugin.js +96 -4
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
- package/dist/bscPlugin/CallExpressionInfo.js +142 -0
- package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
- package/dist/bscPlugin/FileWriter.d.ts +19 -0
- package/dist/bscPlugin/FileWriter.js +79 -0
- package/dist/bscPlugin/FileWriter.js.map +1 -0
- package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
- package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
- package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +109 -7
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +676 -26
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
- package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
- package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
- package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
- package/dist/bscPlugin/codeActions/codeActionHelpers.js +31 -0
- package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +65 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.js +633 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
- package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
- package/dist/bscPlugin/definition/DefinitionProvider.js +220 -0
- package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
- package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
- package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
- package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
- package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
- package/dist/bscPlugin/hover/HoverProcessor.js +238 -0
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
- package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
- package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
- package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +77 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +164 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
- package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
- package/dist/bscPlugin/serialize/BslibManager.js +46 -0
- package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
- package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
- package/dist/bscPlugin/serialize/FileSerializer.js +80 -0
- package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
- package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
- package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
- package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +34 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +504 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
- package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
- package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +51 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +714 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
- package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
- package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +158 -0
- package/dist/bscPlugin/validation/ScopeValidator.js +1481 -0
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
- package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js +50 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
- package/dist/cli.js +140 -28
- package/dist/cli.js.map +1 -1
- package/dist/common/Sequencer.d.ts +53 -0
- package/dist/common/Sequencer.js +233 -0
- package/dist/common/Sequencer.js.map +1 -0
- package/dist/deferred.d.ts +5 -3
- package/dist/deferred.js +10 -0
- package/dist/deferred.js.map +1 -1
- package/dist/diagnosticUtils.d.ts +61 -4
- package/dist/diagnosticUtils.js +285 -25
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/examples/plugins/removePrint.d.ts +2 -2
- package/dist/examples/plugins/removePrint.js +8 -12
- package/dist/examples/plugins/removePrint.js.map +1 -1
- package/dist/files/AssetFile.d.ts +24 -0
- package/dist/files/AssetFile.js +25 -0
- package/dist/files/AssetFile.js.map +1 -0
- package/dist/files/BrsFile.d.ts +161 -87
- package/dist/files/BrsFile.js +919 -936
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BscFile.d.ts +102 -0
- package/dist/files/BscFile.js +15 -0
- package/dist/files/BscFile.js.map +1 -0
- package/dist/files/Factory.d.ts +25 -0
- package/dist/files/Factory.js +22 -0
- package/dist/files/Factory.js.map +1 -0
- package/dist/files/LazyFileData.d.ts +21 -0
- package/dist/files/LazyFileData.js +54 -0
- package/dist/files/LazyFileData.js.map +1 -0
- package/dist/files/XmlFile.d.ts +80 -41
- package/dist/files/XmlFile.js +162 -137
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/globalCallables.d.ts +3 -1
- package/dist/globalCallables.js +424 -184
- package/dist/globalCallables.js.map +1 -1
- package/dist/index.d.ts +32 -4
- package/dist/index.js +54 -7
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +987 -125
- package/dist/interfaces.js +21 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/Lexer.d.ts +51 -12
- package/dist/lexer/Lexer.js +214 -65
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Token.d.ts +27 -11
- package/dist/lexer/Token.js +10 -2
- package/dist/lexer/Token.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +48 -2
- package/dist/lexer/TokenKind.js +167 -10
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/logging.d.ts +14 -0
- package/dist/logging.js +29 -0
- package/dist/logging.js.map +1 -0
- package/dist/lsp/ActionQueue.d.ts +35 -0
- package/dist/lsp/ActionQueue.js +115 -0
- package/dist/lsp/ActionQueue.js.map +1 -0
- package/dist/lsp/DocumentManager.d.ts +63 -0
- package/dist/lsp/DocumentManager.js +122 -0
- package/dist/lsp/DocumentManager.js.map +1 -0
- package/dist/lsp/LspProject.d.ts +287 -0
- package/dist/lsp/LspProject.js +3 -0
- package/dist/lsp/LspProject.js.map +1 -0
- package/dist/lsp/PathFilterer.d.ts +75 -0
- package/dist/lsp/PathFilterer.js +196 -0
- package/dist/lsp/PathFilterer.js.map +1 -0
- package/dist/lsp/Project.d.ts +200 -0
- package/dist/lsp/Project.js +562 -0
- package/dist/lsp/Project.js.map +1 -0
- package/dist/lsp/ProjectManager.d.ts +288 -0
- package/dist/lsp/ProjectManager.js +967 -0
- package/dist/lsp/ProjectManager.js.map +1 -0
- package/dist/lsp/ReaderWriterManager.d.ts +21 -0
- package/dist/lsp/ReaderWriterManager.js +60 -0
- package/dist/lsp/ReaderWriterManager.js.map +1 -0
- package/dist/lsp/worker/MessageHandler.d.ts +99 -0
- package/dist/lsp/worker/MessageHandler.js +138 -0
- package/dist/lsp/worker/MessageHandler.js.map +1 -0
- package/dist/lsp/worker/WorkerPool.d.ts +38 -0
- package/dist/lsp/worker/WorkerPool.js +78 -0
- package/dist/lsp/worker/WorkerPool.js.map +1 -0
- package/dist/lsp/worker/WorkerThreadProject.d.ts +168 -0
- package/dist/lsp/worker/WorkerThreadProject.js +205 -0
- package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
- package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
- package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
- package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
- package/dist/lsp/worker/run.js +14 -0
- package/dist/lsp/worker/run.js.map +1 -0
- package/dist/parser/AstNode.d.ts +205 -0
- package/dist/parser/AstNode.js +305 -0
- package/dist/parser/AstNode.js.map +1 -0
- package/dist/parser/BrightScriptDocParser.d.ts +56 -0
- package/dist/parser/BrightScriptDocParser.js +294 -0
- package/dist/parser/BrightScriptDocParser.js.map +1 -0
- package/dist/parser/BrsTranspileState.d.ts +22 -3
- package/dist/parser/BrsTranspileState.js +19 -0
- package/dist/parser/BrsTranspileState.js.map +1 -1
- package/dist/parser/Expression.d.ts +601 -220
- package/dist/parser/Expression.js +1516 -502
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.d.ts +137 -121
- package/dist/parser/Parser.js +1808 -982
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/SGParser.d.ts +30 -13
- package/dist/parser/SGParser.js +94 -56
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +134 -46
- package/dist/parser/SGTypes.js +206 -115
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/parser/Statement.d.ts +854 -267
- package/dist/parser/Statement.js +2416 -621
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +30 -14
- package/dist/parser/TranspileState.js +124 -27
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/preprocessor/Manifest.d.ts +6 -6
- package/dist/preprocessor/Manifest.js +17 -38
- package/dist/preprocessor/Manifest.js.map +1 -1
- package/dist/roku-types/data.json +20554 -0
- package/dist/roku-types/index.d.ts +5726 -0
- package/dist/roku-types/index.js +11 -0
- package/dist/roku-types/index.js.map +1 -0
- package/dist/types/ArrayType.d.ts +12 -5
- package/dist/types/ArrayType.js +95 -25
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/AssociativeArrayType.d.ts +15 -0
- package/dist/types/AssociativeArrayType.js +64 -0
- package/dist/types/AssociativeArrayType.js.map +1 -0
- package/dist/types/BaseFunctionType.d.ts +10 -0
- package/dist/types/BaseFunctionType.js +26 -0
- package/dist/types/BaseFunctionType.js.map +1 -0
- package/dist/types/BooleanType.d.ts +9 -5
- package/dist/types/BooleanType.js +19 -8
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BscType.d.ts +41 -3
- package/dist/types/BscType.js +152 -0
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BscTypeKind.d.ts +28 -0
- package/dist/types/BscTypeKind.js +33 -0
- package/dist/types/BscTypeKind.js.map +1 -0
- package/dist/types/BuiltInInterfaceAdder.d.ts +28 -0
- package/dist/types/BuiltInInterfaceAdder.js +212 -0
- package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
- package/dist/types/CallFuncableType.d.ts +24 -0
- package/dist/types/CallFuncableType.js +91 -0
- package/dist/types/CallFuncableType.js.map +1 -0
- package/dist/types/ClassType.d.ts +17 -0
- package/dist/types/ClassType.js +63 -0
- package/dist/types/ClassType.js.map +1 -0
- package/dist/types/ComponentType.d.ts +22 -0
- package/dist/types/ComponentType.js +110 -0
- package/dist/types/ComponentType.js.map +1 -0
- package/dist/types/DoubleType.d.ts +10 -5
- package/dist/types/DoubleType.js +21 -17
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DynamicType.d.ts +13 -5
- package/dist/types/DynamicType.js +26 -5
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/EnumType.d.ts +42 -0
- package/dist/types/EnumType.js +101 -0
- package/dist/types/EnumType.js.map +1 -0
- package/dist/types/FloatType.d.ts +10 -5
- package/dist/types/FloatType.js +21 -17
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FunctionType.d.ts +8 -22
- package/dist/types/FunctionType.js +25 -63
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/InheritableType.d.ts +29 -0
- package/dist/types/InheritableType.js +173 -0
- package/dist/types/InheritableType.js.map +1 -0
- package/dist/types/InlineInterfaceType.d.ts +5 -0
- package/dist/types/InlineInterfaceType.js +17 -0
- package/dist/types/InlineInterfaceType.js.map +1 -0
- package/dist/types/IntegerType.d.ts +10 -5
- package/dist/types/IntegerType.js +21 -17
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +14 -6
- package/dist/types/InterfaceType.js +30 -15
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/IntersectionType.d.ts +29 -0
- package/dist/types/IntersectionType.js +256 -0
- package/dist/types/IntersectionType.js.map +1 -0
- package/dist/types/InvalidType.d.ts +10 -5
- package/dist/types/InvalidType.js +21 -9
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +10 -5
- package/dist/types/LongIntegerType.js +21 -17
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/NamespaceType.d.ts +12 -0
- package/dist/types/NamespaceType.js +28 -0
- package/dist/types/NamespaceType.js.map +1 -0
- package/dist/types/ObjectType.d.ts +12 -5
- package/dist/types/ObjectType.js +25 -8
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +123 -0
- package/dist/types/ReferenceType.js +726 -0
- package/dist/types/ReferenceType.js.map +1 -0
- package/dist/types/StringType.d.ts +12 -5
- package/dist/types/StringType.js +23 -8
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/TypeStatementType.d.ts +19 -0
- package/dist/types/TypeStatementType.js +56 -0
- package/dist/types/TypeStatementType.js.map +1 -0
- package/dist/types/TypedFunctionType.d.ts +34 -0
- package/dist/types/TypedFunctionType.js +157 -0
- package/dist/types/TypedFunctionType.js.map +1 -0
- package/dist/types/UninitializedType.d.ts +11 -6
- package/dist/types/UninitializedType.js +20 -11
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/UnionType.d.ts +27 -0
- package/dist/types/UnionType.js +196 -0
- package/dist/types/UnionType.js.map +1 -0
- package/dist/types/VoidType.d.ts +11 -5
- package/dist/types/VoidType.js +22 -8
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/helpers.d.ts +51 -0
- package/dist/types/helpers.js +329 -0
- package/dist/types/helpers.js.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.js +39 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/roFunctionType.d.ts +11 -0
- package/dist/types/roFunctionType.js +37 -0
- package/dist/types/roFunctionType.js.map +1 -0
- package/dist/util.d.ts +325 -185
- package/dist/util.js +2135 -568
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +9 -15
- package/dist/validators/ClassValidator.js +93 -138
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +183 -138
- package/CHANGELOG.md +0 -1188
- package/dist/astUtils/creators.spec.js +0 -21
- package/dist/astUtils/creators.spec.js.map +0 -1
- package/dist/astUtils/index.d.ts +0 -7
- package/dist/astUtils/index.js +0 -26
- package/dist/astUtils/index.js.map +0 -1
- package/dist/astUtils/reflection.spec.d.ts +0 -1
- package/dist/astUtils/reflection.spec.js +0 -292
- package/dist/astUtils/reflection.spec.js.map +0 -1
- package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
- package/dist/astUtils/stackedVisitor.spec.js +0 -79
- package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
- package/dist/astUtils/visitors.spec.d.ts +0 -1
- package/dist/astUtils/visitors.spec.js +0 -854
- package/dist/astUtils/visitors.spec.js.map +0 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -194
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +0 -45
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
- package/dist/files/BrsFile.Class.spec.d.ts +0 -1
- package/dist/files/BrsFile.Class.spec.js +0 -1081
- package/dist/files/BrsFile.Class.spec.js.map +0 -1
- package/dist/files/BrsFile.spec.d.ts +0 -1
- package/dist/files/BrsFile.spec.js +0 -2524
- package/dist/files/BrsFile.spec.js.map +0 -1
- package/dist/files/XmlFile.spec.d.ts +0 -1
- package/dist/files/XmlFile.spec.js +0 -1065
- package/dist/files/XmlFile.spec.js.map +0 -1
- package/dist/files/tests/imports.spec.d.ts +0 -1
- package/dist/files/tests/imports.spec.js +0 -241
- package/dist/files/tests/imports.spec.js.map +0 -1
- package/dist/lexer/Character.spec.d.ts +0 -1
- package/dist/lexer/Character.spec.js +0 -27
- package/dist/lexer/Character.spec.js.map +0 -1
- package/dist/lexer/Lexer.spec.d.ts +0 -1
- package/dist/lexer/Lexer.spec.js +0 -1101
- package/dist/lexer/Lexer.spec.js.map +0 -1
- package/dist/lexer/index.d.ts +0 -3
- package/dist/lexer/index.js +0 -17
- package/dist/lexer/index.js.map +0 -1
- package/dist/parser/Parser.Class.spec.d.ts +0 -1
- package/dist/parser/Parser.Class.spec.js +0 -390
- package/dist/parser/Parser.Class.spec.js.map +0 -1
- package/dist/parser/Parser.spec.d.ts +0 -4
- package/dist/parser/Parser.spec.js +0 -1216
- package/dist/parser/Parser.spec.js.map +0 -1
- package/dist/parser/SGParser.spec.d.ts +0 -1
- package/dist/parser/SGParser.spec.js +0 -145
- package/dist/parser/SGParser.spec.js.map +0 -1
- package/dist/parser/SGTypes.spec.d.ts +0 -1
- package/dist/parser/SGTypes.spec.js +0 -351
- package/dist/parser/SGTypes.spec.js.map +0 -1
- package/dist/parser/Statement.spec.d.ts +0 -1
- package/dist/parser/Statement.spec.js +0 -94
- package/dist/parser/Statement.spec.js.map +0 -1
- package/dist/parser/index.d.ts +0 -3
- package/dist/parser/index.js +0 -16
- package/dist/parser/index.js.map +0 -1
- package/dist/parser/tests/Parser.spec.d.ts +0 -18
- package/dist/parser/tests/Parser.spec.js +0 -35
- package/dist/parser/tests/Parser.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/For.spec.js +0 -161
- package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -106
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/If.spec.js +0 -551
- package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/While.spec.js +0 -107
- package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
- package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Additive.spec.js +0 -99
- package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -254
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -266
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
- package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Boolean.spec.js +0 -83
- package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
- package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Call.spec.js +0 -134
- package/dist/parser/tests/expression/Call.spec.js.map +0 -1
- package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Exponential.spec.js +0 -37
- package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
- package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Function.spec.js +0 -403
- package/dist/parser/tests/expression/Function.spec.js.map +0 -1
- package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Indexing.spec.js +0 -219
- package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
- package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -201
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -105
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
- package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Primary.spec.js +0 -149
- package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
- package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Relational.spec.js +0 -83
- package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -202
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -323
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
- package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Declaration.spec.js +0 -108
- package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
- package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Dim.spec.js +0 -73
- package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
- package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Function.spec.js +0 -332
- package/dist/parser/tests/statement/Function.spec.js.map +0 -1
- package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Goto.spec.js +0 -50
- package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
- package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Increment.spec.js +0 -117
- package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Misc.spec.js +0 -333
- package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
- package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +0 -181
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -94
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Set.spec.js +0 -218
- package/dist/parser/tests/statement/Set.spec.js.map +0 -1
- package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Stop.spec.js +0 -37
- package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
- package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Throw.spec.js +0 -35
- package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
- package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
- package/dist/parser/tests/statement/TryCatch.spec.js +0 -140
- package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
- package/dist/preprocessor/Chunk.d.ts +0 -82
- package/dist/preprocessor/Chunk.js +0 -77
- package/dist/preprocessor/Chunk.js.map +0 -1
- package/dist/preprocessor/Manifest.spec.d.ts +0 -0
- package/dist/preprocessor/Manifest.spec.js +0 -105
- package/dist/preprocessor/Manifest.spec.js.map +0 -1
- package/dist/preprocessor/Preprocessor.d.ts +0 -60
- package/dist/preprocessor/Preprocessor.js +0 -156
- package/dist/preprocessor/Preprocessor.js.map +0 -1
- package/dist/preprocessor/Preprocessor.spec.d.ts +0 -1
- package/dist/preprocessor/Preprocessor.spec.js +0 -152
- package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
- package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
- package/dist/preprocessor/PreprocessorParser.js +0 -194
- package/dist/preprocessor/PreprocessorParser.js.map +0 -1
- package/dist/preprocessor/PreprocessorParser.spec.d.ts +0 -1
- package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
- package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
- package/dist/preprocessor/index.d.ts +0 -3
- package/dist/preprocessor/index.js +0 -16
- package/dist/preprocessor/index.js.map +0 -1
- package/dist/types/ArrayType.spec.d.ts +0 -1
- package/dist/types/ArrayType.spec.js +0 -30
- package/dist/types/ArrayType.spec.js.map +0 -1
- package/dist/types/BooleanType.spec.d.ts +0 -1
- package/dist/types/BooleanType.spec.js +0 -12
- package/dist/types/BooleanType.spec.js.map +0 -1
- package/dist/types/CustomType.d.ts +0 -10
- package/dist/types/CustomType.js +0 -35
- package/dist/types/CustomType.js.map +0 -1
- package/dist/types/DoubleType.spec.d.ts +0 -1
- package/dist/types/DoubleType.spec.js +0 -12
- package/dist/types/DoubleType.spec.js.map +0 -1
- package/dist/types/DynamicType.spec.d.ts +0 -1
- package/dist/types/DynamicType.spec.js +0 -12
- package/dist/types/DynamicType.spec.js.map +0 -1
- package/dist/types/FloatType.spec.d.ts +0 -1
- package/dist/types/FloatType.spec.js +0 -12
- package/dist/types/FloatType.spec.js.map +0 -1
- package/dist/types/FunctionType.spec.d.ts +0 -1
- package/dist/types/FunctionType.spec.js +0 -29
- package/dist/types/FunctionType.spec.js.map +0 -1
- package/dist/types/IntegerType.spec.d.ts +0 -1
- package/dist/types/IntegerType.spec.js +0 -12
- package/dist/types/IntegerType.spec.js.map +0 -1
- package/dist/types/InvalidType.spec.d.ts +0 -1
- package/dist/types/InvalidType.spec.js +0 -12
- package/dist/types/InvalidType.spec.js.map +0 -1
- package/dist/types/LazyType.d.ts +0 -15
- package/dist/types/LazyType.js +0 -32
- package/dist/types/LazyType.js.map +0 -1
- package/dist/types/LongIntegerType.spec.d.ts +0 -1
- package/dist/types/LongIntegerType.spec.js +0 -12
- package/dist/types/LongIntegerType.spec.js.map +0 -1
- package/dist/types/ObjectType.spec.d.ts +0 -1
- package/dist/types/ObjectType.spec.js +0 -12
- package/dist/types/ObjectType.spec.js.map +0 -1
- package/dist/types/StringType.spec.d.ts +0 -1
- package/dist/types/StringType.spec.js +0 -12
- package/dist/types/StringType.spec.js.map +0 -1
- package/dist/types/VoidType.spec.d.ts +0 -1
- package/dist/types/VoidType.spec.js +0 -12
- package/dist/types/VoidType.spec.js.map +0 -1
- /package/dist/{astUtils/creators.spec.d.ts → lsp/worker/run.d.ts} +0 -0
|
@@ -0,0 +1,726 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAllRequiredSymbolNames = exports.ReferenceTypeWithDefault = exports.ParamTypeFromValueReferenceType = exports.ArrayDefaultTypeReferenceType = exports.BinaryOperatorReferenceType = exports.TypePropertyReferenceType = exports.ReferenceType = exports.referenceTypeFactory = void 0;
|
|
4
|
+
const reflection_1 = require("../astUtils/reflection");
|
|
5
|
+
const BscType_1 = require("./BscType");
|
|
6
|
+
const DynamicType_1 = require("./DynamicType");
|
|
7
|
+
const BscTypeKind_1 = require("./BscTypeKind");
|
|
8
|
+
const util_1 = require("../util");
|
|
9
|
+
function referenceTypeFactory(memberKey, fullName, flags, tableProvider) {
|
|
10
|
+
return new ReferenceType(memberKey, fullName, flags, tableProvider);
|
|
11
|
+
}
|
|
12
|
+
exports.referenceTypeFactory = referenceTypeFactory;
|
|
13
|
+
class ReferenceType extends BscType_1.BscType {
|
|
14
|
+
/**
|
|
15
|
+
* ReferenceTypes are used when the actual type may be resolved later from a Symbol table
|
|
16
|
+
* @param memberKey which key do we use to look up this type in the given table?
|
|
17
|
+
* @param fullName the full/display name for this type
|
|
18
|
+
* @param flags is this type available at typetime, runtime, etc.
|
|
19
|
+
* @param tableProvider function that returns a SymbolTable that we use for the lookup.
|
|
20
|
+
*/
|
|
21
|
+
constructor(memberKey, fullName, flags, tableProvider) {
|
|
22
|
+
super(memberKey);
|
|
23
|
+
this.memberKey = memberKey;
|
|
24
|
+
this.fullName = fullName;
|
|
25
|
+
this.flags = flags;
|
|
26
|
+
this.tableProvider = tableProvider;
|
|
27
|
+
this.kind = BscTypeKind_1.BscTypeKind.ReferenceType;
|
|
28
|
+
this.circRefCount = 0;
|
|
29
|
+
this.referenceChain = new Set();
|
|
30
|
+
this.propertyTypeReference = new Map();
|
|
31
|
+
this.memberTypeReferences = new Map();
|
|
32
|
+
this.callFuncMemberTypeReferences = new Map();
|
|
33
|
+
this.futureMemberTableProvider = () => {
|
|
34
|
+
return {
|
|
35
|
+
name: `FutureMemberTableProvider: '${this.__identifier}'`,
|
|
36
|
+
getSymbolType: (innerName, innerOptions) => {
|
|
37
|
+
const resolvedType = this.resolve();
|
|
38
|
+
if (resolvedType) {
|
|
39
|
+
return resolvedType.getMemberType(innerName, innerOptions);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
setCachedType: (innerName, innerResolvedTypeCacheEntry, options) => {
|
|
43
|
+
const resolvedType = this.resolve();
|
|
44
|
+
if (resolvedType) {
|
|
45
|
+
resolvedType.memberTable.setCachedType(innerName, innerResolvedTypeCacheEntry, options);
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
addSibling: (symbolTable) => {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
const resolvedType = this.resolve();
|
|
51
|
+
if (resolvedType) {
|
|
52
|
+
(_b = (_a = resolvedType.memberTable) === null || _a === void 0 ? void 0 : _a.addSibling) === null || _b === void 0 ? void 0 : _b.call(_a, symbolTable);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
this.futureCallFuncMemberTableProvider = () => {
|
|
58
|
+
return {
|
|
59
|
+
name: `FutureCallFuncMemberTableProvider: '${this.__identifier}'`,
|
|
60
|
+
getSymbolType: (innerName, innerOptions) => {
|
|
61
|
+
const resolvedType = this.resolve();
|
|
62
|
+
if ((0, reflection_1.isComponentType)(resolvedType)) {
|
|
63
|
+
return resolvedType.getCallFuncType(innerName, innerOptions);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
setCachedType: (innerName, innerResolvedTypeCacheEntry, options) => {
|
|
67
|
+
const resolvedType = this.resolve();
|
|
68
|
+
if ((0, reflection_1.isComponentType)(resolvedType)) {
|
|
69
|
+
resolvedType.getCallFuncTable().setCachedType(innerName, innerResolvedTypeCacheEntry, options);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
addSibling: (symbolTable) => {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
const resolvedType = this.resolve();
|
|
75
|
+
if ((0, reflection_1.isComponentType)(resolvedType)) {
|
|
76
|
+
(_b = (_a = resolvedType.getCallFuncTable()) === null || _a === void 0 ? void 0 : _a.addSibling) === null || _b === void 0 ? void 0 : _b.call(_a, symbolTable);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
// eslint-disable-next-line no-constructor-return
|
|
82
|
+
return new Proxy(this, {
|
|
83
|
+
get: (target, propName, receiver) => {
|
|
84
|
+
if (propName === '__reflection') {
|
|
85
|
+
// Cheeky way to get `isReferenceType` reflection to work
|
|
86
|
+
return this.__reflection;
|
|
87
|
+
}
|
|
88
|
+
if (propName === '__identifier') {
|
|
89
|
+
// Cheeky way to get `isReferenceType` reflection to work
|
|
90
|
+
return this.__identifier;
|
|
91
|
+
}
|
|
92
|
+
if (propName === 'fullName') {
|
|
93
|
+
return this.fullName;
|
|
94
|
+
}
|
|
95
|
+
if (propName === 'isResolvable') {
|
|
96
|
+
return () => {
|
|
97
|
+
var _a, _b;
|
|
98
|
+
let resultSoFar = this.resolve();
|
|
99
|
+
while (resultSoFar && (0, reflection_1.isReferenceType)(resultSoFar)) {
|
|
100
|
+
resultSoFar = (_b = (_a = resultSoFar).getTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
101
|
+
}
|
|
102
|
+
return !!resultSoFar;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
if (propName === 'getCircularReferenceInfo') {
|
|
106
|
+
return (stopAtTypes = []) => {
|
|
107
|
+
return this.getCircularReferenceInfo(stopAtTypes);
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (propName === 'getTarget') {
|
|
111
|
+
return () => {
|
|
112
|
+
return this.resolve();
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (propName === 'tableProvider') {
|
|
116
|
+
return this.tableProvider;
|
|
117
|
+
}
|
|
118
|
+
if (propName === 'isEqual') {
|
|
119
|
+
//Need to be able to check equality without resolution, because resolution need to check equality
|
|
120
|
+
//To see if you need to make a UnionType
|
|
121
|
+
return (targetType, data) => {
|
|
122
|
+
if (!targetType) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
const resolvedType = this.resolve();
|
|
126
|
+
let equal = false;
|
|
127
|
+
if (resolvedType && !(0, reflection_1.isReferenceType)(resolvedType)) {
|
|
128
|
+
equal = resolvedType.isEqual(targetType, data);
|
|
129
|
+
}
|
|
130
|
+
else if ((0, reflection_1.isReferenceType)(targetType)) {
|
|
131
|
+
equal = this.fullName.toLowerCase() === targetType.fullName.toLowerCase() &&
|
|
132
|
+
(this.tableProvider === targetType.tableProvider ||
|
|
133
|
+
this.tableProvider().name === targetType.tableProvider().name);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
equal = targetType.isEqual(this, data);
|
|
137
|
+
}
|
|
138
|
+
return equal;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (propName === 'isTypeCompatible') {
|
|
142
|
+
//Need to be able to check equality without resolution, because resolution need to check equality
|
|
143
|
+
//To see if you need to make a UnionType
|
|
144
|
+
return (targetType, data) => {
|
|
145
|
+
if (!targetType) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
if ((0, reflection_1.isDynamicType)(targetType)) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
const resolvedType = this.resolve();
|
|
152
|
+
if (resolvedType && !(0, reflection_1.isReferenceType)(resolvedType)) {
|
|
153
|
+
return resolvedType.isTypeCompatible(targetType, data);
|
|
154
|
+
}
|
|
155
|
+
else if ((0, reflection_1.isReferenceType)(targetType)) {
|
|
156
|
+
return this.fullName.toLowerCase() === targetType.fullName.toLowerCase() &&
|
|
157
|
+
this.tableProvider === targetType.tableProvider;
|
|
158
|
+
}
|
|
159
|
+
return targetType.isTypeCompatible(this, data);
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
//There may be some need to specifically get members on ReferenceType in the future
|
|
163
|
+
// eg: if (Reflect.has(target, name)) {
|
|
164
|
+
// return Reflect.get(target, propName, receiver);
|
|
165
|
+
let innerType = this.resolve();
|
|
166
|
+
if (!innerType) {
|
|
167
|
+
// No real BscType found - we may need to handle some specific cases
|
|
168
|
+
if (propName === 'getMemberType') {
|
|
169
|
+
// We're looking for a member of a reference type
|
|
170
|
+
// Since we don't know what type this is, yet, return ReferenceType
|
|
171
|
+
return (memberName, options) => {
|
|
172
|
+
const resolvedType = this.resolve();
|
|
173
|
+
if (resolvedType) {
|
|
174
|
+
return resolvedType.getMemberType(memberName, options);
|
|
175
|
+
}
|
|
176
|
+
const refLookUp = `${memberName.toLowerCase()}-${options === null || options === void 0 ? void 0 : options.flags}`;
|
|
177
|
+
let memberTypeReference = this.memberTypeReferences.get(refLookUp);
|
|
178
|
+
if (memberTypeReference) {
|
|
179
|
+
return memberTypeReference;
|
|
180
|
+
}
|
|
181
|
+
memberTypeReference = new ReferenceType(memberName, this.makeMemberFullName(memberName), options.flags, this.futureMemberTableProvider);
|
|
182
|
+
this.memberTypeReferences.set(refLookUp, memberTypeReference);
|
|
183
|
+
return memberTypeReference;
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
else if (propName === 'getCallFuncType') {
|
|
187
|
+
// We're looking for a callfunc member of a reference type
|
|
188
|
+
// Since we don't know what type this is, yet, return ReferenceType
|
|
189
|
+
return (memberName, options) => {
|
|
190
|
+
const resolvedType = this.resolve();
|
|
191
|
+
if ((0, reflection_1.isComponentType)(resolvedType)) {
|
|
192
|
+
return resolvedType.getCallFuncType(memberName, options);
|
|
193
|
+
}
|
|
194
|
+
const refLookUp = `${memberName.toLowerCase()}-${options.flags}-callfunc`;
|
|
195
|
+
let callFuncMemberTypeReference = this.callFuncMemberTypeReferences.get(refLookUp);
|
|
196
|
+
if (callFuncMemberTypeReference) {
|
|
197
|
+
return callFuncMemberTypeReference;
|
|
198
|
+
}
|
|
199
|
+
callFuncMemberTypeReference = new ReferenceType(memberName, this.makeMemberFullName(memberName), options.flags, this.futureCallFuncMemberTableProvider);
|
|
200
|
+
this.callFuncMemberTypeReferences.set(refLookUp, callFuncMemberTypeReference);
|
|
201
|
+
return callFuncMemberTypeReference;
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
else if (propName === 'toString') {
|
|
205
|
+
// This type was never found
|
|
206
|
+
// For diagnostics, we should return the expected name of of the type
|
|
207
|
+
return () => this.fullName;
|
|
208
|
+
}
|
|
209
|
+
else if (propName === 'toTypeString') {
|
|
210
|
+
// For transpilation, we should 'dynamic'
|
|
211
|
+
return () => 'dynamic';
|
|
212
|
+
}
|
|
213
|
+
else if (propName === 'returnType') {
|
|
214
|
+
let propRefType = this.propertyTypeReference.get(propName);
|
|
215
|
+
if (!propRefType) {
|
|
216
|
+
propRefType = new TypePropertyReferenceType(this, propName);
|
|
217
|
+
this.propertyTypeReference.set(propName, propRefType);
|
|
218
|
+
}
|
|
219
|
+
return propRefType;
|
|
220
|
+
}
|
|
221
|
+
else if (propName === 'memberTable') {
|
|
222
|
+
return this.memberTable;
|
|
223
|
+
}
|
|
224
|
+
else if (propName === 'getMemberTable') {
|
|
225
|
+
return () => {
|
|
226
|
+
return this.memberTable;
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
else if (propName === 'callFuncTable') {
|
|
230
|
+
return this.callFuncMemberTable;
|
|
231
|
+
}
|
|
232
|
+
else if (propName === 'getCallFuncTable') {
|
|
233
|
+
return () => {
|
|
234
|
+
return this.callFuncMemberTable;
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
else if (propName === 'isTypeCompatible') {
|
|
238
|
+
return (targetType) => {
|
|
239
|
+
return (0, reflection_1.isDynamicType)(targetType);
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
else if (propName === 'isEqual') {
|
|
243
|
+
return (targetType) => {
|
|
244
|
+
if ((0, reflection_1.isReferenceType)(targetType)) {
|
|
245
|
+
return this.fullName.toLowerCase() === targetType.toString().toLowerCase() &&
|
|
246
|
+
this.tableProvider() === targetType.tableProvider();
|
|
247
|
+
}
|
|
248
|
+
return false;
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
else if (propName === 'addBuiltInInterfaces') {
|
|
252
|
+
// this is an unknown type. There is no use in adding built in interfaces
|
|
253
|
+
// return no-op function
|
|
254
|
+
return () => { };
|
|
255
|
+
}
|
|
256
|
+
else if (propName === 'hasAddedBuiltInInterfaces') {
|
|
257
|
+
// this is an unknown type. There is no use in adding built in interfaces
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
else if (propName === 'isBuiltIn') {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (!innerType) {
|
|
265
|
+
innerType = DynamicType_1.DynamicType.instance;
|
|
266
|
+
}
|
|
267
|
+
const result = Reflect.get(innerType, propName, innerType);
|
|
268
|
+
return result;
|
|
269
|
+
},
|
|
270
|
+
set: (target, name, value, receiver) => {
|
|
271
|
+
//There may be some need to specifically set members on ReferenceType in the future
|
|
272
|
+
// eg: if (Reflect.has(target, name)) {
|
|
273
|
+
// return Reflect.set(target, name, value, receiver);
|
|
274
|
+
let innerType = this.resolve();
|
|
275
|
+
// Look for circular references
|
|
276
|
+
if (!innerType || this.referenceChain.has(innerType)) {
|
|
277
|
+
if (name === 'hasAddedBuiltInInterfaces') {
|
|
278
|
+
// ignore this
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
console.log(`Proxy set error`, name, value, innerType);
|
|
282
|
+
const error = new Error(`Reference Type Proxy set error: ${{ memberKey: memberKey, name: name, value: value }}`);
|
|
283
|
+
console.log(error.stack);
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
const result = Reflect.set(innerType, name, value, innerType);
|
|
287
|
+
this.referenceChain.clear();
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
getTarget() {
|
|
293
|
+
return this.resolve();
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Resolves the type based on the original name and the table provider
|
|
297
|
+
*/
|
|
298
|
+
resolve() {
|
|
299
|
+
var _a;
|
|
300
|
+
const symbolTable = this.tableProvider();
|
|
301
|
+
if (!symbolTable) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
// Look for circular references
|
|
305
|
+
let resolvedType = symbolTable.getSymbolType(this.memberKey, { flags: this.flags, onlyCacheResolvedTypes: true });
|
|
306
|
+
if (!resolvedType) {
|
|
307
|
+
// could not find this member
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
if ((0, reflection_1.isAnyReferenceType)(resolvedType)) {
|
|
311
|
+
// If this is a referenceType, keep digging down until we have a non reference Type.
|
|
312
|
+
while (resolvedType && (0, reflection_1.isAnyReferenceType)(resolvedType)) {
|
|
313
|
+
if (this.referenceChain.has(resolvedType)) {
|
|
314
|
+
// this is a circular reference
|
|
315
|
+
this.circRefCount++;
|
|
316
|
+
}
|
|
317
|
+
if (this.circRefCount > 1) {
|
|
318
|
+
//It is possible that we could properly resolve the case that one reference points to itself
|
|
319
|
+
//see test: '[Scope][symbolTable lookups with enhanced typing][finds correct class field type with default value enums are used]
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
this.referenceChain.add(resolvedType);
|
|
323
|
+
resolvedType = (_a = resolvedType === null || resolvedType === void 0 ? void 0 : resolvedType.getTarget) === null || _a === void 0 ? void 0 : _a.call(resolvedType);
|
|
324
|
+
}
|
|
325
|
+
this.tableProvider().setCachedType(this.memberKey, { type: resolvedType }, { flags: this.flags });
|
|
326
|
+
}
|
|
327
|
+
if (resolvedType && !(0, reflection_1.isAnyReferenceType)(resolvedType)) {
|
|
328
|
+
this.circRefCount = 0;
|
|
329
|
+
this.referenceChain.clear();
|
|
330
|
+
}
|
|
331
|
+
return resolvedType;
|
|
332
|
+
}
|
|
333
|
+
get __reflection() {
|
|
334
|
+
return { name: 'ReferenceType' };
|
|
335
|
+
}
|
|
336
|
+
makeMemberFullName(memberName) {
|
|
337
|
+
return this.fullName + '.' + memberName;
|
|
338
|
+
}
|
|
339
|
+
getCircularReferenceInfo(stopAtTypes = []) {
|
|
340
|
+
this.resolve();
|
|
341
|
+
const isCircRef = this.circRefCount > 1;
|
|
342
|
+
const referenceChainNames = [];
|
|
343
|
+
stopAtTypes.push(this);
|
|
344
|
+
if (isCircRef) {
|
|
345
|
+
referenceChainNames.push(this.fullName);
|
|
346
|
+
for (const chainItem of this.referenceChain) {
|
|
347
|
+
if (!(0, reflection_1.isReferenceType)(chainItem) || chainItem === this) {
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
if (stopAtTypes.map(t => t.fullName).includes(chainItem.fullName)) {
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
const chainItemCircInfo = chainItem.getCircularReferenceInfo(stopAtTypes);
|
|
354
|
+
referenceChainNames.push(...chainItemCircInfo.referenceChainNames);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return { isCircularReference: isCircRef, referenceChainNames: referenceChainNames };
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
exports.ReferenceType = ReferenceType;
|
|
361
|
+
/**
|
|
362
|
+
* Use this class for when you need to reference a property of a BscType, and that property is also a BscType,
|
|
363
|
+
* Especially when the instance with the property may not have been instantiated/discovered yet
|
|
364
|
+
*
|
|
365
|
+
* For Example, FunctionType.returnType --- if the FunctionExpression has not been walked yet, it will be a ReferenceType
|
|
366
|
+
* if we just access .returnType on a ReferenceType that doesn't have access to an actual FunctionType yet, .returnType will be undefined
|
|
367
|
+
* So when we use this class, it maintains that reference to a potential ReferenceType, and this class will change from
|
|
368
|
+
* returning undefined to the ACTUAL .returnType when the ReferenceType can be resolved.
|
|
369
|
+
*
|
|
370
|
+
* This is really cool. It's like programming with time-travel.
|
|
371
|
+
*/
|
|
372
|
+
class TypePropertyReferenceType extends BscType_1.BscType {
|
|
373
|
+
constructor(outerType, propertyName) {
|
|
374
|
+
super(propertyName);
|
|
375
|
+
this.outerType = outerType;
|
|
376
|
+
this.propertyName = propertyName;
|
|
377
|
+
// eslint-disable-next-line no-constructor-return
|
|
378
|
+
return new Proxy(this, {
|
|
379
|
+
get: (target, propName, receiver) => {
|
|
380
|
+
if (propName === '__reflection') {
|
|
381
|
+
// Cheeky way to get `isTypePropertyReferenceType` reflection to work
|
|
382
|
+
return { name: 'TypePropertyReferenceType' };
|
|
383
|
+
}
|
|
384
|
+
if (propName === 'outerType') {
|
|
385
|
+
return outerType;
|
|
386
|
+
}
|
|
387
|
+
if (propName === 'getTarget') {
|
|
388
|
+
return () => {
|
|
389
|
+
return this.getTarget();
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
if (propName === 'isResolvable') {
|
|
393
|
+
return () => {
|
|
394
|
+
var _a;
|
|
395
|
+
return !!((0, reflection_1.isAnyReferenceType)(this.outerType) ? this.outerType.getTarget() : (_a = this.outerType) === null || _a === void 0 ? void 0 : _a.isResolvable());
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
if ((0, reflection_1.isAnyReferenceType)(this.outerType) && !this.outerType.isResolvable()) {
|
|
399
|
+
if (propName === 'getMemberType') {
|
|
400
|
+
//If we're calling `getMemberType()`, we need it to proxy to using the actual symbol table
|
|
401
|
+
//So if that symbol is ever populated, the correct type is passed through
|
|
402
|
+
return (memberName, options) => {
|
|
403
|
+
const fullMemberName = this.outerType.toString() + '.' + memberName;
|
|
404
|
+
return new ReferenceType(memberName, fullMemberName, options.flags, () => {
|
|
405
|
+
return {
|
|
406
|
+
name: `TypePropertyReferenceType : '${fullMemberName}'`,
|
|
407
|
+
getSymbolType: (innerName, innerOptions) => {
|
|
408
|
+
var _a, _b;
|
|
409
|
+
return (_b = (_a = this.outerType) === null || _a === void 0 ? void 0 : _a[this.propertyName]) === null || _b === void 0 ? void 0 : _b.getMemberType(innerName, innerOptions);
|
|
410
|
+
},
|
|
411
|
+
setCachedType: (innerName, innerTypeCacheEntry, innerOptions) => {
|
|
412
|
+
var _a, _b;
|
|
413
|
+
return (_b = (_a = this.outerType) === null || _a === void 0 ? void 0 : _a[this.propertyName]) === null || _b === void 0 ? void 0 : _b.memberTable.setCachedType(innerName, innerTypeCacheEntry, innerOptions);
|
|
414
|
+
},
|
|
415
|
+
addSibling: (symbolTable) => {
|
|
416
|
+
var _a, _b, _c, _d;
|
|
417
|
+
return (_d = (_c = (_b = (_a = this.outerType) === null || _a === void 0 ? void 0 : _a[this.propertyName]) === null || _b === void 0 ? void 0 : _b.memberTable) === null || _c === void 0 ? void 0 : _c.addSibling) === null || _d === void 0 ? void 0 : _d.call(_c, symbolTable);
|
|
418
|
+
}
|
|
419
|
+
};
|
|
420
|
+
});
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
if (propName === 'isResolvable') {
|
|
424
|
+
return () => false;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
let inner = this.getTarget();
|
|
428
|
+
if (!inner) {
|
|
429
|
+
inner = DynamicType_1.DynamicType.instance;
|
|
430
|
+
}
|
|
431
|
+
if (inner) {
|
|
432
|
+
const result = Reflect.get(inner, propName, inner);
|
|
433
|
+
return result;
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
set: (target, name, value, receiver) => {
|
|
437
|
+
//There may be some need to specifically set members on ReferenceType in the future
|
|
438
|
+
// eg: if (Reflect.has(target, name)) {
|
|
439
|
+
// return Reflect.set(target, name, value, receiver);
|
|
440
|
+
let inner = this.outerType[this.propertyName];
|
|
441
|
+
if (inner) {
|
|
442
|
+
const result = Reflect.set(inner, name, value, inner);
|
|
443
|
+
return result;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
getTarget() {
|
|
449
|
+
var _a;
|
|
450
|
+
let actualOuterType = this.outerType;
|
|
451
|
+
if ((0, reflection_1.isAnyReferenceType)(this.outerType)) {
|
|
452
|
+
if (this.outerType.isResolvable()) {
|
|
453
|
+
actualOuterType = (_a = this.outerType) === null || _a === void 0 ? void 0 : _a.getTarget();
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
return actualOuterType === null || actualOuterType === void 0 ? void 0 : actualOuterType[this.propertyName];
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
exports.TypePropertyReferenceType = TypePropertyReferenceType;
|
|
460
|
+
/**
|
|
461
|
+
* Use this class for when there is a binary operator and either the left hand side and/or the right hand side
|
|
462
|
+
* are ReferenceTypes
|
|
463
|
+
*/
|
|
464
|
+
class BinaryOperatorReferenceType extends BscType_1.BscType {
|
|
465
|
+
constructor(leftType, operator, rightType, binaryOpResolver) {
|
|
466
|
+
super(operator.text);
|
|
467
|
+
this.leftType = leftType;
|
|
468
|
+
this.operator = operator;
|
|
469
|
+
this.rightType = rightType;
|
|
470
|
+
// eslint-disable-next-line no-constructor-return
|
|
471
|
+
return new Proxy(this, {
|
|
472
|
+
get: (target, propName, receiver) => {
|
|
473
|
+
var _a, _b;
|
|
474
|
+
if (propName === '__reflection') {
|
|
475
|
+
// Cheeky way to get `BinaryOperatorReferenceType` reflection to work
|
|
476
|
+
return { name: 'BinaryOperatorReferenceType' };
|
|
477
|
+
}
|
|
478
|
+
if (propName === 'leftType') {
|
|
479
|
+
return leftType;
|
|
480
|
+
}
|
|
481
|
+
if (propName === 'rightType') {
|
|
482
|
+
return rightType;
|
|
483
|
+
}
|
|
484
|
+
let resultType = (_a = this.cachedType) !== null && _a !== void 0 ? _a : DynamicType_1.DynamicType.instance;
|
|
485
|
+
if (!this.cachedType) {
|
|
486
|
+
if (((0, reflection_1.isAnyReferenceType)(this.leftType) && !this.leftType.isResolvable()) ||
|
|
487
|
+
((0, reflection_1.isAnyReferenceType)(this.rightType) && !this.rightType.isResolvable())) {
|
|
488
|
+
if (propName === 'isResolvable') {
|
|
489
|
+
return () => false;
|
|
490
|
+
}
|
|
491
|
+
if (propName === 'getTarget') {
|
|
492
|
+
return () => undefined;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
resultType = (_b = binaryOpResolver(this.leftType, this.operator, this.rightType)) !== null && _b !== void 0 ? _b : DynamicType_1.DynamicType.instance;
|
|
497
|
+
this.cachedType = resultType;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
if (resultType) {
|
|
501
|
+
const result = Reflect.get(resultType, propName, resultType);
|
|
502
|
+
return result;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
exports.BinaryOperatorReferenceType = BinaryOperatorReferenceType;
|
|
509
|
+
/**
|
|
510
|
+
* Use this class for when there is a presumable array type that is a referenceType
|
|
511
|
+
*/
|
|
512
|
+
class ArrayDefaultTypeReferenceType extends BscType_1.BscType {
|
|
513
|
+
constructor(objType) {
|
|
514
|
+
super('ArrayDefaultType');
|
|
515
|
+
this.objType = objType;
|
|
516
|
+
// eslint-disable-next-line no-constructor-return
|
|
517
|
+
return new Proxy(this, {
|
|
518
|
+
get: (target, propName, receiver) => {
|
|
519
|
+
if (propName === '__reflection') {
|
|
520
|
+
// Cheeky way to get `ArrayDefaultTypeReferenceType` reflection to work
|
|
521
|
+
return { name: 'ArrayDefaultTypeReferenceType' };
|
|
522
|
+
}
|
|
523
|
+
if (propName === 'objType') {
|
|
524
|
+
return objType;
|
|
525
|
+
}
|
|
526
|
+
if (propName === 'getTarget') {
|
|
527
|
+
return () => {
|
|
528
|
+
if ((0, reflection_1.isReferenceType)(this.objType)) {
|
|
529
|
+
this.objType.getTarget();
|
|
530
|
+
}
|
|
531
|
+
return this.objType;
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
let resultType = DynamicType_1.DynamicType.instance;
|
|
535
|
+
if (((0, reflection_1.isAnyReferenceType)(this.objType) && !this.objType.isResolvable())) {
|
|
536
|
+
if (propName === 'isResolvable') {
|
|
537
|
+
return () => false;
|
|
538
|
+
}
|
|
539
|
+
if (propName === 'getTarget') {
|
|
540
|
+
return () => undefined;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
resultType = util_1.util.getIteratorDefaultType(this.objType);
|
|
545
|
+
}
|
|
546
|
+
if (resultType) {
|
|
547
|
+
const result = Reflect.get(resultType, propName, resultType);
|
|
548
|
+
return result;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
exports.ArrayDefaultTypeReferenceType = ArrayDefaultTypeReferenceType;
|
|
555
|
+
/**
|
|
556
|
+
* Used for when a Param's initial value is unresolved
|
|
557
|
+
* Generally, this will be resolved later *except* for Enum
|
|
558
|
+
* Enum Types will have an initial value of an EnumMemberType, but the param
|
|
559
|
+
* should be an EnumType
|
|
560
|
+
*/
|
|
561
|
+
class ParamTypeFromValueReferenceType extends BscType_1.BscType {
|
|
562
|
+
constructor(objType) {
|
|
563
|
+
super('ParamInitialValueType');
|
|
564
|
+
this.objType = objType;
|
|
565
|
+
// eslint-disable-next-line no-constructor-return
|
|
566
|
+
return new Proxy(this, {
|
|
567
|
+
get: (target, propName, receiver) => {
|
|
568
|
+
var _a;
|
|
569
|
+
if (propName === '__reflection') {
|
|
570
|
+
// Cheeky way to get reflection to work
|
|
571
|
+
return { name: 'ParamTypeFromValueReferenceType' };
|
|
572
|
+
}
|
|
573
|
+
if (propName === 'objType') {
|
|
574
|
+
return objType;
|
|
575
|
+
}
|
|
576
|
+
if (propName === 'getTarget') {
|
|
577
|
+
return () => {
|
|
578
|
+
if (this.cachedType) {
|
|
579
|
+
return this.cachedType;
|
|
580
|
+
}
|
|
581
|
+
if ((0, reflection_1.isReferenceType)(this.objType)) {
|
|
582
|
+
this.objType.getTarget();
|
|
583
|
+
}
|
|
584
|
+
return this.objType;
|
|
585
|
+
};
|
|
586
|
+
}
|
|
587
|
+
let resultType = (_a = this.cachedType) !== null && _a !== void 0 ? _a : DynamicType_1.DynamicType.instance;
|
|
588
|
+
if (!this.cachedType) {
|
|
589
|
+
if (((0, reflection_1.isAnyReferenceType)(this.objType) && !this.objType.isResolvable())) {
|
|
590
|
+
if (propName === 'isResolvable') {
|
|
591
|
+
return () => false;
|
|
592
|
+
}
|
|
593
|
+
if (propName === 'getTarget') {
|
|
594
|
+
return () => undefined;
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
else {
|
|
598
|
+
resultType = util_1.util.getDefaultTypeFromValueType(this.objType);
|
|
599
|
+
//if the default-type lookup just hands back another wrapper of the same
|
|
600
|
+
//objType (e.g. an unresolvable IntersectionType keeps re-wrapping), the
|
|
601
|
+
//proxy chain would loop forever via Reflect.get. Bail to DynamicType.
|
|
602
|
+
if ((0, reflection_1.isParamTypeFromValueReferenceType)(resultType) && resultType.objType === this.objType) {
|
|
603
|
+
resultType = DynamicType_1.DynamicType.instance;
|
|
604
|
+
}
|
|
605
|
+
this.cachedType = resultType;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
if (resultType) {
|
|
609
|
+
const result = Reflect.get(resultType, propName, resultType);
|
|
610
|
+
return result;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
exports.ParamTypeFromValueReferenceType = ParamTypeFromValueReferenceType;
|
|
617
|
+
/**
|
|
618
|
+
* Used when an IntersectionType has at least one member that may have default dynamic members.
|
|
619
|
+
* If the inner type is not resolvable, this type will resolve to the given type instead.
|
|
620
|
+
* @example
|
|
621
|
+
* ```brighterscript
|
|
622
|
+
* interface HasAge
|
|
623
|
+
* age as integer
|
|
624
|
+
* end interface
|
|
625
|
+
*
|
|
626
|
+
* type foo = HasAge and roAssociativeArray
|
|
627
|
+
*
|
|
628
|
+
* sub useFoo(f as foo)
|
|
629
|
+
* print f.age ' f.age is an integer
|
|
630
|
+
* print f.doesExist("key") ' will result in a boolean, from roAssociativeArray
|
|
631
|
+
* print f.someKey ' no idea - so this is dynamic, and will not cause a validation error
|
|
632
|
+
* end sub
|
|
633
|
+
* ```
|
|
634
|
+
*/
|
|
635
|
+
class ReferenceTypeWithDefault extends BscType_1.BscType {
|
|
636
|
+
constructor(baseType, defaultType) {
|
|
637
|
+
super('ReferenceTypeWithDefault');
|
|
638
|
+
this.baseType = baseType;
|
|
639
|
+
this.defaultType = defaultType;
|
|
640
|
+
// eslint-disable-next-line no-constructor-return
|
|
641
|
+
return new Proxy(this, {
|
|
642
|
+
get: (target, propName, receiver) => {
|
|
643
|
+
if (propName === '__reflection') {
|
|
644
|
+
// Cheeky way to get `isReferenceTypeWithDefault` reflection to work
|
|
645
|
+
return { name: 'ReferenceTypeWithDefault' };
|
|
646
|
+
}
|
|
647
|
+
if (propName === 'isResolvable') {
|
|
648
|
+
return () => {
|
|
649
|
+
return true;
|
|
650
|
+
};
|
|
651
|
+
}
|
|
652
|
+
let innerType = this.getTarget();
|
|
653
|
+
if (!innerType) {
|
|
654
|
+
innerType = this.defaultType;
|
|
655
|
+
}
|
|
656
|
+
if (innerType) {
|
|
657
|
+
const result = Reflect.get(innerType, propName, innerType);
|
|
658
|
+
return result;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
});
|
|
662
|
+
}
|
|
663
|
+
getTarget() {
|
|
664
|
+
var _a;
|
|
665
|
+
if ((0, reflection_1.isAnyReferenceType)(this.baseType)) {
|
|
666
|
+
if (this.baseType.isResolvable()) {
|
|
667
|
+
return (_a = this.baseType) === null || _a === void 0 ? void 0 : _a.getTarget();
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
return this.baseType;
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
exports.ReferenceTypeWithDefault = ReferenceTypeWithDefault;
|
|
674
|
+
/**
|
|
675
|
+
* Gives an array of all the symbol names that need to be resolved to make the given reference type be resolved
|
|
676
|
+
*/
|
|
677
|
+
function getAllRequiredSymbolNames(refType, namespaceLower) {
|
|
678
|
+
if (refType.isResolvable()) {
|
|
679
|
+
return [];
|
|
680
|
+
}
|
|
681
|
+
if ((0, reflection_1.isReferenceType)(refType)) {
|
|
682
|
+
return [{ name: refType.fullName, namespacedName: namespaceLower ? `${namespaceLower}.${refType.fullName}` : null }];
|
|
683
|
+
}
|
|
684
|
+
if ((0, reflection_1.isTypePropertyReferenceType)(refType)) {
|
|
685
|
+
const outer = refType.outerType;
|
|
686
|
+
if ((0, reflection_1.isAnyReferenceType)(outer)) {
|
|
687
|
+
return getAllRequiredSymbolNames(outer);
|
|
688
|
+
}
|
|
689
|
+
else {
|
|
690
|
+
return [];
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
if ((0, reflection_1.isArrayDefaultTypeReferenceType)(refType)) {
|
|
694
|
+
const objType = refType.objType;
|
|
695
|
+
if ((0, reflection_1.isAnyReferenceType)(objType)) {
|
|
696
|
+
return getAllRequiredSymbolNames(objType);
|
|
697
|
+
}
|
|
698
|
+
else {
|
|
699
|
+
return [];
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
if ((0, reflection_1.isBinaryOperatorReferenceType)(refType)) {
|
|
703
|
+
const left = refType.leftType;
|
|
704
|
+
const right = refType.rightType;
|
|
705
|
+
const result = [];
|
|
706
|
+
if ((0, reflection_1.isAnyReferenceType)(left)) {
|
|
707
|
+
result.push(...getAllRequiredSymbolNames(left, namespaceLower));
|
|
708
|
+
}
|
|
709
|
+
if ((0, reflection_1.isAnyReferenceType)(right)) {
|
|
710
|
+
result.push(...getAllRequiredSymbolNames(right, namespaceLower));
|
|
711
|
+
}
|
|
712
|
+
return result;
|
|
713
|
+
}
|
|
714
|
+
if ((0, reflection_1.isParamTypeFromValueReferenceType)(refType)) {
|
|
715
|
+
const objType = refType.objType;
|
|
716
|
+
if ((0, reflection_1.isAnyReferenceType)(objType)) {
|
|
717
|
+
return getAllRequiredSymbolNames(objType);
|
|
718
|
+
}
|
|
719
|
+
else {
|
|
720
|
+
return [];
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
return [];
|
|
724
|
+
}
|
|
725
|
+
exports.getAllRequiredSymbolNames = getAllRequiredSymbolNames;
|
|
726
|
+
//# sourceMappingURL=ReferenceType.js.map
|