module ExecJS::Runtimes
def self.autodetect
def self.autodetect from_environment || best_available || raise(RuntimeUnavailable, "Could not find a JavaScript runtime. " + "See https://github.com/rails/execjs for a list of available runtimes.") end
def self.best_available
def self.best_available runtimes.reject(&:deprecated?).find(&:available?) end
def self.from_environment
def self.from_environment env = ENV["EXECJS_RUNTIME"] if env && !env.empty? name = env raise RuntimeUnavailable, "#{name} runtime is not defined" unless const_defined?(name) runtime = const_get(name) raise RuntimeUnavailable, "#{runtime.name} runtime is not available on this system" unless runtime.available? runtime end end
def self.names
def self.names @names ||= constants.inject({}) { |h, name| h.merge(const_get(name) => name) }.values end
def self.runtimes
def self.runtimes @runtimes ||= [ RubyRhino, GraalJS, Duktape, MiniRacer, Bun, Node, JavaScriptCore, SpiderMonkey, JScript, V8 ] end