brighterscript 0.66.0-alpha.4 → 0.66.0-alpha.6

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 (214) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/DiagnosticMessages.d.ts +21 -3
  3. package/dist/DiagnosticMessages.js +35 -2
  4. package/dist/DiagnosticMessages.js.map +1 -1
  5. package/dist/LanguageServer.d.ts +1 -0
  6. package/dist/LanguageServer.js +8 -5
  7. package/dist/LanguageServer.js.map +1 -1
  8. package/dist/Program.d.ts +20 -8
  9. package/dist/Program.js +107 -60
  10. package/dist/Program.js.map +1 -1
  11. package/dist/ProgramBuilder.js +14 -2
  12. package/dist/ProgramBuilder.js.map +1 -1
  13. package/dist/Scope.d.ts +15 -13
  14. package/dist/Scope.js +26 -65
  15. package/dist/Scope.js.map +1 -1
  16. package/dist/SymbolTable.d.ts +17 -10
  17. package/dist/SymbolTable.js +48 -26
  18. package/dist/SymbolTable.js.map +1 -1
  19. package/dist/XmlScope.d.ts +2 -0
  20. package/dist/XmlScope.js +38 -0
  21. package/dist/XmlScope.js.map +1 -1
  22. package/dist/astUtils/creators.d.ts +3 -1
  23. package/dist/astUtils/creators.js +14 -4
  24. package/dist/astUtils/creators.js.map +1 -1
  25. package/dist/astUtils/reflection.d.ts +24 -5
  26. package/dist/astUtils/reflection.js +58 -13
  27. package/dist/astUtils/reflection.js.map +1 -1
  28. package/dist/astUtils/reflection.spec.js +85 -3
  29. package/dist/astUtils/reflection.spec.js.map +1 -1
  30. package/dist/bscPlugin/CallExpressionInfo.d.ts +3 -3
  31. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  32. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +4 -4
  33. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  34. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +44 -1
  35. package/dist/bscPlugin/completions/CompletionsProcessor.js +353 -20
  36. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  37. package/dist/bscPlugin/completions/CompletionsProcessor.spec.d.ts +1 -0
  38. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1452 -0
  39. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  40. package/dist/bscPlugin/hover/HoverProcessor.d.ts +9 -4
  41. package/dist/bscPlugin/hover/HoverProcessor.js +64 -67
  42. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  43. package/dist/bscPlugin/hover/HoverProcessor.spec.js +162 -4
  44. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  45. package/dist/bscPlugin/validation/BrsFileValidator.js +20 -16
  46. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  47. package/dist/bscPlugin/validation/ScopeValidator.d.ts +22 -1
  48. package/dist/bscPlugin/validation/ScopeValidator.js +194 -42
  49. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  50. package/dist/bscPlugin/validation/ScopeValidator.spec.js +621 -1
  51. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
  52. package/dist/diagnosticUtils.d.ts +7 -2
  53. package/dist/diagnosticUtils.js +43 -15
  54. package/dist/diagnosticUtils.js.map +1 -1
  55. package/dist/files/BrsFile.Class.spec.js +10 -8
  56. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  57. package/dist/files/BrsFile.d.ts +3 -20
  58. package/dist/files/BrsFile.js +7 -355
  59. package/dist/files/BrsFile.js.map +1 -1
  60. package/dist/files/BrsFile.spec.js +2 -248
  61. package/dist/files/BrsFile.spec.js.map +1 -1
  62. package/dist/files/XmlFile.d.ts +1 -6
  63. package/dist/files/XmlFile.js +0 -13
  64. package/dist/files/XmlFile.js.map +1 -1
  65. package/dist/files/XmlFile.spec.js +0 -36
  66. package/dist/files/XmlFile.spec.js.map +1 -1
  67. package/dist/globalCallables.js +1 -5
  68. package/dist/globalCallables.js.map +1 -1
  69. package/dist/interfaces.d.ts +22 -2
  70. package/dist/interfaces.js +4 -1
  71. package/dist/interfaces.js.map +1 -1
  72. package/dist/lexer/Lexer.d.ts +12 -0
  73. package/dist/lexer/Lexer.js +27 -2
  74. package/dist/lexer/Lexer.js.map +1 -1
  75. package/dist/lexer/Lexer.spec.js +40 -0
  76. package/dist/lexer/Lexer.spec.js.map +1 -1
  77. package/dist/lexer/Token.d.ts +4 -0
  78. package/dist/lexer/Token.js.map +1 -1
  79. package/dist/lexer/TokenKind.d.ts +4 -0
  80. package/dist/lexer/TokenKind.js +10 -1
  81. package/dist/lexer/TokenKind.js.map +1 -1
  82. package/dist/parser/AstNode.d.ts +8 -1
  83. package/dist/parser/AstNode.js +16 -0
  84. package/dist/parser/AstNode.js.map +1 -1
  85. package/dist/parser/Expression.d.ts +16 -1
  86. package/dist/parser/Expression.js +75 -11
  87. package/dist/parser/Expression.js.map +1 -1
  88. package/dist/parser/Parser.d.ts +7 -0
  89. package/dist/parser/Parser.js +55 -7
  90. package/dist/parser/Parser.js.map +1 -1
  91. package/dist/parser/Parser.spec.js +330 -4
  92. package/dist/parser/Parser.spec.js.map +1 -1
  93. package/dist/parser/SGTypes.d.ts +1 -1
  94. package/dist/parser/Statement.d.ts +18 -6
  95. package/dist/parser/Statement.js +54 -16
  96. package/dist/parser/Statement.js.map +1 -1
  97. package/dist/parser/tests/Parser.spec.js +2 -1
  98. package/dist/parser/tests/Parser.spec.js.map +1 -1
  99. package/dist/parser/tests/controlFlow/For.spec.js +16 -8
  100. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  101. package/dist/parser/tests/controlFlow/ForEach.spec.js +12 -6
  102. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  103. package/dist/parser/tests/controlFlow/While.spec.js +8 -4
  104. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  105. package/dist/parser/tests/expression/Call.spec.js +4 -4
  106. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  107. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +13 -13
  108. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  109. package/dist/parser/tests/statement/ConstStatement.spec.js +1 -34
  110. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  111. package/dist/parser/tests/statement/Enum.spec.js +1 -257
  112. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  113. package/dist/parser/tests/statement/InterfaceStatement.spec.js +8 -0
  114. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  115. package/dist/parser/tests/statement/PrintStatement.spec.js +6 -3
  116. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  117. package/dist/parser/tests/statement/ReturnStatement.spec.js +5 -3
  118. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  119. package/dist/parser/tests/statement/Set.spec.js +26 -13
  120. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  121. package/dist/roku-types/data.json +156 -111
  122. package/dist/roku-types/index.d.ts +2 -27
  123. package/dist/types/ArrayType.d.ts +4 -1
  124. package/dist/types/ArrayType.js +43 -7
  125. package/dist/types/ArrayType.js.map +1 -1
  126. package/dist/types/ArrayType.spec.js +31 -2
  127. package/dist/types/ArrayType.spec.js.map +1 -1
  128. package/dist/types/AssociativeArrayType.d.ts +11 -0
  129. package/dist/types/AssociativeArrayType.js +52 -0
  130. package/dist/types/AssociativeArrayType.js.map +1 -0
  131. package/dist/types/BaseFunctionType.d.ts +2 -1
  132. package/dist/types/BaseFunctionType.js +1 -1
  133. package/dist/types/BaseFunctionType.js.map +1 -1
  134. package/dist/types/BooleanType.d.ts +2 -4
  135. package/dist/types/BooleanType.js +6 -7
  136. package/dist/types/BooleanType.js.map +1 -1
  137. package/dist/types/BscType.d.ts +8 -4
  138. package/dist/types/BscType.js +42 -14
  139. package/dist/types/BscType.js.map +1 -1
  140. package/dist/types/BscTypeKind.d.ts +2 -0
  141. package/dist/types/BscTypeKind.js +2 -0
  142. package/dist/types/BscTypeKind.js.map +1 -1
  143. package/dist/types/BuiltInInterfaceAdder.d.ts +20 -0
  144. package/dist/types/BuiltInInterfaceAdder.js +139 -0
  145. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  146. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  147. package/dist/types/BuiltInInterfaceAdder.spec.js +109 -0
  148. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  149. package/dist/types/ClassType.d.ts +6 -1
  150. package/dist/types/ClassType.js +26 -2
  151. package/dist/types/ClassType.js.map +1 -1
  152. package/dist/types/ComponentType.d.ts +26 -0
  153. package/dist/types/ComponentType.js +80 -0
  154. package/dist/types/ComponentType.js.map +1 -0
  155. package/dist/types/DoubleType.d.ts +2 -4
  156. package/dist/types/DoubleType.js +6 -7
  157. package/dist/types/DoubleType.js.map +1 -1
  158. package/dist/types/DynamicType.d.ts +2 -2
  159. package/dist/types/DynamicType.js +3 -1
  160. package/dist/types/DynamicType.js.map +1 -1
  161. package/dist/types/EnumType.d.ts +4 -5
  162. package/dist/types/EnumType.js +8 -7
  163. package/dist/types/EnumType.js.map +1 -1
  164. package/dist/types/FloatType.d.ts +2 -4
  165. package/dist/types/FloatType.js +6 -7
  166. package/dist/types/FloatType.js.map +1 -1
  167. package/dist/types/FunctionType.d.ts +2 -1
  168. package/dist/types/FunctionType.js +6 -2
  169. package/dist/types/FunctionType.js.map +1 -1
  170. package/dist/types/IntegerType.d.ts +2 -4
  171. package/dist/types/IntegerType.js +6 -7
  172. package/dist/types/IntegerType.js.map +1 -1
  173. package/dist/types/InterfaceType.d.ts +2 -1
  174. package/dist/types/InterfaceType.js +8 -4
  175. package/dist/types/InterfaceType.js.map +1 -1
  176. package/dist/types/InterfaceType.spec.js +2 -2
  177. package/dist/types/InvalidType.d.ts +1 -1
  178. package/dist/types/InvalidType.js +5 -1
  179. package/dist/types/InvalidType.js.map +1 -1
  180. package/dist/types/LongIntegerType.d.ts +2 -4
  181. package/dist/types/LongIntegerType.js +6 -7
  182. package/dist/types/LongIntegerType.js.map +1 -1
  183. package/dist/types/ObjectType.d.ts +3 -3
  184. package/dist/types/ObjectType.js +3 -1
  185. package/dist/types/ObjectType.js.map +1 -1
  186. package/dist/types/ReferenceType.d.ts +14 -0
  187. package/dist/types/ReferenceType.js +114 -13
  188. package/dist/types/ReferenceType.js.map +1 -1
  189. package/dist/types/ReferenceType.spec.js +15 -0
  190. package/dist/types/ReferenceType.spec.js.map +1 -1
  191. package/dist/types/StringType.d.ts +2 -4
  192. package/dist/types/StringType.js +5 -6
  193. package/dist/types/StringType.js.map +1 -1
  194. package/dist/types/TypedFunctionType.d.ts +2 -1
  195. package/dist/types/TypedFunctionType.js +10 -3
  196. package/dist/types/TypedFunctionType.js.map +1 -1
  197. package/dist/types/UninitializedType.d.ts +2 -1
  198. package/dist/types/UninitializedType.js +1 -1
  199. package/dist/types/UninitializedType.js.map +1 -1
  200. package/dist/types/UnionType.d.ts +4 -2
  201. package/dist/types/UnionType.js +25 -4
  202. package/dist/types/UnionType.js.map +1 -1
  203. package/dist/types/UnionType.spec.js +46 -19
  204. package/dist/types/UnionType.spec.js.map +1 -1
  205. package/dist/types/VoidType.d.ts +2 -1
  206. package/dist/types/VoidType.js +6 -2
  207. package/dist/types/VoidType.js.map +1 -1
  208. package/dist/types/helpers.d.ts +2 -0
  209. package/dist/types/helpers.js +18 -3
  210. package/dist/types/helpers.js.map +1 -1
  211. package/dist/util.d.ts +25 -2
  212. package/dist/util.js +179 -13
  213. package/dist/util.js.map +1 -1
  214. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedDate": "2022-11-02T15:29:46.390Z",
