Sha256: 814bff7dd3d4e6843b67fe0bccc2f9fad9fd97f54d8d8e874c1ba55ceb3d68cd

Contents?: true

Size: 1.06 KB

Versions: 11

Compression:

Stored size: 1.06 KB

Contents

# frozen_string_literal: true

require 'mini_racer'
require 'opal/paths'

module Opal
  module CliRunners
    class MiniRacer
      def self.call(data)
        ::MiniRacer::Platform.set_flags! :harmony

        builder = data.fetch(:builder)
        output = data.fetch(:output)
        # TODO: pass it
        argv = data.fetch(:argv)

        v8 = ::MiniRacer::Context.new
        v8.attach('prompt', ->(_msg = '') { $stdin.gets&.chomp })
        v8.attach('console.log', ->(i) { output.print(i); output.flush })
        v8.attach('console.warn', ->(i) { $stderr.print(i); $stderr.flush })
        v8.attach('crypto.randomBytes', method(:random_bytes).to_proc)
        v8.attach('opalminiracer.exit', ->(status) { Kernel.exit(status) })
        v8.attach('opalminiracer.argv', argv)

        code = builder.to_s + "\n" + builder.source_map.to_data_uri_comment

        v8.eval(code)
      end

      # A polyfill so that SecureRandom works in repl correctly.
      def self.random_bytes(bytes)
        ::SecureRandom.bytes(bytes).split('').map(&:ord)
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
opal-1.5.1 lib/opal/cli_runners/mini_racer.rb
opal-1.5.0 lib/opal/cli_runners/mini_racer.rb
opal-1.5.0.rc1 lib/opal/cli_runners/mini_racer.rb
opal-1.4.1 lib/opal/cli_runners/mini_racer.rb
opal-1.4.0 lib/opal/cli_runners/mini_racer.rb
opal-1.4.0.alpha1 lib/opal/cli_runners/mini_racer.rb
opal-1.3.2 lib/opal/cli_runners/mini_racer.rb
opal-1.3.1 lib/opal/cli_runners/mini_racer.rb
opal-1.3.0 lib/opal/cli_runners/mini_racer.rb
opal-1.3.0.rc1 lib/opal/cli_runners/mini_racer.rb
opal-1.3.0.alpha1 lib/opal/cli_runners/mini_racer.rb