class ExecJS::ExternalRuntime::Context

def extract_result(output, filename)

def extract_result(output, filename)
  status, value, stack = output.empty? ? [] : ::JSON.parse(output, create_additions: false)
  if status == "ok"
    value
  else
    stack ||= ""
    real_filename = File.realpath(filename)
    stack = stack.split("\n").map do |line|
      line.sub(" at ", "")
          .sub(real_filename, "(execjs)")
          .sub(filename, "(execjs)")
          .strip
    end
    stack.reject! { |line| ["eval code", "eval code@", "eval@[native code]"].include?(line) }
    stack.shift unless stack[0].to_s.include?("(execjs)")
    error_class = value =~ /SyntaxError:/ ? RuntimeError : ProgramError
    error = error_class.new(value)
    error.set_backtrace(stack + caller)
    raise error
  end
end