Sha256: a805657a70b5fcdd39a57ca18859407bd4605adbc1c6f2e604cdd2f92c573f7b

Contents?: true

Size: 985 Bytes

Versions: 46

Compression:

Stored size: 985 Bytes

Contents

require 'native'

NodeRepl = Native(`OpalNode.node_require('repl')`)

def NodeRepl.start opations = {}
  Native::Object.new(`#@native.start(#{opations.to_n})`)
end

line = 1
prompt_interrupted = false

prompt = ->(_self) {
  tip = prompt_interrupted ? '*' : '>'
  "irb(#{_self.to_s}):#{line.to_s.rjust(3, '0')}#{tip} "
}

$repl = NodeRepl.start prompt: prompt.call(self),
                       useGlobal: true, ignoreUndefined: true,
                       eval: -> (cmd, context, filename, callback) {
  line += 1

  cmd = cmd[1...-1].chomp

  if cmd.empty?
    prompt_interrupted = true
    $repl.prompt = prompt.call(self)

    callback.call('')
    next
  end

  prompt_interrupted = false
  $repl.prompt = prompt.call(self)

  begin
    result = `OpalNode.run(cmd, filename)`
    result = nil if `#{result} == nil`
    callback.call('=> '+result.inspect)
  rescue => e
    callback.call(e.backtrace.join("\n"))
  end
}

# Add a newline before exiting
$repl.on :exit, -> { puts }

Version data entries

46 entries across 46 versions & 3 rubygems

Version Path
opal-0.11.4 stdlib/nodejs/irb.rb
opal-0.11.3 stdlib/nodejs/irb.rb
opal-0.11.2 stdlib/nodejs/irb.rb
opal-0.11.1 stdlib/nodejs/irb.rb
opal-0.11.1.pre stdlib/nodejs/irb.rb
opal-0.10.6 stdlib/nodejs/irb.rb
opal-0.10.6.beta stdlib/nodejs/irb.rb
opal-0.11.0 stdlib/nodejs/irb.rb
opal-0.10.5 stdlib/nodejs/irb.rb
opal-0.10.4 stdlib/nodejs/irb.rb
opal-0.11.0.rc1 stdlib/nodejs/irb.rb
opal-0.10.3 stdlib/nodejs/irb.rb
opal-0.10.2 stdlib/nodejs/irb.rb
opal-0.10.1 stdlib/nodejs/irb.rb
opal-0.10.0 stdlib/nodejs/irb.rb
opal-0.10.0.rc2 stdlib/nodejs/irb.rb
opal-0.9.4 stdlib/nodejs/irb.rb
opal-0.9.3 stdlib/nodejs/irb.rb
opal-0.10.0.rc1 stdlib/nodejs/irb.rb
opal-0.10.0.beta5 stdlib/nodejs/irb.rb