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.
Files changed (652) hide show
  1. package/README.md +79 -138
  2. package/bsconfig.schema.json +196 -5
  3. package/dist/ActionPipeline.d.ts +10 -0
  4. package/dist/ActionPipeline.js +40 -0
  5. package/dist/ActionPipeline.js.map +1 -0
  6. package/dist/AstValidationSegmenter.d.ts +45 -0
  7. package/dist/AstValidationSegmenter.js +322 -0
  8. package/dist/AstValidationSegmenter.js.map +1 -0
  9. package/dist/BsConfig.d.ts +161 -43
  10. package/dist/BusyStatusTracker.d.ts +61 -0
  11. package/dist/BusyStatusTracker.js +148 -0
  12. package/dist/BusyStatusTracker.js.map +1 -0
  13. package/dist/Cache.d.ts +3 -8
  14. package/dist/Cache.js +9 -14
  15. package/dist/Cache.js.map +1 -1
  16. package/dist/CacheVerifier.d.ts +7 -0
  17. package/dist/CacheVerifier.js +20 -0
  18. package/dist/CacheVerifier.js.map +1 -0
  19. package/dist/CodeActionUtil.d.ts +29 -4
  20. package/dist/CodeActionUtil.js +22 -5
  21. package/dist/CodeActionUtil.js.map +1 -1
  22. package/dist/CommentFlagProcessor.d.ts +20 -15
  23. package/dist/CommentFlagProcessor.js +143 -58
  24. package/dist/CommentFlagProcessor.js.map +1 -1
  25. package/dist/CrossScopeValidator.d.ts +68 -0
  26. package/dist/CrossScopeValidator.js +650 -0
  27. package/dist/CrossScopeValidator.js.map +1 -0
  28. package/dist/DependencyGraph.d.ts +8 -3
  29. package/dist/DependencyGraph.js +49 -16
  30. package/dist/DependencyGraph.js.map +1 -1
  31. package/dist/DiagnosticCollection.d.ts +21 -5
  32. package/dist/DiagnosticCollection.js +77 -24
  33. package/dist/DiagnosticCollection.js.map +1 -1
  34. package/dist/DiagnosticFilterer.d.ts +27 -6
  35. package/dist/DiagnosticFilterer.js +273 -60
  36. package/dist/DiagnosticFilterer.js.map +1 -1
  37. package/dist/DiagnosticManager.d.ts +83 -0
  38. package/dist/DiagnosticManager.js +422 -0
  39. package/dist/DiagnosticManager.js.map +1 -0
  40. package/dist/DiagnosticMessages.d.ts +602 -196
  41. package/dist/DiagnosticMessages.js +926 -342
  42. package/dist/DiagnosticMessages.js.map +1 -1
  43. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  44. package/dist/DiagnosticSeverityAdjuster.js +45 -0
  45. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  46. package/dist/FunctionScope.d.ts +28 -0
  47. package/dist/FunctionScope.js +52 -0
  48. package/dist/FunctionScope.js.map +1 -0
  49. package/dist/KeyedThrottler.d.ts +3 -3
  50. package/dist/KeyedThrottler.js +3 -3
  51. package/dist/KeyedThrottler.js.map +1 -1
  52. package/dist/LanguageServer.d.ts +136 -104
  53. package/dist/LanguageServer.js +577 -741
  54. package/dist/LanguageServer.js.map +1 -1
  55. package/dist/Logger.d.ts +17 -13
  56. package/dist/Logger.js +64 -34
  57. package/dist/Logger.js.map +1 -1
  58. package/dist/PluginInterface.d.ts +32 -10
  59. package/dist/PluginInterface.js +117 -7
  60. package/dist/PluginInterface.js.map +1 -1
  61. package/dist/Program.d.ts +302 -98
  62. package/dist/Program.js +1613 -726
  63. package/dist/Program.js.map +1 -1
  64. package/dist/ProgramBuilder.d.ts +39 -22
  65. package/dist/ProgramBuilder.js +245 -179
  66. package/dist/ProgramBuilder.js.map +1 -1
  67. package/dist/Scope.d.ts +227 -106
  68. package/dist/Scope.js +609 -557
  69. package/dist/Scope.js.map +1 -1
  70. package/dist/ScopeNamespaceLookup.d.ts +73 -0
  71. package/dist/ScopeNamespaceLookup.js +242 -0
  72. package/dist/ScopeNamespaceLookup.js.map +1 -0
  73. package/dist/SemanticTokenUtils.js +5 -1
  74. package/dist/SemanticTokenUtils.js.map +1 -1
  75. package/dist/Stopwatch.d.ts +4 -0
  76. package/dist/Stopwatch.js +8 -1
  77. package/dist/Stopwatch.js.map +1 -1
  78. package/dist/SymbolTable.d.ts +145 -26
  79. package/dist/SymbolTable.js +575 -64
  80. package/dist/SymbolTable.js.map +1 -1
  81. package/dist/SymbolTypeFlag.d.ts +9 -0
  82. package/dist/SymbolTypeFlag.js +14 -0
  83. package/dist/SymbolTypeFlag.js.map +1 -0
  84. package/dist/Throttler.d.ts +12 -0
  85. package/dist/Throttler.js +39 -0
  86. package/dist/Throttler.js.map +1 -1
  87. package/dist/Watcher.d.ts +0 -3
  88. package/dist/Watcher.js +0 -3
  89. package/dist/Watcher.js.map +1 -1
  90. package/dist/XmlScope.d.ts +5 -15
  91. package/dist/XmlScope.js +34 -90
  92. package/dist/XmlScope.js.map +1 -1
  93. package/dist/astUtils/CachedLookups.d.ts +50 -0
  94. package/dist/astUtils/CachedLookups.js +337 -0
  95. package/dist/astUtils/CachedLookups.js.map +1 -0
  96. package/dist/astUtils/Editor.d.ts +69 -0
  97. package/dist/astUtils/Editor.js +245 -0
  98. package/dist/astUtils/Editor.js.map +1 -0
  99. package/dist/astUtils/creators.d.ts +54 -19
  100. package/dist/astUtils/creators.js +242 -42
  101. package/dist/astUtils/creators.js.map +1 -1
  102. package/dist/astUtils/reflection.d.ts +199 -85
  103. package/dist/astUtils/reflection.js +518 -145
  104. package/dist/astUtils/reflection.js.map +1 -1
  105. package/dist/astUtils/stackedVisitor.js.map +1 -1
  106. package/dist/astUtils/visitors.d.ts +117 -53
  107. package/dist/astUtils/visitors.js +95 -15
  108. package/dist/astUtils/visitors.js.map +1 -1
  109. package/dist/astUtils/xml.d.ts +9 -8
  110. package/dist/astUtils/xml.js +12 -7
  111. package/dist/astUtils/xml.js.map +1 -1
  112. package/dist/bscPlugin/BscPlugin.d.ts +26 -4
  113. package/dist/bscPlugin/BscPlugin.js +96 -4
  114. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  115. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  116. package/dist/bscPlugin/CallExpressionInfo.js +142 -0
  117. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  118. package/dist/bscPlugin/FileWriter.d.ts +19 -0
  119. package/dist/bscPlugin/FileWriter.js +79 -0
  120. package/dist/bscPlugin/FileWriter.js.map +1 -0
  121. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  122. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  123. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  124. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +109 -7
  125. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +676 -26
  126. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  127. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
  128. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
  129. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
  130. package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
  131. package/dist/bscPlugin/codeActions/codeActionHelpers.js +31 -0
  132. package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
  133. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +65 -0
  134. package/dist/bscPlugin/completions/CompletionsProcessor.js +633 -0
  135. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  136. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  137. package/dist/bscPlugin/definition/DefinitionProvider.js +220 -0
  138. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  139. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  140. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  141. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  142. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  143. package/dist/bscPlugin/hover/HoverProcessor.js +238 -0
  144. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  145. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  146. package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
  147. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  148. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
  149. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +77 -0
  150. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
  151. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  152. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +164 -0
  153. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  154. package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
  155. package/dist/bscPlugin/serialize/BslibManager.js +46 -0
  156. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  157. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  158. package/dist/bscPlugin/serialize/FileSerializer.js +80 -0
  159. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  160. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  161. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  162. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  163. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  164. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  165. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  166. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  167. package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
  168. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  169. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +34 -0
  170. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +504 -0
  171. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  172. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  173. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  174. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  175. package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
  176. package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
  177. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  178. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +51 -0
  179. package/dist/bscPlugin/validation/BrsFileValidator.js +714 -0
  180. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  181. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  182. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  183. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  184. package/dist/bscPlugin/validation/ScopeValidator.d.ts +158 -0
  185. package/dist/bscPlugin/validation/ScopeValidator.js +1481 -0
  186. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  187. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  188. package/dist/bscPlugin/validation/XmlFileValidator.js +50 -0
  189. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  190. package/dist/cli.js +140 -28
  191. package/dist/cli.js.map +1 -1
  192. package/dist/common/Sequencer.d.ts +53 -0
  193. package/dist/common/Sequencer.js +233 -0
  194. package/dist/common/Sequencer.js.map +1 -0
  195. package/dist/deferred.d.ts +5 -3
  196. package/dist/deferred.js +10 -0
  197. package/dist/deferred.js.map +1 -1
  198. package/dist/diagnosticUtils.d.ts +61 -4
  199. package/dist/diagnosticUtils.js +285 -25
  200. package/dist/diagnosticUtils.js.map +1 -1
  201. package/dist/examples/plugins/removePrint.d.ts +2 -2
  202. package/dist/examples/plugins/removePrint.js +8 -12
  203. package/dist/examples/plugins/removePrint.js.map +1 -1
  204. package/dist/files/AssetFile.d.ts +24 -0
  205. package/dist/files/AssetFile.js +25 -0
  206. package/dist/files/AssetFile.js.map +1 -0
  207. package/dist/files/BrsFile.d.ts +161 -87
  208. package/dist/files/BrsFile.js +919 -936
  209. package/dist/files/BrsFile.js.map +1 -1
  210. package/dist/files/BscFile.d.ts +102 -0
  211. package/dist/files/BscFile.js +15 -0
  212. package/dist/files/BscFile.js.map +1 -0
  213. package/dist/files/Factory.d.ts +25 -0
  214. package/dist/files/Factory.js +22 -0
  215. package/dist/files/Factory.js.map +1 -0
  216. package/dist/files/LazyFileData.d.ts +21 -0
  217. package/dist/files/LazyFileData.js +54 -0
  218. package/dist/files/LazyFileData.js.map +1 -0
  219. package/dist/files/XmlFile.d.ts +80 -41
  220. package/dist/files/XmlFile.js +162 -137
  221. package/dist/files/XmlFile.js.map +1 -1
  222. package/dist/globalCallables.d.ts +3 -1
  223. package/dist/globalCallables.js +424 -184
  224. package/dist/globalCallables.js.map +1 -1
  225. package/dist/index.d.ts +32 -4
  226. package/dist/index.js +54 -7
  227. package/dist/index.js.map +1 -1
  228. package/dist/interfaces.d.ts +987 -125
  229. package/dist/interfaces.js +21 -0
  230. package/dist/interfaces.js.map +1 -1
  231. package/dist/lexer/Lexer.d.ts +51 -12
  232. package/dist/lexer/Lexer.js +214 -65
  233. package/dist/lexer/Lexer.js.map +1 -1
  234. package/dist/lexer/Token.d.ts +27 -11
  235. package/dist/lexer/Token.js +10 -2
  236. package/dist/lexer/Token.js.map +1 -1
  237. package/dist/lexer/TokenKind.d.ts +48 -2
  238. package/dist/lexer/TokenKind.js +167 -10
  239. package/dist/lexer/TokenKind.js.map +1 -1
  240. package/dist/logging.d.ts +14 -0
  241. package/dist/logging.js +29 -0
  242. package/dist/logging.js.map +1 -0
  243. package/dist/lsp/ActionQueue.d.ts +35 -0
  244. package/dist/lsp/ActionQueue.js +115 -0
  245. package/dist/lsp/ActionQueue.js.map +1 -0
  246. package/dist/lsp/DocumentManager.d.ts +63 -0
  247. package/dist/lsp/DocumentManager.js +122 -0
  248. package/dist/lsp/DocumentManager.js.map +1 -0
  249. package/dist/lsp/LspProject.d.ts +287 -0
  250. package/dist/lsp/LspProject.js +3 -0
  251. package/dist/lsp/LspProject.js.map +1 -0
  252. package/dist/lsp/PathFilterer.d.ts +75 -0
  253. package/dist/lsp/PathFilterer.js +196 -0
  254. package/dist/lsp/PathFilterer.js.map +1 -0
  255. package/dist/lsp/Project.d.ts +200 -0
  256. package/dist/lsp/Project.js +562 -0
  257. package/dist/lsp/Project.js.map +1 -0
  258. package/dist/lsp/ProjectManager.d.ts +288 -0
  259. package/dist/lsp/ProjectManager.js +967 -0
  260. package/dist/lsp/ProjectManager.js.map +1 -0
  261. package/dist/lsp/ReaderWriterManager.d.ts +21 -0
  262. package/dist/lsp/ReaderWriterManager.js +60 -0
  263. package/dist/lsp/ReaderWriterManager.js.map +1 -0
  264. package/dist/lsp/worker/MessageHandler.d.ts +99 -0
  265. package/dist/lsp/worker/MessageHandler.js +138 -0
  266. package/dist/lsp/worker/MessageHandler.js.map +1 -0
  267. package/dist/lsp/worker/WorkerPool.d.ts +38 -0
  268. package/dist/lsp/worker/WorkerPool.js +78 -0
  269. package/dist/lsp/worker/WorkerPool.js.map +1 -0
  270. package/dist/lsp/worker/WorkerThreadProject.d.ts +168 -0
  271. package/dist/lsp/worker/WorkerThreadProject.js +205 -0
  272. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
  273. package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
  274. package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
  275. package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
  276. package/dist/lsp/worker/run.js +14 -0
  277. package/dist/lsp/worker/run.js.map +1 -0
  278. package/dist/parser/AstNode.d.ts +205 -0
  279. package/dist/parser/AstNode.js +305 -0
  280. package/dist/parser/AstNode.js.map +1 -0
  281. package/dist/parser/BrightScriptDocParser.d.ts +56 -0
  282. package/dist/parser/BrightScriptDocParser.js +294 -0
  283. package/dist/parser/BrightScriptDocParser.js.map +1 -0
  284. package/dist/parser/BrsTranspileState.d.ts +22 -3
  285. package/dist/parser/BrsTranspileState.js +19 -0
  286. package/dist/parser/BrsTranspileState.js.map +1 -1
  287. package/dist/parser/Expression.d.ts +601 -220
  288. package/dist/parser/Expression.js +1516 -502
  289. package/dist/parser/Expression.js.map +1 -1
  290. package/dist/parser/Parser.d.ts +137 -121
  291. package/dist/parser/Parser.js +1808 -982
  292. package/dist/parser/Parser.js.map +1 -1
  293. package/dist/parser/SGParser.d.ts +30 -13
  294. package/dist/parser/SGParser.js +94 -56
  295. package/dist/parser/SGParser.js.map +1 -1
  296. package/dist/parser/SGTypes.d.ts +134 -46
  297. package/dist/parser/SGTypes.js +206 -115
  298. package/dist/parser/SGTypes.js.map +1 -1
  299. package/dist/parser/Statement.d.ts +854 -267
  300. package/dist/parser/Statement.js +2416 -621
  301. package/dist/parser/Statement.js.map +1 -1
  302. package/dist/parser/TranspileState.d.ts +30 -14
  303. package/dist/parser/TranspileState.js +124 -27
  304. package/dist/parser/TranspileState.js.map +1 -1
  305. package/dist/preprocessor/Manifest.d.ts +6 -6
  306. package/dist/preprocessor/Manifest.js +17 -38
  307. package/dist/preprocessor/Manifest.js.map +1 -1
  308. package/dist/roku-types/data.json +20554 -0
  309. package/dist/roku-types/index.d.ts +5726 -0
  310. package/dist/roku-types/index.js +11 -0
  311. package/dist/roku-types/index.js.map +1 -0
  312. package/dist/types/ArrayType.d.ts +12 -5
  313. package/dist/types/ArrayType.js +95 -25
  314. package/dist/types/ArrayType.js.map +1 -1
  315. package/dist/types/AssociativeArrayType.d.ts +15 -0
  316. package/dist/types/AssociativeArrayType.js +64 -0
  317. package/dist/types/AssociativeArrayType.js.map +1 -0
  318. package/dist/types/BaseFunctionType.d.ts +10 -0
  319. package/dist/types/BaseFunctionType.js +26 -0
  320. package/dist/types/BaseFunctionType.js.map +1 -0
  321. package/dist/types/BooleanType.d.ts +9 -5
  322. package/dist/types/BooleanType.js +19 -8
  323. package/dist/types/BooleanType.js.map +1 -1
  324. package/dist/types/BscType.d.ts +41 -3
  325. package/dist/types/BscType.js +152 -0
  326. package/dist/types/BscType.js.map +1 -1
  327. package/dist/types/BscTypeKind.d.ts +28 -0
  328. package/dist/types/BscTypeKind.js +33 -0
  329. package/dist/types/BscTypeKind.js.map +1 -0
  330. package/dist/types/BuiltInInterfaceAdder.d.ts +28 -0
  331. package/dist/types/BuiltInInterfaceAdder.js +212 -0
  332. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  333. package/dist/types/CallFuncableType.d.ts +24 -0
  334. package/dist/types/CallFuncableType.js +91 -0
  335. package/dist/types/CallFuncableType.js.map +1 -0
  336. package/dist/types/ClassType.d.ts +17 -0
  337. package/dist/types/ClassType.js +63 -0
  338. package/dist/types/ClassType.js.map +1 -0
  339. package/dist/types/ComponentType.d.ts +22 -0
  340. package/dist/types/ComponentType.js +110 -0
  341. package/dist/types/ComponentType.js.map +1 -0
  342. package/dist/types/DoubleType.d.ts +10 -5
  343. package/dist/types/DoubleType.js +21 -17
  344. package/dist/types/DoubleType.js.map +1 -1
  345. package/dist/types/DynamicType.d.ts +13 -5
  346. package/dist/types/DynamicType.js +26 -5
  347. package/dist/types/DynamicType.js.map +1 -1
  348. package/dist/types/EnumType.d.ts +42 -0
  349. package/dist/types/EnumType.js +101 -0
  350. package/dist/types/EnumType.js.map +1 -0
  351. package/dist/types/FloatType.d.ts +10 -5
  352. package/dist/types/FloatType.js +21 -17
  353. package/dist/types/FloatType.js.map +1 -1
  354. package/dist/types/FunctionType.d.ts +8 -22
  355. package/dist/types/FunctionType.js +25 -63
  356. package/dist/types/FunctionType.js.map +1 -1
  357. package/dist/types/InheritableType.d.ts +29 -0
  358. package/dist/types/InheritableType.js +173 -0
  359. package/dist/types/InheritableType.js.map +1 -0
  360. package/dist/types/InlineInterfaceType.d.ts +5 -0
  361. package/dist/types/InlineInterfaceType.js +17 -0
  362. package/dist/types/InlineInterfaceType.js.map +1 -0
  363. package/dist/types/IntegerType.d.ts +10 -5
  364. package/dist/types/IntegerType.js +21 -17
  365. package/dist/types/IntegerType.js.map +1 -1
  366. package/dist/types/InterfaceType.d.ts +14 -6
  367. package/dist/types/InterfaceType.js +30 -15
  368. package/dist/types/InterfaceType.js.map +1 -1
  369. package/dist/types/IntersectionType.d.ts +29 -0
  370. package/dist/types/IntersectionType.js +256 -0
  371. package/dist/types/IntersectionType.js.map +1 -0
  372. package/dist/types/InvalidType.d.ts +10 -5
  373. package/dist/types/InvalidType.js +21 -9
  374. package/dist/types/InvalidType.js.map +1 -1
  375. package/dist/types/LongIntegerType.d.ts +10 -5
  376. package/dist/types/LongIntegerType.js +21 -17
  377. package/dist/types/LongIntegerType.js.map +1 -1
  378. package/dist/types/NamespaceType.d.ts +12 -0
  379. package/dist/types/NamespaceType.js +28 -0
  380. package/dist/types/NamespaceType.js.map +1 -0
  381. package/dist/types/ObjectType.d.ts +12 -5
  382. package/dist/types/ObjectType.js +25 -8
  383. package/dist/types/ObjectType.js.map +1 -1
  384. package/dist/types/ReferenceType.d.ts +123 -0
  385. package/dist/types/ReferenceType.js +726 -0
  386. package/dist/types/ReferenceType.js.map +1 -0
  387. package/dist/types/StringType.d.ts +12 -5
  388. package/dist/types/StringType.js +23 -8
  389. package/dist/types/StringType.js.map +1 -1
  390. package/dist/types/TypeStatementType.d.ts +19 -0
  391. package/dist/types/TypeStatementType.js +56 -0
  392. package/dist/types/TypeStatementType.js.map +1 -0
  393. package/dist/types/TypedFunctionType.d.ts +34 -0
  394. package/dist/types/TypedFunctionType.js +157 -0
  395. package/dist/types/TypedFunctionType.js.map +1 -0
  396. package/dist/types/UninitializedType.d.ts +11 -6
  397. package/dist/types/UninitializedType.js +20 -11
  398. package/dist/types/UninitializedType.js.map +1 -1
  399. package/dist/types/UnionType.d.ts +27 -0
  400. package/dist/types/UnionType.js +196 -0
  401. package/dist/types/UnionType.js.map +1 -0
  402. package/dist/types/VoidType.d.ts +11 -5
  403. package/dist/types/VoidType.js +22 -8
  404. package/dist/types/VoidType.js.map +1 -1
  405. package/dist/types/helpers.d.ts +51 -0
  406. package/dist/types/helpers.js +329 -0
  407. package/dist/types/helpers.js.map +1 -0
  408. package/dist/types/index.d.ts +22 -0
  409. package/dist/types/index.js +39 -0
  410. package/dist/types/index.js.map +1 -0
  411. package/dist/types/roFunctionType.d.ts +11 -0
  412. package/dist/types/roFunctionType.js +37 -0
  413. package/dist/types/roFunctionType.js.map +1 -0
  414. package/dist/util.d.ts +325 -185
  415. package/dist/util.js +2135 -568
  416. package/dist/util.js.map +1 -1
  417. package/dist/validators/ClassValidator.d.ts +9 -15
  418. package/dist/validators/ClassValidator.js +93 -138
  419. package/dist/validators/ClassValidator.js.map +1 -1
  420. package/package.json +183 -138
  421. package/CHANGELOG.md +0 -1188
  422. package/dist/astUtils/creators.spec.js +0 -21
  423. package/dist/astUtils/creators.spec.js.map +0 -1
  424. package/dist/astUtils/index.d.ts +0 -7
  425. package/dist/astUtils/index.js +0 -26
  426. package/dist/astUtils/index.js.map +0 -1
  427. package/dist/astUtils/reflection.spec.d.ts +0 -1
  428. package/dist/astUtils/reflection.spec.js +0 -292
  429. package/dist/astUtils/reflection.spec.js.map +0 -1
  430. package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
  431. package/dist/astUtils/stackedVisitor.spec.js +0 -79
  432. package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
  433. package/dist/astUtils/visitors.spec.d.ts +0 -1
  434. package/dist/astUtils/visitors.spec.js +0 -854
  435. package/dist/astUtils/visitors.spec.js.map +0 -1
  436. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
  437. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -194
  438. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
  439. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  440. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
  441. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  442. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +0 -1
  443. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +0 -45
  444. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  445. package/dist/files/BrsFile.Class.spec.d.ts +0 -1
  446. package/dist/files/BrsFile.Class.spec.js +0 -1081
  447. package/dist/files/BrsFile.Class.spec.js.map +0 -1
  448. package/dist/files/BrsFile.spec.d.ts +0 -1
  449. package/dist/files/BrsFile.spec.js +0 -2524
  450. package/dist/files/BrsFile.spec.js.map +0 -1
  451. package/dist/files/XmlFile.spec.d.ts +0 -1
  452. package/dist/files/XmlFile.spec.js +0 -1065
  453. package/dist/files/XmlFile.spec.js.map +0 -1
  454. package/dist/files/tests/imports.spec.d.ts +0 -1
  455. package/dist/files/tests/imports.spec.js +0 -241
  456. package/dist/files/tests/imports.spec.js.map +0 -1
  457. package/dist/lexer/Character.spec.d.ts +0 -1
  458. package/dist/lexer/Character.spec.js +0 -27
  459. package/dist/lexer/Character.spec.js.map +0 -1
  460. package/dist/lexer/Lexer.spec.d.ts +0 -1
  461. package/dist/lexer/Lexer.spec.js +0 -1101
  462. package/dist/lexer/Lexer.spec.js.map +0 -1
  463. package/dist/lexer/index.d.ts +0 -3
  464. package/dist/lexer/index.js +0 -17
  465. package/dist/lexer/index.js.map +0 -1
  466. package/dist/parser/Parser.Class.spec.d.ts +0 -1
  467. package/dist/parser/Parser.Class.spec.js +0 -390
  468. package/dist/parser/Parser.Class.spec.js.map +0 -1
  469. package/dist/parser/Parser.spec.d.ts +0 -4
  470. package/dist/parser/Parser.spec.js +0 -1216
  471. package/dist/parser/Parser.spec.js.map +0 -1
  472. package/dist/parser/SGParser.spec.d.ts +0 -1
  473. package/dist/parser/SGParser.spec.js +0 -145
  474. package/dist/parser/SGParser.spec.js.map +0 -1
  475. package/dist/parser/SGTypes.spec.d.ts +0 -1
  476. package/dist/parser/SGTypes.spec.js +0 -351
  477. package/dist/parser/SGTypes.spec.js.map +0 -1
  478. package/dist/parser/Statement.spec.d.ts +0 -1
  479. package/dist/parser/Statement.spec.js +0 -94
  480. package/dist/parser/Statement.spec.js.map +0 -1
  481. package/dist/parser/index.d.ts +0 -3
  482. package/dist/parser/index.js +0 -16
  483. package/dist/parser/index.js.map +0 -1
  484. package/dist/parser/tests/Parser.spec.d.ts +0 -18
  485. package/dist/parser/tests/Parser.spec.js +0 -35
  486. package/dist/parser/tests/Parser.spec.js.map +0 -1
  487. package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
  488. package/dist/parser/tests/controlFlow/For.spec.js +0 -161
  489. package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
  490. package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
  491. package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -106
  492. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
  493. package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
  494. package/dist/parser/tests/controlFlow/If.spec.js +0 -551
  495. package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
  496. package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
  497. package/dist/parser/tests/controlFlow/While.spec.js +0 -107
  498. package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
  499. package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
  500. package/dist/parser/tests/expression/Additive.spec.js +0 -99
  501. package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
  502. package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
  503. package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -254
  504. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
  505. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
  506. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -266
  507. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
  508. package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
  509. package/dist/parser/tests/expression/Boolean.spec.js +0 -83
  510. package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
  511. package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
  512. package/dist/parser/tests/expression/Call.spec.js +0 -134
  513. package/dist/parser/tests/expression/Call.spec.js.map +0 -1
  514. package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
  515. package/dist/parser/tests/expression/Exponential.spec.js +0 -37
  516. package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
  517. package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
  518. package/dist/parser/tests/expression/Function.spec.js +0 -403
  519. package/dist/parser/tests/expression/Function.spec.js.map +0 -1
  520. package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
  521. package/dist/parser/tests/expression/Indexing.spec.js +0 -219
  522. package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
  523. package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
  524. package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
  525. package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
  526. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
  527. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -201
  528. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
  529. package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
  530. package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -105
  531. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
  532. package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
  533. package/dist/parser/tests/expression/Primary.spec.js +0 -149
  534. package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
  535. package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
  536. package/dist/parser/tests/expression/Relational.spec.js +0 -83
  537. package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
  538. package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
  539. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
  540. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
  541. package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
  542. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -202
  543. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
  544. package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
  545. package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -323
  546. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
  547. package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
  548. package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
  549. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
  550. package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
  551. package/dist/parser/tests/statement/Declaration.spec.js +0 -108
  552. package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
  553. package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
  554. package/dist/parser/tests/statement/Dim.spec.js +0 -73
  555. package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
  556. package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
  557. package/dist/parser/tests/statement/Function.spec.js +0 -332
  558. package/dist/parser/tests/statement/Function.spec.js.map +0 -1
  559. package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
  560. package/dist/parser/tests/statement/Goto.spec.js +0 -50
  561. package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
  562. package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
  563. package/dist/parser/tests/statement/Increment.spec.js +0 -117
  564. package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
  565. package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
  566. package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
  567. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
  568. package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
  569. package/dist/parser/tests/statement/Misc.spec.js +0 -333
  570. package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
  571. package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
  572. package/dist/parser/tests/statement/PrintStatement.spec.js +0 -181
  573. package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
  574. package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
  575. package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -94
  576. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
  577. package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
  578. package/dist/parser/tests/statement/Set.spec.js +0 -218
  579. package/dist/parser/tests/statement/Set.spec.js.map +0 -1
  580. package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
  581. package/dist/parser/tests/statement/Stop.spec.js +0 -37
  582. package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
  583. package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
  584. package/dist/parser/tests/statement/Throw.spec.js +0 -35
  585. package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
  586. package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
  587. package/dist/parser/tests/statement/TryCatch.spec.js +0 -140
  588. package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
  589. package/dist/preprocessor/Chunk.d.ts +0 -82
  590. package/dist/preprocessor/Chunk.js +0 -77
  591. package/dist/preprocessor/Chunk.js.map +0 -1
  592. package/dist/preprocessor/Manifest.spec.d.ts +0 -0
  593. package/dist/preprocessor/Manifest.spec.js +0 -105
  594. package/dist/preprocessor/Manifest.spec.js.map +0 -1
  595. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  596. package/dist/preprocessor/Preprocessor.js +0 -156
  597. package/dist/preprocessor/Preprocessor.js.map +0 -1
  598. package/dist/preprocessor/Preprocessor.spec.d.ts +0 -1
  599. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  600. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  601. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  602. package/dist/preprocessor/PreprocessorParser.js +0 -194
  603. package/dist/preprocessor/PreprocessorParser.js.map +0 -1
  604. package/dist/preprocessor/PreprocessorParser.spec.d.ts +0 -1
  605. package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
  606. package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
  607. package/dist/preprocessor/index.d.ts +0 -3
  608. package/dist/preprocessor/index.js +0 -16
  609. package/dist/preprocessor/index.js.map +0 -1
  610. package/dist/types/ArrayType.spec.d.ts +0 -1
  611. package/dist/types/ArrayType.spec.js +0 -30
  612. package/dist/types/ArrayType.spec.js.map +0 -1
  613. package/dist/types/BooleanType.spec.d.ts +0 -1
  614. package/dist/types/BooleanType.spec.js +0 -12
  615. package/dist/types/BooleanType.spec.js.map +0 -1
  616. package/dist/types/CustomType.d.ts +0 -10
  617. package/dist/types/CustomType.js +0 -35
  618. package/dist/types/CustomType.js.map +0 -1
  619. package/dist/types/DoubleType.spec.d.ts +0 -1
  620. package/dist/types/DoubleType.spec.js +0 -12
  621. package/dist/types/DoubleType.spec.js.map +0 -1
  622. package/dist/types/DynamicType.spec.d.ts +0 -1
  623. package/dist/types/DynamicType.spec.js +0 -12
  624. package/dist/types/DynamicType.spec.js.map +0 -1
  625. package/dist/types/FloatType.spec.d.ts +0 -1
  626. package/dist/types/FloatType.spec.js +0 -12
  627. package/dist/types/FloatType.spec.js.map +0 -1
  628. package/dist/types/FunctionType.spec.d.ts +0 -1
  629. package/dist/types/FunctionType.spec.js +0 -29
  630. package/dist/types/FunctionType.spec.js.map +0 -1
  631. package/dist/types/IntegerType.spec.d.ts +0 -1
  632. package/dist/types/IntegerType.spec.js +0 -12
  633. package/dist/types/IntegerType.spec.js.map +0 -1
  634. package/dist/types/InvalidType.spec.d.ts +0 -1
  635. package/dist/types/InvalidType.spec.js +0 -12
  636. package/dist/types/InvalidType.spec.js.map +0 -1
  637. package/dist/types/LazyType.d.ts +0 -15
  638. package/dist/types/LazyType.js +0 -32
  639. package/dist/types/LazyType.js.map +0 -1
  640. package/dist/types/LongIntegerType.spec.d.ts +0 -1
  641. package/dist/types/LongIntegerType.spec.js +0 -12
  642. package/dist/types/LongIntegerType.spec.js.map +0 -1
  643. package/dist/types/ObjectType.spec.d.ts +0 -1
  644. package/dist/types/ObjectType.spec.js +0 -12
  645. package/dist/types/ObjectType.spec.js.map +0 -1
  646. package/dist/types/StringType.spec.d.ts +0 -1
  647. package/dist/types/StringType.spec.js +0 -12
  648. package/dist/types/StringType.spec.js.map +0 -1
  649. package/dist/types/VoidType.spec.d.ts +0 -1
  650. package/dist/types/VoidType.spec.js +0 -12
  651. package/dist/types/VoidType.spec.js.map +0 -1
  652. /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