nyariv / SandboxJS

Safe eval runtime
https://nyariv.github.io/SandboxJS/
MIT License
113 stars 6 forks source link

Line after one-line if statement disappears #27

Open Christilut opened 2 months ago

Christilut commented 2 months ago

This is my script:

console.log(1)

if (false) throw new Error('test')

console.log(2)

console.log(3)

I run it like this:

// this.jsContents is the the above script

const jsContentsExecutor: string = `async function _execute() {${this.jsContents}}; return _execute();`

const jsExecutor = sandbox.compileAsync(jsContentsExecutor)

  await jsExecutor({ 
//    _vars: pluginVars, // Normally some vars are added
//    _settings: pluginSettings
  }).run()

This is the output:

1
3

So it appears the 2 is disappearing.

If I change the line to have brackets, it does work:

if (false) { 
  throw new Error('test')
}

Results in:

1
2
3
Christilut commented 2 months ago

Do while loop has the same problem:

console.log(1)

do {
  console.log(2)

  break
} while (true)

console.log(3)

console.log(4)

Results in:

1
2
4