2
+ "generatedDate": "2023-09-19T17:04:22.938Z",
3
3
  "nodes": {
4
4
  "animation": {
5
5
  "description": "Extends [**AnimationBase**](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/animationbase.md\n\nThe Animation node class provides animations of renderable nodes, by applying interpolator functions to the values in specified renderable node fields. For an animation to take effect, an Animation node definition must include a child field interpolator node ([FloatFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/floatfieldinterpolator.md\"FloatFieldInterpolator\"), [Vector2DFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/vector2dfieldinterpolator.md\"Vector2DFieldInterpolator\"), [ColorFieldInterpolator](https://developer.roku.com/docs/references/scenegraph/animation-nodes/colorfieldinterpolator.md\"ColorFieldInterpolator\")) definition for each renderable node field that is animated.\n\nThe Animation node class provides a simple linear interpolator function, where the animation takes place smoothly and simply from beginning to end. The Animation node class also provides several more complex interpolator functions to allow custom animation effects. For example, you can move a graphic image around the screen at differing speeds and curved trajectories at different times in the animation by specifying the appropriate function in the easeFunction field (quadratic and exponential are two examples of functions that can be specified). The interpolator functions are divided into two parts: the beginning of the animation (ease-in), and the end of the animation (ease-out). You can apply a specified interpolator function to either or both ease-in and ease-out, or specify no function for either or both (which is the linear function). You can also change the portion of the animation that is ease-in and ease-out to arbitrary fractional values for a quadratic interpolator function applied to both ease-in and ease-out.",
@@ -607,7 +607,7 @@
607
607
  "url": "https://developer.roku.com/docs/references/scenegraph/media-playback-nodes/audio.md"
608
608
  },
609
609
  "busyspinner": {
610
- "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\n\nThe BusySpinner node class is a simple widget that displays a continuously rotating bitmap. Since the BusySpinner node class uses an internal Poster node instance, the busy spinner bitmap can be specified by setting the internal Poster node uri field.\n\n[SimpleBusySpinner.zip](https://github.com/rokudev/samples/tree/master/ux%20components/widgets) is a sample channel that demonstrates usage of the BusySpinner.\n\n> Not all Roku Player hardware versions support arbitrary rotations. In particular, some hardware versions only support 90 degree rotation increments. In those cases, the icon will step through 90 degree, 180 degree, 270 degree and back to 0 degree rotations, rather than spin smoothly.",
610
+ "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\n\nThe BusySpinner node class is a simple widget that displays a continuously rotating bitmap. Since the BusySpinner node class uses an internal Poster node instance, the busy spinner bitmap can be specified by setting the internal Poster node uri field.\n\n[SimpleBusySpinner](https://github.com/rokudev/samples/tree/master/ux%20components/widgets) is a sample channel that demonstrates usage of the BusySpinner.\n\n> Not all Roku Player hardware versions support arbitrary rotations. In particular, some hardware versions only support 90 degree rotation increments. In those cases, the icon will step through 90 degree, 180 degree, 270 degree and back to 0 degree rotations, rather than spin smoothly.",
611
611
  "events": [],
612
612
  "extends": {
613
613
  "name": "Group",
@@ -1283,7 +1283,7 @@
1283
1283
  },
1284
1284
  "dynamickeyboardbase": {
1285
1285
  "availableSince": "9.4",
1286
- "description": "_Available since Roku OS 9.4_\n\nExtends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\n> Channels must use Roku voice keyboards for [email](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-keyboard.md, [PIN](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-pinpad.md, [password](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-keyboard.md entry to pass [certification](/docs/developer-program/certification/certification.md#4-channel-operation).\n\nThe DynamicKeyboardBase is an abstract class that provides the functionality for dynamic voice-enabled keyboards. It combines [**DynamicKeyGrid**](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-key-grid.md and [**VoiceTextEditBox**](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/voice-text-edit-box.md nodes to provide a single node that supports text entry in multiple languages and voice entry in English.\n\n* The [**DynamicKeyGrid**](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-key-grid.md provides keyboard functionality. The layout of the keyboard is based on a JSON-formatted Key Definition File.\n \n The classes derived from DynamicKeyboardBase (DynamicKeyboard, DynamicPinPad, and DynamicMiniKeyboard) have built-in Key Definition Files. For example, the DynamicKeyboard node uses a Key Definition File that matches the key layout of the [legacy Keyboard node](https://developer.roku.com/docs/references/scenegraph/widget-nodes/keyboard.md.\n \n The [**DynamicCustomKeyboard** node](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-custom-keyboard.md enables developers to define a custom Key Definition File in order to configure the key layout. In the Key Definition File, the developer specifies the keys in each section and row of the keyboard. The keys support the characters in the Basic Latin, Latin 1 Supplement, Latin Extended-A, and Latin Extended-B blocks. This provides support for most Western European languages, including English, French, German, Italian, Portuguese, and Spanish.\n \n\n* The [**VoiceTextEditBox**](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/voice-text-edit-box.md displays the text that has been entered or spoken. This node supports multiple voice entry modes for entering email addresses, passwords, street addresses, and PINs. This node currently supports voice entry in English only.\n\n> Developers should upgrade the [legacy keyboards](https://developer.roku.com/docs/references/scenegraph/widget-nodes/keyboard.md in their channels to dynamic voice-enabled keyboards in order to leverage the following benefits:\n> \n> * **Faster on-device sign-ups and sign-ins.** Enable customers to use voice entry to provide their information when subscribing to channels and logging in.\n> \n> * **Localized in-channel search**: Enable customers to search for content in their native language.\n> \n> * **Localized customer information entry**: Enable customers to enter their personal information in their native language.\n>",
1286
+ "description": "_Available since Roku OS 9.4_\n\nExtends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\n> Channels must use Roku voice keyboards for [email](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-keyboard.md, [PIN](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-pinpad.md, [password](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-keyboard.md entry to pass [certification](/docs/developer-program/certification/certification.md#4-channel-operation).\n\nThe DynamicKeyboardBase is an abstract class that provides the functionality for dynamic voice-enabled keyboards. It combines [**DynamicKeyGrid**](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-key-grid.md and [**VoiceTextEditBox**](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/voice-text-edit-box.md nodes to provide a single node that supports text entry in multiple languages and voice entry in English and Spanish.\n\n* The [**DynamicKeyGrid**](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-key-grid.md provides keyboard functionality. The layout of the keyboard is based on a JSON-formatted Key Definition File.\n \n The classes derived from DynamicKeyboardBase (DynamicKeyboard, DynamicPinPad, and DynamicMiniKeyboard) have built-in Key Definition Files. For example, the DynamicKeyboard node uses a Key Definition File that matches the key layout of the [legacy Keyboard node](https://developer.roku.com/docs/references/scenegraph/widget-nodes/keyboard.md.\n \n The [**DynamicCustomKeyboard** node](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-custom-keyboard.md enables developers to define a custom Key Definition File in order to configure the key layout. In the Key Definition File, the developer specifies the keys in each section and row of the keyboard. The keys support the characters in the Basic Latin, Latin 1 Supplement, Latin Extended-A, and Latin Extended-B blocks. This provides support for most Western European languages, including English, French, German, Italian, Portuguese, and Spanish.\n \n\n* The [**VoiceTextEditBox**](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/voice-text-edit-box.md displays the text that has been entered or spoken. This node supports multiple voice entry modes for entering email addresses, passwords, street addresses, and PINs. This node currently supports voice entry in English and Spanish.\n\n> Developers should upgrade the [legacy keyboards](https://developer.roku.com/docs/references/scenegraph/widget-nodes/keyboard.md in their channels to dynamic voice-enabled keyboards in order to leverage the following benefits:\n> \n> * **Faster on-device sign-ups and sign-ins.** Enable customers to use voice entry to provide their information when subscribing to channels and logging in.\n> \n> * **Localized in-channel search**: Enable customers to search for content in their native language.\n> \n> * **Localized customer information entry**: Enable customers to enter their personal information in their native language.\n>",
1287
1287
  "events": [],
1288
1288
  "extends": {
1289
1289
  "name": "Group",
@@ -1332,7 +1332,7 @@
1332
1332
  },
1333
1333
  "dynamickeygrid": {
1334
1334
  "availableSince": "9.4",
1335
- "description": "_Available since Roku OS 9.4_\n\nExtends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe **DynamicKeyGrid** node implements a grid of keys that are defined and organized in a [Key Definition File](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/key-defintion-file.md. It is typically used in a subclass of the [DynamicKeyboardBase](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-keyboard-base.md node (DynamicKeyboard, DynamicPinPad, and DynamicMiniKeyboard) to display the string of characters entered via text or voice entry. It may also be used as an individual node.",
1335
+ "description": "_Available since Roku OS 9.4_\n\nExtends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe **DynamicKeyGrid** node implements a grid of keys that are defined and organized in a [Key Definition File](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/key-definition-file.md. It is typically used in a subclass of the [DynamicKeyboardBase](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-keyboard-base.md node (DynamicKeyboard, DynamicPinPad, and DynamicMiniKeyboard) to display the string of characters entered via text or voice entry. It may also be used as an individual node.",
1336
1336
  "events": [],
1337
1337
  "extends": {
1338
1338
  "name": "Group",
@@ -1377,7 +1377,7 @@
1377
1377
  {
1378
1378
  "accessPermission": "READ_WRITE",
1379
1379
  "default": "\"\"",
1380
- "description": "Specifies the \\[Key Definition File\\](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/key-defintion-file.md to use to define the key layout metadata.",
1380
+ "description": "Specifies the \\[Key Definition File\\](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/key-definition-file.md to use to define the key layout metadata.",
1381
1381
  "name": "keyDefinitionUri",
1382
1382
  "type": "uri"
1383
1383
  },
@@ -1711,13 +1711,13 @@
1711
1711
  "name": "InfoPane",
1712
1712
  "url": "https://developer.roku.com/docs/references/scenegraph/label-nodes/info-pane.md"
1713
1713
  },
1714
- "key defintion file": {
1714
+ "key definition file": {
1715
1715
  "description": "The Key Definition File is a JSON-formatted file that specifies the layout of a keyboard. The Key Definition Files for the classes derived from **DynamicKeyboardBase** (**DynamicKeyboard**, **DynamicPinPad**, and **DynamicMiniKeyboard**) are built-in and cannot be modified because the keyboard layout for these nodes is fixed. Conversely, the **DynamicCustomKeyboard** node requires developers to create the Key Definition File in order to implement a custom keyboard layout.\n\nThe Key Definition File is a single JSON object with the following six hierarchal objects (listed in order from the top to the bottom of the hierarchy):\n\n1. [KeyLayout](#keylayout)\n2. [Section](#section)\n3. [Grid](#grid)\n4. [Row](#row)\n5. [Key](#key)\n6. [KeySuggestions](#keysuggestions)\n\nProperties can be set at any level of the hierarchy and are used to determine the default values for the subparts at lower levels in the hierarchy. For example, setting the **keyboardHeight** property at the **KeyLayout** level will specify the default height of each **Row** in each **Grid** in each **Section** of the grid used. If a **Grid** specifies a **gridHeight** property, it is set as the default for each **Row** in that **Grid**. In both cases, if any **Row** in the **Grid** specifies a **rowHeight** property, that height will be used as the default for each **Key** in that **Row**.",
1716
1716
  "events": [],
1717
1717
  "fields": [],
1718
1718
  "interfaces": [],
1719
- "name": "Key Defintion File",
1720
- "url": "https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/key-defintion-file.md"
1719
+ "name": "Key Definition File",
1720
+ "url": "https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/key-definition-file.md"
1721
1721
  },
1722
1722
  "keyboard": {
1723
1723
  "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe Keyboard node class allows a user to enter a string of alphanumeric characters. The string entered is displayed in a [TextEditBox](https://developer.roku.com/docs/references/scenegraph/widget-nodes/texteditbox.md\"TextEditBox\") node that is part of the Keyboard node.\n\nThe Keyboard node must have the key focus in order to work properly. By default, a Keyboard node toggles between uppercase and lowercase letters when the Options remote key is pressed, to speed the entry of mixed-case strings by the user. It is important not to override this behavior, particularly if a Keyboard node is used as an internal node for a [KeyboardDialog](https://developer.roku.com/docs/references/scenegraph/dialog-nodes/keyboarddialog.md\"KeyboardDialog\") node.\n\nThe default appearance of a Keyboard node is very transparent, allowing the keyboard to pick up most of its color from what is rendered underneath it. The appearance can be customized by changing the keyboardBitmapUri and other fields.",
@@ -1816,13 +1816,6 @@
1816
1816
  "url": "https://developer.roku.com/docs/references/scenegraph/label-nodes/label-base.md"
1817
1817
  },
1818
1818
  "fields": [
1819
- {
1820
- "accessPermission": "READ_WRITE",
1821
- "default": "false",
1822
- "description": "If the height field value is greater than zero, used to determine whether or not the last line of visible text is displayed if it would be clipped vertically",
1823
- "name": "displayPartialLines",
1824
- "type": "Boolean"
1825
- },
1826
1819
  {
1827
1820
  "accessPermission": "READ_WRITE",
1828
1821
  "default": "false",
@@ -1865,6 +1858,13 @@
1865
1858
  "name": "color",
1866
1859
  "type": "color"
1867
1860
  },
1861
+ {
1862
+ "accessPermission": "READ_WRITE",
1863
+ "default": "false",
1864
+ "description": "If the height field value is greater than zero, used to determine whether or not the last line of visible text is displayed if it would be clipped vertically.",
1865
+ "name": "displayPartialLines",
1866
+ "type": "Boolean"
1867
+ },
1868
1868
  {
1869
1869
  "accessPermission": "READ_WRITE",
1870
1870
  "default": "",
@@ -2302,7 +2302,7 @@
2302
2302
  "url": "https://developer.roku.com/docs/references/scenegraph/sliding-panels-nodes/listpanel.md"
2303
2303
  },
2304
2304
  "markupgrid": {
2305
- "description": "Extends [**ArrayGrid**](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/arraygrid.md\n\nThe MarkupGrid node class is a is a generic grid class that can be used to display a set of items arranged into a 2D grid. The contents of each grid item is an instance of an XML component specified by the `itemComponentName` field. An instance of the XML component is used to display the data for each item in the grid data model. The appearance of the grid item as it enters/exits the grid focus position can be customized using scripting. [SimpleMarkupList.zip](https://github.com/rokudev/samples/blob/master/ux%20components/lists%20and%20grids/SimpleMarkupList.zip) is a sample channel containing a MarkupGrid where each item is an instance of an XML component. See the section [MarkupGrid XML component](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/markupgrid.mdmarkupgrid-xml-component) for details.\n\nThe number of columns in the MarkupGrid node is fixed and the number of rows varies as needed to display all of the items in the grid data model. The items in the grid fill each row from left to right, then top to bottom. For example, if the grid data contains 8 items and the number of columns is set to 3, then items 1, 2 and 3 will be in the first row. Items 4, 5 and 6 will be in the second row. The third row will contain items 7 and 8 in the leftmost two columns and blank space in the right column.\n\nThe layout of rows and columns in the grid is very flexible. Possible layouts include:\n\n* a simple layout with all items in the grid having the same size\n* a layout with the items in some rows having varying heights and/or the items in some columns having varying widths\n* a layout with varying width rows and columns and items that occupy one or more rows and columns\n\nThe grid items can be organized into sections that are demarcated by labelled horizontal divider lines between the sections.",
2305
+ "description": "Extends [**ArrayGrid**](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/arraygrid.md\n\nThe MarkupGrid node class is a is a generic grid class that can be used to display a set of items arranged into a 2D grid. The contents of each grid item is an instance of an XML component specified by the `itemComponentName` field. An instance of the XML component is used to display the data for each item in the grid data model. The appearance of the grid item as it enters/exits the grid focus position can be customized using scripting. [SimpleMarkupList](https://github.com/rokudev/samples/blob/master/ux%20components/lists%20and%20grids/SimpleMarkupList) is a sample channel containing a MarkupGrid where each item is an instance of an XML component. See the section [MarkupGrid XML component](https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/markupgrid.mdmarkupgrid-xml-component) for details.\n\nThe number of columns in the MarkupGrid node is fixed and the number of rows varies as needed to display all of the items in the grid data model. The items in the grid fill each row from left to right, then top to bottom. For example, if the grid data contains 8 items and the number of columns is set to 3, then items 1, 2 and 3 will be in the first row. Items 4, 5 and 6 will be in the second row. The third row will contain items 7 and 8 in the leftmost two columns and blank space in the right column.\n\nThe layout of rows and columns in the grid is very flexible. Possible layouts include:\n\n* a simple layout with all items in the grid having the same size\n* a layout with the items in some rows having varying heights and/or the items in some columns having varying widths\n* a layout with varying width rows and columns and items that occupy one or more rows and columns\n\nThe grid items can be organized into sections that are demarcated by labelled horizontal divider lines between the sections.",
2306
2306
  "events": [],
2307
2307
  "extends": {
2308
2308
  "name": "ArrayGrid",
@@ -2532,7 +2532,7 @@
2532
2532
  "url": "https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/markupgrid.md"
2533
2533
  },
2534
2534
  "markuplist": {
2535
- "description": "Extends [**ArrayGrid**](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/arraygrid.md\n\nThe MarkupList node class is a generic list class that can be used to display a list of items.\n\nThe contents of each list item is an instance of an XML component specified by the `itemComponentName` field value. An instance of the XML component is used to display the data for each item in the list data model. The appearance of the list item as it enters/exits the list focus position can be customized using BrightScript.\n\n[SimpleMarkupList.zip](https://github.com/rokudev/samples/tree/master/ux%20components/lists%20and%20grids) is a sample channel containing a MarkupList where each item is an instance of an XML component. See the [MarkupList XML component](#markuplist-xml-component) section for details.\n\n**Example**\n\nThe following example displays the use of the MarkupList node.\n\n![roku815px - markuplist-node](https://image.roku.com/ZHZscHItMTc2/markuplist-node.png \"markuplist-node\")",
2535
+ "description": "Extends [**ArrayGrid**](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/arraygrid.md\n\nThe MarkupList node class is a generic list class that can be used to display a list of items.\n\nThe contents of each list item is an instance of an XML component specified by the `itemComponentName` field value. An instance of the XML component is used to display the data for each item in the list data model. The appearance of the list item as it enters/exits the list focus position can be customized using BrightScript.\n\n[SimpleMarkupList](https://github.com/rokudev/samples/tree/master/ux%20components/lists%20and%20grids) is a sample channel containing a MarkupList where each item is an instance of an XML component. See the [MarkupList XML component](#markuplist-xml-component) section for details.\n\n**Example**\n\nThe following example displays the use of the MarkupList node.\n\n![roku815px - markuplist-node](https://image.roku.com/ZHZscHItMTc2/markuplist-node.png \"markuplist-node\")",
2536
2536
  "events": [],
2537
2537
  "extends": {
2538
2538
  "name": "ArrayGrid",
@@ -4094,27 +4094,6 @@
4094
4094
  "name": "RowList",
4095
4095
  "url": "https://developer.roku.com/docs/references/scenegraph/list-and-grid-nodes/rowlist.md"
4096
4096
  },
4097
- "rsgpalette": {
4098
- "availableSince": "9.4",
4099
- "description": "_Available since Roku OS 9.4_\n\nExtends [Node](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe **RSGPalette** node allows developers to specify a named set of color values that can be shared among nodes that support RSGPalette colors.\n\nNodes that support RSGPalette colors include a **palette** field, which can be set to an **RSGPalette** node to override the default colors used by the node. The specific palette values used by those nodes are defined in each node's documentation.\n\nIf a node that supports a palette does not set its **palette** filed, the RSGPalette is inherited from ancestor nodes in the scene graph. Specifically, the node looks up the scene graph until it finds a **PaletteGroup** node with its **palette** field set. This may be found in the **Scene** itself.\n\nIf no node in the scene graph has its **palette** field set, the keyboard uses the default palette (gray background/white text).\n\nCurrently, the **RSGPalette** node is typically used in channels that customize the colors of the dynamic keyboard nodes. In this case, the channel assigns the RSGPalette node to the **palette** field of the [DynamicKeyboardBase](https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/dynamic-keyboard-base.md\"DynamicKeyboardBase\") node and lets the keyboard's **DynamicKeyGrid** and **VoiceTextEditBox** inherit that RSGPalette.\n\n> The colors in the RSGPalette do not cascade. If a child node overrides its parent's RSGPalette node, that RSGPalette should specify values for all the colors used by the node. Unspecified values will use the system default colors.",
4100
- "events": [],
4101
- "extends": {
4102
- "name": "Node",
4103
- "url": "https://developer.roku.com/docs/references/scenegraph/node.md"
4104
- },
4105
- "fields": [
4106
- {
4107
- "accessPermission": "READ_WRITE",
4108
- "default": "not specified",
4109
- "description": "Specifies an associative array of color name/color key-value pairs. For example: \\`\\`\\` { PrimaryTextColor: 0x111111FF, FocusColor: 0x0000FFFF } \\`\\`\\` .",
4110
- "name": "colors",
4111
- "type": "associative array"
4112
- }
4113
- ],
4114
- "interfaces": [],
4115
- "name": "RSGPalette",
4116
- "url": "https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/rsg-palette.md"
4117
- },
4118
4097
  "scene": {
4119
4098
  "description": "Extends [**Group**](https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md\"**Group**\")\n\nThe **Scene** node class serves as the root of a SceneGraph node tree. Every **roSGScreen** object must have a **Scene** node, or a node that derives from the **Scene** node class as its root, including an XML markup component that extends the Scene node class or subclass. That node must be created using the **roSGScreen** createScene() function, with an argument that is a string of the name of the **Scene** node object created. For example:\n\n```\nscreen = CreateObject(\"roSGScreen\")\nscene = screen.CreateScene(\"Scene\")\n```\n\nWhile it is technically possible to have more than one scene per channel, we recommend you only have one **roSGScreen** and one **Scene** node. Child nodes of the scene can be treated as different \"scenes\" where you can then implement transitions between them.",
4120
4099
  "events": [],
@@ -4133,7 +4112,7 @@
4133
4112
  {
4134
4113
  "accessPermission": "READ_WRITE",
4135
4114
  "default": "0x000000FF",
4136
- "description": "Specifies a background color for the scene. This color is only used if the backgroundURI field is set to an empty string. For example: scene.backgroundColor=\"0xEB1010FF\" scene.backgroundUri = \"\"",
4115
+ "description": "Loads an image using the provided background URI as-is and does not apply any scaling whatsoever when \"limitBackgroundToUIResolution\" is false. Specifies a background color for the scene. This color is only used if the backgroundURI field is set to an empty string. For example: scene.backgroundColor=\"0xEB1010FF\" scene.backgroundUri = \"\"",
4137
4116
  "name": "backgroundColor",
4138
4117
  "type": "color"
4139
4118
  },
@@ -4158,6 +4137,13 @@
4158
4137
  "name": "dialog",
4159
4138
  "type": "Node"
4160
4139
  },
4140
+ {
4141
+ "accessPermission": "READ_WRITE",
4142
+ "default": "true",
4143
+ "description": "If the scene background URI is overridden with a non-theme value and this field is set to true, the \\*\\*backgroundURI\\*\\* image is limited to the current screen size after being loaded. if this field is set to false, the \\*\\*backgroundURI\\*\\* image is loaded without any scaling applied.",
4144
+ "name": "limitBackgroundToUIResolution",
4145
+ "type": "boolean"
4146
+ },
4161
4147
  {
4162
4148
  "accessPermission": "READ_WRITE",
4163
4149
  "default": "not set",
@@ -4453,7 +4439,7 @@
4453
4439
  "url": "https://developer.roku.com/docs/references/scenegraph/renderable-nodes/simplelabel.md"
4454
4440
  },
4455
4441
  "soundeffect": {
4456
- "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe SoundEffect node class is used to play audio sound effects that can be triggered from events that occur in the UI. Typically, these sound effects are short audio clips, but there is no inherent limit on their length. Currently, up to four simultaneous sounds can be playing at any time, in addition to audio from streaming content and TextToSpeech audio.\n\nFiles can be installed locally as part of the channel package or dynamically downloaded from the network. All files must be WAV (i.e. PCM) format.\n\nFor local files, the convention is to include the WAV files in a directory named \"sounds\".\n\nFor downloaded files, a least-recently-used (LRU) mechanism is used to keep the most recently downloaded/played sounds in temporary storage on the device. If the limits on the maximum number/size of downloaded sounds is exceeded, the least recently used sounds are removed from temporary storage. They will be automatically reloaded the next time the control field is set to \"play\".\n\nA sample demonstrating how to use the SoundEffect node can be found here: [SimpleSoundEffect](https://github.com/rokudev/samples/blob/master/media/SimpleSoundEffect.zip)",
4442
+ "description": "Extends [**Node**](https://developer.roku.com/docs/references/scenegraph/node.md\n\nThe SoundEffect node class is used to play audio sound effects that can be triggered from events that occur in the UI. Typically, these sound effects are short audio clips, but there is no inherent limit on their length. Currently, up to four simultaneous sounds can be playing at any time, in addition to audio from streaming content and TextToSpeech audio.\n\nFiles can be installed locally as part of the channel package or dynamically downloaded from the network. All files must be WAV (i.e. PCM) format.\n\nFor local files, the convention is to include the WAV files in a directory named \"sounds\".\n\nFor downloaded files, a least-recently-used (LRU) mechanism is used to keep the most recently downloaded/played sounds in temporary storage on the device. If the limits on the maximum number/size of downloaded sounds is exceeded, the least recently used sounds are removed from temporary storage. They will be automatically reloaded the next time the control field is set to \"play\".\n\nA sample demonstrating how to use the SoundEffect node can be found here: [SimpleSoundEffect](https://github.com/rokudev/samples/blob/master/media/SimpleSoundEffect)",
4457
4443
  "events": [],
4458
4444
  "extends": {
4459
4445
  "name": "Node",
@@ -4579,13 +4565,6 @@
4579
4565
  "name": "buttons",
4580
4566
  "type": "array of strings"
4581
4567
  },
4582
- {
4583
- "accessPermission": "Access Permission",
4584
- "default": "Default",
4585
- "description": "Description",
4586
- "name": "Field",
4587
- "type": "Type"
4588
- },
4589
4568
  {
4590
4569
  "accessPermission": "READ_WRITE",
4591
4570
  "default": "\"generic\"",
@@ -5254,6 +5233,13 @@
5254
5233
  "url": "https://developer.roku.com/docs/references/scenegraph/layout-group-nodes/group.md"
5255
5234
  },
5256
5235
  "fields": [
5236
+ {
5237
+ "accessPermission": "READ_WRITE",
5238
+ "default": "false",
5239
+ "description": "Forces the item index to be interpolated in an advanced manner when animating between items. This only has an effect when the \\*\\*wrap\\*\\* field is set to true. For example, when the number of items is 10 and we are interpolating from item 9 to item 0, not enabling this option will result in the following sequence: 9 -> 8 -> 7 -> … -> 0, rather than 9 -> 0.",
5240
+ "name": "advancing",
5241
+ "type": "boolean"
5242
+ },
5257
5243
  {
5258
5244
  "accessPermission": "WRITE_ONLY",
5259
5245
  "default": "0",
@@ -5303,6 +5289,13 @@
5303
5289
  "name": "duration",
5304
5290
  "type": "Time"
5305
5291
  },
5292
+ {
5293
+ "accessPermission": "READ_WRITE",
5294
+ "default": "inOutCubic",
5295
+ "description": "Specifies the interpolator used in TargetGroup animations between items.",
5296
+ "name": "easeFunction",
5297
+ "type": "string"
5298
+ },
5306
5299
  {
5307
5300
  "accessPermission": "READ_WRITE",
5308
5301
  "default": "",
@@ -5338,6 +5331,13 @@
5338
5331
  "name": "jumpToItem",
5339
5332
  "type": "integer"
5340
5333
  },
5334
+ {
5335
+ "accessPermission": "READ_WRITE",
5336
+ "default": "false",
5337
+ "description": "Force the item index to be interpolated in a reverse manner when animating between items. This only has an effect when the \\*\\*wrap\\*\\* field is set to true. For example, when the number of items is 10 and we are interpolating from item 0 to item 9, not enabling this option will result in the following sequence: 0 -> 1 -> … -> 9 rather than 0 -> 9.",
5338
+ "name": "reversing",
5339
+ "type": "boolean"
5340
+ },
5341
5341
  {
5342
5342
  "accessPermission": "READ_WRITE",
5343
5343
  "default": "false",
@@ -5720,14 +5720,14 @@
5720
5720
  {
5721
5721
  "accessPermission": "READ_ONLY",
5722
5722
  "default": "0",
5723
- "description": "The error code associated with the video play error set in the \\`state\\` field. Use the \\*\\*errorStr\\*\\* and and \\*\\*errorInfo\\*\\* fields for more descriptive diagnostic information to help identify and resolve the cause of the error.",
5723
+ "description": "The error code associated with the video play error set in the \\`state\\` field: \\* 0 no error \\* \\\\-1 network error (server down or unresponsive, server is unreachable, network setup problem on the client). \\* \\\\-2 connection timed out \\* \\\\-3 unknown/unspecified or generic Error \\* \\\\-4 empty list; no streams were specified to play \\* \\\\-5 media error; the media format is unknown or unsupported \\* \\\\-6 DRM error Use the \\*\\*errorStr\\*\\* and and \\*\\*errorInfo\\*\\* fields for more descriptive diagnostic information to help identify and resolve the cause of the error.",
5724
5724
  "name": "errorCode",
5725
5725
  "type": "integer"
5726
5726
  },
5727
5727
  {
5728
5728
  "accessPermission": "READ_ONLY",
5729
5729
  "default": "",
5730
- "description": "A diagnostic message to help resolve the video play error set in the \\`state\\` field. The roAssociativeArray contains the following fields:\n\n| Field | Type | Description |\n| --- | --- | --- |\n| clip\\_id | integer | The unique ID for the clip |\n| ignored | integer | Indicates whether the error generated an exception (0) or was ignored resulting in the next item in the content list being played (1). |\n| source | string | The module that generated the error. |\n| category | String | The type of error, which includes: \"http\", \"drm\", \"mediaerror\", or \"mediaplayer\". |\n| error\\_code | integer | The internal Roku code associated with the error. Use the **dbgmsg** field for debugging. |\n| dbgmsg | string | A verbose debug message that can help identify the root cause of the error. |\n| error\\_attributes | string | The error attribute, which includes the clip\\_id (the unique ID of the clip that failed to play). |\n| drmerrcode _Available since Roku OS 10.5_ | integer | The error code returned by the DRM system, if any, when a video player error occurs |",
5730
+ "description": "A diagnostic message to help resolve the video play error set in the \\`state\\` field. The roAssociativeArray contains the following fields:\n\n| Field | Type | Description |\n| --- | --- | --- |\n| clipId | integer | The unique ID for the clip |\n| ignored | integer | Indicates whether the error generated an exception (0) or was ignored resulting in the next item in the content list being played (1). |\n| source | string | The module that generated the error. |\n| category | String | The type of error, which includes: \"http\", \"drm\", \"mediaerror\", or \"mediaplayer\". |\n| errcode | integer | The internal Roku code associated with the error. Use the **dbgmsg** field for debugging. |\n| dbgmsg | string | A verbose debug message that can help identify the root cause of the error. |\n| drmerrcode _Available since Roku OS 10.5_ | integer | The error code returned by the DRM system, if any, when a video player error occurs |",
5731
5731
  "name": "errorInfo",
5732
5732
  "type": "roAssociativeArray"
5733
5733
  },
@@ -5741,7 +5741,7 @@
5741
5741
  {
5742
5742
  "accessPermission": "READ_ONLY",
5743
5743
  "default": "",
5744
- "description": "A diagnostic message to help resolve the video play error set in the \\`state\\` field. The format of the errorStr is as follows: category:{category\\\\\\_name}:error:{error\\\\\\_code}:ignored:{0|1}:{source}:{source\\\\\\_name}:{additional catcher comment}:{error\\\\\\_string}:extra:{error\\\\\\_attributes}\n\n| errorStr Field | Type | Description |\n| --- | --- | --- |\n| category\\_name | string | The type of error, which includes: \"http\", \"drm\", \"mediaerror\", or \"mediaplayer\". |\n| error\\_code | integer | The unique code associated with the error. |\n| ignored | integer | Indicates whether the error generated an exception (0) or was ignored resulting in the next item in the content list being played (1). |\n| source | string | The module that generated the error. |\n| source\\_name | string | The module that generated the error. |\n| additional catcher comment | string | Typically, the comment added when the exception is caught. |\n| error\\_string | string | A text message describing the video play error. |\n| error\\_attributes | string | The error attribute, which includes the clip\\_id (the unique ID of the clip that failed to play). |",
5744
+ "description": "A diagnostic message to help resolve the video play error set in the \\`state\\` field. The format of the errorStr is as follows: category:{category\\\\\\_name}:error:{error\\\\\\_code}:ignored:{0|1}:{source}:{source\\\\\\_name}:{additional catcher comment}:{error\\\\\\_string}:extra:{error\\\\\\_attributes}\n\n| errorStr Field | Type | Description |\n| --- | --- | --- |\n| category\\_name | string | The type of error, which includes: \"http\", \"drm\", \"mediaerror\", or \"mediaplayer\". |\n| error\\_code | integer | The unique code associated with the error. |\n| ignored | integer | Indicates whether the error generated an exception (0) or was ignored resulting in the next item in the content list being played (1). |\n| source | string | The module that generated the error. |\n| source\\_name | string | The module that generated the error. |\n| additional catcher comment | string | Typically, the comment added when the exception is caught. |\n| error\\_string | string | A text message describing the video play error. |\n| error\\_attributes | string | The error attribute, which includes the clipId (the unique ID of the clip that failed to play). |",
5745
5745
  "name": "errorStr",
5746
5746
  "type": "string"
5747
5747
  },
@@ -5884,12 +5884,8 @@
5884
5884
  "url": "https://developer.roku.com/docs/references/scenegraph/dynamic-voice-keyboard-nodes/voice-text-edit-box.md"
5885
5885
  },
5886
5886
  "zoomrowlist": {
5887
- "description": "Extends [**ArrayGrid**](https://developer.roku.com/docs/references/scenegraph/abstract-nodes/arraygrid.md\n\nThe ZoomRowList node allows a row of the Row-Row Grid to smoothly zoom up to a larger size when that row has focus. Rows in this node are capable of gaining the focus while scrolling, and smoothly zooming up by the specified amount. The amount to zoom can be specified on a per row basis so that some rows can zoom up by a larger amount than others.",
5887
+ "description": "The ZoomRowList node allows a row of the Row-Row Grid to smoothly zoom up to a larger size when that row has focus. Rows in this node are capable of gaining the focus while scrolling, and smoothly zooming up by the specified amount. The amount to zoom can be specified on a per row basis so that some rows can zoom up by a larger amount than others.",
5888
5888
  "events": [],
5889
- "extends": {
5890
- "name": "ArrayGrid",
5891
- "url": "https://developer.roku.com/docs/references/scenegraph/abstract-nodes/arraygrid.md"
5892
- },
5893
5889
  "fields": [],
5894
5890
  "interfaces": [],
5895
5891
  "name": "ZoomRowList",
@@ -6058,7 +6054,7 @@
6058
6054
  "returnType": "roAudioPlayer"
6059
6055
  }
6060
6056
  ],
6061
- "description": "The Audio Player object provides the ability to setup the playing of a series of audio streams. The object accepts an array of content meta-data objects, describing the audio and providing URLs for accessing each stream. The component understands the following streamformat values: \"mp3\", \"wma\", \"mp4\", \"hls\", \"es.aac-adts\", \"flac.\"\n\nThis object does not provide an interface to a screen. In order to get events both from the screen you are using and the Audio Player, you should use the same Message Port for both objects.\n\nThis object is created with no parameters:\n\n`CreateObject(\"roAudioPlayer\")`\n\n**Example**\n\n```\nSub Main()\n audioPlayer = CreateObject(\"roAudioPlayer\")\n port = CreateObject(\"roMessagePort\")\n audioPlayer.SetMessagePort(port)\n song = CreateObject(\"roAssociativeArray\")\n song.url = \"http://www.theflute.co.uk/media/BachCPE_SonataAmin_1.wma\"\n audioplayer.addcontent(song)\n audioplayer.setloop(false)\n audioPlayer.play()\n while true\n msg = wait(0, port)\n if type(msg) = \"roAudioPlayerEvent\"\n if msg.isStatusMessage() then\n print \"roAudioPlayerEvent: \"; msg.getmessage()\n if msg.getmessage() = \"end of playlist\" return\n endif\n endif\n end while\nEnd Sub\n```",
6057
+ "description": "The Audio Player object provides the ability to setup the playing of a series of audio streams. The object accepts an array of content meta-data objects, describing the audio and providing URLs for accessing each stream. The component understands the following streamformat values: \"mp3\", \"mp4\", \"hls\", \"es.aac-adts\", \"flac.\"\n\nThis object does not provide an interface to a screen. In order to get events both from the screen you are using and the Audio Player, you should use the same Message Port for both objects.\n\nThis object is created with no parameters:\n\n`CreateObject(\"roAudioPlayer\")`\n\n**Example**\n\n```\nSub Main()\n audioPlayer = CreateObject(\"roAudioPlayer\")\n port = CreateObject(\"roMessagePort\")\n audioPlayer.SetMessagePort(port)\n song = CreateObject(\"roAssociativeArray\")\n song.url = \"https://file-examples.com/storage/feb401d325641db2fa1dfe7/2017/11/file_example_MP3_700KB.mp3\"\n audioplayer.addcontent(song)\n audioplayer.setloop(false)\n audioPlayer.play()\n while true\n msg = wait(0, port)\n if type(msg) = \"roAudioPlayerEvent\"\n if msg.isStatusMessage() then\n print \"roAudioPlayerEvent: \"; msg.getmessage()\n if msg.getmessage() = \"end of playlist\" return\n endif\n endif\n end while\nEnd Sub\n```",
6062
6058
  "events": [
6063
6059
  {
6064
6060
  "name": "roAudioPlayerEvent",
@@ -6103,7 +6099,7 @@
6103
6099
  {
6104
6100
  "isRequired": true,
6105
6101
  "name": "param1",
6106
- "type": "string"
6102
+ "type": "dynamic"
6107
6103
  }
6108
6104
  ],
6109
6105
  "returnType": "roAudioResource"
@@ -6144,16 +6140,6 @@
6144
6140
  ],
6145
6141
  "returnType": "roBitmap"
6146
6142
  },
6147
- {
6148
- "params": [
6149
- {
6150
- "isRequired": true,
6151
- "name": "param1",
6152
- "type": "string"
6153
- }
6154
- ],
6155
- "returnType": "roBitmap"
6156
- },
6157
6143
  {
6158
6144
  "params": [
6159
6145
  {
@@ -6564,7 +6550,7 @@
6564
6550
  },
6565
6551
  "rohdmistatus": {
6566
6552
  "constructors": [],
6567
- "description": "The HDMI status component provides an interface to the current HDMI operational status.\n\nThis component allows you to query the status of the HDMI connection for the device through the ifHdmiStatus interface functions.",
6553
+ "description": "The HDMI status component provides an interface to the current HDMI operational status.\n\nThis component allows you to query the status of the HDMI connection for a Roku streaming player (or set-top box \\[STB\\]) through the ifHdmiStatus interface functions. This node is not applicable for Roku TVs.",
6568
6554
  "events": [],
6569
6555
  "interfaces": [
6570
6556
  {
@@ -6640,7 +6626,7 @@
6640
6626
  "returnType": "roInput"
6641
6627
  }
6642
6628
  ],
6643
- "description": "An roInput object can be used to receive events sent from a network client using the External Control Protocol (ECP), as described in [External Control API](/docs/developer-program/debugging/external-control-api.md \"External Control API\").\n\n> The [supports\\_input\\_launch manifest flag](/docs/developer-program/getting-started/architecture/channel-manifest.md#launch-requirement-attributes) must be set for channels to accept deep linking parameters when already running. This flag enables deep linking into content without relaunching the channel. See the [Deep Linking sample channel](https://github.com/rokudev/deep-Linking-samples) for how to use roInput to handle deep links into content while the channel is already running.\n\nRefer to [External Control Service Commands](/docs/developer-program/debugging/external-control-api.md#external-control-service-commands \"External Control Service Commands\") for information about the ECP input command.\n\nThis object is created without any arguments:\n\n`CreateObject(\"roInput\")`\n\n**Example**\n\nThe following prints information received from an external device in JSON format. If the external device sends the following input command:\n\n```\ncurl -d '' '<roku_target_device>:8060/input?my_event=My%20Test&x=100&y=200&action=start'\n```\n\nThe following will be printed:\n\n```\n{\"action\":\"start\",\"my_event\":\"My Test\",\"x\":\"100\",\"y\":\"200\"}\n```\n\n**roInput Example**\n\n```\nmsgPort = CreateObject(\"roMessagePort\")\n\ninput = CreateObject(\"roInput\")\ninput.SetMessagePort(msgPort)\n\nprint \"Waiting for messages...\"\nwhile true\n msg = wait(0, msgPort)\n if type(msg) = \"roInputEvent\"\n if msg.IsInput()\n info = msg.GetInfo()\n print \"Received input: \"; FormatJSON(info)\n end if\n end if\nend while\n```",
6629
+ "description": "An roInput object can be used to receive events sent from a network client using the External Control Protocol (ECP), as described in [External Control API](/docs/developer-program/dev-tools/external-control-api.md \"External Control API\").\n\n> The [supports\\_input\\_launch manifest flag](/docs/developer-program/getting-started/architecture/channel-manifest.md#launch-requirement-attributes) must be set for channels to accept deep linking parameters when already running. This flag enables deep linking into content without relaunching the channel. See the [Deep Linking sample channel](https://github.com/rokudev/deep-Linking-samples) for how to use roInput to handle deep links into content while the channel is already running.\n\nRefer to [External Control Service Commands](/docs/developer-program/dev-tools/external-control-api.md#external-control-service-commands \"External Control Service Commands\") for information about the ECP input command.\n\nThis object is created without any arguments:\n\n`CreateObject(\"roInput\")`\n\n**Example**\n\nThe following prints information received from an external device in JSON format. If the external device sends the following input command:\n\n```\ncurl -d '' '<roku_target_device>:8060/input?my_event=My%20Test&x=100&y=200&action=start'\n```\n\nThe following will be printed:\n\n```\n{\"action\":\"start\",\"my_event\":\"My Test\",\"x\":\"100\",\"y\":\"200\"}\n```\n\n**roInput Example**\n\n```\nmsgPort = CreateObject(\"roMessagePort\")\n\ninput = CreateObject(\"roInput\")\ninput.SetMessagePort(msgPort)\n\nprint \"Waiting for messages...\"\nwhile true\n msg = wait(0, msgPort)\n if type(msg) = \"roInputEvent\"\n if msg.IsInput()\n info = msg.GetInfo()\n print \"Received input: \"; FormatJSON(info)\n end if\n end if\nend while\n```",
6644
6630
  "events": [
6645
6631
  {
6646
6632
  "name": "roInputEvent",
@@ -6819,7 +6805,7 @@
6819
6805
  {
6820
6806
  "isRequired": true,
6821
6807
  "name": "param1",
6822
- "type": "string"
6808
+ "type": "dynamic"
6823
6809
  }
6824
6810
  ],
6825
6811
  "returnType": "roPath"
@@ -6870,12 +6856,12 @@
6870
6856
  {
6871
6857
  "isRequired": true,
6872
6858
  "name": "param1",
6873
- "type": "string"
6859
+ "type": "dynamic"
6874
6860
  },
6875
6861
  {
6876
6862
  "isRequired": true,
6877
6863
  "name": "param2",
6878
- "type": "string"
6864
+ "type": "dynamic"
6879
6865
  }
6880
6866
  ],
6881
6867
  "returnType": "roRegex"
@@ -6977,7 +6963,7 @@
6977
6963
  {
6978
6964
  "isRequired": true,
6979
6965
  "name": "param1",
6980
- "type": "string"
6966
+ "type": "dynamic"
6981
6967
  }
6982
6968
  ],
6983
6969
  "returnType": "roRegistrySection"
@@ -7037,17 +7023,17 @@
7037
7023
  {
7038
7024
  "isRequired": true,
7039
7025
  "name": "param1",
7040
- "type": "boolean"
7026
+ "type": "dynamic"
7041
7027
  },
7042
7028
  {
7043
7029
  "isRequired": true,
7044
7030
  "name": "param2",
7045
- "type": "integer"
7031
+ "type": "dynamic"
7046
7032
  },
7047
7033
  {
7048
7034
  "isRequired": true,
7049
7035
  "name": "param3",
7050
- "type": "integer"
7036
+ "type": "dynamic"
7051
7037
  }
7052
7038
  ],
7053
7039
  "returnType": "roScreen"
@@ -7057,7 +7043,7 @@
7057
7043
  {
7058
7044
  "isRequired": true,
7059
7045
  "name": "param1",
7060
- "type": "boolean"
7046
+ "type": "dynamic"
7061
7047
  }
7062
7048
  ],
7063
7049
  "returnType": "roScreen"
@@ -7067,7 +7053,7 @@
7067
7053
  "returnType": "roScreen"
7068
7054
  }
7069
7055
  ],
7070
- "description": "The roScreen component provides a full screen drawing surface that can be stacked and that you can receive input events from.\n\nYou will need at least one roScreen component in your 2D game application to draw on and get events from. The origin (0,0) is the top left corner of the screen. The pixels are always RGBA 32 bits. Multiple roScreen components stack, and like other screen components only the top screen is viewable and gets events. An roScreen that is not the top most screen can still be drawn to.\n\n> Once an roScreen is created, the display stack enters \"Game Mode\", and other screen components cannot be used. Screensavers will also be disabled and will appear as a black screen in its place. Other screen components cannot be intermixed with roScreens as the roScreen display stack is maintained independently from the main screen component display stack. When the final roScreen component is closed, other screen components can be used again.\n\nWhen the roScreen constructor is called, an optional double buffer flag, and an optional resolution can be passed. If the screen is double buffered, two buffers are fully allocated when CreateObject() succeeds. If the screen is single buffered only one buffer is allocated and the \"front\" and \"back\" buffers in method descriptions below are the same buffer. When a screen is created with a different resolution than the output display, it is scaled automatically to the output display resolution.\n\nTo maintain proper aspect ratio, and take care of the different pixel aspect ratio in HD vs SD; there is a fixed set of bitmap resolutions that are allowed to be created for screens:\n\n**HD mode screensizes**\n\n* 1280x720PAR=1:1 (default for HD)\n* 854x480 PAR=1:1 useful for higher performance HD games, also for 640x480 games\n* 940x480 PAR=1.1:1 used for displaying a RokuSD (720x480) games\n\n**SD mode screensizes**\n\n* 720x480 PAR=1.1:1 (default for SD)\n* 640x480 PAR=1:1 (used for 640x480 games)\n* 854x626 PAR=1:1 (used for 854x480 HD games)\n\nThe screen dimensions correspond to the drawable area that applications see. The dimensions were chosen so that applications do not need to compensate for screen aspect ratio or pixel aspect ratio.\n\nIt's likely that when porting games from other platforms, the active game area may be smaller and correspond to more traditional dimensions. In this case, the application can supply letterbox or pillarbox artwork and use an [roRegion](https://developer.roku.com/docs/references/brightscript/components/roregion.md\"roRegion\") to define the active area. The roRegion will translate and clip graphics to the proper area for the game. Similarly, roRegions are used to describe the left and right pillars for an SD game in HD mode, or the upper and lower letterbox regions for an HD game in SD mode.\n\nGames that require more performance should use smaller dimensions. Games should run in HD and SD mode. The screensizes HD 854x480 paired with SD 854x626 and HD 940x480 paired with SD 720x480 were designed for this purpose.\n\nThe game creates a single active game roRegion to do all graphics operations in. roRegions for pillar or letter boxes are used to fill the rest of the screen area depending on if the app is in HD or SD mode. Please refer to the dfSetupDisplayRegions() function in [v30/bslDefender.brs](https://developer.roku.com/docs/references/brightscript/language/component-architecture.mdv30bslcorebrs \"v30/bslDefender.brs\") for help in setting up the drawable regions in screen scaling.\n\nThere are some useful rules of thumb to be aware of to get the best performance when rendering your games:\n\n* Alpha enabled regions are expensive to render\n\nIt is a requirement that the destination be alpha enabled in order for non-rectangular sprites to be properly rendered with transparency. However the sprite used for a background would typically have all pixels be fully nontransparent. Since alpha blending is expensive, a quick way to blit the background in this scenario is to first disable alpha on the screen, manually draw the background, and then enable alpha for the screen before drawing the rest of the sprites.\n\n* Use smaller resolution images wherever possible. Scaling a large image down at run time is expensive with no benefit to the user\n* Rendering text with DrawText() is expensive\n\nFortunately, many of these calls are redundant and can be eliminated. The static text for a particular level can be drawn on the background once and this newly created background can be used for refreshing the screen. This will eliminate almost all text redraws.\n\nA screen can be created with one of three constructors. If it is created with no parameters, the screen will be single buffered, and its output resolution will match the current display resolution (if the current resolution is specified in the manifest file ui\\_resolutions entry, otherwise the size will be 720p).\n\n`CreateObject(\"roScreen\")`\n\nIf a single parameter is passed, it is a Boolean that indicates if the screen is double buffered or not. See SwapBuffers():\n\n`CreateObject(\"roScreen\", true) ' double buffered screen`\n\nIf four parameters are passed, the last two specify the screen's resolution. The dimensions must be one of the screen sizes specified above:\n\n`CreateObject(\"roScreen\", true, 720, 480) ' db & SD res`\n\n**Example: Display an image**\n\n```\nScreen=CreateObject(\"roScreen\")\ndfDrawImage(screen, \"myphoto.jpg\",0,0)\nScreen.Finish()\n```\n\n**Example: Alpha blending**\n\n```\nwhite=&hFFFFFFFF\nscreen0=CreateObject(\"roScreen\")\nscreen0.SetAlphaEnable(true)\nscreen0.Clear(white)\nscreen0.DrawRect(100,100, screen0.GetWidth()-200, screen0.GetHeight()-200, &h80)\n' &h80 is black with a 50% alpha mix (RGBA)\nscreen0.finish()\n```",
7056
+ "description": "The roScreen component provides a full screen drawing surface that can be stacked and that you can receive input events from.\n\nYou will need at least one roScreen component in your 2D game application to draw on and get events from. The origin (0,0) is the top left corner of the screen. The pixels are always RGBA 32 bits. Multiple roScreen components stack, and like other screen components only the top screen is viewable and gets events. An roScreen that is not the top most screen can still be drawn to.\n\n> Once an roScreen is created, the display stack enters \"Game Mode\", and other screen components cannot be used. Screensavers will also be disabled and will appear as a black screen in its place. Other screen components cannot be intermixed with roScreens as the roScreen display stack is maintained independently from the main screen component display stack. When the final roScreen component is closed, other screen components can be used again.\n\nWhen the roScreen constructor is called, an optional double buffer flag, and an optional resolution can be passed. If the screen is double buffered, two buffers are fully allocated when CreateObject() succeeds. If the screen is single buffered only one buffer is allocated and the \"front\" and \"back\" buffers in method descriptions below are the same buffer. When a screen is created with a different resolution than the output display, it is scaled automatically to the output display resolution.\n\nTo maintain proper aspect ratio, and take care of the different pixel aspect ratio in HD vs SD; there is a fixed set of bitmap resolutions that are allowed to be created for screens:",
7071
7057
  "events": [
7072
7058
  {
7073
7059
  "name": "roUniversalControlEvent",
@@ -7102,7 +7088,7 @@
7102
7088
  {
7103
7089
  "isRequired": true,
7104
7090
  "name": "param1",
7105
- "type": "string"
7091
+ "type": "dynamic"
7106
7092
  }
7107
7093
  ],
7108
7094
  "returnType": "roSGNode"
@@ -7273,7 +7259,7 @@
7273
7259
  "returnType": "roSystemLog"
7274
7260
  }
7275
7261
  ],
7276
- "description": "The roSystemLog component enables the application to receive events from the Roku Streaming Player that are intended for reporting errors and trends, rather than trigger a response to a user action.\n\nAll of the log event messages are sent to the roMessagePort that is registered on the [roSystemLogEvent](https://developer.roku.com/docs/references/brightscript/events/rosystemlogevent.md\"roSystemLogEvent\") object. See roSystemLogEvent for details on the messages.\n\nThis object is created with no parameters:\n\n`CreateObject(\"roSystemLog\")`\n\nThe roSystemLog component requires specific Design Patterns in your BrightScript Application. Take care to:\n\n* Use one roMessagePort throughout the application (instead of creating a new roMessagePort for each screen).\n* Create one roSystemLog instance at startup that remains for the entire lifetime of the application.\n* Pass the global roMessagePort referenced in the first bullet point to SetMessagePort() on the roSystemLog component.\n* Enable the desired log types using EnableType().\n* Handle the [roSystemLogEvents](https://developer.roku.com/docs/references/brightscript/events/rosystemlogevent.md\"roSystemLogEvents\") in all message loops.",
7262
+ "description": "The roSystemLog component enables the application to receive events from the Roku Streaming Player that are intended for reporting errors and trends, rather than trigger a response to a user action.\n\nAll of the log event messages are sent to the roMessagePort that is registered on the [roSystemLogEvent](https://developer.roku.com/docs/references/brightscript/events/rosystemlogevent.md\"roSystemLogEvent\") object. See roSystemLogEvent for details on the messages.\n\nThis object is created with no parameters:\n\n`CreateObject(\"roSystemLog\")`\n\nThe roSystemLog component requires specific Design Patterns in your BrightScript Application. Take care to:\n\n* Use one roMessagePort throughout the application (instead of creating a new roMessagePort for each screen).\n* Create one roSystemLog instance at startup that remains for the entire lifetime of the application.\n* Create the roSystemLog instance on the main thread (it cannot be created on a task thread).\n* Pass the global roMessagePort referenced in the first bullet point to SetMessagePort() on the roSystemLog component.\n* Enable the desired log types using EnableType().\n* Handle the [roSystemLogEvents](https://developer.roku.com/docs/references/brightscript/events/rosystemlogevent.md\"roSystemLogEvents\") in all message loops.",
7277
7263
  "events": [],
7278
7264
  "interfaces": [
7279
7265
  {
@@ -7357,7 +7343,7 @@
7357
7343
  {
7358
7344
  "isRequired": true,
7359
7345
  "name": "param1",
7360
- "type": "string"
7346
+ "type": "dynamic"
7361
7347
  }
7362
7348
  ],
7363
7349
  "returnType": "roTextureRequest"
@@ -7730,11 +7716,11 @@
7730
7716
  "returnType": "Boolean"
7731
7717
  },
7732
7718
  {
7733
- "description": "Returns the memory limit for the channel.",
7719
+ "description": "Returns the usage percentage of memory limit for the channel.",
7734
7720
  "name": "GetMemoryLimitPercent",
7735
7721
  "params": [],
7736
- "returnDescription": "The memory limit for the channel.",
7737
- "returnType": "Int"
7722
+ "returnDescription": "The usage percentage of memory limit for the channel.",
7723
+ "returnType": "dynamic"
7738
7724
  }
7739
7725
  ],
7740
7726
  "name": "ifAppMemoryMonitor",
@@ -8007,7 +7993,7 @@
8007
7993
  {
8008
7994
  "default": null,
8009
7995
  "description": "Items are arbitrarily grouped by comparable type of number or string, and are sorted within the group with a logical comparison. If \"r\" is included in flags, a reverse sort is performed. If \"i\" is included in flags, a case-insensitive sort is performed. If invalid flags are specified, the sort is not performed.",
8010
- "isRequired": true,
7996
+ "isRequired": false,
8011
7997
  "name": "flags",
8012
7998
  "type": "String"
8013
7999
  }
@@ -8028,7 +8014,7 @@
8028
8014
  {
8029
8015
  "default": null,
8030
8016
  "description": "Items are arbitrarily grouped by comparable type of number or string, and are sorted within the group with a logical comparison. If \"r\" is included in flags, a reverse sort is performed. If \"i\" is included in flags, a case-insensitive sort is performed. If invalid flags are specified, the sort is not performed.",
8031
- "isRequired": true,
8017
+ "isRequired": false,
8032
8018
  "name": "flags",
8033
8019
  "type": "String"
8034
8020
  }
@@ -9265,6 +9251,21 @@
9265
9251
  "returnDescription": "A dateString corresponding to the specified format.",
9266
9252
  "returnType": "String"
9267
9253
  },
9254
+ {
9255
+ "description": "Returns the localized date of the device.",
9256
+ "name": "asDateStringLoc",
9257
+ "params": [
9258
+ {
9259
+ "default": null,
9260
+ "description": "Specify the format of the date string to be returned: * full * long * medium * short * custom formatting string using date symbols (for example, \"MMM d, y\")",
9261
+ "isRequired": true,
9262
+ "name": "format",
9263
+ "type": "String"
9264
+ }
9265
+ ],
9266
+ "returnDescription": "A date string corresponding to the specified format:",
9267
+ "returnType": "String"
9268
+ },
9268
9269
  {
9269
9270
  "description": "Returns the date/time in long-date format.",
9270
9271
  "name": "AsDateStringNoParam",
@@ -9279,6 +9280,21 @@
9279
9280
  "returnDescription": "Number of seconds as Integer.",
9280
9281
  "returnType": "Integer"
9281
9282
  },
9283
+ {
9284
+ "description": "Returns the localized time of the device.",
9285
+ "name": "asTimeStringLoc",
9286
+ "params": [
9287
+ {
9288
+ "default": null,
9289
+ "description": "Specify the format of the time string to be returned: * short * short-h12 * short-h24 * custom formatting string using time symbols (for example, \"h:mm a\")",
9290
+ "isRequired": true,
9291
+ "name": "format",
9292
+ "type": "String"
9293
+ }
9294
+ ],
9295
+ "returnDescription": "A time string corresponding to the specified format:",
9296
+ "returnType": "String"
9297
+ },
9282
9298
  {
9283
9299
  "description": "Sets the date/time using a string in the ISO 8601 format. For example \"YYYY-MM-DD HH:MM:SS\" e.g \"2009-01-01 01:00:00.000\" or \"2009-01-01T01:00:00.000\".",
9284
9300
  "name": "FromISO8601String",
@@ -9450,7 +9466,7 @@
9450
9466
  }
9451
9467
  ],
9452
9468
  "returnDescription": "An roByteArray containing the decrypted data.",
9453
- "returnType": "roByteArray"
9469
+ "returnType": "dynamic"
9454
9470
  },
9455
9471
  {
9456
9472
  "description": "Encrypts data on a device that is unique per device, channel, or model.",
@@ -9472,7 +9488,7 @@
9472
9488
  }
9473
9489
  ],
