brighterscript 1.0.0-alpha.4 → 1.0.0-alpha.40

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 (620) hide show
  1. package/CHANGELOG.md +1387 -291
  2. package/README.md +72 -131
  3. package/bsconfig.schema.json +85 -1
  4. package/dist/ActionPipeline.d.ts +10 -0
  5. package/dist/ActionPipeline.js +40 -0
  6. package/dist/ActionPipeline.js.map +1 -0
  7. package/dist/AstValidationSegmenter.d.ts +42 -0
  8. package/dist/AstValidationSegmenter.js +237 -0
  9. package/dist/AstValidationSegmenter.js.map +1 -0
  10. package/dist/BsConfig.d.ts +56 -6
  11. package/dist/BusyStatusTracker.d.ts +31 -0
  12. package/dist/BusyStatusTracker.js +83 -0
  13. package/dist/BusyStatusTracker.js.map +1 -0
  14. package/dist/Cache.d.ts +5 -6
  15. package/dist/Cache.js +12 -11
  16. package/dist/Cache.js.map +1 -1
  17. package/dist/CacheVerifier.d.ts +7 -0
  18. package/dist/CacheVerifier.js +20 -0
  19. package/dist/CacheVerifier.js.map +1 -0
  20. package/dist/CodeActionUtil.d.ts +6 -3
  21. package/dist/CodeActionUtil.js +19 -5
  22. package/dist/CodeActionUtil.js.map +1 -1
  23. package/dist/CommentFlagProcessor.d.ts +7 -6
  24. package/dist/CommentFlagProcessor.js +11 -8
  25. package/dist/CommentFlagProcessor.js.map +1 -1
  26. package/dist/CrossScopeValidator.d.ts +67 -0
  27. package/dist/CrossScopeValidator.js +617 -0
  28. package/dist/CrossScopeValidator.js.map +1 -0
  29. package/dist/DependencyGraph.d.ts +8 -3
  30. package/dist/DependencyGraph.js +49 -16
  31. package/dist/DependencyGraph.js.map +1 -1
  32. package/dist/DiagnosticCollection.d.ts +5 -3
  33. package/dist/DiagnosticCollection.js +21 -16
  34. package/dist/DiagnosticCollection.js.map +1 -1
  35. package/dist/DiagnosticFilterer.d.ts +8 -4
  36. package/dist/DiagnosticFilterer.js +90 -54
  37. package/dist/DiagnosticFilterer.js.map +1 -1
  38. package/dist/DiagnosticManager.d.ts +61 -0
  39. package/dist/DiagnosticManager.js +238 -0
  40. package/dist/DiagnosticManager.js.map +1 -0
  41. package/dist/DiagnosticMessages.d.ts +204 -24
  42. package/dist/DiagnosticMessages.js +266 -33
  43. package/dist/DiagnosticMessages.js.map +1 -1
  44. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  45. package/dist/DiagnosticSeverityAdjuster.js +41 -0
  46. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  47. package/dist/FunctionScope.d.ts +28 -0
  48. package/dist/FunctionScope.js +52 -0
  49. package/dist/FunctionScope.js.map +1 -0
  50. package/dist/KeyedThrottler.d.ts +3 -3
  51. package/dist/KeyedThrottler.js +3 -3
  52. package/dist/KeyedThrottler.js.map +1 -1
  53. package/dist/LanguageServer.d.ts +72 -47
  54. package/dist/LanguageServer.js +545 -314
  55. package/dist/LanguageServer.js.map +1 -1
  56. package/dist/Logger.d.ts +9 -10
  57. package/dist/Logger.js +36 -30
  58. package/dist/Logger.js.map +1 -1
  59. package/dist/PluginInterface.d.ts +29 -7
  60. package/dist/PluginInterface.js +90 -7
  61. package/dist/PluginInterface.js.map +1 -1
  62. package/dist/Program.d.ts +201 -100
  63. package/dist/Program.js +1079 -700
  64. package/dist/Program.js.map +1 -1
  65. package/dist/ProgramBuilder.d.ts +29 -18
  66. package/dist/ProgramBuilder.js +178 -141
  67. package/dist/ProgramBuilder.js.map +1 -1
  68. package/dist/Scope.d.ts +144 -109
  69. package/dist/Scope.js +533 -552
  70. package/dist/Scope.js.map +1 -1
  71. package/dist/SemanticTokenUtils.d.ts +14 -0
  72. package/dist/SemanticTokenUtils.js +85 -0
  73. package/dist/SemanticTokenUtils.js.map +1 -0
  74. package/dist/Stopwatch.d.ts +4 -0
  75. package/dist/Stopwatch.js +8 -1
  76. package/dist/Stopwatch.js.map +1 -1
  77. package/dist/SymbolTable.d.ts +91 -24
  78. package/dist/SymbolTable.js +291 -64
  79. package/dist/SymbolTable.js.map +1 -1
  80. package/dist/SymbolTypeFlag.d.ts +9 -0
  81. package/dist/SymbolTypeFlag.js +14 -0
  82. package/dist/SymbolTypeFlag.js.map +1 -0
  83. package/dist/Throttler.d.ts +12 -0
  84. package/dist/Throttler.js +39 -0
  85. package/dist/Throttler.js.map +1 -1
  86. package/dist/Watcher.d.ts +0 -3
  87. package/dist/Watcher.js +0 -3
  88. package/dist/Watcher.js.map +1 -1
  89. package/dist/XmlScope.d.ts +5 -15
  90. package/dist/XmlScope.js +35 -87
  91. package/dist/XmlScope.js.map +1 -1
  92. package/dist/astUtils/CachedLookups.d.ts +50 -0
  93. package/dist/astUtils/CachedLookups.js +335 -0
  94. package/dist/astUtils/CachedLookups.js.map +1 -0
  95. package/dist/astUtils/CachedLookups.spec.js +39 -0
  96. package/dist/astUtils/CachedLookups.spec.js.map +1 -0
  97. package/dist/astUtils/Editor.d.ts +69 -0
  98. package/dist/astUtils/Editor.js +245 -0
  99. package/dist/astUtils/Editor.js.map +1 -0
  100. package/dist/astUtils/Editor.spec.js +258 -0
  101. package/dist/astUtils/Editor.spec.js.map +1 -0
  102. package/dist/astUtils/creators.d.ts +36 -19
  103. package/dist/astUtils/creators.js +222 -43
  104. package/dist/astUtils/creators.js.map +1 -1
  105. package/dist/astUtils/creators.spec.js +5 -5
  106. package/dist/astUtils/creators.spec.js.map +1 -1
  107. package/dist/astUtils/reflection.d.ts +148 -82
  108. package/dist/astUtils/reflection.js +324 -137
  109. package/dist/astUtils/reflection.js.map +1 -1
  110. package/dist/astUtils/reflection.spec.js +267 -167
  111. package/dist/astUtils/reflection.spec.js.map +1 -1
  112. package/dist/astUtils/stackedVisitor.js.map +1 -1
  113. package/dist/astUtils/stackedVisitor.spec.js +14 -14
  114. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  115. package/dist/astUtils/visitors.d.ts +114 -53
  116. package/dist/astUtils/visitors.js +70 -13
  117. package/dist/astUtils/visitors.js.map +1 -1
  118. package/dist/astUtils/visitors.spec.js +463 -51
  119. package/dist/astUtils/visitors.spec.js.map +1 -1
  120. package/dist/astUtils/xml.d.ts +9 -8
  121. package/dist/astUtils/xml.js +10 -5
  122. package/dist/astUtils/xml.js.map +1 -1
  123. package/dist/bscPlugin/BscPlugin.d.ts +22 -1
  124. package/dist/bscPlugin/BscPlugin.js +88 -0
  125. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  126. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  127. package/dist/bscPlugin/CallExpressionInfo.js +135 -0
  128. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  129. package/dist/bscPlugin/FileWriter.d.ts +6 -0
  130. package/dist/bscPlugin/FileWriter.js +24 -0
  131. package/dist/bscPlugin/FileWriter.js.map +1 -0
  132. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  133. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  134. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  135. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +1 -1
  136. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +30 -18
  137. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  138. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +94 -21
  139. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  140. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +64 -0
  141. package/dist/bscPlugin/completions/CompletionsProcessor.js +626 -0
  142. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  143. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +2188 -0
  144. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  145. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  146. package/dist/bscPlugin/definition/DefinitionProvider.js +212 -0
  147. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  148. package/dist/bscPlugin/definition/DefinitionProvider.spec.d.ts +1 -0
  149. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +87 -0
  150. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  151. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  152. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  153. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  154. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  155. package/dist/bscPlugin/hover/HoverProcessor.js +218 -0
  156. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  157. package/dist/bscPlugin/hover/HoverProcessor.spec.d.ts +1 -0
  158. package/dist/bscPlugin/hover/HoverProcessor.spec.js +786 -0
  159. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -0
  160. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  161. package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
  162. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  163. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +1 -0
  164. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  165. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  166. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  167. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +154 -0
  168. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  169. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +1 -0
  170. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +530 -0
  171. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  172. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
  173. package/dist/bscPlugin/serialize/BslibInjector.spec.js +33 -0
  174. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
  175. package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
  176. package/dist/bscPlugin/serialize/BslibManager.js +46 -0
  177. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  178. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  179. package/dist/bscPlugin/serialize/FileSerializer.js +75 -0
  180. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  181. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  182. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  183. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  184. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +1 -0
  185. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +291 -0
  186. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  187. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  188. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  189. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  190. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +1 -0
  191. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  192. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  193. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  194. package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
  195. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  196. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +21 -0
  197. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +201 -0
  198. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  199. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
  200. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +75 -0
  201. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
  202. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  203. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  204. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  205. package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
  206. package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
  207. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  208. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +36 -0
  209. package/dist/bscPlugin/validation/BrsFileValidator.js +534 -0
  210. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  211. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +1 -0
  212. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +1118 -0
  213. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -0
  214. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  215. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  216. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  217. package/dist/bscPlugin/validation/ScopeValidator.d.ts +126 -0
  218. package/dist/bscPlugin/validation/ScopeValidator.js +1039 -0
  219. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  220. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
  221. package/dist/bscPlugin/validation/ScopeValidator.spec.js +3346 -0
  222. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  223. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  224. package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
  225. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  226. package/dist/cli.js +117 -11
  227. package/dist/cli.js.map +1 -1
  228. package/dist/deferred.d.ts +3 -3
  229. package/dist/deferred.js.map +1 -1
  230. package/dist/diagnosticUtils.d.ts +10 -3
  231. package/dist/diagnosticUtils.js +62 -24
  232. package/dist/diagnosticUtils.js.map +1 -1
  233. package/dist/examples/plugins/removePrint.js +8 -12
  234. package/dist/examples/plugins/removePrint.js.map +1 -1
  235. package/dist/files/AssetFile.d.ts +24 -0
  236. package/dist/files/AssetFile.js +25 -0
  237. package/dist/files/AssetFile.js.map +1 -0
  238. package/dist/files/BrsFile.Class.spec.js +912 -153
  239. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  240. package/dist/files/BrsFile.d.ts +142 -85
  241. package/dist/files/BrsFile.js +845 -935
  242. package/dist/files/BrsFile.js.map +1 -1
  243. package/dist/files/BrsFile.spec.js +3778 -862
  244. package/dist/files/BrsFile.spec.js.map +1 -1
  245. package/dist/files/BscFile.d.ts +101 -0
  246. package/dist/files/BscFile.js +15 -0
  247. package/dist/files/BscFile.js.map +1 -0
  248. package/dist/files/Factory.d.ts +25 -0
  249. package/dist/files/Factory.js +22 -0
  250. package/dist/files/Factory.js.map +1 -0
  251. package/dist/files/LazyFileData.d.ts +20 -0
  252. package/dist/files/LazyFileData.js +54 -0
  253. package/dist/files/LazyFileData.js.map +1 -0
  254. package/dist/files/LazyFileData.spec.d.ts +1 -0
  255. package/dist/files/LazyFileData.spec.js +27 -0
  256. package/dist/files/LazyFileData.spec.js.map +1 -0
  257. package/dist/files/XmlFile.d.ts +73 -41
  258. package/dist/files/XmlFile.js +128 -138
  259. package/dist/files/XmlFile.js.map +1 -1
  260. package/dist/files/XmlFile.spec.js +451 -324
  261. package/dist/files/XmlFile.spec.js.map +1 -1
  262. package/dist/files/tests/imports.spec.js +62 -52
  263. package/dist/files/tests/imports.spec.js.map +1 -1
  264. package/dist/files/tests/optionalChaning.spec.d.ts +1 -0
  265. package/dist/files/tests/optionalChaning.spec.js +152 -0
  266. package/dist/files/tests/optionalChaning.spec.js.map +1 -0
  267. package/dist/globalCallables.d.ts +3 -1
  268. package/dist/globalCallables.js +417 -163
  269. package/dist/globalCallables.js.map +1 -1
  270. package/dist/index.d.ts +26 -3
  271. package/dist/index.js +44 -5
  272. package/dist/index.js.map +1 -1
  273. package/dist/interfaces.d.ts +783 -122
  274. package/dist/interfaces.js +21 -0
  275. package/dist/interfaces.js.map +1 -1
  276. package/dist/lexer/Character.spec.js +5 -5
  277. package/dist/lexer/Character.spec.js.map +1 -1
  278. package/dist/lexer/Lexer.d.ts +51 -12
  279. package/dist/lexer/Lexer.js +201 -57
  280. package/dist/lexer/Lexer.js.map +1 -1
  281. package/dist/lexer/Lexer.spec.js +781 -565
  282. package/dist/lexer/Lexer.spec.js.map +1 -1
  283. package/dist/lexer/Token.d.ts +27 -11
  284. package/dist/lexer/Token.js +10 -2
  285. package/dist/lexer/Token.js.map +1 -1
  286. package/dist/lexer/TokenKind.d.ts +31 -2
  287. package/dist/lexer/TokenKind.js +134 -10
  288. package/dist/lexer/TokenKind.js.map +1 -1
  289. package/dist/logging.d.ts +9 -0
  290. package/dist/logging.js +16 -0
  291. package/dist/logging.js.map +1 -0
  292. package/dist/parser/AstNode.d.ts +191 -0
  293. package/dist/parser/AstNode.js +269 -0
  294. package/dist/parser/AstNode.js.map +1 -0
  295. package/dist/parser/AstNode.spec.d.ts +1 -0
  296. package/dist/parser/AstNode.spec.js +1455 -0
  297. package/dist/parser/AstNode.spec.js.map +1 -0
  298. package/dist/parser/BrightScriptDocParser.d.ts +56 -0
  299. package/dist/parser/BrightScriptDocParser.js +294 -0
  300. package/dist/parser/BrightScriptDocParser.js.map +1 -0
  301. package/dist/parser/BrightScriptDocParser.spec.d.ts +1 -0
  302. package/dist/parser/BrightScriptDocParser.spec.js +310 -0
  303. package/dist/parser/BrightScriptDocParser.spec.js.map +1 -0
  304. package/dist/parser/BrsTranspileState.d.ts +22 -3
  305. package/dist/parser/BrsTranspileState.js +19 -0
  306. package/dist/parser/BrsTranspileState.js.map +1 -1
  307. package/dist/parser/Expression.d.ts +489 -221
  308. package/dist/parser/Expression.js +1206 -506
  309. package/dist/parser/Expression.js.map +1 -1
  310. package/dist/parser/Expression.spec.d.ts +1 -0
  311. package/dist/parser/Expression.spec.js +40 -0
  312. package/dist/parser/Expression.spec.js.map +1 -0
  313. package/dist/parser/Parser.Class.spec.js +230 -125
  314. package/dist/parser/Parser.Class.spec.js.map +1 -1
  315. package/dist/parser/Parser.d.ts +113 -124
  316. package/dist/parser/Parser.js +1510 -983
  317. package/dist/parser/Parser.js.map +1 -1
  318. package/dist/parser/Parser.spec.d.ts +3 -1
  319. package/dist/parser/Parser.spec.js +1533 -517
  320. package/dist/parser/Parser.spec.js.map +1 -1
  321. package/dist/parser/SGParser.d.ts +60 -7
  322. package/dist/parser/SGParser.js +225 -185
  323. package/dist/parser/SGParser.js.map +1 -1
  324. package/dist/parser/SGParser.spec.js +29 -32
  325. package/dist/parser/SGParser.spec.js.map +1 -1
  326. package/dist/parser/SGTypes.d.ts +295 -52
  327. package/dist/parser/SGTypes.js +540 -187
  328. package/dist/parser/SGTypes.js.map +1 -1
  329. package/dist/parser/Statement.d.ts +808 -261
  330. package/dist/parser/Statement.js +2232 -588
  331. package/dist/parser/Statement.js.map +1 -1
  332. package/dist/parser/Statement.spec.js +133 -36
  333. package/dist/parser/Statement.spec.js.map +1 -1
  334. package/dist/parser/TranspileState.d.ts +26 -12
  335. package/dist/parser/TranspileState.js +114 -15
  336. package/dist/parser/TranspileState.js.map +1 -1
  337. package/dist/parser/tests/Parser.spec.d.ts +3 -9
  338. package/dist/parser/tests/Parser.spec.js +7 -13
  339. package/dist/parser/tests/Parser.spec.js.map +1 -1
  340. package/dist/parser/tests/controlFlow/For.spec.js +83 -75
  341. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  342. package/dist/parser/tests/controlFlow/ForEach.spec.js +58 -51
  343. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  344. package/dist/parser/tests/controlFlow/If.spec.js +382 -239
  345. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  346. package/dist/parser/tests/controlFlow/While.spec.js +52 -45
  347. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  348. package/dist/parser/tests/expression/Additive.spec.js +51 -43
  349. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  350. package/dist/parser/tests/expression/ArrayLiterals.spec.js +192 -142
  351. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  352. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +236 -160
  353. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  354. package/dist/parser/tests/expression/Boolean.spec.js +41 -34
  355. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  356. package/dist/parser/tests/expression/Call.spec.js +173 -55
  357. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  358. package/dist/parser/tests/expression/Exponential.spec.js +20 -20
  359. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  360. package/dist/parser/tests/expression/Function.spec.js +291 -282
  361. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  362. package/dist/parser/tests/expression/Indexing.spec.js +193 -110
  363. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  364. package/dist/parser/tests/expression/Multiplicative.spec.js +42 -42
  365. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  366. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +213 -115
  367. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  368. package/dist/parser/tests/expression/PrefixUnary.spec.js +58 -52
  369. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  370. package/dist/parser/tests/expression/Primary.spec.js +76 -60
  371. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  372. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
  373. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +171 -0
  374. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
  375. package/dist/parser/tests/expression/Relational.spec.js +50 -50
  376. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  377. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +31 -31
  378. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  379. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +235 -94
  380. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  381. package/dist/parser/tests/expression/TernaryExpression.spec.js +403 -174
  382. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  383. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  384. package/dist/parser/tests/expression/TypeExpression.spec.js +126 -0
  385. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  386. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
  387. package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
  388. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
  389. package/dist/parser/tests/statement/AssignmentOperators.spec.js +44 -44
  390. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  391. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
  392. package/dist/parser/tests/statement/ConstStatement.spec.js +262 -0
  393. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
  394. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  395. package/dist/parser/tests/statement/Continue.spec.js +119 -0
  396. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  397. package/dist/parser/tests/statement/Declaration.spec.js +61 -55
  398. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  399. package/dist/parser/tests/statement/Dim.spec.js +22 -22
  400. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  401. package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
  402. package/dist/parser/tests/statement/Enum.spec.js +744 -0
  403. package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
  404. package/dist/parser/tests/statement/For.spec.d.ts +1 -0
  405. package/dist/parser/tests/statement/For.spec.js +45 -0
  406. package/dist/parser/tests/statement/For.spec.js.map +1 -0
  407. package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
  408. package/dist/parser/tests/statement/ForEach.spec.js +36 -0
  409. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -0
  410. package/dist/parser/tests/statement/Function.spec.js +226 -215
  411. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  412. package/dist/parser/tests/statement/Goto.spec.js +16 -15
  413. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  414. package/dist/parser/tests/statement/Increment.spec.js +64 -59
  415. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  416. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
  417. package/dist/parser/tests/statement/InterfaceStatement.spec.js +110 -0
  418. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
  419. package/dist/parser/tests/statement/LibraryStatement.spec.js +22 -22
  420. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  421. package/dist/parser/tests/statement/Misc.spec.js +127 -168
  422. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  423. package/dist/parser/tests/statement/PrintStatement.spec.js +133 -114
  424. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  425. package/dist/parser/tests/statement/ReturnStatement.spec.js +57 -54
  426. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  427. package/dist/parser/tests/statement/Set.spec.js +131 -117
  428. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  429. package/dist/parser/tests/statement/Stop.spec.js +14 -13
  430. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  431. package/dist/parser/tests/statement/Throw.spec.js +11 -8
  432. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  433. package/dist/parser/tests/statement/TryCatch.spec.js +26 -15
  434. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  435. package/dist/preprocessor/Manifest.d.ts +6 -6
  436. package/dist/preprocessor/Manifest.js +17 -38
  437. package/dist/preprocessor/Manifest.js.map +1 -1
  438. package/dist/preprocessor/Manifest.spec.d.ts +1 -0
  439. package/dist/preprocessor/Manifest.spec.js +78 -103
  440. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  441. package/dist/roku-types/data.json +19452 -0
  442. package/dist/roku-types/index.d.ts +5533 -0
  443. package/dist/roku-types/index.js +11 -0
  444. package/dist/roku-types/index.js.map +1 -0
  445. package/dist/types/ArrayType.d.ts +9 -5
  446. package/dist/types/ArrayType.js +73 -24
  447. package/dist/types/ArrayType.js.map +1 -1
  448. package/dist/types/ArrayType.spec.js +39 -11
  449. package/dist/types/ArrayType.spec.js.map +1 -1
  450. package/dist/types/AssociativeArrayType.d.ts +14 -0
  451. package/dist/types/AssociativeArrayType.js +60 -0
  452. package/dist/types/AssociativeArrayType.js.map +1 -0
  453. package/dist/types/BaseFunctionType.d.ts +9 -0
  454. package/dist/types/BaseFunctionType.js +25 -0
  455. package/dist/types/BaseFunctionType.js.map +1 -0
  456. package/dist/types/BooleanType.d.ts +10 -5
  457. package/dist/types/BooleanType.js +21 -9
  458. package/dist/types/BooleanType.js.map +1 -1
  459. package/dist/types/BooleanType.spec.js +10 -4
  460. package/dist/types/BooleanType.spec.js.map +1 -1
  461. package/dist/types/BscType.d.ts +29 -3
  462. package/dist/types/BscType.js +121 -0
  463. package/dist/types/BscType.js.map +1 -1
  464. package/dist/types/BscTypeKind.d.ts +25 -0
  465. package/dist/types/BscTypeKind.js +30 -0
  466. package/dist/types/BscTypeKind.js.map +1 -0
  467. package/dist/types/BuiltInInterfaceAdder.d.ts +25 -0
  468. package/dist/types/BuiltInInterfaceAdder.js +201 -0
  469. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  470. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  471. package/dist/types/BuiltInInterfaceAdder.spec.js +115 -0
  472. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  473. package/dist/types/ClassType.d.ts +16 -0
  474. package/dist/types/ClassType.js +57 -0
  475. package/dist/types/ClassType.js.map +1 -0
  476. package/dist/types/ClassType.spec.d.ts +1 -0
  477. package/dist/types/ClassType.spec.js +76 -0
  478. package/dist/types/ClassType.spec.js.map +1 -0
  479. package/dist/types/ComponentType.d.ts +27 -0
  480. package/dist/types/ComponentType.js +83 -0
  481. package/dist/types/ComponentType.js.map +1 -0
  482. package/dist/types/DoubleType.d.ts +10 -5
  483. package/dist/types/DoubleType.js +25 -18
  484. package/dist/types/DoubleType.js.map +1 -1
  485. package/dist/types/DoubleType.spec.js +12 -4
  486. package/dist/types/DoubleType.spec.js.map +1 -1
  487. package/dist/types/DynamicType.d.ts +12 -5
  488. package/dist/types/DynamicType.js +22 -6
  489. package/dist/types/DynamicType.js.map +1 -1
  490. package/dist/types/DynamicType.spec.js +16 -5
  491. package/dist/types/DynamicType.spec.js.map +1 -1
  492. package/dist/types/EnumType.d.ts +40 -0
  493. package/dist/types/EnumType.js +80 -0
  494. package/dist/types/EnumType.js.map +1 -0
  495. package/dist/types/EnumType.spec.d.ts +1 -0
  496. package/dist/types/EnumType.spec.js +33 -0
  497. package/dist/types/EnumType.spec.js.map +1 -0
  498. package/dist/types/FloatType.d.ts +10 -5
  499. package/dist/types/FloatType.js +25 -18
  500. package/dist/types/FloatType.js.map +1 -1
  501. package/dist/types/FloatType.spec.js +4 -4
  502. package/dist/types/FloatType.spec.js.map +1 -1
  503. package/dist/types/FunctionType.d.ts +10 -22
  504. package/dist/types/FunctionType.js +26 -63
  505. package/dist/types/FunctionType.js.map +1 -1
  506. package/dist/types/InheritableType.d.ts +28 -0
  507. package/dist/types/InheritableType.js +157 -0
  508. package/dist/types/InheritableType.js.map +1 -0
  509. package/dist/types/IntegerType.d.ts +10 -5
  510. package/dist/types/IntegerType.js +25 -18
  511. package/dist/types/IntegerType.js.map +1 -1
  512. package/dist/types/IntegerType.spec.js +8 -4
  513. package/dist/types/IntegerType.spec.js.map +1 -1
  514. package/dist/types/InterfaceType.d.ts +14 -6
  515. package/dist/types/InterfaceType.js +26 -15
  516. package/dist/types/InterfaceType.js.map +1 -1
  517. package/dist/types/InterfaceType.spec.d.ts +1 -0
  518. package/dist/types/InterfaceType.spec.js +227 -0
  519. package/dist/types/InterfaceType.spec.js.map +1 -0
  520. package/dist/types/InvalidType.d.ts +9 -5
  521. package/dist/types/InvalidType.js +20 -9
  522. package/dist/types/InvalidType.js.map +1 -1
  523. package/dist/types/InvalidType.spec.js +8 -4
  524. package/dist/types/InvalidType.spec.js.map +1 -1
  525. package/dist/types/LongIntegerType.d.ts +10 -5
  526. package/dist/types/LongIntegerType.js +25 -18
  527. package/dist/types/LongIntegerType.js.map +1 -1
  528. package/dist/types/LongIntegerType.spec.js +10 -4
  529. package/dist/types/LongIntegerType.spec.js.map +1 -1
  530. package/dist/types/NamespaceType.d.ts +12 -0
  531. package/dist/types/NamespaceType.js +28 -0
  532. package/dist/types/NamespaceType.js.map +1 -0
  533. package/dist/types/ObjectType.d.ts +10 -5
  534. package/dist/types/ObjectType.js +23 -9
  535. package/dist/types/ObjectType.js.map +1 -1
  536. package/dist/types/ObjectType.spec.js +3 -3
  537. package/dist/types/ObjectType.spec.js.map +1 -1
  538. package/dist/types/ReferenceType.d.ts +79 -0
  539. package/dist/types/ReferenceType.js +522 -0
  540. package/dist/types/ReferenceType.js.map +1 -0
  541. package/dist/types/ReferenceType.spec.d.ts +1 -0
  542. package/dist/types/ReferenceType.spec.js +151 -0
  543. package/dist/types/ReferenceType.spec.js.map +1 -0
  544. package/dist/types/StringType.d.ts +13 -5
  545. package/dist/types/StringType.js +25 -9
  546. package/dist/types/StringType.js.map +1 -1
  547. package/dist/types/StringType.spec.js +3 -3
  548. package/dist/types/StringType.spec.js.map +1 -1
  549. package/dist/types/TypedFunctionType.d.ts +33 -0
  550. package/dist/types/TypedFunctionType.js +106 -0
  551. package/dist/types/TypedFunctionType.js.map +1 -0
  552. package/dist/types/TypedFunctionType.spec.d.ts +1 -0
  553. package/dist/types/TypedFunctionType.spec.js +122 -0
  554. package/dist/types/TypedFunctionType.spec.js.map +1 -0
  555. package/dist/types/UninitializedType.d.ts +8 -6
  556. package/dist/types/UninitializedType.js +15 -9
  557. package/dist/types/UninitializedType.js.map +1 -1
  558. package/dist/types/UnionType.d.ts +20 -0
  559. package/dist/types/UnionType.js +127 -0
  560. package/dist/types/UnionType.js.map +1 -0
  561. package/dist/types/UnionType.spec.d.ts +1 -0
  562. package/dist/types/UnionType.spec.js +129 -0
  563. package/dist/types/UnionType.spec.js.map +1 -0
  564. package/dist/types/VoidType.d.ts +10 -5
  565. package/dist/types/VoidType.js +20 -9
  566. package/dist/types/VoidType.js.map +1 -1
  567. package/dist/types/VoidType.spec.js +3 -3
  568. package/dist/types/VoidType.spec.js.map +1 -1
  569. package/dist/types/helper.spec.d.ts +1 -0
  570. package/dist/types/helper.spec.js +144 -0
  571. package/dist/types/helper.spec.js.map +1 -0
  572. package/dist/types/helpers.d.ts +26 -0
  573. package/dist/types/helpers.js +191 -0
  574. package/dist/types/helpers.js.map +1 -0
  575. package/dist/types/index.d.ts +22 -0
  576. package/dist/types/index.js +39 -0
  577. package/dist/types/index.js.map +1 -0
  578. package/dist/util.d.ts +272 -117
  579. package/dist/util.js +1583 -343
  580. package/dist/util.js.map +1 -1
  581. package/dist/validators/ClassValidator.d.ts +9 -15
  582. package/dist/validators/ClassValidator.js +85 -138
  583. package/dist/validators/ClassValidator.js.map +1 -1
  584. package/package.json +174 -138
  585. package/dist/astUtils/index.d.ts +0 -7
  586. package/dist/astUtils/index.js +0 -26
  587. package/dist/astUtils/index.js.map +0 -1
  588. package/dist/lexer/index.d.ts +0 -3
  589. package/dist/lexer/index.js +0 -17
  590. package/dist/lexer/index.js.map +0 -1
  591. package/dist/parser/index.d.ts +0 -3
  592. package/dist/parser/index.js +0 -16
  593. package/dist/parser/index.js.map +0 -1
  594. package/dist/preprocessor/Chunk.d.ts +0 -82
  595. package/dist/preprocessor/Chunk.js +0 -77
  596. package/dist/preprocessor/Chunk.js.map +0 -1
  597. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  598. package/dist/preprocessor/Preprocessor.js +0 -156
  599. package/dist/preprocessor/Preprocessor.js.map +0 -1
  600. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  601. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  602. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  603. package/dist/preprocessor/PreprocessorParser.js +0 -194
  604. package/dist/preprocessor/PreprocessorParser.js.map +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/CustomType.d.ts +0 -10
  611. package/dist/types/CustomType.js +0 -35
  612. package/dist/types/CustomType.js.map +0 -1
  613. package/dist/types/FunctionType.spec.js +0 -29
  614. package/dist/types/FunctionType.spec.js.map +0 -1
  615. package/dist/types/LazyType.d.ts +0 -15
  616. package/dist/types/LazyType.js +0 -32
  617. package/dist/types/LazyType.js.map +0 -1
  618. /package/dist/{preprocessor/Preprocessor.spec.d.ts → astUtils/CachedLookups.spec.d.ts} +0 -0
  619. /package/dist/{preprocessor/PreprocessorParser.spec.d.ts → astUtils/Editor.spec.d.ts} +0 -0
  620. /package/dist/{types/FunctionType.spec.d.ts → bscPlugin/completions/CompletionsProcessor.spec.d.ts} +0 -0
