v1.8.4 - Fixed roVideoPlayer
and End
Statement - 26 January 2025
The v1.8.x
releases of the core
library, are the final ones as a fully synchronous interpreter, the next major release will come with an option to support async/await
and remove the dependency on SharedArrayBuffer
.
- Implemented
roSocketAddress
by @lvcabral in #460 - Improved component
roURLTransfer
by @lvcabral in #461 - Implemented mocked
roStreamSocket
component by @lvcabral in #462 - Implemented
roHdmiStatus
androHdmiStatusEvent
components by @lvcabral in #463
v1.8.3 - Fixed roVideoPlayer
and End
Statement - 18 January 2025
- Fixed
roVideoPlayer
methodgetAudioTracks
- Added
serialNumber
to device info object and to reponse ofGetModelDetails()
- Fixed behavior of
End
statement to terminate the app - Improved CLI app list handling
- Improved and documented MicroDebugger functions
- Moved home sound effect setup
- Improvements on WAV handling
- Reduced complexity and simplifed some references
- Upgraded dependencies
v1.8.2 - Fixed ifToStr()
for roInvalid
- 17 January 2025
- Fixed
IfToStr
to properly handleroInvalid
component by @lvcabral in #451 - Simplified
AppPayload
type checking by @lvcabral in #452
v1.8.1 - New interface modules and fixes on number parsing - 10 January 2025
This release bring several fixes on numeric types parsing to hexadecimal and using the toStr()
and String.format()
methods. This also brings the extraction of reused interfaces into separate modules, reducing the replication of code and also improving the maintainability of the core
library.
- Fixed
Int32
constructor handling of overflow to match Roku by @lvcabral in #435 - Upgraded dependency
restana
to v5.0.0 by @lvcabral in #436 - Added new
roDateTime
methods:asSecondsLong
andfromSecondsLong
by @lvcabral in #437 - Fixed
Int32
andInt64
hex parsing and formatting by @lvcabral in #438 - Simplified
Int32
constructor code by @lvcabral in #439 - Updated some documentation pages by @lvcabral in #440
- Fixed runtime error stack trace on
Callables
by @lvcabral in #442 - Created
ifToStr()
and refactored components to use it and improvedsprintf
formatting by @lvcabral in #443 - Change file names to the standard by @lvcabral in #444
- Made
ifToStr
to handle components that do not supportformat
by @lvcabral in #445 - Created
IfSetMessagePort
andIfGetMessagePort
interfaces by @lvcabral in #446 - Implemented
IfEnum
as an interface module and refactored components by @lvcabral in #447 - Implemented
IfDraw2D
interface to simplify and reuse code by @lvcabral in #448 - Improved
IfToStr
type checking by @lvcabral in #449 - Implemented
IfArray
andIfList
interface modules by @lvcabral in #450
v1.8.0 - Multiple Improvements - 03 January 2025
This release is full of refactorings and improvements on the engine internals, the folder structure was also changed with the app
folder renamed to browser
and the src/worker
folder renamed to src/core
. The File System now supports the external USB volume (ext1:
) that can be mounted from an additional zip
file (or folder in CLI). Several other changes and improvements were done in the registry and apps management. The roMessagePort
component was simplified and improved, and new events are now supported, in particular: roInput
(via ECP and API) and roChannelStore
using the fakeServer(true)
option. The BrightScript language and components are now synchronized with Roku OS 14.
Check specific PRs in the log below for more information.
- Implemented
roDeviceInfo.getExternalIP()
by @lvcabral in #397 - Prevent crash when using invalid URL() by @lvcabral in 398
- Improved check for
SharedArrayBuffer
support by @lvcabral in #399 - Finish optional chaining operator implementation by @lvcabral in #400
- Added support for
RokuBrowser
library androNDK
component. by @lvcabral in #402 - Implemented support to mount External storage as volume
ext1:
by @lvcabral in #403 - Several Registry improvements by @lvcabral in #407
- Changed the
For Each
behavior to match Roku, usingifEnum
iteration index by @lvcabral in #410 - Several App handling/management improvements by @lvcabral in #413
- Added
Platform
info to the result ofroDeviceInfo.getModelDetails()
by @lvcabral in #414 - Allowed
m
object to be re-assigned in Function scope by @lvcabral in #417 - Implemented
global
static object by @lvcabral in #418 - Implemented BrightScript features up to Roku OS 14.0 by @lvcabral in #420
- Add new supported control buttons and ECP command by @lvcabral in #421
- Remove debug local ips by @lvcabral in #422
- Fixed
CreateObject
behavior to match Roku by @lvcabral in #423 - Raised Runtime Error with Interpreter
addError
method by @lvcabral in #424 - Implemented
roSystemLog
and refactoredroMessagePort
by @lvcabral in #426 - Fixed
dev
app saving data on app list by @lvcabral in #427 - Implemented function
toAssociativeArray()
to simplify creation of AA in TypeScript code by @lvcabral in #428 - Implemented
roDeviceInfoEvent
by @lvcabral in #429 - Implement
roCECStatus
component by @lvcabral in #430 - Add fake server support to
roChannelStore
by @lvcabral in #431 - Fix File System when using
root
orext
CLI flags and running on Linux by @lvcabral in #432 - Restricted
FlexObject
content types by @lvcabral in #433 - Implemented support for
roInputEvent
generated via ECP or API by @lvcabral in #434 - build(deps): bump elliptic from 6.5.7 to 6.6.0 by @dependabot in #394
v1.7.3 - Fixed Optional Operators and For Each - 05 December 2024
- Changed the
For Each
behavior to match Roku, usingifEnum
iteration index by @lvcabral in #410 - Finished optional chaining operator implementation by @lvcabral in #400
- Implemented
roDeviceInfo.getExternalIP()
by @lvcabral in #397 - Prevent crash when using invalid URL() by @lvcabral in #398
- Improved check for
SharedArrayBuffer
suport by @lvcabral in #399 - build(deps): bump elliptic from 6.5.7 to 6.6.0 by @dependabot in #394
v1.7.0 - FormatJSON() fixes and MicroDebugger stats - 12 October 2024
- Implemented new Type and Enum definitions by @lvcabral in #374
- Added reference tracking and object disposal event by @lvcabral in #373
- Implemented
ObjFun()
global function and support forvariadic
arguments onCallable
by @lvcabral in #375 - Added support for
formatJson()
undocumented flags 256 and 512 by @lvcabral in #377 - Implemented Micro Debugger commands:
classes
,bscs
andstats
by @lvcabral in #385 - Static analysis fixes by @lvcabral in #389
- Fixed Critical bug with
formatJson
#383 by @lvcabral in #390 - Fixed #384 - Allow
try
andcatch
as object properties. by @lvcabral in #391 - build(deps-dev): bump webpack from 5.91.0 to 5.94.0 by @dependabot in #381
- build(deps): bump ws from 8.17.0 to 8.17.1 by @dependabot in #379
- build(deps): bump braces from 3.0.2 to 3.0.3 by @dependabot in #378
- build(deps): bump elliptic from 6.5.5 to 6.5.7 by @dependabot in #386
- build(deps): bump express from 4.19.2 to 4.21.1 by @dependabot in #387
- Upgraded dependencies by @lvcabral in #388
v1.6.1 - Numeric Labels - 11 May 2024
- Added support for numeric labels by @lvcabral in #372
- Fixed
goto
withtry/catch
by @lvcabral in #371
v1.6.0 - Goto Label Statement - 05 May 2024
- Implemented
goto
statement by @lvcabral in #367 - Fixed sound
select
not being triggered @lvcabral in #366
v1.5.7 - Fixed Critical Issue - 01 May 2024
- Fixed issue that was not restoring the environment in Try mode when
stopOnCrash
was enabled by @lvcabral in #361 - Reduced complexity of Try/Catch visit functions by @lvcabral in #362
v1.5.6 - Bump to Firmware 11.5 and Fixes - 01 May 2024
- Fixed loading fonts on CLI when running
.brs
files by @lvcabral in #351 - Added unit tests for
continue for/while
by @lvcabral in #352 - Improvements to stack trace and
try...catch
by @lvcabral in #353 - Updated engine-api.md by @lvcabral in #354
- Simplification of the Error objects and removing abbreviations from properties by @lvcabral in #355
- Renamed type
ErrorCode
toErrorDetail
by @lvcabral in #356 - Updated Firmware Version to 11.5 as
continue for/while
is now supported by @lvcabral in #357 - Removed usage of global objects to encrypt/decrypt packages by @lvcabral in #358
- Fixed multiple Static Analysis issues raised by Sonar Cloud by @lvcabral in #359
- Increased the timeout for CLI run zip file test to 10s by @lvcabral in #360
v1.5.5 - Several fixes and Unit Tests enabled - 26 Apr 2024
- Implemented
pos()
andtab()
forprint
statement by @lvcabral in #339 - Fixed Callable signature check by @lvcabral in #340
- Fixed conversion functions to Integer:
Int()
,CInt()
andFix()
by @lvcabral in #342 - Refactored
worker
andcli
libraries to supportrun
function by @lvcabral in #344 - Updated CLI app to load the engine as an external library by @lvcabral in #350
- Fixed CLI font loading by @lvcabral in #345
- Fixed Unit Tests and several issues by @lvcabral in #348
- Fixed Video seek causing a stack overflow crash by @lvcabral in #349
v1.5.4 - Continue For/While statements - 14 Apr 2024
- Implemented support for multi-dimensional indexes of
roArray
androList
by @lvcabral in #331 - Implemented
Continue For
andContinue While
statements by @lvcabral in #332 - Fixed CLI: REPL was not showing any error messages.
v1.5.3 - Metadata components and Coercion - 12 Apr 2024
- Implemented
roImageMetadata
component by @lvcabral in #325 - Implemented
roAudioMetadata
component by @lvcabral in #326 - Fixed Boxing for Callable parameters and implemented Coercion properly by @lvcabral in #327
- Fixed #323 MicroDebugger is stopping on handled exceptions (try..catch) by @lvcabral in #324
- Upgraded dependencies
v1.5.2 - Try..Catch and Throw - 09 Apr 2024
- Implemented
try...catch
andthrow
by @lvcabral in #318 - Implemented support for
rethrown
and custom fields onthrow
statement by @lvcabral in #319 - Implemented
ifArraySizeInfo
inroArray
by @lvcabral in #316 - Improved Lexer performance by @lvcabral in 317
v1.5.1 - New: box(), roFunction and roDeviceCrypto - 03 Apr 2024
- Removed
isEmpty
fromroPath
to match Roku behavior by @lvcabral in #306 - Allow to use AND/OR between Boolean and Numbers by @lvcabral in #307
- Improved
roEVPCipher
error handling by @lvcabral in #308 - Implemented
roDeviceCrypto
component by @lvcabral in #309 - Implemented
roFunction
component andBox()
runtime function by @lvcabral in #310 - Improved Iterable objects to behave as Roku devices by @lvcabral in #311
- Fixed Boxing on Numbers and Booleans by @lvcabral in #313
- Fixed issues with
roByteArray
by @lvcabral in #314 - Improved print variables by @lvcabral in #315
- Implemented
slice()
method inroArray
underifArraySlice
v1.5.0 - Encrypt/Decrypt components - 28 Mar 2024
- Added:
roEVPDigest
component by @lvcabral in #301 - Added:
roEVPCipher
component by @lvcabral in #303 - Added:
roHMAC
component by @lvcabral in #305 - Changed: Improvements to
roPath
by @lvcabral in #296 - Changed:
roUrlEvent
androUniversalControlEvent
to be comparable by @lvcabral in #299 - Changed: Updated Limitations document by @lvcabral in #302
- Changed: Only raise HTTP Errors in development mode and other exception handling improvements @lvcabral in #300
- Fixed:
ifString.tokenize()
behavior to match Roku by @lvcabral in #295 - Fixed:
String
comparison and concatenation by @lvcabral in #298 - build(deps): bump express from 4.18.3 to 4.19.2 by @dependabot in #297
v1.4.1 - CLI: Removed Flicker on ASCII Mode - 22 Mar 2024
- Updated: Flicker on CLI ASCII mode was removed by @lvcabral in #294
- Updated: IIS config file was added for the sample web app by @lvcabral in #294
- Fixed: Invalid BRS files are now handled correctly by @lvcabral in #294
- build(deps): bump webpack-dev-middleware from 5.3.3 to 5.3.4 by @dependabot in #293
v1.4.0 - CLI: Canvas and HTTP support - 21 Mar 2024
- Added: Support for
ifDraw2D
in CLI with flag to show screen as ASCII Art by @lvcabral in #284 - Added: Support for
roUrlTransfer
in CLI by @lvcabral in #289 - Added: ECP and SSDP services to the CLI by @lvcabral in #290
- Added: New
ascii_rendering
custom feature (only on CLI) by @lvcabral in #291 - Added: Option to CLI persist the registry to the disk by @lvcabral in #292
- Fixed: CLI Font Loading by @lvcabral in #285
v1.3.2 - Custom Features - 09 Mar 2024
- Add custom features by @lvcabral in #283
- Added a way to add custom features to be checked by
roDeviceInfo.hasFeatures()
- Created new document docs/customization.md
- Updated default game pad mapping
- Added a way to add custom features to be checked by
v1.3.1 - MicroDebugger Improvements - 02 Mar 2024
- Micro debugger improvements by @lvcabral in #280
- Added to the API
initialize
method a new option:disableDebug
- Added to the MicroDebugger support for
Function
,If
,For
andWhile
- Added support for MicroDebugger on CLI
- Fixed MicroDebugger formatting issues and the handling of linefeed
- Moved command parsing code from API to MicroDebugger
- Added
quit
command to the MicroDebugger
- Added to the API
- Added #278 - Support to ECP control keys
VolumeMute
andPowerOff
by @lvcabral in #279
v1.3.0 - New method: ifDraw2D.drawTransformedObject() - 19 Feb 2024
- Added #272
ifDraw2d
methoddrawTransformedObject()
by @lvcabral in #275 - Fixed #274 - MicroDebugger truncate String variable to max 94 characters by @lvcabral in #276
- Fixed #273 - MicroDebugger not exiting properly with
exit
command by @lvcabral in #277
v1.2.11 - New API Event: control
- 14 Feb 2024
- Added
control
event triggered whenkeydown
andkeyup
are sent to the engine by @lvcabral in #270- Created to allow the apps to have access to the control keys
- Updated API documentation
- Removed "Loading..." message when running apps without splash, only showing the icon (Roku updated behavior)
v1.2.10 - New roString methods and Keyboard mapping - 12 Feb 2024
- Fixed #265 - Implemented
roString
methodsstartsWith()
andendsWith()
by @lvcabral in #266 - Fixed #267 - Allow map modification keys (Shift, Control, Alt and Meta) independently by @lvcabral in #268
- Improved performance of creating encrypted package by @lvcabral in #269
v1.2.9 - Fixes: roByteArray and roVideoPlayer - 05 Feb 2024
- Fixed #260 -
roByteArray
- Capacity calculation now behave as Roku by @lvcabral in #261 - Fixed #255 -
roVideoPlayer
- Seek now behave as Roku by @lvcabral in #262 - Fixed #263 - Checking the Game Pad buttons map on event handler by @lvcabral in #264
v1.2.8 - Video: Play List Fixes - 03 Feb 2024
- Fixed #252 - Clear the audio tracks list when switching videos by @lvcabral in #256
- Fixed #253 - Safari native HLS support not selecting default audio track by @lvcabral in #257
- Fixed #254 - Keep the audio track selection on each playlist video metadata by @lvcabral in #258
- Fixed #250 - Made
RunUserInterface
the primary entry point by @lvcabral in 259
v1.2.7 - Video: HLS Support and Multiple Audios - 02 Feb 2024
- Added full support to HLS and Multiple Audio Tracks - closes #247, #220 by @lvcabral in #249
- Added support to videos inside the package or downloaded - closes #239 by @lvcabral in #246
- Finished implementation of
roByteArray
- closes #172 by @lvcabral in #251 - Fixed #244 - API Debug issues by @lvcabral in #245
v1.2.6 - roScreen fix and Video Codec Detection - 28 Jan 2024
- Fixed #234 - Return last buffer on
roScreen
methodsgetPng
androGetByteArray
by @lvcabral in #236 - Fixed #235 - Updated
ifDraw2D
to supportroScreen
as image source by @lvcabral in #237 - Fixed #238 - Detected supported video codecs and containers to return in
roDeviceInfo.canDecodeVideo()
by @lvcabral in #240 - Fixed last frame on screen using
cancelAnimationFrame()
by @lvcabral in #241 - Fixed #242 - Raise
resolution
event during app startup by @lvcabral in #243
v1.2.5 - Fixes on Keyboard Control, Display and XML - 22 Jan 2024
- Fixed #228 - Prevent repeated
keydown
events by @lvcabral in #230 - Fixed #229 - Clear buffer on terminate by @lvcabral in #231
- Fixed #232 - Object
roXMLElement
called methodgetText()
is returning empty string by @lvcabral in #233
v1.2.4 - Fixed Low Resolution and Video Pause - 21 Jan 2024
- Fixed #225 - Low Resolution on Screen Resize by @lvcabral in #226
- Fixed #219 - Video playback is not always pausing when the app get
PAUSE
orBREAK
commands by @lvcabral in #227
v1.2.3 - Improved Control Simulation - 19 Jan 2024
- Fixed issue that allowed API to unmute a video when App had it muted by @lvcabral in #221
- Added new API methods to enable/disable dynamically both keyboard or game pad controllers by @lvcabral in #222
setControlMode()
getControlMode()
setCustomPadButtons()
- Improvements on Remote Control simulation by @lvcabral in #223
- Added support for different control types
- Added a key buffer on the API side to avoid losing key events
v1.2.2 - Implemented FindMemberFunction() - 17 Jan 2024
- Fixed #190 - Implemented global function
FindMemberFunction()
by @lvcabral in #216 - Improved Example web app by @lvcabral in #217
- Removed unecessary content policy
- Replaced usage of
prompt()
by an HTML5dialog
- Updated execution source using the button to match Roku side load with "auto-run-dev"
v1.2.1 - Mute Audio and Video in Sync - 15 Jan 2024
- Fixed API to handle
mute
in sync for both Audio and Video by @lvcabral in #215 - Fixed bad performance when in full screen mode on 4K monitors by @lvcabral in #214
- build(deps): bump follow-redirects from 1.15.3 to 1.15.4 by @dependabot in #212
- Added new demo app to the example web application:
custom-video-player
- Updated documentation
v1.2.0 - Video Playback and GamePad customization - 14 Jan 2024
- Implemented
roVideoPlayer
component by @lvcabral in #213 - Added support to customize GamePad buttons mapping by @lvcabral in #210
- Control queue modes: Single Key Events and Multi Key Events by @lvcabral in #211
- Add the entry
multi_key_events=1
to the manifest to enable support for simultaneous keys.
- Add the entry
v1.1.11 - Improved roRegex and fixed Sound issues - 05 Jan 2024
- Added support for
g
flag onroRegex
by @lvcabral in #209 - Fixed sound related issues by @lvcabral in #208
- Home Button sound was not always being triggered
- The
roAudioResource
was with the old DataType enum configuration - Sound will totally pause now both on
stop
andpause
states.
v1.1.10 - Fixed DBG Command conflict with WAV - 04 Jan 2024
- Fixed wav stream conflict with Debug command by @lvcabral in #207
- Extracted enumerators from
util.js
intoenums.js
to reuse inside the worker - Fixed issue that was restarting a sound when returning from pause of break, when the app already had stopped it.
- Extracted enumerators from
v1.1.9 - GamePad support and FPS Limitation - 03 Jan 2024
- Updated package name on README.md badges by @lvcabral in #200
- Fixed #201 - Prevent Exception when SharedArrayBuffer is not supported by @lvcabral in #202
- Implementing features to remove limitations by @lvcabral in #205
- Implemented GamePad support by @lvcabral in #204
- Added support for the GamePad API
- Added a new feature
simulation_engine
to theroDeviceInfo.hasFeature()
method, allowing apps to adapt when underbrs-engine
- Added new option to define
maxFps
ondeviceData
and limit framerate inside the worker - Reduced web app default framerate to prevent issues on iOS
- Added icon dimentions to css
- Fixed CLI to not show
start
event - Fixed high framerate performance issue
- Fixed loading encrypted package
- Added new debug command
pause
to allow interrupt the interpreter when app loses focus
v1.0.0 - Simulation Engine Release - 15 Dec 2023
After 4 years of Alpha and Beta stages, the project is stable and performant enough to finally be released as version 1.0 and with that, we decided to give it a new name:
The term simulation engine was chosen instead of the former emulator to better represent the nature and purpose of the project, as there is no intention to fully emulate a Roku device (OS and Hardware), but rather simulate the behavior, as a development tool and as an engine/framework to run BrightScript apps in different platforms.
In this release the new CLI was introduced, still with some limitations (e.g. no OffScreenCanvas
support), but allowing basic BrightScript code to be executed, either via REPL or files. It also performs the encryption of a .zip
file into a .bpk
package to protect the source code.
- Renamed package for
brs-engine
- Renamed libraries to
brs.api.js
andbrs.worker.js
- Reorganized
src
folder by library, subfolders:api
,cli
andworker
- Added new CLI with REPL (
bin/brs.cli.js
) (#181) - Added support for Conditional Compilation (#93)
- Added support for
webp
file format inroBitmap
(#166) - Added support for interfaces
ifGetArray
andifSetArray
(#170) - Added support for
.bpk
encrypted package file (#188) - Added support optional chaining operators:
?.
,?(
,?[
, and.@
(#176) - Moved
models
list to API library and updatedserialNumber
format - Added new API event
registry
- Added check for
break
debug command during theroMessagePort
loop - Added code to pause sound when Micro Debugger is triggered (does not affect wav)
- Added option to stop on Micro Debugger when a crash happens (#198)
- Added partial try/catch implementation (#195)
- Improved error handling and added warning for RSG usage
- Added stub
roAppMemoryMonitor
androDeviceInfo.enableLowGeneralMemory
(#196) - Added new method
getAllPurchases
and changeddoOrder
to returnfalse
(#178) - Added
formatLocation
method in the Interpreter to help show location in warning messages - Added Bundle Stats Analyzer and replaced dependencies to reduce package size
- Updated default firmware to 11.0 and added new models to the list
- Updated images and layout of sample Web application
- Updated
roDateTime.GetTimeZoneOffset()
to considerroDeviceInfo.GetTimeZone()
(#94) - Finished implementation of
ifEnum
on all array/list objects (#171) - Fixed multiple cascading calls for dot-chained methods (#55)
- Fixed
roRegion
offset not being properly applied whensetWrap
wastrue
(#194) - Fixed
Val()
function not compliant with Roku (#162) - Fixed duplication of exception handling messages (#126)
- Fixed code smells and bugs based on Sonar Cloud recommendations (#169)
- Replaced
luxon
byday.js
onroDateTime
androTimespan
(#193) - Replaced module
jszip
by the lighterfflate
- Removing
ua-parser-js
dependency for the API - Bumped version of several dependencies
- Removed Node 14.x from the build (#182)
v0.10.22 - New API and Boosted Performance - 10 Sep 2023
This release was a result of months of refactoring work and performance improvements.
- Implemented new API to simplify usage of the
brs-emu
package, see new documentation @lvcabral - Implemented the Roku MicroDebugger (including
stop
statement, back trace and debug commands) #127 - Added support for Firefox and Safari browsers
- Added option to execute a channel without audio
- Added support for both Windows and MacOS keyboard names
- Multiple performance improvements on handling Canvas 2D, big thanks for @markwpearce #139
- Implemented
roInput
#57 - Implemented
roAppInfo
#104 - Implemented support for
ScaleMode
inroRegion
#62 - Implemented missing methods to
roRegion
#120 - Implemented missing methods to
roUrlTransfer
as mocks to avoid channel crash. #104 - Implemented missing
roDeviceInfo
methods #134 - Implemented missing
roChannelStore
methods #137 - Implemented a mock of
RunGarbageCollector()
#119 - Implemented numeric type auto cast in function parameters and return value #122
- Implemented support for external input parameters #123
- Implemented support for format parameter on
toStr()
#132 - Implemented method
format()
inroString
#133 - Implemented
end
command to terminate app without crash - Improved casting on
roBitmap
,roRegion
androScreen
- Improved Function call performance #141
- Changed to show icon when no splash exist in zip file
- Changed to only enable keyboard control when channel is running
- Changed to make sure audio do not play if
stop()
is called during load - Fixed:
drawRotatedObject
onroScreen
androBitmap
- Fixed:
ifDraw2d
drawing methods onroRegion
#120 - Fixed: return
invalid
whenroCompositor
doesn't receive valid regions creating sprites #125 - Fixed: Edge case of comparing
invalid
withroInvalid
- Fixed: Prevent crash with invalid collection with
for each
#118 - Fixed: Added missing audio files to the npm package
- Added option to show and overlay with display performance indicators #129
- Implemented use of
Atomics
with theSharedArrayBuffer
and other small improvements. - Adding a python script to allow testing on newer browsers with COOP and COEP enabled.
- Upgraded to TypeScript 4, Webpack 5 and several other dependencies
- [sonar] Code smell and complexity fixes #153
- Merged brs v0.45.0 below cherry picked commits:
v0.9.0 - Improved ECP and BrightScript support - 28 Jun 2021
This release brings the integration of improvements and fixes from the brs
interpreter up to their v0.43. Also several improvements
- (app) Implemented ECP-2 WebSocket API to support official Roku mobile apps (iOS and Android)
- (app) Implemented support for keyboard characters sent via ECP
- (app) Added support for new control keys: Backspace, Enter, PlayOnly and Stop
- (app) Restore the app window, if minimized, when a channel is loaded remotely via the Installer
- (app) Added
Ctrl+R
shortcut to reload most recent channel - (app) Added current locale on the Status bar
- (app) Made path length on the status bar proportional to the app window's width
- (app) Fixed status bar Resolution label that was showing "width" twice
- (app,web) Now emulator loads all files from the zip package even ones with custom extension.
- (app,web) Made Key8 to behave as the Info (*) control key, for keyboards that lacks the numeric keypad
- (app,web) Upgraded several dependencies to patch security vulnerabilities.
- (brs) Implemented support for Dot (.) and Attribute (@) operators for XML objects
- (brs) Implemented several missing methods to
roDeviceInfo
- (brs) Added check for valid parameters on
roRegion
constructor - (brs) Ignore Label statements when parsing the code
- (brs) Fixed
roRegion.SetWrap(true)
inifDraw2D.DrawObject()
andifDraw2D.DrawScaledObject()
- (brs) Fixed
roString.Tokenize()
that was sometimes returning an empty string at the end of the list - (brs) Fixed
roAppManager.updateLastKeyPressTime()
definition typo and implemented actual time reset - (brs) Fixed issues with
roTimespan
- (brs) Fixed
roRegion.offset()
to accept float parameters - (doc) Updated list of emulator limitations
- Merged brs v0.43.0 below some key commits:
- fix(lexer): Add support for explicit integer literals (#637)
- feat(stdlib): add isEmpty method to roString (#636)
- fix(parse,interp): Support unary + operator for numbers (#615)
- fix(lex): Allow JS object properties as identifiers (#614)
- feat(stdlib): Implement RoLongInteger and cast int to LongInt, float to Double (#600)
- fix(stdlib): Correct sorting issues with mixed arrays (#592)
- feat(parse,interp): Implement dim statement (#531)
- fix(rsg): Adds optional arg to RoString constructor (#533)
- fix(parse): Restore nested block parsing (#514)
- fix(parse): Allow multiple statements in single-line
if
branches - feat(stdlib): Added case sensitive support to roAssociativeArray (#509)
- fix(parser): make if statements with 'not' work (#443)
- fix(parse): Capture
EndIf
token when used alongsideelse
(#393) - fix(interp): Allow Float parameters passed into function signatures expecting Double (#394)
- fix(interp): Allow invalid returns for signatures that return object (brs#395)
v0.8.1 - Fixes and Security Patches - 09 Jun 2021
This release brings bug fixes, support for new Chrome security policies and the desktop application has upgraded dependencies including Electron's bump to v9.
- (brs)Added new message "getVersion" to allow request library version to the WebWorker
- (brs) Revert "fix(interp): Automatically box as object function parameters (sjbarag#365)"
- (brs) Fixed support for Retaliate game that was not working properly on v0.8
- (web) Shows dynamically the library version using new message "getVersion"
- (web) Added support to Chrome 92+ that will force self.crossOriginIsolated
- (app) Upgraded several dependencies to patch security vulnerabilities.
v0.8.0 - Localization Support - 11 Mar 2020
This release brings full support for channel localization. The desktop application has a new menu with the locales with the same options available on Roku devices.
- (brs)Added support to localize texts using TS or XLIFF files #67
- (brs)Implemented support for localization of images #66
- (brs)Added missing method setAdPrefs() for Roku_Ads.brs #68
- (brs)Removed BRS original manifest handler
- (app) Added option on Device menu to change localization
- (app) Refactored app code into several front-end modules
- Merged BRS v0.18.2
- fix(stdlib): Implement RoAssociativeArray.items() correctly (#371)
- fix(interp): Automatically box
as object
function parameters (#35) - fix(stdlib): Allow formatJson to serialize boxed types (#364)
- feat(stdlib): Implement getString() and toStr() on RoString (#362)
- feat(stdlib): Implement GetInterface (#352)
- fix(interp): Automatically box return values for 'as object' return types (#360)
- feat(parse): Allow
.
before indexed property access (#357) - chore(cruft): Remove unused AutoBox.ts
v0.7.2 - First Beta Release - 17 Nov 2019
- (brs) Library now supports
roUrlTransfer
androUrlEvent
- (brs) Added support to bmp images, and better file type detection
- (brs) Emulator File System is now case insensitive (like Roku)
- (brs) Finished
roXMLElement
implementation with XML creation methods - (brs) Mocked
roAppManager
component with workingGetUpTime()
method - (brs) Support to global functions: RebootSystem(), UpTime(), Tr()
- (brs) Fixed scope of the
m
object inside global functions (v0.7.2) - (brs) Fixed support for fonts with spaces and numbers on the family name (v0.7.2)
- (brs) Fixed issues related to
if..then..else
on a single line (v0.7.2) - (app,web) Added support to play downloaded audio files
- (app,web) Added support to show downloaded images
- (app,web) Updated default sound effects with the original Roku audio resources
- (app) Web Installer (port 80 or custom) to allow remote installation and screenshot
- (app) ECP server (port 8060) with SSDP detection implemented
- (app) Remote Console (port 8085) is available for remote monitoring
- (app) Status bar now changes color if errors or warnings are raised
- (app) New clickable status bar icons for errors, ECP and web installer
- (web) Shows animated gif to indicate a channel is being downloaded
- (doc) Updated list of emulator limitations
- (doc,app) Added desktop app build documentation
v0.6.0 - Audio Playback and new Display Modes - 24 Oct 2019
- (app,web) Support for audio playback from
roAudioResource
androAudioPlayer
- (app,web) Support for SD and FHD display modes
- (app) Added TV over-scan emulation options: disabled, only guide lines, enabled
- (app) Added Open Recent sub-menu
- (app) Added Close Channel menu option
- (app) Added macOS standard app menu
- (brs) Implemented
roAudioPlayerEvent
and updatedroMessagePort
to support it - (doc) Updated list of emulator limitations
v0.5.0 - Desktop Applications and Library Fixes - 05 Oct 2019
This version brings the first release of the desktop application and several fixes and improvements:
- (app) Desktop app for Windows, Linux and macOS
- (brs) Fixed issues with inline
if
statements onParser
#252 #253 #309 - (brs) Implemented global function
GetInterface()
#42 - (brs) Added support for an optional parameter on
Main()
#44 - (brs) Added
RunUserInterface()
as alternative forMain()
#44 - (brs) Added missing method
maxSimulStreams()
onroAudioResource
component #26 - (web) Reduced the app html to be simple, adding links to documentation on the repository
- (web) Detect and inform user about unsupported browser #40
- (doc) Reorganized repository folders and documentation for v0.5.0 #43
- Merged BRS v0.15.0
v0.4.0 - Support for rgba on Draw Object methods - 25 Sep 2019
This release has the following changes:
- Implemented method IsEmpty() for both roArray and roAssociativeArray #316
- Fixed #320 Making sure DoesExist() returns true even when value of the existing item is invalid
- Implemented mock components roChannelStore and roChannelStoreEvent #39
- Implemented mock of Roku_Ads() object #25
- Implemented support for rgba on DrawObject* methods #27
- Added option to configure device font,
- Added new font family "Roboto"
- Added new font family "Asap" that is similar to Roku default
- Implemented missing methods for RoUniversalControlEvent #37
- Changed DrawText to get string from value property of BrsString
- fix(parse): Include surrounding whitespace in Block nodes(#257)
- Finished Collision detection implementation (rectangle and circle)
- Updated roRegion to handle offset properly based on SetWrap() flag
- Implemented roScreen methods SetPort(), GetPng() and GetByteArray()
- Fixed
for loop
issue that should not process loop when step is on the wrong direction of the start-end parameters #310 (#311)
v0.3.0 - Several fixes and improvements - 16 Sep 2019
This releases adds a few font related features as follows:
- Updated website and added new demo channels
- Added parameter
rgba`` to
roScreen.DrawObject()` (only alpha opacity supported) #27 - Fixed
for loop
to correctly handlesteps
sjbarag#315 - Fixed issue that
roCompositor
was not clearing the canvas properly - Implemented channel close detection
- Fixed
roSprite
animation when frame time was configured onroRegion
- Implemented double buffer support for
roScreen
androRegion
- Added method
DrawText()
toroRegion
- Implemented string
Tokenize()
method - Added boxing to the numeric types
- Merged
roBoolean
,roDouble
,roFloat
androInt
implementation #35 - Made file type identification case-insensistive
- Added support for
.csv
extension on zip package - Removed
roSGNode
as RSG is out of scope for the emulator - Added support for
.gif
and.jpeg
image extensions - Fixed #32 Changed default font loading code to use relative path
- Fixed #30 Moved the screen clear code to run before the splash
v0.2.0 - Custom Fonts and Metrics - 09 Sep 2019
This releases adds a few font related features as follows:
- Support for loading custom fonts from the channel
zip
package. - Included Open Sans as the default device font.
- Finished roFontRegistry and roFont implementation by adding font metrics.
- Updated license information.
Included a new dependency to opentype.js package to parse font files.
v0.1.0 - First Emulator Alpha Release - 08 Sep 2019
This is the prototype release of the 2D API emulator, forked from the original BRS project. The following is the list of components implemented (some partially or just mocked):
- roAudioPlayer.ts (mock)
- roAudioResource.ts (mock)
- roBitmap.ts
- roByteArray.ts
- roCompositor.ts
- roDateTime.ts
- roDeviceInfo.ts
- roFileSystem.ts
- roFont.ts
- roFontRegistry.ts
- roList.ts
- roMessagePort.ts
- roPath.ts
- roRegion.ts
- roRegistry.ts
- roRegistrySection.ts
- roScreen.ts
- roSprite.ts
- roUniversalControlEvent.ts
- roXMLElement.ts
- roXMLList.ts