class OpalWebpackCompileServer::Compiler

Public Instance Methods

receive_data(data) click to toggle source
# File lib/opal-webpack-compile-server/exe.rb, line 23
def receive_data(data)
  if data.start_with?('command:stop')
    EventMachine.stop
    exit(0)
  end

  filename = data.chop # remove newline

  operation = proc do
    begin
      source = File.read(filename)
      c = Opal::Compiler.new(source, file: filename, es6_modules: true)
      c.compile
      result = { 'javascript' => c.result }
      result['source_map'] = c.source_map.as_json
      result['source_map']['sourcesContent'] = [source]
      result['source_map']['file'] = filename
      result['source_map']['names'] = result['source_map']['names'].map(&:to_s)
      result['required_trees'] = c.required_trees
      Oj.dump(result)
    rescue Exception => e
      Oj.dump({ 'error' => { 'name' => e.class, 'message' => e.message, 'backtrace' => e.backtrace } })
    end
  end

  callback = proc do |json|
    self.send_data(json + "\n")
    close_connection_after_writing
  end

  EM.defer(operation, callback)
end