@@ -0,0 +1,530 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_config_spec_1 = require("../../chai-config.spec");
4
+ const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
5
+ const Program_1 = require("../../Program");
6
+ const testHelpers_spec_1 = require("../../testHelpers.spec");
7
+ const util_1 = require("../../util");
8
+ const testHelpers_spec_2 = require("../../testHelpers.spec");
9
+ describe('BrsFileSemanticTokensProcessor', () => {
10
+ let program;
11
+ beforeEach(() => {
12
+ program = new Program_1.Program({
13
+ rootDir: testHelpers_spec_2.rootDir
14
+ });
15
+ });
16
+ afterEach(() => {
17
+ program.dispose();
18
+ });
19
+ /**
20
+ * Ensure the specified tokens are present in the full list
21
+ */
22
+ function expectSemanticTokensIncludes(file, expected, validateDiagnostics = true) {
23
+ const result = getSemanticTokenResults(file, expected, validateDiagnostics);
24
+ (0, chai_config_spec_1.expect)(result.actual).to.include.members(result.expected);
25
+ }
26
+ /**
27
+ * Ensure that the full list of tokens exactly equals the expected list
28
+ */
29
+ function expectSemanticTokens(file, expected, validateDiagnostics = true) {
30
+ const result = getSemanticTokenResults(file, expected, validateDiagnostics);
31
+ (0, chai_config_spec_1.expect)(result.actual).to.eql(result.expected);
32
+ }
33
+ function getSemanticTokenResults(file, expected, validateDiagnostics = true) {
34
+ var _a, _b;
35
+ program.validate();
36
+ if (validateDiagnostics) {
37
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
38
+ }
39
+ const result = util_1.util.sortByRange(program.getSemanticTokens(file.srcPath));
40
+ //sort modifiers
41
+ for (let collection of [result, expected]) {
42
+ for (let i = 0; i < collection.length; i++) {
43
+ if (Array.isArray(collection[i])) {
44
+ const parts = collection[i];
45
+ collection[i] = {
46
+ tokenType: parts[0],
47
+ range: util_1.util.createRange(parts[1], parts[2], parts[3], parts[4]),
48
+ tokenModifiers: (_a = parts[5]) !== null && _a !== void 0 ? _a : []
49
+ };
50
+ }
51
+ let token = collection[i];
52
+ (_b = token.tokenModifiers) !== null && _b !== void 0 ? _b : (token.tokenModifiers = []);
53
+ token.tokenModifiers.sort();
54
+ }
55
+ }
56
+ function stringify(token) {
57
+ var _a;
58
+ return `${token.tokenType}|${util_1.util.rangeToString(token.range)}|${(_a = token.tokenModifiers) === null || _a === void 0 ? void 0 : _a.join(',')}`;
59
+ }
60
+ return {
61
+ actual: result.map(x => stringify(x)),
62
+ expected: expected.map(x => stringify(x))
63
+ };
64
+ }
65
+ it('matches each namespace section for class', () => {
66
+ const file = program.setFile('source/main.bs', `
67
+ class Host
68
+ sub new()
69
+ m.alien = new Humanoids.Aliens.Alien()
70
+ end sub
71
+ public alien
72
+ end class
73
+
74
+ namespace Humanoids.Aliens
75
+ class Alien
76
+ end class
77
+ end namespace
78
+ `);
79
+ expectSemanticTokensIncludes(file, [
80
+ //m.alien = new |Humanoids|.Aliens.Alien()
81
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 3, 34, 3, 43],
82
+ //m.alien = new Humanoids.|Aliens|.Alien()
83
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 3, 44, 3, 50],
84
+ //m.alien = new Humanoids.Aliens.|Alien|()
85
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.class, 3, 51, 3, 56]
86
+ ]);
87
+ });
88
+ it('matches each namespace section for namespaced function calls', () => {
89
+ const file = program.setFile('source/main.bs', `
90
+ sub new()
91
+ Humanoids.Aliens.Invade("earth")
92
+ end sub
93
+ namespace Humanoids.Aliens
94
+ function Invade(planet)
95
+ end function
96
+ end namespace
97
+ `);
98
+ expectSemanticTokensIncludes(file, [
99
+ // |Humanoids|.Aliens.Invade("earth")
100
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 16, 2, 25],
101
+ // Humanoids.|Aliens|.Invade("earth")
102
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 26, 2, 32],
103
+ // Humanoids.Aliens.|Invade|("earth")
104
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.function, 2, 33, 2, 39]
105
+ ]);
106
+ });
107
+ it('matches class name in assignment statement', () => {
108
+ const file = program.setFile('source/main.bs', `
109
+ sub test()
110
+ ctor = Person
111
+ end sub
112
+ class Person
113
+ end class
114
+ `);
115
+ expectSemanticTokensIncludes(file, [
116
+ // ctor = |Person|
117
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.class, 2, 23, 2, 29]
118
+ ]);
119
+ });
120
+ it('matches namespace-relative parts', () => {
121
+ const file = program.setFile('source/main.bs', `
122
+ namespace alpha
123
+ sub test()
124
+ lineHeight = 1
125
+ print lineHeight
126
+ end sub
127
+ end namespace
128
+ namespace alpha.lineHeight
129
+ end namespace
130
+ `);
131
+ expectSemanticTokensIncludes(file, [
132
+ //|lineHeight| = 1
133
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 3, 20, 3, 30],
134
+ //print |lineHeight|
135
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 4, 26, 4, 36]
136
+ ], false);
137
+ });
138
+ it('matches namespace-relative parts in parameters', () => {
139
+ const file = program.setFile('source/main.bs', `
140
+ namespace alpha
141
+ sub test(lineHeight as integer)
142
+ end sub
143
+ end namespace
144
+ namespace alpha.lineHeight
145
+ end namespace
146
+ `);
147
+ expectSemanticTokensIncludes(file, [
148
+ //sub test(|lineHeight| as integer)
149
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.parameter, 2, 25, 2, 35]
150
+ ], false);
151
+ });
152
+ it('matches parameters variable names', () => {
153
+ const file = program.setFile('source/main.bs', `
154
+ namespace designSystem
155
+ function getIcon(image = "" as string, size = -1 as float) as object
156
+ return {}
157
+ end function
158
+ end namespace
159
+ namespace designSystem.size
160
+ end namespace
161
+ `);
162
+ expectSemanticTokensIncludes(file, [
163
+ // function getIcon(|image| = "" as string, size = -1 as float) as object
164
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.parameter, 2, 33, 2, 38],
165
+ // function getIcon(image = "" as string, |size| = -1 as float) as object
166
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.parameter, 2, 55, 2, 59]
167
+ ], false);
168
+ });
169
+ it('matches each namespace section for namespaced function assignment', () => {
170
+ const file = program.setFile('source/main.bs', `
171
+ sub new()
172
+ action = Humanoids.Aliens.Invade
173
+ end sub
174
+ namespace Humanoids.Aliens
175
+ function Invade(planet)
176
+ end function
177
+ end namespace
178
+ `);
179
+ expectSemanticTokensIncludes(file, [
180
+ // action = |Humanoids|.Aliens.Invade
181
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 25, 2, 34],
182
+ // action = Humanoids.|Aliens|.Invade
183
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 35, 2, 41],
184
+ // action = Humanoids.Aliens.|Invade|
185
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.function, 2, 42, 2, 48]
186
+ ]);
187
+ });
188
+ it('matches each namespace section for namespaced function as function parameter', () => {
189
+ const file = program.setFile('source/main.bs', `
190
+ sub new()
191
+ actionName = type(Humanoids.Aliens.Invade)
192
+ end sub
193
+ namespace Humanoids.Aliens
194
+ function Invade(planet)
195
+ end function
196
+ end namespace
197
+ `);
198
+ expectSemanticTokensIncludes(file, [
199
+ // actionName = |type|(Humanoids.Aliens.Invade)
200
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.function, 2, 29, 2, 33],
201
+ // actionName = type(|Humanoids|.Aliens.Invade)
202
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 34, 2, 43],
203
+ // actionName = type(Humanoids.|Aliens|.Invade)
204
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 44, 2, 50],
205
+ // actionName = type(Humanoids.Aliens.|Invade|)
206
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.function, 2, 51, 2, 57]
207
+ ]);
208
+ });
209
+ it('matches each namespace section for namespaced function in print statement', () => {
210
+ const file = program.setFile('source/main.bs', `
211
+ sub new()
212
+ print Humanoids.Aliens.Invade
213
+ end sub
214
+ namespace Humanoids.Aliens
215
+ function Invade(planet)
216
+ end function
217
+ end namespace
218
+ `);
219
+ expectSemanticTokensIncludes(file, [
220
+ // print |Humanoids|.Aliens.Invade
221
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 22, 2, 31],
222
+ // print Humanoids.|Aliens|.Invade
223
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 32, 2, 38],
224
+ // print Humanoids.Aliens.|Invade|
225
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.function, 2, 39, 2, 45]
226
+ ]);
227
+ });
228
+ it('matches each namespace section for namespace declaration', () => {
229
+ const file = program.setFile('source/main.bs', `
230
+ namespace Sentients.Humanoids
231
+ end namespace
232
+ `);
233
+ expectSemanticTokens(file, [
234
+ // namespace |Sentients|.Humanoids
235
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 1, 22, 1, 31],
236
+ // namespace Sentients.|Humanoids|
237
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 1, 32, 1, 41]
238
+ ]);
239
+ });
240
+ it('matches each namespace section for enum', () => {
241
+ const file = program.setFile('source/main.bs', `
242
+ sub main()
243
+ print Sentients.Humanoids.HumanoidType.Cylon
244
+ end sub
245
+ namespace Sentients.Humanoids
246
+ enum HumanoidType
247
+ Human
248
+ Alien
249
+ Cylon
250
+ end enum
251
+ end namespace
252
+ `);
253
+ expectSemanticTokensIncludes(file, [
254
+ // print |Sentients|.Humanoids.HumanoidType.Cylon
255
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 22, 2, 31],
256
+ // print Sentients.|Humanoids|.HumanoidType.Cylon
257
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 32, 2, 41],
258
+ // print Sentients.Humanoids.|HumanoidType|.Cylon
259
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.enum, 2, 42, 2, 54],
260
+ // print Sentients.Humanoids.HumanoidType.|Cylon|
261
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.enumMember, 2, 55, 2, 60]
262
+ ]);
263
+ });
264
+ it('matches enums in if statements', () => {
265
+ const file = program.setFile('source/main.bs', `
266
+ sub main()
267
+ if Humanoids.HumanoidType.Cylon = "Cylon" then
268
+ print true
269
+ end if
270
+ end sub
271
+ namespace Humanoids
272
+ enum HumanoidType
273
+ Human = "Human"
274
+ Alien = "Alien"
275
+ Cylon = "Cylon"
276
+ end enum
277
+ end namespace
278
+ `);
279
+ expectSemanticTokensIncludes(file, [
280
+ // if |Humanoids|.HumanoidType.Cylon = "Cylon" then
281
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 19, 2, 28],
282
+ // if Humanoids.|HumanoidType|.Cylon = "Cylon" then
283
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.enum, 2, 29, 2, 41],
284
+ // if Humanoids.HumanoidType.|Cylon| = "Cylon" then
285
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.enumMember, 2, 42, 2, 47]
286
+ ]);
287
+ });
288
+ it('matches enum with invalid member name', () => {
289
+ const file = program.setFile('source/main.bs', `
290
+ sub main()
291
+ print Humanoids.HumanoidType.INVALID_VALUE 'bs:disable-line
292
+ end sub
293
+ namespace Humanoids
294
+ enum HumanoidType
295
+ Human = "Human"
296
+ Alien = "Alien"
297
+ Cylon = "Cylon"
298
+ end enum
299
+ end namespace
300
+ `);
301
+ expectSemanticTokensIncludes(file, [
302
+ // print |Humanoids|.HumanoidType.INVALID_VALUE 'bs:disable-line
303
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 22, 2, 31],
304
+ // print Humanoids.|HumanoidType|.INVALID_VALUE 'bs:disable-line
305
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.enum, 2, 32, 2, 44]
306
+ ]);
307
+ });
308
+ it('matches class with invalid stuff after it', () => {
309
+ const file = program.setFile('source/main.bs', `
310
+ sub init()
311
+ m.alien = new Humanoids.Aliens.Alien.NOT_A_CLASS() 'bs:disable-line
312
+ end sub
313
+
314
+ namespace Humanoids.Aliens
315
+ class Alien
316
+ end class
317
+ end namespace
318
+ `);
319
+ expectSemanticTokensIncludes(file, [
320
+ // m.alien = new |Humanoids|.Aliens.Alien.NOT_A_CLASS() 'bs:disable-line
321
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 30, 2, 39],
322
+ // m.alien = new Humanoids.|Aliens|.Alien.NOT_A_CLASS() 'bs:disable-line
323
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 40, 2, 46],
324
+ // m.alien = new Humanoids.Aliens.|Alien|.NOT_A_CLASS() 'bs:disable-line
325
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.class, 2, 47, 2, 52]
326
+ ]);
327
+ });
328
+ it('matches aliases', () => {
329
+ program.setFile('source/alpha.bs', `
330
+ namespace alpha
331
+ sub test()
332
+ end sub
333
+ end namespace
334
+ `);
335
+ const file = program.setFile('source/main.bs', `
336
+ alias alpha2 = alpha
337
+ sub main()
338
+ print alpha2.test()
339
+ end sub
340
+ `);
341
+ expectSemanticTokensIncludes(file, [
342
+ // alias |alpha2| = alpha
343
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 1, 18, 1, 24],
344
+ // alias alpha2 = |alpha|
345
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 1, 27, 1, 32],
346
+ // print |alpha2|.test()
347
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 3, 22, 3, 28],
348
+ // print alpha2.|test|()
349
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.function, 3, 29, 3, 33]
350
+ ]);
351
+ });
352
+ it('matches consts', () => {
353
+ const file = program.setFile('source/main.bs', `
354
+ sub init()
355
+ print API_URL
356
+ print info.FIRST_NAME
357
+ end sub
358
+ const API_URL = "some_url"
359
+ namespace info
360
+ const FIRST_NAME = "bob"
361
+ end namespace
362
+ `);
363
+ expectSemanticTokens(file, [
364
+ // sub |init|()
365
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.function, 1, 16, 1, 20],
366
+ // print |API_URL|
367
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 2, 22, 2, 29, [vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly, vscode_languageserver_protocol_1.SemanticTokenModifiers.static]],
368
+ // print |info|.FIRST_NAME
369
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 3, 22, 3, 26],
370
+ // print info.|FIRST_NAME|
371
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 3, 27, 3, 37, [vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly, vscode_languageserver_protocol_1.SemanticTokenModifiers.static]],
372
+ // const |API_URL| = "some_url"
373
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 5, 18, 5, 25, [vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly, vscode_languageserver_protocol_1.SemanticTokenModifiers.static]],
374
+ // namespace |info|
375
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 6, 22, 6, 26],
376
+ // const |FIRST_NAME| = "bob"
377
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 7, 22, 7, 32, [vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly, vscode_languageserver_protocol_1.SemanticTokenModifiers.static]]
378
+ ]);
379
+ });
380
+ it('matches consts in assignment expressions', () => {
381
+ const file = program.setFile('source/main.bs', `
382
+ sub main()
383
+ value = ""
384
+ value += constants.API_KEY
385
+ value += API_URL
386
+ end sub
387
+ namespace constants
388
+ const API_KEY = "test"
389
+ end namespace
390
+ const API_URL = "url"
391
+ `);
392
+ expectSemanticTokens(file, [
393
+ // sub |main|()
394
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.function, 1, 16, 1, 20],
395
+ // |value| = ""
396
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 2, 16, 2, 21],
397
+ // |value| += constants.API_KEY
398
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 3, 16, 3, 21],
399
+ // value += |constants|.API_KEY
400
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 3, 25, 3, 34],
401
+ // value += constants.|API_KEY|
402
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 3, 35, 3, 42, [vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly, vscode_languageserver_protocol_1.SemanticTokenModifiers.static]],
403
+ // |value| += API_URL
404
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 4, 16, 4, 21],
405
+ // value += |API_URL|
406
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 4, 25, 4, 32, [vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly, vscode_languageserver_protocol_1.SemanticTokenModifiers.static]],
407
+ // namespace |constants|
408
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 6, 22, 6, 31],
409
+ // const |API_KEY| = "test"
410
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 7, 22, 7, 29, [vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly, vscode_languageserver_protocol_1.SemanticTokenModifiers.static]],
411
+ //const |API_URL| = "url"
412
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 9, 18, 9, 25, [vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly, vscode_languageserver_protocol_1.SemanticTokenModifiers.static]]
413
+ ]);
414
+ });
415
+ it('matches new statement of non-class', () => {
416
+ const file = program.setFile('source/main.bs', `
417
+ sub init()
418
+ m.alien = new Humanoids.Aliens.Alien.NOT_A_CLASS() 'bs:disable-line
419
+ end sub
420
+
421
+ namespace Humanoids.Aliens
422
+ class Alien
423
+ end class
424
+ end namespace
425
+ `);
426
+ expectSemanticTokens(file, [
427
+ // sub |init|()
428
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.function, 1, 16, 1, 20],
429
+ // m.alien = new |Humanoids|.Aliens.Alien.NOT_A_CLASS() 'bs:disable-line
430
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 30, 2, 39],
431
+ // m.alien = new Humanoids.|Aliens|.Alien.NOT_A_CLASS() 'bs:disable-line
432
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 2, 40, 2, 46],
433
+ // m.alien = new Humanoids.Aliens.|Alien|.NOT_A_CLASS() 'bs:disable-line
434
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.class, 2, 47, 2, 52],
435
+ // namespace |Humanoids|.Aliens
436
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 5, 22, 5, 31],
437
+ // namespace Humanoids.|Aliens|
438
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, 5, 32, 5, 38],
439
+ // class |Alien|
440
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.class, 6, 22, 6, 27]
441
+ ]);
442
+ });
443
+ it('matches interface names', () => {
444
+ const file = program.setFile('source/main.bs', `
445
+ interface Human
446
+ name as string
447
+ end interface
448
+
449
+ namespace Humanoids
450
+ interface Alien
451
+ name as string
452
+ end interface
453
+ end namespace
454
+ `);
455
+ expectSemanticTokensIncludes(file, [
456
+ // interface |Human|
457
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.interface, 1, 22, 1, 27],
458
+ // interface |Alien|
459
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.interface, 6, 26, 6, 31]
460
+ ]);
461
+ });
462
+ it('marks setPort as deprecated', () => {
463
+ const file = program.setFile('source/main.bs', `
464
+ sub main()
465
+ url = createObject("roUrlTransfer") as roUrlTransfer
466
+ url.setPort(80)
467
+ end sub
468
+ `);
469
+ program.validate();
470
+ expectSemanticTokensIncludes(file, [
471
+ // url.|setPort|(80)
472
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.method, 3, 20, 3, 27, [vscode_languageserver_protocol_1.SemanticTokenModifiers.deprecated]]
473
+ ], false);
474
+ });
475
+ it('does not color variable of type roSGNode as a type', () => {
476
+ const file = program.setFile('source/main.bs', `
477
+ sub main()
478
+ node = CreateObject("roSGNode", "ContentNode")
479
+ node.id = "content"
480
+ end sub
481
+ `);
482
+ program.validate();
483
+ expectSemanticTokensIncludes(file, [
484
+ // |node|.id = "content"
485
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 3, 16, 3, 20]
486
+ ], false);
487
+ });
488
+ it('does not color variable when it is an instance of an interface', () => {
489
+ const file = program.setFile('source/main.bs', `
490
+ sub main(video as Movie)
491
+ video.url = "http://example.com"
492
+ end sub
493
+ interface Movie
494
+ url as string
495
+ end interface
496
+ `);
497
+ program.validate();
498
+ expectSemanticTokensIncludes(file, [
499
+ // |video|.url = "http://example.com"
500
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 2, 16, 2, 21]
501
+ ], false);
502
+ });
503
+ it('works for `new` statement', () => {
504
+ const file = program.setFile('source/main.bs', `
505
+ class Person
506
+ sub speak()
507
+ end sub
508
+ end class
509
+ sub test()
510
+ dude = new Person()
511
+ dude.speak()
512
+ end sub
513
+ `);
514
+ expectSemanticTokens(file, [
515
+ // class |Person|
516
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.class, 1, 18, 1, 24],
517
+ // sub |test|()
518
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.function, 5, 16, 5, 20],
519
+ // |dude| = new Person()
520
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 6, 16, 6, 20],
521
+ // dude = new |Person|()
522
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.class, 6, 27, 6, 33],
523
+ // |dude|.speak()
524
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.variable, 7, 16, 7, 20],
525
+ // dude.|speak|()
526
+ [vscode_languageserver_protocol_1.SemanticTokenTypes.method, 7, 21, 7, 26]
527
+ ]);
528
+ });
529
+ });
530
+ //# sourceMappingURL=BrsFileSemanticTokensProcessor.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrsFileSemanticTokensProcessor.spec.js","sourceRoot":"","sources":["../../../src/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.ts"],"names":[],"mappings":";;AAAA,6DAAgD;AAChD,mFAA4F;AAI5F,2CAAwC;AACxC,6DAA+D;AAC/D,qCAAkC;AAClC,6DAAiD;AAEjD,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC5C,IAAI,OAAgB,CAAC;IACrB,UAAU,CAAC,GAAG,EAAE;QACZ,OAAO,GAAG,IAAI,iBAAO,CAAC;YAClB,OAAO,EAAE,0BAAO;SACnB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,SAAS,4BAA4B,CAAC,IAAa,EAAE,QAAgH,EAAE,mBAAmB,GAAG,IAAI;QAC7L,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAC5E,IAAA,yBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,SAAS,oBAAoB,CAAC,IAAa,EAAE,QAAgH,EAAE,mBAAmB,GAAG,IAAI;QACrL,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAC5E,IAAA,yBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,uBAAuB,CAAC,IAAa,EAAE,QAAgH,EAAE,mBAAmB,GAAG,IAAI;;QACxL,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,mBAAmB,EAAE;YACrB,IAAA,wCAAqB,EAAC,OAAO,CAAC,CAAC;SAClC;QACD,MAAM,MAAM,GAAG,WAAI,CAAC,WAAW,CAC3B,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAE,CAC3C,CAAC;QAEF,gBAAgB;QAChB,KAAK,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC5B,UAAU,CAAC,CAAC,CAAC,GAAG;wBACZ,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;wBACnB,KAAK,EAAE,WAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC/D,cAAc,EAAE,MAAA,KAAK,CAAC,CAAC,CAAC,mCAAI,EAAE;qBACjC,CAAC;iBACL;gBACD,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,CAAkB,CAAC;gBAC3C,MAAA,KAAK,CAAC,cAAc,oCAApB,KAAK,CAAC,cAAc,GAAK,EAAE,EAAC;gBAC5B,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;aAC/B;SACJ;QAED,SAAS,SAAS,CAAC,KAAoB;;YACnC,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,WAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAA,KAAK,CAAC,cAAc,0CAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtG,CAAC;QAED,OAAO;YACH,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACrC,QAAQ,EAAG,QAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACjE,CAAC;IACN,CAAC;IAED,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;;;;SAYvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,0CAA0C;YAC1C,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,0CAA0C;YAC1C,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,0CAA0C;YAC1C,CAAC,mDAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC3C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;SAQvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,qCAAqC;YACrC,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,qCAAqC;YACrC,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,qCAAqC;YACrC,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC9C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;SAMvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,kBAAkB;YAClB,CAAC,mDAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC3C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;SASvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,kBAAkB;YAClB,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,oBAAoB;YACpB,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC9C,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;SAOvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,mCAAmC;YACnC,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC/C,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;SAQvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,yEAAyE;YACzE,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,yEAAyE;YACzE,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC/C,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QACzE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;SAQvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,qCAAqC;YACrC,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,qCAAqC;YACrC,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,qCAAqC;YACrC,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC9C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACpF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;SAQvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,+CAA+C;YAC/C,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,+CAA+C;YAC/C,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,+CAA+C;YAC/C,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,+CAA+C;YAC/C,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC9C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACjF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;SAQvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,kCAAkC;YAClC,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,kCAAkC;YAClC,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,kCAAkC;YAClC,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC9C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;SAGvD,CAAC,CAAC;QACH,oBAAoB,CAAC,IAAI,EAAE;YACvB,kCAAkC;YAClC,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,kCAAkC;YAClC,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC/C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;;;SAWvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,iDAAiD;YACjD,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,iDAAiD;YACjD,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,iDAAiD;YACjD,CAAC,mDAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,iDAAiD;YACjD,CAAC,mDAAkB,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAChD,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;;;;;SAavD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,mDAAmD;YACnD,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,mDAAmD;YACnD,CAAC,mDAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,mDAAmD;YACnD,CAAC,mDAAkB,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAChD,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;;;SAWvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,gEAAgE;YAChE,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,gEAAgE;YAChE,CAAC,mDAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC1C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;SASvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,wEAAwE;YACxE,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,wEAAwE;YACxE,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,wEAAwE;YACxE,CAAC,mDAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC3C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE;;;;;SAKlC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;SAKvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,yBAAyB;YACzB,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,yBAAyB;YACzB,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,wBAAwB;YACxB,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,wBAAwB;YACxB,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC9C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACtB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;SASvD,CAAC,CAAC;QACH,oBAAoB,CAAC,IAAI,EAAE;YACvB,eAAe;YACf,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,kBAAkB;YAClB,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uDAAsB,CAAC,QAAQ,EAAE,uDAAsB,CAAC,MAAM,CAAC,CAAC;YAC7G,0BAA0B;YAC1B,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,0BAA0B;YAC1B,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uDAAsB,CAAC,QAAQ,EAAE,uDAAsB,CAAC,MAAM,CAAC,CAAC;YAC7G,+BAA+B;YAC/B,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uDAAsB,CAAC,QAAQ,EAAE,uDAAsB,CAAC,MAAM,CAAC,CAAC;YAC7G,mBAAmB;YACnB,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,6BAA6B;YAC7B,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uDAAsB,CAAC,QAAQ,EAAE,uDAAsB,CAAC,MAAM,CAAC,CAAC;SAChH,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;;SAUvD,CAAC,CAAC;QACH,oBAAoB,CAAC,IAAI,EAAE;YACvB,eAAe;YACf,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,eAAe;YACf,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,+BAA+B;YAC/B,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,+BAA+B;YAC/B,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,+BAA+B;YAC/B,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uDAAsB,CAAC,QAAQ,EAAE,uDAAsB,CAAC,MAAM,CAAC,CAAC;YAC7G,qBAAqB;YACrB,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,qBAAqB;YACrB,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uDAAsB,CAAC,QAAQ,EAAE,uDAAsB,CAAC,MAAM,CAAC,CAAC;YAC7G,wBAAwB;YACxB,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,2BAA2B;YAC3B,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uDAAsB,CAAC,QAAQ,EAAE,uDAAsB,CAAC,MAAM,CAAC,CAAC;YAC7G,yBAAyB;YACzB,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uDAAsB,CAAC,QAAQ,EAAE,uDAAsB,CAAC,MAAM,CAAC,CAAC;SAChH,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;SASvD,CAAC,CAAC;QACH,oBAAoB,CAAC,IAAI,EAAE;YACvB,eAAe;YACf,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,wEAAwE;YACxE,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,wEAAwE;YACxE,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,wEAAwE;YACxE,CAAC,mDAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,+BAA+B;YAC/B,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,+BAA+B;YAC/B,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,gBAAgB;YAChB,CAAC,mDAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC3C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;;SAUvD,CAAC,CAAC;QACH,4BAA4B,CAAC,IAAI,EAAE;YAC/B,oBAAoB;YACpB,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,oBAAoB;YACpB,CAAC,mDAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC/C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;SAKvD,CAAC,CAAC;QACH,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,4BAA4B,CAAC,IAAI,EAAE;YAC/B,oBAAoB;YACpB,CAAC,mDAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uDAAsB,CAAC,UAAU,CAAC,CAAC;SACjF,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;SAKvD,CAAC,CAAC;QACH,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,4BAA4B,CAAC,IAAI,EAAE;YAC/B,wBAAwB;YACxB,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC9C,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;SAOvD,CAAC,CAAC;QACH,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,4BAA4B,CAAC,IAAI,EAAE;YAC/B,qCAAqC;YACrC,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC9C,EAAE,KAAK,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;SASvD,CAAC,CAAC;QACH,oBAAoB,CAAC,IAAI,EAAE;YACvB,iBAAiB;YACjB,CAAC,mDAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,eAAe;YACf,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,wBAAwB;YACxB,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,wBAAwB;YACxB,CAAC,mDAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,iBAAiB;YACjB,CAAC,mDAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,iBAAiB;YACjB,CAAC,mDAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SAC5C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sinon_1 = require("sinon");
4
+ const fsExtra = require("fs-extra");
5
+ const Program_1 = require("../../Program");
6
+ const testHelpers_spec_1 = require("../../testHelpers.spec");
7
+ const BslibManager_1 = require("./BslibManager");
8
+ const chai_1 = require("chai");
9
+ const sinon = (0, sinon_1.createSandbox)();
10
+ describe('BslibInjector', () => {
11
+ let program;
12
+ beforeEach(() => {
13
+ fsExtra.emptyDirSync(testHelpers_spec_1.tempDir);
14
+ program = new Program_1.Program({ rootDir: testHelpers_spec_1.rootDir, sourceMap: true });
15
+ });
16
+ afterEach(() => {
17
+ sinon.restore();
18
+ program.dispose();
19
+ });
20
+ describe('isBslibPkgPath', () => {
21
+ it('works for valid paths', () => {
22
+ (0, chai_1.expect)(BslibManager_1.BslibManager.isBslibPkgPath('source/bslib.brs')).to.be.true;
23
+ (0, chai_1.expect)(BslibManager_1.BslibManager.isBslibPkgPath('source/roku_modules/bslib/bslib.brs')).to.be.true;
24
+ (0, chai_1.expect)(BslibManager_1.BslibManager.isBslibPkgPath('source/roku_modules/rokucommunity_bslib/bslib.brs')).to.be.true;
25
+ });
26
+ it('works for invalid paths', () => {
27
+ (0, chai_1.expect)(BslibManager_1.BslibManager.isBslibPkgPath('source/bslib2.brs')).to.be.false;
28
+ (0, chai_1.expect)(BslibManager_1.BslibManager.isBslibPkgPath('source/roku_modules/1bslib/bslib.brs')).to.be.false;
29
+ (0, chai_1.expect)(BslibManager_1.BslibManager.isBslibPkgPath('source/roku_modules/rokucommunity_bslib/3bslib.brs')).to.be.false;
30
+ });
31
+ });
32
+ });
33
+ //# sourceMappingURL=BslibInjector.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BslibInjector.spec.js","sourceRoot":"","sources":["../../../src/bscPlugin/serialize/BslibInjector.spec.ts"],"names":[],"mappings":";;AAAA,iCAAsC;AACtC,oCAAoC;AACpC,2CAAwC;AACxC,6DAA0D;AAC1D,iDAA8C;AAC9C,+BAA8B;AAC9B,MAAM,KAAK,GAAG,IAAA,qBAAa,GAAE,CAAC;AAE9B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAE3B,IAAI,OAAgB,CAAC;IAErB,UAAU,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,YAAY,CAAC,0BAAO,CAAC,CAAC;QAC9B,OAAO,GAAG,IAAI,iBAAO,CAAC,EAAE,OAAO,EAAE,0BAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACX,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC7B,IAAA,aAAM,EACF,2BAAY,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAClD,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACb,IAAA,aAAM,EACF,2BAAY,CAAC,cAAc,CAAC,qCAAqC,CAAC,CACrE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACb,IAAA,aAAM,EACF,2BAAY,CAAC,cAAc,CAAC,mDAAmD,CAAC,CACnF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YAC/B,IAAA,aAAM,EACF,2BAAY,CAAC,cAAc,CAAC,mBAAmB,CAAC,CACnD,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACd,IAAA,aAAM,EACF,2BAAY,CAAC,cAAc,CAAC,sCAAsC,CAAC,CACtE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACd,IAAA,aAAM,EACF,2BAAY,CAAC,cAAc,CAAC,oDAAoD,CAAC,CACpF,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { BeforeBuildProgramEvent } from '../../interfaces';
2
+ import type { FunctionStatement } from '../../parser/Statement';
3
+ import type { Editor } from '../../astUtils/Editor';
4
+ export declare class BslibManager {
5
+ private cache;
6
+ addBslibFileIfMissing(event: BeforeBuildProgramEvent): void;
7
+ static applyPrefixIfMissing(statement: FunctionStatement, editor: Editor, prefix: string): void;
8
+ /**
9
+ * Is the pkgPath a support path to bslib?
10
+ */
11
+ static isBslibPkgPath(pkgPath: string): boolean;
12
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BslibManager = void 0;
4
+ const util_1 = require("../../util");
5
+ const bslib_1 = require("@rokucommunity/bslib");
6
+ const Cache_1 = require("../../Cache");
7
+ const BrsFile_1 = require("../../files/BrsFile");
8
+ const bslibSrcPath = (0, util_1.standardizePath) `${require.resolve('@rokucommunity/bslib')}/dist/source/bslib.brs`;
9
+ class BslibManager {
10
+ constructor() {
11
+ this.cache = new Cache_1.Cache();
12
+ }
13
+ addBslibFileIfMissing(event) {
14
+ //is bslib present in the program? If not, add it now just for this build cycle
15
+ const exists = !!event.files.find(x => {
16
+ return BslibManager.isBslibPkgPath(x.pkgPath);
17
+ });
18
+ if (!exists) {
19
+ const file = this.cache.getOrAdd('bslib', () => {
20
+ const file = new BrsFile_1.BrsFile({
21
+ srcPath: bslibSrcPath,
22
+ destPath: event.program.bslibPkgPath,
23
+ pkgPath: event.program.bslibPkgPath,
24
+ program: event.program
25
+ });
26
+ file.parse(bslib_1.source);
27
+ return file;
28
+ });
29
+ event.files.push(file);
30
+ }
31
+ }
32
+ static applyPrefixIfMissing(statement, editor, prefix) {
33
+ //add the bslib prefix if the function does not start with bslib_ or rokucommunity_bslib_
34
+ if (!/^(rokucommunity_)?bslib_/i.test(statement.tokens.name.text)) {
35
+ editor.setProperty(statement.tokens.name, 'text', `${prefix}_${statement.tokens.name.text}`);
36
+ }
37
+ }
38
+ /**
39
+ * Is the pkgPath a support path to bslib?
40
+ */
41
+ static isBslibPkgPath(pkgPath) {
42
+ return /(source[\\\/]bslib.brs)|(source[\\\/]roku_modules[\\\/](rokucommunity_)?bslib)[\\\/]bslib.brs$/i.test(pkgPath);
43
+ }
44
+ }
45
+ exports.BslibManager = BslibManager;
46
+ //# sourceMappingURL=BslibManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BslibManager.js","sourceRoot":"","sources":["../../../src/bscPlugin/serialize/BslibManager.ts"],"names":[],"mappings":";;;AACA,qCAAkD;AAClD,gDAA6D;AAC7D,uCAAoC;AACpC,iDAA8C;AAG9C,MAAM,YAAY,GAAG,IAAA,sBAAC,EAAA,GAAG,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,wBAAwB,CAAC;AACzF,MAAa,YAAY;IAAzB;QAEY,UAAK,GAAG,IAAI,aAAK,EAAE,CAAC;IAmChC,CAAC;IAjCU,qBAAqB,CAAC,KAA8B;QACvD,+EAA+E;QAC/E,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAClC,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC3C,MAAM,IAAI,GAAG,IAAI,iBAAO,CAAC;oBACrB,OAAO,EAAE,YAAY;oBACrB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;oBACpC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;oBACnC,OAAO,EAAE,KAAK,CAAC,OAAO;iBACzB,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,cAAW,CAAC,CAAC;gBACxB,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1B;IACL,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,SAA4B,EAAE,MAAc,EAAE,MAAc;QAC3F,yFAAyF;QACzF,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC/D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SAChG;IACL,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,cAAc,CAAC,OAAe;QACxC,OAAO,iGAAiG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3H,CAAC;CACJ;AArCD,oCAqCC"}