vite_ruby 3.9.1 → 4.0.0.alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,35 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "json"
4
- require "time"
3
+ require 'time'
5
4
 
6
5
  # Internal: Value object with information about the last build.
7
- ViteRuby::Build = Struct.new(:success, :timestamp, :vite_ruby, :digest, :current_digest, :last_build_path, :errors, keyword_init: true) do
8
- class << self
9
- # Internal: Combines information from a previous build with the current digest.
10
- def from_previous(last_build_path, current_digest)
11
- new(
12
- **parse_metadata(last_build_path),
13
- current_digest: current_digest,
14
- last_build_path: last_build_path,
15
- )
16
- end
17
-
18
- private
19
-
20
- # Internal: Reads metadata recorded on the last build, if it exists.
21
- def parse_metadata(pathname)
22
- return default_metadata unless pathname.exist?
23
-
24
- JSON.parse(pathname.read.to_s).transform_keys(&:to_sym).slice(*members)
25
- rescue JSON::JSONError, Errno::ENOENT, Errno::ENOTDIR
26
- default_metadata
27
- end
28
-
29
- # Internal: To make it evident that there's no last build in error messages.
30
- def default_metadata
31
- {timestamp: "never", digest: "none"}
32
- end
6
+ ViteRuby::Build = Struct.new(:success, :timestamp, :vite_ruby, :digest, :current_digest) do
7
+ # Internal: Combines information from a previous build with the current digest.
8
+ def self.from_previous(attrs, current_digest)
9
+ new(
10
+ attrs['success'],
11
+ attrs['timestamp'] || 'never',
12
+ attrs['vite_ruby'] || 'unknown',
13
+ attrs['digest'] || 'none',
14
+ current_digest,
15
+ )
33
16
  end
34
17
 
35
18
  # Internal: A build is considered stale when watched files have changed since
