ruby/ruby.wasm

Writing to console.log specifically

rubyFeedback opened this issue · 2 comments

In the FAQ currently we have code like this:

 $stdout = Object.new.tap { |obj|
  def obj.write(i)
    JS.global[:document].write(i)
  end
}

Then we can simply use puts, which is convenient.

But how to write to console.log?

Past this point if we use:

JS.global[:document].write "foobar"

It will no longer write to console.log, instead just to primary stdout in the browser.

Is there a way to still write to console.log somehow? Could this be added to FAQ?

If not, could there be a way to show this? I'd like to get debug-like output right
via console.log() as well, so being able to write onto console.log even when having
modified $stdout, would be convenient, in my opinion. Could such a way be added
in addition to ruby.wasm?

Hmm it seems "pp" can be used to do so. Still I think it may be useful to add it to a FAQ entry.

On a semi-related note, when I use "pp", the console also says:

Ignoring debug-1.9.1 because its extensions are not built. Try: gem pristine debug --version 1.9

And so forth. Not sure why. I am using:

https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.5.0/dist/browser.script.iife.js

console is a JS global just like document so you can access it the same:

JS.global[:console].log('hello')

Feel free to make whatever shortcut you find comfortable:

# global variable
$console = JS.global[:console]
$console.log('hello')

# Kernel patch
# (this is where `puts` is defined too)
module Kernel
  def console
    JS.global[:console]
  end
end

console.log('hello')
console.error('bad')