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
@@ -3,32 +3,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ProgramBuilder = void 0;
4
4
  const debounce = require("debounce-promise");
5
5
  const path = require("path");
6
- const rokuDeploy = require("roku-deploy");
6
+ const roku_deploy_1 = require("roku-deploy");
7
7
  const Program_1 = require("./Program");
8
8
  const util_1 = require("./util");
9
9
  const Watcher_1 = require("./Watcher");
10
10
  const vscode_languageserver_1 = require("vscode-languageserver");
11
- const Logger_1 = require("./Logger");
11
+ const logging_1 = require("./logging");
12
12
  const PluginInterface_1 = require("./PluginInterface");
13
13
  const diagnosticUtils = require("./diagnosticUtils");
14
14
  const fsExtra = require("fs-extra");
15
+ const requireRelative = require("require-relative");
16
+ const Throttler_1 = require("./Throttler");
17
+ const DiagnosticManager_1 = require("./DiagnosticManager");
15
18
  /**
16
19
  * A runner class that handles
17
20
  */
18
21
  class ProgramBuilder {
19
- constructor() {
22
+ constructor(options) {
23
+ var _a;
20
24
  /**
21
25
  * Determines whether the console should be cleared after a run (true for cli, false for languageserver)
22
26
  */
23
27
  this.allowConsoleClearing = true;
28
+ this.options = util_1.util.normalizeConfig({});
24
29
  this.isRunning = false;
25
- this.logger = new Logger_1.Logger();
26
- this.plugins = new PluginInterface_1.default([], this.logger);
27
30
  this.fileResolvers = [];
28
- /**
29
- * A list of diagnostics that are always added to the `getDiagnostics()` call.
30
- */
31
- this.staticDiagnostics = [];
31
+ this.diagnostics = new DiagnosticManager_1.DiagnosticManager();
32
32
  /**
33
33
  * A method that is used to cancel a previous run task.
34
34
  * Does nothing if previous run has completed or was already canceled
@@ -36,110 +36,154 @@ class ProgramBuilder {
36
36
  this.cancelLastRun = () => {
37
37
  return Promise.resolve();
38
38
  };
39
+ this.buildThrottler = new Throttler_1.Throttler(0);
40
+ this.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) !== null && _a !== void 0 ? _a : (0, logging_1.createLogger)();
41
+ this.plugins = new PluginInterface_1.default([], { logger: this.logger });
39
42
  //add the default file resolver (used to load source file contents).
40
43
  this.addFileResolver((filePath) => {
41
- return fsExtra.readFile(filePath).then((value) => {
42
- return value.toString();
43
- });
44
+ return fsExtra.readFile(filePath);
44
45
  });
45
46
  }
46
- addFileResolver(fileResolver) {
47
- this.fileResolvers.push(fileResolver);
47
+ /**
48
+ * Add file resolvers that will be able to provide file contents before loading from the file system
49
+ * @param fileResolvers a list of file resolvers
50
+ */
51
+ addFileResolver(...fileResolvers) {
52
+ this.fileResolvers.push(...fileResolvers);
48
53
  }
49
54
  /**
50
55
  * Get the contents of the specified file as a string.
51
56
  * This walks backwards through the file resolvers until we get a value.
52
57
  * This allow the language server to provide file contents directly from memory.
53
- * @param srcPath The absolute path to the source file on disk
54
- * @param normalizePath should this function repair and standardize the path? Passing false should have a performance boost if you can guarantee your path is already sanitized
55
58
  */
56
- async getFileContents(srcPath, normalizePath = true) {
57
- if (normalizePath) {
58
- srcPath = util_1.util.standardizePath(srcPath);
59
- }
59
+ async getFileContents(srcPath) {
60
+ srcPath = (0, util_1.standardizePath) `${srcPath}`;
60
61
  let reversedResolvers = [...this.fileResolvers].reverse();
61
62
  for (let fileResolver of reversedResolvers) {
62
63
  let result = await fileResolver(srcPath);
63
- if (typeof result === 'string') {
64
+ if (typeof result === 'string' || Buffer.isBuffer(result)) {
64
65
  return result;
65
66
  }
66
67
  }
67
68
  throw new Error(`Could not load file "${srcPath}"`);
68
69
  }
69
- /**
70
- * @param srcPath The absolute path to the source file on disk
71
- */
72
70
  addDiagnostic(srcPath, diagnostic) {
73
- var _a;
74
- diagnostic.file = (_a = this.program.getFile(srcPath)) !== null && _a !== void 0 ? _a : {
75
- srcPath: srcPath
76
- };
77
- this.staticDiagnostics.push(diagnostic);
71
+ if (!this.program) {
72
+ throw new Error('Cannot call `ProgramBuilder.addDiagnostic` before `ProgramBuilder.run()`');
73
+ }
74
+ if (!diagnostic.location) {
75
+ diagnostic.location = {
76
+ uri: util_1.util.pathToUri(srcPath),
77
+ range: util_1.util.createRange(0, 0, 0, 0)
78
+ };
79
+ }
80
+ else {
81
+ diagnostic.location.uri = util_1.util.pathToUri(srcPath);
82
+ }
83
+ this.diagnostics.register(diagnostic, { tags: ['ProgramBuilder'] });
78
84
  }
79
85
  getDiagnostics() {
80
- var _a, _b;
81
- return [
82
- ...this.staticDiagnostics,
83
- ...((_b = (_a = this.program) === null || _a === void 0 ? void 0 : _a.getDiagnostics()) !== null && _b !== void 0 ? _b : [])
84
- ];
86
+ return this.diagnostics.getDiagnostics();
85
87
  }
86
- async run(options) {
87
- this.logger.logLevel = options.logLevel;
88
- if (this.isRunning) {
89
- throw new Error('Server is already running');
90
- }
91
- this.isRunning = true;
88
+ /**
89
+ * Load the project and all the files, but don't run the validation, transpile, or watch cycles
90
+ */
91
+ async load(options) {
92
+ var _a, _b;
92
93
  try {
93
94
  this.options = util_1.util.normalizeAndResolveConfig(options);
95
+ if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.logLevel) !== undefined) {
96
+ this.logger.logLevel = (_b = this.options) === null || _b === void 0 ? void 0 : _b.logLevel;
97
+ }
98
+ if (this.options.noProject) {
99
+ this.logger.log(`'noProject' flag is set so bsconfig.json loading is disabled'`);
100
+ }
101
+ else if (this.options.project) {
102
+ this.logger.log(`Using config file: "${this.options.project}"`);
103
+ }
104
+ else {
105
+ this.logger.log(`No bsconfig.json file found, using default options`);
106
+ }
107
+ this.loadRequires();
94
108
  this.loadPlugins();
95
109
  }
96
110
  catch (e) {
97
- if ((e === null || e === void 0 ? void 0 : e.file) && e.message && e.code) {
111
+ //For now, just use a default options object so we have a functioning program
112
+ this.options = util_1.util.normalizeConfig({
113
+ showDiagnosticsInConsole: options === null || options === void 0 ? void 0 : options.showDiagnosticsInConsole
114
+ });
115
+ if ((e === null || e === void 0 ? void 0 : e.location) && e.message && e.code) {
98
116
  let err = e;
99
- this.staticDiagnostics.push(err);
117
+ this.diagnostics.register(err);
100
118
  }
101
119
  else {
102
120
  //if this is not a diagnostic, something else is wrong...
103
121
  throw e;
104
122
  }
105
123
  this.printDiagnostics();
106
- //we added diagnostics, so hopefully that draws attention to the underlying issues.
107
- //For now, just use a default options object so we have a functioning program
108
- this.options = util_1.util.normalizeConfig({});
109
124
  }
110
125
  this.logger.logLevel = this.options.logLevel;
111
- this.program = this.createProgram();
126
+ this.createProgram();
112
127
  //parse every file in the entire project
113
- await this.loadAllFilesAST();
128
+ await this.loadFiles();
129
+ }
130
+ async run(options) {
131
+ if (options === null || options === void 0 ? void 0 : options.logLevel) {
132
+ this.logger.logLevel = options.logLevel;
133
+ }
134
+ if (this.isRunning) {
135
+ throw new Error('Server is already running');
136
+ }
137
+ this.isRunning = true;
138
+ await this.load(options);
114
139
  if (this.options.watch) {
115
140
  this.logger.log('Starting compilation in watch mode...');
116
- await this.runOnce();
141
+ await this.runOnce({
142
+ validate: options === null || options === void 0 ? void 0 : options.validate,
143
+ noEmit: options === null || options === void 0 ? void 0 : options.noEmit
144
+ });
117
145
  this.enableWatchMode();
118
146
  }
119
147
  else {
120
- await this.runOnce();
148
+ await this.runOnce({
149
+ validate: options === null || options === void 0 ? void 0 : options.validate,
150
+ noEmit: options === null || options === void 0 ? void 0 : options.noEmit
151
+ });
121
152
  }
122
153
  }
123
154
  createProgram() {
124
- const program = new Program_1.Program(this.options, undefined, this.plugins);
125
- this.plugins.emit('afterProgramCreate', {
155
+ this.program = new Program_1.Program(this.options, this.logger, this.plugins, this.diagnostics);
156
+ this.plugins.emit('provideProgram', {
157
+ builder: this,
158
+ program: this.program
159
+ });
160
+ this.plugins.emit('afterProvideProgram', {
126
161
  builder: this,
127
- program: program
162
+ program: this.program
128
163
  });
129
- return program;
164
+ return this.program;
130
165
  }
131
166
  loadPlugins() {
132
- var _a, _b, _c;
167
+ var _a, _b, _c, _d;
133
168
  const cwd = (_a = this.options.cwd) !== null && _a !== void 0 ? _a : process.cwd();
134
- const plugins = util_1.util.loadPlugins(cwd, this.options.plugins, (pathOrModule, err) => this.logger.error(`Error when loading plugin '${pathOrModule}':`, err));
135
- this.logger.log(`Loading ${(_c = (_b = this.options.plugins) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0} plugins for cwd "${cwd}"`);
169
+ const plugins = util_1.util.loadPlugins(cwd, (_b = this.options.plugins) !== null && _b !== void 0 ? _b : [], (pathOrModule, err) => this.logger.error(`Error when loading plugin '${pathOrModule}':`, err));
170
+ this.logger.log(`Loading ${(_d = (_c = this.options.plugins) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0} plugins for cwd "${cwd}"`, this.options.plugins);
136
171
  for (let plugin of plugins) {
137
172
  this.plugins.add(plugin);
138
173
  }
139
- this.plugins.emit('beforeProgramCreate', {
174
+ this.plugins.emit('beforeProvideProgram', {
140
175
  builder: this
141
176
  });
142
177
  }
178
+ /**
179
+ * `require()` every options.require path
180
+ */
181
+ loadRequires() {
182
+ var _a;
183
+ for (const dep of (_a = this.options.require) !== null && _a !== void 0 ? _a : []) {
184
+ requireRelative(dep, this.options.cwd);
185
+ }
186
+ }
143
187
  clearConsole() {
144
188
  if (this.allowConsoleClearing) {
145
189
  util_1.util.clearConsole();
@@ -154,7 +198,7 @@ class ProgramBuilder {
154
198
  this.watchInterval = setInterval(() => { }, 1073741824);
155
199
  //clear the console
156
200
  this.clearConsole();
157
- let fileObjects = rokuDeploy.normalizeFilesArray(this.options.files ? this.options.files : []);
201
+ let fileObjects = roku_deploy_1.rokuDeploy.normalizeFilesArray(this.options.files ? this.options.files : []);
158
202
  //add each set of files to the file watcher
159
203
  for (let fileObject of fileObjects) {
160
204
  let src = typeof fileObject === 'string' ? fileObject : fileObject.src;
@@ -168,15 +212,18 @@ class ProgramBuilder {
168
212
  }, 50);
169
213
  //on any file watcher event
170
214
  this.watcher.on('all', async (event, thePath) => {
171
- thePath = util_1.standardizePath `${path.resolve(this.rootDir, thePath)}`;
215
+ if (!this.program) {
216
+ throw new Error('Internal invariant exception: somehow file watcher ran before `ProgramBuilder.run()`');
217
+ }
218
+ thePath = (0, util_1.standardizePath) `${path.resolve(this.rootDir, thePath)}`;
172
219
  if (event === 'add' || event === 'change') {
173
220
  const fileObj = {
174
221
  src: thePath,
175
- dest: rokuDeploy.getDestPath(thePath, this.program.options.files,
222
+ dest: roku_deploy_1.rokuDeploy.getDestPath(thePath, this.program.options.files,
176
223
  //some shells will toTowerCase the drive letter, so do it to rootDir for consistency
177
224
  util_1.util.driveLetterToLower(this.rootDir))
178
225
  };
179
- this.program.setFile(fileObj, await this.getFileContents(fileObj.src, false));
226
+ this.program.setFile(fileObj, await this.getFileContents(fileObj.src));
180
227
  }
181
228
  else if (event === 'unlink') {
182
229
  this.program.removeFile(thePath);
@@ -189,19 +236,26 @@ class ProgramBuilder {
189
236
  * The rootDir for this program.
190
237
  */
191
238
  get rootDir() {
239
+ if (!this.program) {
240
+ throw new Error('Cannot access `ProgramBuilder.rootDir` until after `ProgramBuilder.run()`');
241
+ }
192
242
  return this.program.options.rootDir;
193
243
  }
194
244
  /**
195
245
  * Run the entire process exactly one time.
196
246
  */
197
- runOnce() {
247
+ runOnce(options) {
198
248
  //clear the console
199
249
  this.clearConsole();
200
250
  let cancellationToken = { isCanceled: false };
201
251
  //wait for the previous run to complete
202
252
  let runPromise = this.cancelLastRun().then(() => {
203
253
  //start the new run
204
- return this._runOnce(cancellationToken);
254
+ return this._runOnce({
255
+ cancellationToken: cancellationToken,
256
+ validate: options === null || options === void 0 ? void 0 : options.validate,
257
+ noEmit: options === null || options === void 0 ? void 0 : options.noEmit
258
+ });
205
259
  });
206
260
  //a function used to cancel this run
207
261
  this.cancelLastRun = () => {
@@ -211,8 +265,8 @@ class ProgramBuilder {
211
265
  return runPromise;
212
266
  }
213
267
  printDiagnostics(diagnostics) {
214
- var _a, _b;
215
- if (this.options.showDiagnosticsInConsole === false) {
268
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
269
+ if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.showDiagnosticsInConsole) === false) {
216
270
  return;
217
271
  }
218
272
  if (!diagnostics) {
@@ -221,54 +275,90 @@ class ProgramBuilder {
221
275
  //group the diagnostics by file
222
276
  let diagnosticsByFile = {};
223
277
  for (let diagnostic of diagnostics) {
224
- if (!diagnosticsByFile[diagnostic.file.srcPath]) {
225
- diagnosticsByFile[diagnostic.file.srcPath] = [];
278
+ const diagnosticFileKey = (_c = (_b = diagnostic.location) === null || _b === void 0 ? void 0 : _b.uri) !== null && _c !== void 0 ? _c : 'no-uri';
279
+ if (!diagnosticsByFile[diagnosticFileKey]) {
280
+ diagnosticsByFile[diagnosticFileKey] = [];
226
281
  }
227
- diagnosticsByFile[diagnostic.file.srcPath].push(diagnostic);
282
+ diagnosticsByFile[diagnosticFileKey].push(diagnostic);
228
283
  }
229
284
  //get printing options
230
285
  const options = diagnosticUtils.getPrintDiagnosticOptions(this.options);
231
286
  const { cwd, emitFullPaths } = options;
232
- let srcPaths = Object.keys(diagnosticsByFile).sort();
233
- for (let srcPath of srcPaths) {
234
- let diagnosticsForFile = diagnosticsByFile[srcPath];
287
+ //custom-template reporters are pre-resolved once so we don't recompile them per diagnostic;
288
+ //the resolved function is stashed on the entry as `run` so we don't have to keep a parallel array.
289
+ //invalid entries are warned about and skipped (we never want to abort a build over a config typo).
290
+ const reporters = diagnosticUtils.normalizeDiagnosticReporters((_d = this.options) === null || _d === void 0 ? void 0 : _d.diagnosticReporters, this.logger)
291
+ .map(reporter => (reporter.type === 'custom'
292
+ ? Object.assign(Object.assign({}, reporter), { run: diagnosticUtils.createCustomDiagnosticReporter(reporter.format) }) : reporter));
293
+ if (reporters.length === 0) {
294
+ return;
295
+ }
296
+ let fileUris = Object.keys(diagnosticsByFile).sort();
297
+ for (let fileUri of fileUris) {
298
+ let diagnosticsForFile = diagnosticsByFile[fileUri];
235
299
  //sort the diagnostics in line and column order
236
300
  let sortedDiagnostics = diagnosticsForFile.sort((a, b) => {
237
- return (a.range.start.line - b.range.start.line ||
238
- a.range.start.character - b.range.start.character);
301
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
302
+ return (((_c = (_b = (_a = a.location) === null || _a === void 0 ? void 0 : _a.range) === null || _b === void 0 ? void 0 : _b.start.line) !== null && _c !== void 0 ? _c : -1) - ((_f = (_e = (_d = b.location) === null || _d === void 0 ? void 0 : _d.range) === null || _e === void 0 ? void 0 : _e.start.line) !== null && _f !== void 0 ? _f : -1) ||
303
+ ((_j = (_h = (_g = a.location) === null || _g === void 0 ? void 0 : _g.range) === null || _h === void 0 ? void 0 : _h.start.character) !== null && _j !== void 0 ? _j : -1) - ((_m = (_l = (_k = b.location) === null || _k === void 0 ? void 0 : _k.range) === null || _l === void 0 ? void 0 : _l.start.character) !== null && _m !== void 0 ? _m : -1));
239
304
  });
240
- let filePath = srcPath;
305
+ let filePath = util_1.util.uriToPath(fileUri);
241
306
  if (!emitFullPaths) {
242
307
  filePath = path.relative(cwd, filePath);
243
308
  }
244
309
  //load the file text
245
- const file = this.program.getFile(srcPath);
310
+ const file = (_e = this.program) === null || _e === void 0 ? void 0 : _e.getFile(fileUri);
246
311
  //get the file's in-memory contents if available
247
- const lines = (_b = (_a = file === null || file === void 0 ? void 0 : file.fileContents) === null || _a === void 0 ? void 0 : _a.split(/\r?\n/g)) !== null && _b !== void 0 ? _b : [];
312
+ const lines = (_g = (_f = file === null || file === void 0 ? void 0 : file.fileContents) === null || _f === void 0 ? void 0 : _f.split(/\r?\n/g)) !== null && _g !== void 0 ? _g : [];
248
313
  for (let diagnostic of sortedDiagnostics) {
249
314
  //default the severity to error if undefined
250
315
  let severity = typeof diagnostic.severity === 'number' ? diagnostic.severity : vscode_languageserver_1.DiagnosticSeverity.Error;
251
- //format output
252
- diagnosticUtils.printDiagnostic(options, severity, filePath, lines, diagnostic);
316
+ let relatedInformation = ((_j = (_h = util_1.util.toDiagnostic(diagnostic, diagnostic.source)) === null || _h === void 0 ? void 0 : _h.relatedInformation) !== null && _j !== void 0 ? _j : []).map(x => {
317
+ var _a;
318
+ let relatedInfoFilePath = util_1.util.uriToPath((_a = x.location) === null || _a === void 0 ? void 0 : _a.uri);
319
+ if (!emitFullPaths) {
320
+ relatedInfoFilePath = path.relative(cwd, relatedInfoFilePath);
321
+ }
322
+ return {
323
+ filePath: relatedInfoFilePath,
324
+ range: x.location.range,
325
+ message: x.message
326
+ };
327
+ });
328
+ //format output once per configured reporter
329
+ for (const reporter of reporters) {
330
+ if (reporter.type === 'github-actions') {
331
+ diagnosticUtils.printDiagnosticGithubActions({ options: options, severity: severity, filePath: filePath, diagnostic: diagnostic });
332
+ }
333
+ else if (reporter.type === 'custom') {
334
+ reporter.run({ options: options, severity: severity, filePath: filePath, diagnostic: diagnostic });
335
+ }
336
+ else {
337
+ diagnosticUtils.printDiagnostic(options, severity, filePath, lines, diagnostic, relatedInformation);
338
+ }
339
+ }
253
340
  }
254
341
  }
255
342
  }
256
343
  /**
257
- * Run the process once, allowing cancelability.
344
+ * Run the process once, allowing it to be cancelled.
258
345
  * NOTE: This should only be called by `runOnce`.
259
- * @param cancellationToken
260
346
  */
261
- async _runOnce(cancellationToken) {
347
+ async _runOnce(options) {
348
+ var _a, _b, _c, _d;
262
349
  let wereDiagnosticsPrinted = false;
263
350
  try {
264
351
  //maybe cancel?
265
- if (cancellationToken.isCanceled === true) {
352
+ if (((_a = options === null || options === void 0 ? void 0 : options.cancellationToken) === null || _a === void 0 ? void 0 : _a.isCanceled) === true) {
266
353
  return -1;
267
354
  }
268
- //validate program
269
- this.validateProject();
355
+ //the prop-drilled validate value takes precedence over this.options.validate.
356
+ //false means no, everything else (including missing) means true
357
+ if (((_b = options === null || options === void 0 ? void 0 : options.validate) !== null && _b !== void 0 ? _b : this.options.validate) !== false) {
358
+ this.validateProject();
359
+ }
270
360
  //maybe cancel?
271
- if (cancellationToken.isCanceled === true) {
361
+ if (((_c = options === null || options === void 0 ? void 0 : options.cancellationToken) === null || _c === void 0 ? void 0 : _c.isCanceled) === true) {
272
362
  return -1;
273
363
  }
274
364
  const diagnostics = this.getDiagnostics();
@@ -279,14 +369,13 @@ class ProgramBuilder {
279
369
  this.logger.log(`Found ${errorCount} ${errorCount === 1 ? 'error' : 'errors'}`);
280
370
  return errorCount;
281
371
  }
282
- //create the deployment package (and transpile as well)
283
- await this.createPackageIfEnabled();
372
+ if (options.noEmit !== true) {
373
+ await this.transpile();
374
+ }
284
375
  //maybe cancel?
285
- if (cancellationToken.isCanceled === true) {
376
+ if (((_d = options === null || options === void 0 ? void 0 : options.cancellationToken) === null || _d === void 0 ? void 0 : _d.isCanceled) === true) {
286
377
  return -1;
287
378
  }
288
- //deploy the package
289
- await this.deployPackageIfEnabled();
290
379
  return 0;
291
380
  }
292
381
  catch (e) {
@@ -296,120 +385,97 @@ class ProgramBuilder {
296
385
  throw e;
297
386
  }
298
387
  }
299
- async createPackageIfEnabled() {
300
- if (this.options.copyToStaging || this.options.createPackage || this.options.deploy) {
301
- //transpile the project
302
- await this.transpile();
303
- //create the zip file if configured to do so
304
- if (this.options.createPackage !== false || this.options.deploy) {
305
- await this.logger.time(Logger_1.LogLevel.log, [`Creating package at ${this.options.outFile}`], async () => {
306
- await rokuDeploy.zipPackage(Object.assign(Object.assign({}, this.options), { outDir: util_1.util.getOutDir(this.options), outFile: path.basename(this.options.outFile) }));
307
- });
388
+ /**
389
+ * Build the entire project and place the contents into the staging directory
390
+ */
391
+ async build() {
392
+ await this.buildThrottler.run(async () => {
393
+ //get every file referenced by the files array
394
+ let fileMap = Object.values(this.program.files).map(x => {
395
+ return {
396
+ src: x.srcPath,
397
+ dest: x.destPath
398
+ };
399
+ });
400
+ //remove files currently loaded in the program, we will transpile those instead (even if just for source maps)
401
+ let filteredFileMap = [];
402
+ for (let fileEntry of fileMap) {
403
+ if (this.program.hasFile(fileEntry.src) === false) {
404
+ filteredFileMap.push(fileEntry);
405
+ }
308
406
  }
309
- }
407
+ await this.logger.time(logging_1.LogLevel.log, ['Building'], async () => {
408
+ //transpile any brighterscript files
409
+ await this.program.build();
410
+ });
411
+ });
310
412
  }
311
413
  /**
312
414
  * Transpiles the entire program into the staging folder
415
+ * @deprecated use `.build()` instead
313
416
  */
314
417
  async transpile() {
315
- let options = util_1.util.cwdWork(this.options.cwd, () => {
316
- return rokuDeploy.getOptions(Object.assign(Object.assign({}, this.options), { outDir: util_1.util.getOutDir(this.options), outFile: path.basename(this.options.outFile) }));
317
- });
318
- //get every file referenced by the files array
319
- let fileEntries = await rokuDeploy.getFilePaths(options.files, options.rootDir);
320
- //remove files currently loaded in the program, we will transpile those instead (even if just for source maps)
321
- let filteredFileEntries = [];
322
- for (let fileEntry of fileEntries) {
323
- if (this.program.hasFile(fileEntry.src) === false) {
324
- filteredFileEntries.push(fileEntry);
325
- }
326
- }
327
- this.plugins.emit('beforePrepublish', {
328
- builder: this,
329
- program: this.program,
330
- files: filteredFileEntries
331
- });
332
- await this.logger.time(Logger_1.LogLevel.log, ['Copying to staging directory'], async () => {
333
- //prepublish all non-program-loaded files to staging
334
- await rokuDeploy.prepublishToStaging(Object.assign(Object.assign({}, options), { files: filteredFileEntries }));
335
- });
336
- this.plugins.emit('afterPrepublish', {
337
- builder: this,
338
- program: this.program,
339
- files: filteredFileEntries
340
- });
341
- this.plugins.emit('beforePublish', {
342
- builder: this,
343
- program: this.program,
344
- files: fileEntries
345
- });
346
- await this.logger.time(Logger_1.LogLevel.log, ['Transpiling'], async () => {
347
- //transpile any brighterscript files
348
- await this.program.transpile(fileEntries, options.stagingFolderPath);
349
- });
350
- this.plugins.emit('afterPublish', {
351
- builder: this,
352
- program: this.program,
353
- files: fileEntries
354
- });
355
- }
356
- async deployPackageIfEnabled() {
357
- //deploy the project if configured to do so
358
- if (this.options.deploy) {
359
- await this.logger.time(Logger_1.LogLevel.log, ['Deploying package to', this.options.host], async () => {
360
- await rokuDeploy.publish(Object.assign(Object.assign({}, this.options), { outDir: util_1.util.getOutDir(this.options), outFile: path.basename(this.options.outFile) }));
361
- });
362
- }
418
+ return this.build();
363
419
  }
364
420
  /**
365
- * Parse and load the AST for every file in the project
421
+ * Load every file into the project
366
422
  */
367
- async loadAllFilesAST() {
368
- await this.logger.time(Logger_1.LogLevel.log, ['Parsing files'], async () => {
369
- let errorCount = 0;
370
- let files = await this.logger.time(Logger_1.LogLevel.debug, ['getFlePaths'], async () => {
423
+ async loadFiles() {
424
+ await this.logger.time(logging_1.LogLevel.log, ['load files'], async () => {
425
+ let files = await this.logger.time(logging_1.LogLevel.debug, ['getFilePaths'], async () => {
371
426
  return util_1.util.getFilePaths(this.options);
372
427
  });
373
- this.logger.trace('ProgramBuilder.loadAllFilesAST() files:', files);
428
+ this.logger.trace('ProgramBuilder.loadFiles() files:', files);
374
429
  const typedefFiles = [];
375
- const nonTypedefFiles = [];
430
+ const allOtherFiles = [];
431
+ let manifestFile = null;
376
432
  for (const file of files) {
377
- const srcLower = file.src.toLowerCase();
378
- if (srcLower.endsWith('.d.bs')) {
433
+ // typedef files
434
+ if (/\.d\.bs$/i.test(file.dest)) {
379
435
  typedefFiles.push(file);
436
+ // all other files
380
437
  }
381
438
  else {
382
- nonTypedefFiles.push(file);
439
+ if (/^manifest$/i.test(file.dest)) {
440
+ //manifest file
441
+ manifestFile = file;
442
+ }
443
+ allOtherFiles.push(file);
383
444
  }
384
445
  }
385
- //preload every type definition file first, which eliminates duplicate file loading
386
- await Promise.all(typedefFiles.map(async (fileObj) => {
446
+ //load the manifest file first
447
+ if (manifestFile) {
448
+ this.program.loadManifest(manifestFile, false);
449
+ }
450
+ const loadFile = async (fileObj) => {
387
451
  try {
388
452
  this.program.setFile(fileObj, await this.getFileContents(fileObj.src));
389
453
  }
390
454
  catch (e) {
391
- //log the error, but don't fail this process because the file might be fixable later
392
- this.logger.log(e);
393
- }
394
- }));
395
- const acceptableExtensions = ['.bs', '.brs', '.xml'];
396
- //parse every file other than the type definitions
397
- await Promise.all(nonTypedefFiles.map(async (fileObj) => {
398
- try {
399
- let fileExtension = path.extname(fileObj.src).toLowerCase();
400
- //only process certain file types
401
- if (acceptableExtensions.includes(fileExtension)) {
402
- this.program.setFile(fileObj, await this.getFileContents(fileObj.src));
403
- }
404
- }
405
- catch (e) {
406
- //log the error, but don't fail this process because the file might be fixable later
407
- this.logger.log(e);
455
+ this.logger.log(e); // log the error, but don't fail this process because the file might be fixable later
408
456
  }
409
- }));
410
- return errorCount;
457
+ };
458
+ // preload every type definition file, which eliminates duplicate file loading
459
+ await Promise.all(typedefFiles.map(loadFile));
460
+ // load all other files
461
+ await Promise.all(allOtherFiles.map(loadFile));
411
462
  });
412
463
  }
464
+ /**
465
+ * Remove all files from the program that are in the specified folder path
466
+ * @param srcPath the path to the folder to remove
467
+ */
468
+ removeFilesInFolder(srcPath) {
469
+ let removedSomeFiles = false;
470
+ for (let filePath in this.program.files) {
471
+ //if the file path starts with the parent path and the file path does not exactly match the folder path
472
+ if (filePath.startsWith(srcPath) && filePath !== srcPath) {
473
+ this.program.removeFile(filePath);
474
+ removedSomeFiles = true;
475
+ }
476
+ }
477
+ return removedSomeFiles;
478
+ }
413
479
  /**
414
480
  * Scan every file and resolve all variable references.
415
481
  * If no errors were encountered, return true. Otherwise return false.