lib/vite_ruby/cli/ssr.rb



# frozen_string_literal: true

class ViteRuby::CLI::SSR < ViteRuby::CLI::Vite
  DEFAULT_ENV = CURRENT_ENV || 'production'
  JS_EXTENSIONS = %w[js mjs cjs]

  desc 'Run the resulting app from building in SSR mode.'
  executable_options

  def call(mode:, inspect: false, trace_deprecation: false)
    ViteRuby.env['VITE_RUBY_MODE'] = mode

    ssr_entrypoint = JS_EXTENSIONS
      .map { |ext| ViteRuby.config.ssr_output_dir.join("ssr.#{ ext }") }
      .find(&:exist?)

    raise ArgumentError, "No ssr entrypoint found `#{ ViteRuby.config.ssr_output_dir.relative_path_from(ViteRuby.config.root) }/ssr.{#{ JS_EXTENSIONS.join(',') }}`. Have you run bin/vite build --ssr?" unless ssr_entrypoint

    cmd = [
      'node',
      ('--inspect-brk' if inspect),
      ('--trace-deprecation' if trace_deprecation),
      ssr_entrypoint,
    ]
    Kernel.exec(*cmd.compact.map(&:to_s))
  end
end