Class: ReactEmailRails::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/react_email_rails/install_generator.rb

Constant Summary collapse

JAVASCRIPT_PACKAGES =
[
  "react-email-rails",
  "@react-email/render",
  "@react-email/components",
  "react",
  "react-dom",
].freeze
PACKAGE_MANAGER_LOCKFILES =
{
  "pnpm-lock.yaml" => "pnpm",
  "yarn.lock" => "yarn",
  "bun.lock" => "bun",
  "bun.lockb" => "bun",
  "package-lock.json" => "npm",
}.freeze
SUPPORTED_PACKAGE_MANAGERS =
["bun", "npm", "pnpm", "yarn"].freeze
VITE_CONFIG_FILES =
[
  "vite.config.ts",
  "vite.config.mts",
  "vite.config.js",
  "vite.config.mjs",
  "vite.config.cts",
  "vite.config.cjs",
].freeze
VITE_IMPORT =
'import { reactEmailRails } from "react-email-rails"'

Instance Method Summary collapse

Instance Method Details

#configure_viteObject



86
87
88
89
90
91
92
93
94
# File 'lib/generators/react_email_rails/install_generator.rb', line 86

def configure_vite
  return if options[:skip_vite]

  if (config = vite_config_path)
    update_vite_config(config)
  else
    template("vite.config.ts", "vite.config.ts")
  end
end

#copy_initializerObject



54
55
56
# File 'lib/generators/react_email_rails/install_generator.rb', line 54

def copy_initializer
  template("initializer.rb", "config/initializers/react_email_rails.rb")
end

#create_email_directoryObject



96
97
98
# File 'lib/generators/react_email_rails/install_generator.rb', line 96

def create_email_directory
  empty_directory("app/javascript/emails")
end

#install_javascript_dependenciesObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/generators/react_email_rails/install_generator.rb', line 58

def install_javascript_dependencies
  return if options[:skip_package_install]

  package = package_json
  unless package
    say_status(:skip, "JavaScript dependencies; package.json was not found", :yellow)
    return
  end

  missing = missing_javascript_packages(package)
  if missing.empty?
    say_status(:identical, "JavaScript dependencies", :green)
    return
  end

  manager = package_manager(package)
  unless manager
    say_status(
      :skip,
      "JavaScript dependencies; could not detect npm, pnpm, yarn, or bun",
      :yellow,
    )
    return
  end

  run(javascript_install_command(manager, missing))
end