9474
9490
  "returnDescription": "An roByteArray containing the encrypted data.",
9475
- "returnType": "roByteArray"
9491
+ "returnType": "dynamic"
9476
9492
  }
9477
9493
  ],
9478
9494
  "name": "ifDeviceCrypto",
@@ -9494,7 +9510,7 @@
9494
9510
  "params": [
9495
9511
  {
9496
9512
  "default": null,
9497
- "description": "An associative array with the audio format to be checked. The general format of the associative arrays for CanDecodeAudio() is similar to the parameter and return associative arrays used in [CanDecodeVideo()](https://developer.roku.com/docs/references/brightscript/interfaces/ifdeviceinfo.mdcandecodevideovideo_format-as-object-as-object): \n| Key | Type | Value | Requirement |\n| ---------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |\n| Codec | string | Specifies the audio codec: “aac”, “ac3”, “eac3”, \"alac\", \"flac\", “mp2”, “mp3”, “vorbis”, “wma”, “wma pro”, “dts”, \"ac4\" | Required |\n| Profile | string | Specifies the codec profile:CodecProfile\"h.265/h.265\"\"main\", \"high\", \"main 10\"\"vp9\"\"profile 0\", \"profile 2\"\"AAC codec profiles\"\"mp2 lc\", \"mp4 he\" | Optional |\n| Level | String | Specifies the codec level:CodecLevel\"h.265/h.265\"4.1, 4.2, 5.0, 5.1\"vp9\"3.0, 3.1, 4.0, 4.1, 5.0, 5.1 | Optional |\n| ChCnt | integer | Specifies the required number of audio channels | Optional |\n| PassThru | integer | Specifies whether the bitstream needs to be decoded on the device. By default, this reports the codec properties of both the Roku device and the attached HDMI device.You can filter the values returned by including one of the following options:**0** \\- Reports only codecs that are supported on the Roku device itself.**1** \\- Reports only codecs of the attached HDMI device (for example, an audio receiver). | Optional |\n| Atmos | Integer | Specifies whether atmos is required. Include 'atmos=1' if it is. | Optional |\n| SampleRate | integer | Specifies the sample rate | Optional |\n| BitRate | integer | Specifies the bit rate in Kbit/sec | Optional |\n| Container | string | Specifies the container format | Optional |\n",
9513
+ "description": "An associative array with the audio format to be checked. The general format of the associative arrays for CanDecodeAudio() is similar to the parameter and return associative arrays used in [CanDecodeVideo()](https://developer.roku.com/docs/references/brightscript/interfaces/ifdeviceinfo.mdcandecodevideovideo_format-as-object-as-object): \n| Key | Type | Value | Requirement |\n| ---------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |\n| Codec | string | Specifies the audio codec: “aac”, “ac3”, “eac3”, \"alac\", \"flac\", “mp2”, “mp3”, “vorbis”, “wma (deprecated), “wma pro (deprecated), “dts”, \"ac4\" | Required |\n| Profile | string | Specifies the codec profile:CodecProfile\"h.265/h.265\"\"main\", \"high\", \"main 10\"\"vp9\"\"profile 0\", \"profile 2\"\"AAC codec profiles\"\"mp2 lc\", \"mp4 he\" | Optional |\n| Level | String | Specifies the codec level:CodecLevel\"h.265/h.265\"4.1, 4.2, 5.0, 5.1\"vp9\"3.0, 3.1, 4.0, 4.1, 5.0, 5.1 | Optional |\n| ChCnt | integer | Specifies the required number of audio channels | Optional |\n| PassThru | integer | Specifies whether the bitstream needs to be decoded on the device. By default, this reports the codec properties of both the Roku device and the attached HDMI device.You can filter the values returned by including one of the following options:**0** \\- Reports only codecs that are supported on the Roku device itself.**1** \\- Reports only codecs of the attached HDMI device (for example, an audio receiver). | Optional |\n| Atmos | Integer | Specifies whether atmos is required. Include 'atmos=1' if it is. | Optional |\n| SampleRate | integer | Specifies the sample rate | Optional |\n| BitRate | integer | Specifies the bit rate in Kbit/sec | Optional |\n| Container | string | Specifies the container format | Optional |\n",
9498
9514
  "isRequired": true,
9499
9515
  "name": "audio_format",
9500
9516
  "type": "Object"
@@ -9800,7 +9816,7 @@
9800
9816
  "returnType": "String"
9801
9817
  },
9802
9818
  {
9803
- "description": "Checks the general memory levels of the channel.",
9819
+ "description": "Checks the general memory levels of the device.",
9804
9820
  "name": "GetGeneralMemoryLevel",
9805
9821
  "params": [],
9806
9822
  "returnDescription": "Returns the general memory levels of the channel, which may be one of the following values:",
@@ -11166,58 +11182,46 @@
11166
11182
  {
11167
11183
  "description": "roFont represents a particular font, from a font-family (eg. Arial), with a particular pixel size (e.g 20), and a particular boldness or italicness",
11168
11184
  "name": "roFont",
11169
- "url": "https://developer.roku.com/docs/references/brightscript/components/rofont.md"
11185
+ "url": "https://developer.roku.com/docs/references/api-index/brightscript/components/rofont.md"
11170
11186
  }
11171
11187
  ],
11172
11188
  "methods": [
11173
11189
  {
11174
- "description": "Returns the number of pixels of the font ascent.",
11175
11190
  "name": "GetAscent",
11176
11191
  "params": [],
11177
- "returnDescription": "The number of pixels.",
11178
11192
  "returnType": "Integer"
11179
11193
  },
11180
11194
  {
11181
- "description": "Returns the number of pixels of the font descent.",
11182
11195
  "name": "GetDescent",
11183
11196
  "params": [],
11184
- "returnDescription": "The number of pixels.",
11185
11197
  "returnType": "Integer"
11186
11198
  },
11187
11199
  {
11188
- "description": "Returns the font maximum advance width in pixels.",
11189
11200
  "name": "GetMaxAdvance",
11190
11201
  "params": [],
11191
- "returnDescription": "The number of pixels.",
11192
11202
  "returnType": "Integer"
11193
11203
  },
11194
11204
  {
11195
- "description": "Returns the number of pixels from one line to the next when drawing with this font.",
11196
11205
  "name": "GetOneLineHeight",
11197
11206
  "params": [],
11198
- "returnDescription": "The number of pixels.",
11199
11207
  "returnType": "Integer"
11200
11208
  },
11201
11209
  {
11202
- "description": "Returns the number of pixels from one line to the next when drawing with this font. Each glyph and the needed spacing between glyphs is measured.",
11203
11210
  "name": "GetOneLineWidth",
11204
11211
  "params": [
11205
11212
  {
11206
11213
  "default": null,
11207
- "description": "The subject text.",
11208
11214
  "isRequired": true,
11209
11215
  "name": "text",
11210
11216
  "type": "String"
11211
11217
  },
11212
11218
  {
11213
11219
  "default": null,
11214
- "description": "Generally, the amount of pixels available for rendering on this line.",
11215
11220
  "isRequired": true,
11216
11221
  "name": "MaxWidth",
11217
11222
  "type": "Integer"
11218
11223
  }
11219
11224
  ],
11220
- "returnDescription": "The number of pixels. This will be less than provided MaxWidth.",
11221
11225
  "returnType": "Integer"
11222
11226
  }
11223
11227
  ],
@@ -11446,7 +11450,7 @@
11446
11450
  "ifhdmistatus": {
11447
11451
  "implementers": [
11448
11452
  {
11449
- "description": "The HDMI status component provides an interface to the current HDMI operational status",
11453
+ "description": "The HDMI status component provides an interface to the current HDMI operational status of Roku streaming players (or set-top boxes \\[STBs\\]). This interface is not applicable for Roku TVs.",
11450
11454
  "name": "roHdmiStatus",
11451
11455
  "url": "https://developer.roku.com/docs/references/brightscript/components/rohdmistatus.md"
11452
11456
  }
@@ -11611,7 +11615,7 @@
11611
11615
  "params": [
11612
11616
  {
11613
11617
  "default": null,
11614
- "description": "An roArray of roAssociativeArrays, where each associative array represents a cookie to be added. Each associative array must contain the following key-value pairs: \n| Name | Type | Description |\n| ------- | ---------- | ------------------------------ |\n| Version | Integer | Cookie version number |\n| Domain | String | Domain to which cookie applies |\n| Path | String | Path to which cookie applies |\n| Name | String | Name of the cookie |\n| Value | String | Value of the cookie |\n| Expires | roDateTime | Cookie expiration date, if any |\n",
11618
+ "description": "An roArray of roAssociativeArrays, where each associative array represents a cookie to be added. Each associative array must contain the following key-value pairs: \n| Name | Type | Description |\n| ------------------------------------ | ---------- | ----------------------------------------------------------------------------- |\n| Version | Integer | Cookie version number |\n| Domain | String | Domain to which cookie applies |\n| Path | String | Path to which cookie applies |\n| Name | String | Name of the cookie |\n| Value | String | Value of the cookie |\n| Expires | roDateTime | Cookie expiration date, if any |\n| Secure_Available since Roku OS 12.0_ | Boolean | Indicates whether the cookie is to be sent over HTTPS (true) or HTTP (false). |\n",
11615
11619
  "isRequired": true,
11616
11620
  "name": "cookies",
11617
11621
  "type": "Object"
@@ -12819,7 +12823,7 @@
12819
12823
  "returnType": "Object"
12820
12824
  },
12821
12825
  {
12822
- "description": "Returns the number of bytes available in the channel application's device registry (16K minus current file size). This function can be used, for example, to check the remaining space and remove older entries before writing newer ones. The following code demonstrates how to do this:",
12826
+ "description": "Returns the number of bytes available in the channel application's device registry (32K). This function can be used, for example, to check the remaining space and remove older entries before writing newer ones. The following code demonstrates how to do this:",
12823
12827
  "name": "GetSpaceAvailable",
12824
12828
  "params": [],
12825
12829
  "returnDescription": "An integer representing the the number of bytes available in the device registry.",
@@ -13431,7 +13435,7 @@
13431
13435
  "name": "getParent",
13432
13436
  "params": [],
13433
13437
  "returnDescription": "The parent node; otherwise, \"invalid\".",
13434
- "returnType": "roSGNode"
13438
+ "returnType": "dynamic"
13435
13439
  },
13436
13440
  {
13437
13441
  "description": "Returns an array with every existing node without a parent created by the currently running channel.",
@@ -13451,7 +13455,7 @@
13451
13455
  "name": "getScene",
13452
13456
  "params": [],
13453
13457
  "returnDescription": "The node's root Scene.",
13454
- "returnType": "roSGNode"
13458
+ "returnType": "dynamic"
13455
13459
  },
13456
13460
  {
13457
13461
  "description": "Inserts a previously-created child node at the position index in the subject node list of children, so that this is the position that the new child node is traversed during render.",
@@ -14232,21 +14236,21 @@
14232
14236
  "name": "getGlobalNode",
14233
14237
  "params": [],
14234
14238
  "returnDescription": "A global reference object.",
14235
- "returnType": "roSGNode"
14239
+ "returnType": "dynamic"
14236
14240
  },
14237
14241
  {
14238
14242
  "description": "Returns the roMessagePort object for the SceneGraph scene.",
14239
14243
  "name": "GetMessagePort",
14240
14244
  "params": [],
14241
14245
  "returnDescription": "The roMessagePort object.",
14242
- "returnType": "roMessagePort"
14246
+ "returnType": "dynamic"
14243
14247
  },
14244
14248
  {
14245
14249
  "description": "The roSGScene object associated with the screen.",
14246
14250
  "name": "GetScene",
14247
14251
  "params": [],
14248
14252
  "returnDescription": "Typically, the scene created in main.brs by a roSGScreen.CreateScene() call.",
14249
- "returnType": "roSGNode"
14253
+ "returnType": "dynamic"
14250
14254
  },
14251
14255
  {
14252
14256
  "description": "Specifies the roMessagePort object for the roSGScreen object",
@@ -15733,6 +15737,27 @@
15733
15737
  ],
15734
15738
  "returnType": "String"
15735
15739
  },
15740
+ {
15741
+ "description": "Returns a copy of the string with all instances of **fromStr** replaced with **toStr**. If **fromStr** is empty the return value is the same as the source string.",
15742
+ "name": "Replace",
15743
+ "params": [
15744
+ {
15745
+ "default": null,
15746
+ "description": "The string of characters within the roString object to be replaced.",
15747
+ "isRequired": true,
15748
+ "name": "from",
15749
+ "type": "String"
15750
+ },
15751
+ {
15752
+ "default": null,
15753
+ "description": "The string of characters that will replace all instances of the **from** string.",
15754
+ "isRequired": true,
15755
+ "name": "to",
15756
+ "type": "String"
15757
+ }
15758
+ ],
15759
+ "returnType": "String"
15760
+ },
15736
15761
  {
15737
15762
  "description": "Returns a string consisting of the last len characters of the string.",
15738
15763
  "name": "Right",
@@ -17388,6 +17413,16 @@
17388
17413
  }
17389
17414
  ],
17390
17415
  "methods": [
17416
+ {
17417
+ "name": "isDownloadSegmentInfo",
17418
+ "params": [],
17419
+ "returnType": "Boolean"
17420
+ },
17421
+ {
17422
+ "name": "isFormatDetected",
17423
+ "params": [],
17424
+ "returnType": "Boolean"
17425
+ },
17391
17426
  {
17392
17427
  "name": "isFullResult",
17393
17428
  "params": [],
@@ -17423,11 +17458,21 @@
17423
17458
  "params": [],
17424
17459
  "returnType": "Boolean"
17425
17460
  },
17461
+ {
17462
+ "name": "isSegmentDownloadStarted",
17463
+ "params": [],
17464
+ "returnType": "Boolean"
17465
+ },
17426
17466
  {
17427
17467
  "name": "isStatusMessage",
17428
17468
  "params": [],
17429
17469
  "returnType": "Boolean"
17430
17470
  },
17471
+ {
17472
+ "name": "isStreamSegmentInfo",
17473
+ "params": [],
17474
+ "returnType": "Boolean"
17475
+ },
17431
17476
  {
17432
17477
  "name": "isTimedMetaData",
17433
17478
  "params": [],