@@ -53,30 +36,17 @@ ViteRuby::Build = Struct.new(:success, :timestamp, :vite_ruby, :digest, :current
53
36
  end
54
37
 
55
38
  # Internal: Returns a new build with the specified result.
56
- def with_result(**attrs)
39
+ def with_result(success)
57
40
  self.class.new(
58
- **attrs,
59
- timestamp: Time.now.strftime("%F %T"),
60
- vite_ruby: ViteRuby::VERSION,
61
- digest: current_digest,
62
- current_digest: current_digest,
63
- last_build_path: last_build_path,
41
+ success,
42
+ Time.now.strftime('%F %T'),
43
+ ViteRuby::VERSION,
44
+ current_digest,
64
45
  )
65
46
  end
66
47
 
67
- # Internal: Writes the result of the new build to a local file.
68
- def write_to_cache
69
- last_build_path.write to_json
70
- end
71
-
72
48
  # Internal: Returns a JSON string with the metadata of the build.
73
49
  def to_json(*_args)
74
- JSON.pretty_generate(
75
- success: success,
76
- errors: errors,
77
- timestamp: timestamp,
78
- vite_ruby: vite_ruby,
79
- digest: digest,
80
- )
50
+ JSON.pretty_generate(to_h)
81
51
  end
82
52
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "digest/sha1"
3
+ require 'json'
4
+ require 'digest/sha1'
4
5
 
5
6
  # Public: Keeps track of watched files and triggers builds as needed.
6
7
  class ViteRuby::Builder
@@ -11,25 +12,21 @@ class ViteRuby::Builder
11
12
  # Public: Checks if the watched files have changed since the last compilation,
12
13
  # and triggers a Vite build if any files have changed.
13
14
  def build(*args)
14
- last_build = last_build_metadata(ssr: args.include?("--ssr"))
15
-
16
- if args.delete("--force") || last_build.stale? || config.manifest_paths.empty?
17
- stdout, stderr, status = build_with_vite(*args)
18
- log_build_result(stdout, stderr, status)
19
- record_build_metadata(last_build, errors: stderr, success: status.success?)
20
- status.success?
15
+ last_build = last_build_metadata
16
+ if args.delete('--force') || last_build.stale?
17
+ build_with_vite(*args).tap { |success| record_build_metadata(success, last_build) }
21
18
  elsif last_build.success
22
- logger.debug "Skipping vite build. Watched files have not changed since the last build at #{last_build.timestamp}"
19
+ logger.debug "Skipping vite build. Watched files have not changed since the last build at #{ last_build.timestamp }"
23
20
  true
24
21
  else
25
- logger.error "Skipping vite build. Watched files have not changed since the build failed at #{last_build.timestamp} ❌"
22
+ logger.error "Skipping vite build. Watched files have not changed since the build failed at #{ last_build.timestamp } ❌"
26
23
  false
27
24
  end
28
25
  end
29
26
 
30
27
  # Internal: Reads the result of the last compilation from disk.
31
- def last_build_metadata(ssr: false)
32
- ViteRuby::Build.from_previous(last_build_path(ssr: ssr), watched_files_digest)
28
+ def last_build_metadata
29
+ ViteRuby::Build.from_previous(last_build_attrs, watched_files_digest)
33
30
  end
34
31
 
35
32
  private
@@ -38,35 +35,44 @@ private
38
35
 
39
36
  def_delegators :@vite_ruby, :config, :logger, :run
40
37
 
38
+ # Internal: Reads metadata recorded on the last build, if it exists.
39
+ def last_build_attrs
40
+ last_build_path.exist? ? JSON.parse(last_build_path.read.to_s) : {}
41
+ rescue JSON::JSONError, Errno::ENOENT, Errno::ENOTDIR
42
+ {}
43
+ end
44
+
41
45
  # Internal: Writes a digest of the watched files to disk for future checks.
42
- def record_build_metadata(build, **attrs)
46
+ def record_build_metadata(success, build)
43
47
  config.build_cache_dir.mkpath
44
- build.with_result(**attrs).write_to_cache
48
+ last_build_path.write build.with_result(success).to_json
45
49
  end
46
50
 
47
51
  # Internal: The file path where metadata of the last build is stored.
48
- def last_build_path(ssr:)
49
- config.build_cache_dir.join("last#{"-ssr" if ssr}-build-#{config.mode}.json")
52
+ def last_build_path
53
+ config.build_cache_dir.join("last-build-#{ config.mode }.json")
50
54
  end
51
55
 
52
56
  # Internal: Returns a digest of all the watched files, allowing to detect
53
57
  # changes, and skip Vite builds if no files have changed.
54
58
  def watched_files_digest
55
- return @last_digest if @last_digest_at && Time.now - @last_digest_at < 1
56
-
57
- config.within_root do
59
+ Dir.chdir File.expand_path(config.root) do
58
60
  files = Dir[*config.watched_paths].reject { |f| File.directory?(f) }
59
- file_ids = files.sort.map { |f| "#{File.basename(f)}/#{Digest::SHA1.file(f).hexdigest}" }
60
- @last_digest_at = Time.now
61
- @last_digest = Digest::SHA1.hexdigest(file_ids.join("/"))
61
+ file_ids = files.sort.map { |f| "#{ File.basename(f) }/#{ Digest::SHA1.file(f).hexdigest }" }
62
+ Digest::SHA1.hexdigest(file_ids.join('/'))
62
63
  end
63
64
  end
64
65
 
65
66
  # Public: Initiates a Vite build command to generate assets.
67
+ #
68
+ # Returns true if the build is successful, or false if it failed.
66
69
  def build_with_vite(*args)
67
- logger.info "Building with Vite ⚡️"
70
+ logger.info 'Building with Vite ⚡️'
71
+
72
+ stdout, stderr, status = run(['build', *args])
73
+ log_build_result(stdout, stderr.to_s, status)
68
74
 
69
- run(["build", *args])
75
+ status.success?
70
76
  end
71
77
 
72
78
  # Internal: Outputs the build results.
@@ -74,13 +80,12 @@ private
74
80
  # NOTE: By default it also outputs the manifest entries.
75
81
  def log_build_result(_stdout, stderr, status)
76
82
  if status.success?
77
- logger.info "Build with Vite complete: #{config.build_output_dir}"
78
- logger.error stderr unless stderr.empty?
83
+ logger.info "Build with Vite complete: #{ config.build_output_dir }"
84
+ logger.error stderr.to_s unless stderr.empty?
79
85
  else
80
86
  logger.error stderr
81
- logger.error status
82
- logger.error "Build with Vite failed! ❌"
83
- logger.error "❌ Check that vite and vite-plugin-ruby are in devDependencies and have been installed. " if stderr.include?("ERR! canceled")
87
+ logger.error 'Build with Vite failed! ❌'
88
+ logger.error '❌ Check that vite and vite-plugin-ruby are in devDependencies and have been installed. ' if stderr.include?('ERR! canceled')
84
89
  end
85
90
  end
86
91
  end
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ViteRuby::CLI::Build < ViteRuby::CLI::Vite
4
- DEFAULT_ENV = CURRENT_ENV || "production"
4
+ DEFAULT_ENV = CURRENT_ENV || 'production'
5
5
 
6
- desc "Bundle all entrypoints using Vite."
6
+ desc 'Bundle all entrypoints using Vite.'
7
7
  shared_options
8
- option(:ssr, desc: "Build the SSR entrypoint instead", type: :boolean)
9
- option(:force, desc: "Force the build even if assets have not changed", type: :boolean)
10
- option(:watch, desc: "Start the Rollup watcher and rebuild on files changes", type: :boolean)
11
- option(:profile, desc: "Gather performance metrics from the build ", type: :boolean)
8
+ option(:force, desc: 'Force the build even if assets have not changed', type: :boolean)
9
+ option(:watch, desc: 'Start the Rollup watcher and rebuild on files changes', type: :boolean)
12
10
 
13
11
  def call(**options)
14
12
  super { |args| ViteRuby.commands.build_from_task(*args) }
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ViteRuby::CLI::Clobber < Dry::CLI::Command
4
- desc "Clear the Vite cache, temp files, and builds"
4
+ desc 'Clear the Vite cache, temp files, and builds'
5
5
 
6
- current_env = ENV["RACK_ENV"] || ENV["RAILS_ENV"] || "development"
6
+ current_env = ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development'
7
7
 
8
- option(:mode, default: current_env, values: %w[development production test], aliases: ["m"], desc: "The mode to use")
8
+ option(:mode, default: current_env, values: %w[development production test], aliases: ['m'], desc: 'The mode to use')
9
9
 
10
10
  def call(mode:, **)
11
- ViteRuby.env["VITE_RUBY_MODE"] = mode
11
+ ViteRuby.env['VITE_RUBY_MODE'] = mode
12
12
  ViteRuby.commands.clobber
13
13
  end
14
14
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ViteRuby::CLI::Dev < ViteRuby::CLI::Vite
4
- DEFAULT_ENV = CURRENT_ENV || "development"
4
+ DEFAULT_ENV = CURRENT_ENV || 'development'
5
5
 
6
- desc "Start the Vite development server."
6
+ desc 'Start the Vite development server.'
7
7
  shared_options
8
- option(:force, desc: "Force Vite to re-bundle dependencies", type: :boolean)
8
+ option(:force, desc: 'Force Vite to re-bundle dependencies', type: :boolean)
9
9
 
10
10
  def call(**options)
11
11
  super { |args| ViteRuby.run(args, exec: true) }
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "pathname"
4
- require "fileutils"
3
+ require 'pathname'
4
+ require 'fileutils'
5
5
 
6
6
  # NOTE: Extracted from dry-cli version 0.6.0, which later removed this file as
7
7
  # it was refactored and extracted into the more complete (and complex) dry-files.
@@ -36,7 +36,7 @@ module ViteRuby::CLI::FileUtils
36
36
  return if content.join.include?(contents)
37
37
 
38
38
  content << "\n" unless content.last&.end_with?("\n")
39
- content << "#{contents}\n"
39
+ content << "#{ contents }\n"
40
40
 
41
41
  write(path, content)
42
42
  end
@@ -47,7 +47,7 @@ module ViteRuby::CLI::FileUtils
47
47
  # @api private
48
48
  def replace_first_line(path, target, replacement)
49
49
  content = read_lines(path)
50
- content[index(content, path, target)] = "#{replacement}\n"
50
+ content[index(content, path, target)] = "#{ replacement }\n"
51
51
 
52
52
  write(path, content)
53
53
  end
@@ -95,14 +95,14 @@ module ViteRuby::CLI::FileUtils
95
95
  # @api private
96
96
  def index(content, path, target)
97
97
  content.index { |line| line.include?(target) } ||
98
- raise(ArgumentError, "Cannot find `#{target}' inside `#{path}'.")
98
+ raise(ArgumentError, "Cannot find `#{ target }' inside `#{ path }'.")
99
99
  end
100
100
 
101
101
  # @since 1.2.11
102
102
  # @api private
103
103
  def rindex(content, path, target)
104
104
  content.rindex { |line| line.include?(target) } ||
105
- raise(ArgumentError, "Cannot find `#{target}' inside `#{path}'.")
105
+ raise(ArgumentError, "Cannot find `#{ target }' inside `#{ path }'.")
106
106
  end
107
107
 
108
108
  # @since 1.2.11
@@ -113,7 +113,7 @@ module ViteRuby::CLI::FileUtils
113
113
 
114
114
  i = finder.call(content, path, target)
115
115
 
116
- content.insert(i, "#{contents}\n")
116
+ content.insert(i, "#{ contents }\n")
117
117
  write(path, content)
118
118
  end
119
119
 
@@ -125,7 +125,7 @@ module ViteRuby::CLI::FileUtils
125
125
 
126
126
  i = finder.call(content, path, target)
127
127
 
128
- content.insert(i + 1, "#{contents}\n")
128
+ content.insert(i + 1, "#{ contents }\n")
129
129
  write(path, content)
130
130
  end
131
131
  end
@@ -1,31 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "stringio"
4
- require "json"
3
+ require 'stringio'
5
4
 
6
5
  class ViteRuby::CLI::Install < Dry::CLI::Command
7
- desc "Performs the initial configuration setup to get started with Vite Ruby."
8
-
9
- option(:package_manager, values: %w[npm pnpm yarn bun], aliases: %w[package-manager with], desc: "The package manager to use when installing JS dependencies.")
10
-
11
- def call(package_manager: nil, **)
12
- ENV["VITE_RUBY_PACKAGE_MANAGER"] ||= package_manager if package_manager
6
+ desc 'Performs the initial configuration setup to get started with Vite Ruby.'
13
7
 
8
+ def call(**)
14
9
  $stdout.sync = true
15
10
 
16
- say "Creating binstub"
11
+ say 'Creating binstub'
17
12
  ViteRuby.commands.install_binstubs
18
13
 
19
- say "Creating configuration files"
14
+ say 'Creating configuration files'
20
15
  create_configuration_files
21
16
 
22
- say "Installing sample files"
17
+ say 'Installing sample files'
23
18
  install_sample_files
24
19
 
25
- say "Installing js dependencies"
20
+ say 'Installing js dependencies'
26
21
  install_js_dependencies
27
22
 
28
- say "Adding files to .gitignore"
23
+ say 'Adding files to .gitignore'
29
24
  install_gitignore
30
25
 
31
26
  say "\nVite ⚡️ Ruby successfully installed! 🎉"
@@ -36,30 +31,30 @@ protected
36
31
  # Internal: The JS packages that should be added to the app.
37
32
  def js_dependencies
38
33
  [
39
- "vite@#{ViteRuby::DEFAULT_VITE_VERSION}",
40
- "vite-plugin-ruby@#{ViteRuby::DEFAULT_PLUGIN_VERSION}",
34
+ "vite@#{ ViteRuby::DEFAULT_VITE_VERSION }",
35
+ "vite-plugin-ruby@#{ ViteRuby::DEFAULT_PLUGIN_VERSION }",
41
36
  ]
42
37
  end
43
38
 
44
39
  # Internal: Setup for a plain Rack application.
45
40
  def setup_app_files
46
- copy_template "config/vite.json", to: config.config_path
41
+ copy_template 'config/vite.json', to: config.config_path
47
42
 
48
- if (rackup_file = root.join("config.ru")).exist?
49
- inject_line_after_last rackup_file, "require", "use(ViteRuby::DevServerProxy, ssl_verify_none: true) if ViteRuby.run_proxy?"
43
+ if (rackup_file = root.join('config.ru')).exist?
44
+ inject_line_after_last rackup_file, 'require', 'use(ViteRuby::DevServerProxy, ssl_verify_none: true) if ViteRuby.run_proxy?'
50
45
  end
51
46
  end
52
47
 
53
48
  # Internal: Create a sample JS file and attempt to inject it in an HTML template.
54
49
  def install_sample_files
55
- copy_template "entrypoints/application.js", to: config.resolved_entrypoints_dir.join("application.js")
50
+ copy_template 'entrypoints/application.js', to: config.resolved_entrypoints_dir.join('application.js')
56
51
  end
57
52
 
58
53
  private
59
54
 
60
55
  extend Forwardable
61
56
 
62
- def_delegators "ViteRuby", :config
57
+ def_delegators 'ViteRuby', :config
63
58
 
64
59
  %i[append cp inject_line_after inject_line_after_last inject_line_before replace_first_line write].each do |util|
65
60
  define_method(util) { |*args|
@@ -67,7 +62,7 @@ private
67
62
  }
68
63
  end
69
64
 
70
- TEMPLATES_PATH = Pathname.new(File.expand_path("../../../templates", __dir__))
65
+ TEMPLATES_PATH = Pathname.new(File.expand_path('../../../templates', __dir__))
71
66
 
72
67
  def copy_template(path, to:)
73
68
  cp TEMPLATES_PATH.join(path), to
@@ -75,39 +70,30 @@ private
75
70
 
76
71
  # Internal: Creates the Vite and vite-plugin-ruby configuration files.
77
72
  def create_configuration_files
78
- copy_template "config/vite.config.ts", to: root.join("vite.config.ts")
79
- append root.join("Procfile.dev"), "vite: bin/vite dev"
73
+ copy_template 'config/vite.config.ts', to: root.join('vite.config.ts')
74
+ append root.join('Procfile.dev'), 'vite: bin/vite dev'
80
75
  setup_app_files
81
76
  ViteRuby.reload_with(config_path: config.config_path)
82
77
  end
83
78
 
84
79
  # Internal: Installs vite and vite-plugin-ruby at the project level.
85
80
  def install_js_dependencies
86
- package_json = root.join("package.json")
87
- unless package_json.exist?
88
- write package_json, <<~JSON
89
- {
90
- "private": true,
91
- "type": "module"
92
- }
93
- JSON
94
- end
95
-
96
- if (JSON.parse(package_json.read)["type"] != "module" rescue nil)
97
- FileUtils.mv root.join("vite.config.ts"), root.join("vite.config.mts"), force: true, verbose: true
98
- end
99
-
100
- install_js_packages js_dependencies.join(" ")
81
+ package_json = root.join('package.json')
82
+ write(package_json, '{}') unless package_json.exist?
83
+ deps = js_dependencies.join(' ')
84
+ run_with_capture("#{ npm_install } -D #{ deps }", stdin_data: "\n")
101
85
  end
102
86
 
103
87
  # Internal: Adds compilation output dirs to git ignore.
104
88
  def install_gitignore
105
- return unless (gitignore_file = root.join(".gitignore")).exist?
89
+ return unless (gitignore_file = root.join('.gitignore')).exist?
106
90
 
107
91
  append(gitignore_file, <<~GITIGNORE)
108
92
 
109
93
  # Vite Ruby
110
- /public/vite*
94
+ /public/vite
95
+ /public/vite-dev
96
+ /public/vite-test
111
97
  node_modules
112
98
  # Vite uses dotenv and suggests to ignore local-only env files. See
113
99
  # https://vitejs.dev/guide/env-and-mode.html#env-files
@@ -127,12 +113,16 @@ private
127
113
  def run_with_capture(*args, **options)
128
114
  Dir.chdir(root) do
129
115
  _, stderr, status = ViteRuby::IO.capture(*args, **options)
130
- say(stderr) unless status.success? || stderr.empty?
116
+ say(stderr) unless status.success? || stderr.to_s.empty?
131
117
  end
132
118
  end
133
119
 
134
- def install_js_packages(deps)
135
- run_with_capture("#{config.package_manager} add -D #{deps}", stdin_data: "\n")
120
+ # Internal: Support all popular package managers.
121
+ def npm_install
122
+ return 'yarn add' if root.join('yarn.lock').exist?
123
+ return 'pnpm install' if root.join('pnpm-lock.yaml').exist?
124
+
125
+ 'npm install'
136
126
  end
137
127
 
138
128
  # Internal: Avoid printing warning about missing vite.json, we will create one.
@@ -144,3 +134,8 @@ private
144
134
  $stderr = old_stderr
145
135
  end
146
136
  end
137
+
138
+ # NOTE: This allows framework-specific variants to extend the installation.
139
+ ViteRuby.framework_libraries.each do |_framework, library|
140
+ require "#{ library.name.tr('-', '/') }/installation"
141
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ViteRuby::CLI::Upgrade < ViteRuby::CLI::Install
4
- desc "Updates Vite Ruby related gems and npm packages."
4
+ desc 'Updates Vite Ruby related gems and npm packages.'
5
5
 
6
6
  def call(**)
7
7
  upgrade_ruby_gems
@@ -11,15 +11,15 @@ class ViteRuby::CLI::Upgrade < ViteRuby::CLI::Install
11
11
  protected
12
12
 
13
13
  def upgrade_ruby_gems
14
- say "Updating gems"
14
+ say 'Updating gems'
15
15
 
16
16
  libraries = ViteRuby.framework_libraries.map { |_f, library| library.name }
17
17
 
18
- run_with_capture("bundle update #{libraries.join(" ")}")
18
+ run_with_capture("bundle update #{ libraries.join(' ') }")
19
19
  end
20
20
 
21
21
  # NOTE: Spawn a new process so that it uses the updated vite_ruby.
22
22
  def upgrade_npm_packages
23
- Kernel.exec("bundle exec vite upgrade_packages")
23
+ Kernel.exec('bundle exec vite upgrade_packages')
24
24
  end
25
25
  end
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ViteRuby::CLI::UpgradePackages < ViteRuby::CLI::Install
4
- desc "Upgrades the npm packages to the recommended versions."
4
+ desc 'Upgrades the npm packages to the recommended versions.'
5
5
 
6
6
  def call(**)
7
- say "Upgrading npm packages"
8
- install_js_packages js_dependencies.join(" ")
7
+ say 'Upgrading npm packages'
8
+ deps = js_dependencies.join(' ')
9
+ run_with_capture("#{ npm_install } -D #{ deps }")
9
10
  end
10
11
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ViteRuby::CLI::Version < Dry::CLI::Command
4
- desc "Print version"
4
+ desc 'Print version'
5
5
 
6
6
  def call(**)
7
7
  ViteRuby.commands.print_info
@@ -1,35 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ViteRuby::CLI::Vite < Dry::CLI::Command
4
- CURRENT_ENV = ENV["RACK_ENV"] || ENV["RAILS_ENV"]
5
-
6
- def self.executable_options
7
- option(:mode, default: self::DEFAULT_ENV, values: %w[development production test], aliases: ["m"], desc: "The build mode for Vite")
8
- option(:node_options, desc: "Node options for the Vite executable", aliases: ["node-options"])
9
- option(:inspect, desc: "Run Vite in a debugging session with node --inspect-brk", aliases: ["inspect-brk"], type: :boolean)
10
- option(:trace_deprecation, desc: "Run Vite in debugging mode with node --trace-deprecation", aliases: ["trace-deprecation"], type: :boolean)
11
- end
4
+ CURRENT_ENV = ENV['RACK_ENV'] || ENV['RAILS_ENV']
12
5
 
13
6
  def self.shared_options
14
- executable_options
15
- option(:debug, desc: "Run Vite in verbose mode, printing all debugging output", aliases: ["verbose"], type: :boolean)
16
- option(:clobber, desc: "Clear cache and previous builds", type: :boolean, aliases: %w[clean clear])
7
+ option(:mode, default: self::DEFAULT_ENV, values: %w[development production test], aliases: ['m'], desc: 'The build mode for Vite')
8
+ option(:clobber, desc: 'Clear cache and previous builds', type: :boolean, aliases: %w[clean clear])
9
+ option(:debug, desc: 'Run Vite in verbose mode, printing all debugging output', aliases: ['verbose'], type: :boolean)
10
+ option(:inspect, desc: 'Run Vite in a debugging session with node --inspect-brk', aliases: ['inspect-brk'], type: :boolean)
11
+ option(:trace_deprecation, desc: 'Run Vite in debugging mode with node --trace-deprecation', aliases: ['trace-deprecation'], type: :boolean)
17
12
  end
18
13
 
19
- def call(mode:, args: [], clobber: false, node_options: nil, inspect: nil, trace_deprecation: nil, **boolean_opts)
20
- ViteRuby.env["VITE_RUBY_MODE"] = mode
14
+ def call(mode:, args: [], clobber: false, **boolean_opts)
15
+ ViteRuby.env['VITE_RUBY_MODE'] = mode
21
16
  ViteRuby.commands.clobber if clobber
22
-
23
- node_options = [
24
- node_options,
25
- ("--inspect-brk" if inspect),
26
- ("--trace-deprecation" if trace_deprecation),
27
- ].compact.join(" ")
28
-
29
- args << %(--node-options="#{node_options}") unless node_options.empty?
30
-
31
- boolean_opts.map { |name, value| args << "--#{name}" if value }
32
-
17
+ boolean_opts.map { |name, value| args << "--#{ name }" if value }
33
18
  yield(args)
34
19
  end
35
20
  end
data/lib/vite_ruby/cli.rb CHANGED
@@ -1,30 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/cli"
3
+ require 'dry/cli'
4
4
 
5
5
  # Public: Command line interface that allows to install the library, and run
6
6
  # simple commands.
7
7
  class ViteRuby::CLI
8
8
  extend Dry::CLI::Registry
9
9
 
10
- register "build", Build, aliases: ["b"]
11
- register "clobber", Clobber, aliases: %w[clean clear]
12
- register "dev", Dev, aliases: %w[d serve]
13
- register "install", Install
14
- register "ssr", SSR
15
- register "version", Version, aliases: ["v", "-v", "--version", "info"]
16
- register "upgrade", Upgrade, aliases: ["update"]
17
- register "upgrade_packages", UpgradePackages, aliases: ["update_packages"]
18
-
19
- # Internal: Allows framework-specific variants to extend the CLI.
20
- def self.require_framework_libraries(path = "cli")
21
- ViteRuby.framework_libraries.each do |_framework, library|
22
- require [library.name.tr("-", "/").to_s, path].compact.join("/")
23
- end
24
- rescue LoadError
25
- require_framework_libraries "installation" unless path == "installation"
26
- end
10
+ register 'build', Build, aliases: ['b']
11
+ register 'clobber', Clobber, aliases: %w[clean clear]
12
+ register 'dev', Dev, aliases: %w[d serve]
13
+ register 'install', Install
14
+ register 'version', Version, aliases: ['v', '-v', '--version', 'info']
15
+ register 'upgrade', Upgrade, aliases: ['update']
16
+ register 'upgrade_packages', UpgradePackages, aliases: ['update_packages']
27
17
  end
28
-
29
- # NOTE: This allows framework-specific variants to extend the CLI.
30
- ViteRuby::CLI.require_framework_libraries("cli")