vite_ruby 3.6.2 → 3.8.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/default.vite.json +2 -1
- data/lib/tasks/vite.rake +7 -17
- data/lib/vite_ruby/cli/install.rb +8 -9
- data/lib/vite_ruby/cli/upgrade_packages.rb +1 -2
- data/lib/vite_ruby/cli/vite.rb +12 -1
- data/lib/vite_ruby/commands.rb +4 -61
- data/lib/vite_ruby/config.rb +15 -4
- data/lib/vite_ruby/manifest.rb +1 -3
- data/lib/vite_ruby/missing_entrypoint_error.rb +3 -4
- data/lib/vite_ruby/runner.rb +14 -12
- data/lib/vite_ruby/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c3311945fbd58ebcc238980b0a10715e2a17603ecefd02f4d4aebea7cec7f24
|
4
|
+
data.tar.gz: e2f3336bc55528d31633cc679d70a28370d9eb88f914a940f46b80bd8d99c6db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8ab449ee34c34192ea1cca6c8cdc013b6d1d241371e8f2e92578e8cb040aca9f7cb7b2e1209094efc74d18f7bc2387afd960242230604a0a9210e8e37b5445e
|
7
|
+
data.tar.gz: 4ca76ee1e0288ce280e589668a3104e16c4e15a7efb0579301e5164465c18770ae93f68da9b9c3d6566a8b7a683ecffcd71f677241293d9052ef223209b97688
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
# [3.8.0](https://github.com/ElMassimo/vite_ruby/compare/vite_ruby@3.7.0...vite_ruby@3.8.0) (2024-08-12)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* remove `vite:clean` rake task as it can potentially break apps ([824b4ef](https://github.com/ElMassimo/vite_ruby/commit/824b4ef8397828423d2ddda117bf27e365954961)), closes [#438](https://github.com/ElMassimo/vite_ruby/issues/438) [#490](https://github.com/ElMassimo/vite_ruby/issues/490) [#404](https://github.com/ElMassimo/vite_ruby/issues/404)
|
7
|
+
|
8
|
+
|
9
|
+
### Features
|
10
|
+
|
11
|
+
* remove `ostruct` dependency (closes [#489](https://github.com/ElMassimo/vite_ruby/issues/489)) ([1dfec47](https://github.com/ElMassimo/vite_ruby/commit/1dfec4759bf2c107433c5f1618d97439f6d5bd01))
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
# [3.7.0](https://github.com/ElMassimo/vite_ruby/compare/vite_ruby@3.6.2...vite_ruby@3.7.0) (2024-07-17)
|
16
|
+
|
17
|
+
|
18
|
+
### Features
|
19
|
+
|
20
|
+
* add `package_manager` config option, experimental support for bun ([#481](https://github.com/ElMassimo/vite_ruby/issues/481)) ([4426cb1](https://github.com/ElMassimo/vite_ruby/commit/4426cb1007dbb58f4637a4423b1e7d640db96841)), closes [#324](https://github.com/ElMassimo/vite_ruby/issues/324)
|
21
|
+
* change default execution to use `npx vite` instead ([#480](https://github.com/ElMassimo/vite_ruby/issues/480)) ([330f61f](https://github.com/ElMassimo/vite_ruby/commit/330f61fedadf1274547a069856125e52002d0065)), closes [#462](https://github.com/ElMassimo/vite_ruby/issues/462)
|
22
|
+
|
23
|
+
|
24
|
+
|
1
25
|
## [3.6.2](https://github.com/ElMassimo/vite_ruby/compare/vite_ruby@3.6.1...vite_ruby@3.6.2) (2024-07-16)
|
2
26
|
|
3
27
|
|
data/default.vite.json
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
"publicOutputDir": "vite",
|
8
8
|
"configPath": "config/vite.json",
|
9
9
|
"devServerConnectTimeout": 0.01,
|
10
|
+
"packageManager": null,
|
10
11
|
"publicDir": "public",
|
11
12
|
"entrypointsDir": "entrypoints",
|
12
13
|
"sourceCodeDir": "app/frontend",
|
@@ -16,7 +17,7 @@
|
|
16
17
|
"https": null,
|
17
18
|
"port": 3036,
|
18
19
|
"hideBuildConsoleOutput": false,
|
19
|
-
"viteBinPath":
|
20
|
+
"viteBinPath": null,
|
20
21
|
"watchAdditionalPaths": [],
|
21
22
|
"base": "",
|
22
23
|
"ssrBuildEnabled": false,
|
data/lib/tasks/vite.rake
CHANGED
@@ -25,11 +25,6 @@ namespace :vite do
|
|
25
25
|
ViteRuby.commands.build_from_task('--ssr') if ViteRuby.config.ssr_build_enabled
|
26
26
|
end
|
27
27
|
|
28
|
-
desc 'Remove old bundles created by ViteRuby'
|
29
|
-
task :clean, [:keep, :age] => :'vite:verify_install' do |_, args|
|
30
|
-
ViteRuby.commands.clean_from_task(args)
|
31
|
-
end
|
32
|
-
|
33
28
|
desc 'Remove the build output directory for ViteRuby'
|
34
29
|
task clobber: :'vite:verify_install' do
|
35
30
|
ViteRuby.commands.clobber
|
@@ -43,10 +38,13 @@ namespace :vite do
|
|
43
38
|
desc 'Ensure build dependencies like Vite are installed before bundling'
|
44
39
|
task :install_dependencies do
|
45
40
|
install_env_args = ENV['VITE_RUBY_SKIP_INSTALL_DEV_DEPENDENCIES'] == 'true' ? {} : { 'NODE_ENV' => 'development' }
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
41
|
+
|
42
|
+
install_cmd = case (pkg = ViteRuby.config.package_manager)
|
43
|
+
when 'npm' then 'npm ci'
|
44
|
+
else "#{ pkg } install --frozen-lockfile"
|
45
|
+
end
|
46
|
+
|
47
|
+
system(install_env_args, install_cmd)
|
50
48
|
end
|
51
49
|
|
52
50
|
desc "Provide information on ViteRuby's environment"
|
@@ -73,14 +71,6 @@ unless ENV['VITE_RUBY_SKIP_ASSETS_PRECOMPILE_EXTENSION'] == 'true'
|
|
73
71
|
end
|
74
72
|
end
|
75
73
|
|
76
|
-
unless Rake::Task.task_defined?('assets:clean')
|
77
|
-
desc 'Remove old compiled assets'
|
78
|
-
Rake::Task.define_task('assets:clean', [:keep, :age])
|
79
|
-
end
|
80
|
-
Rake::Task['assets:clean'].enhance do |_, args|
|
81
|
-
Rake::Task['vite:clean'].invoke(*args.to_h.values)
|
82
|
-
end
|
83
|
-
|
84
74
|
if Rake::Task.task_defined?('assets:clobber')
|
85
75
|
Rake::Task['assets:clobber'].enhance do
|
86
76
|
Rake::Task['vite:clobber'].invoke
|
@@ -6,7 +6,11 @@ require 'json'
|
|
6
6
|
class ViteRuby::CLI::Install < Dry::CLI::Command
|
7
7
|
desc 'Performs the initial configuration setup to get started with Vite Ruby.'
|
8
8
|
|
9
|
-
|
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
|
13
|
+
|
10
14
|
$stdout.sync = true
|
11
15
|
|
12
16
|
say 'Creating binstub'
|
@@ -93,8 +97,7 @@ private
|
|
93
97
|
FileUtils.mv root.join('vite.config.ts'), root.join('vite.config.mts'), force: true, verbose: true
|
94
98
|
end
|
95
99
|
|
96
|
-
|
97
|
-
run_with_capture("#{ npm_install } -D #{ deps }", stdin_data: "\n")
|
100
|
+
install_js_packages js_dependencies.join(' ')
|
98
101
|
end
|
99
102
|
|
100
103
|
# Internal: Adds compilation output dirs to git ignore.
|
@@ -128,12 +131,8 @@ private
|
|
128
131
|
end
|
129
132
|
end
|
130
133
|
|
131
|
-
|
132
|
-
|
133
|
-
return 'yarn add' if root.join('yarn.lock').exist?
|
134
|
-
return 'pnpm install' if root.join('pnpm-lock.yaml').exist?
|
135
|
-
|
136
|
-
'npm install'
|
134
|
+
def install_js_packages(deps)
|
135
|
+
run_with_capture("#{ config.package_manager } add -D #{ deps }", stdin_data: "\n")
|
137
136
|
end
|
138
137
|
|
139
138
|
# Internal: Avoid printing warning about missing vite.json, we will create one.
|
data/lib/vite_ruby/cli/vite.rb
CHANGED
@@ -5,6 +5,7 @@ class ViteRuby::CLI::Vite < Dry::CLI::Command
|
|
5
5
|
|
6
6
|
def self.executable_options
|
7
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'])
|
8
9
|
option(:inspect, desc: 'Run Vite in a debugging session with node --inspect-brk', aliases: ['inspect-brk'], type: :boolean)
|
9
10
|
option(:trace_deprecation, desc: 'Run Vite in debugging mode with node --trace-deprecation', aliases: ['trace-deprecation'], type: :boolean)
|
10
11
|
end
|
@@ -15,10 +16,20 @@ class ViteRuby::CLI::Vite < Dry::CLI::Command
|
|
15
16
|
option(:clobber, desc: 'Clear cache and previous builds', type: :boolean, aliases: %w[clean clear])
|
16
17
|
end
|
17
18
|
|
18
|
-
def call(mode:, args: [], clobber: false, **boolean_opts)
|
19
|
+
def call(mode:, args: [], clobber: false, node_options: nil, inspect: nil, trace_deprecation: nil, **boolean_opts)
|
19
20
|
ViteRuby.env['VITE_RUBY_MODE'] = mode
|
20
21
|
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
|
+
|
21
31
|
boolean_opts.map { |name, value| args << "--#{ name }" if value }
|
32
|
+
|
22
33
|
yield(args)
|
23
34
|
end
|
24
35
|
end
|
data/lib/vite_ruby/commands.rb
CHANGED
@@ -28,38 +28,6 @@ class ViteRuby::Commands
|
|
28
28
|
$stdout.puts "Removed vite cache and output dirs:\n\t#{ dirs.join("\n\t") }"
|
29
29
|
end
|
30
30
|
|
31
|
-
# Public: Receives arguments from a rake task.
|
32
|
-
def clean_from_task(args)
|
33
|
-
ensure_log_goes_to_stdout {
|
34
|
-
clean(keep_up_to: Integer(args.keep || 2), age_in_seconds: Integer(args.age || 3600))
|
35
|
-
}
|
36
|
-
end
|
37
|
-
|
38
|
-
# Public: Cleanup old assets in the output directory.
|
39
|
-
#
|
40
|
-
# keep_up_to - Max amount of backups to preserve.
|
41
|
-
# age_in_seconds - Amount of time to look back in order to preserve them.
|
42
|
-
#
|
43
|
-
# NOTE: By default keeps the last version, or 2 if created in the past hour.
|
44
|
-
#
|
45
|
-
# Examples:
|
46
|
-
# To force only 1 backup to be kept: clean(1, 0)
|
47
|
-
# To only keep files created within the last 10 minutes: clean(0, 600)
|
48
|
-
def clean(keep_up_to: 2, age_in_seconds: 3600)
|
49
|
-
return false unless may_clean?
|
50
|
-
|
51
|
-
versions
|
52
|
-
.each_with_index
|
53
|
-
.drop_while { |(mtime, _files), index|
|
54
|
-
max_age = [0, Time.now - Time.at(mtime)].max
|
55
|
-
max_age < age_in_seconds || index < keep_up_to
|
56
|
-
}
|
57
|
-
.each do |(_, files), _|
|
58
|
-
clean_files(files)
|
59
|
-
end
|
60
|
-
true
|
61
|
-
end
|
62
|
-
|
63
31
|
# Internal: Installs the binstub for the CLI in the appropriate path.
|
64
32
|
def install_binstubs
|
65
33
|
`bundle binstub vite_ruby --path #{ config.root.join('bin') }`
|
@@ -109,11 +77,11 @@ class ViteRuby::Commands
|
|
109
77
|
$stdout.puts "#{ framework }: #{ Gem.loaded_specs[framework]&.version }"
|
110
78
|
end
|
111
79
|
|
112
|
-
$stdout.puts "node: #{ `node --version` }"
|
113
|
-
$stdout.puts "npm: #{ `npm --version` }"
|
114
|
-
$stdout.puts "yarn: #{ `yarn --version` rescue nil }"
|
115
|
-
$stdout.puts "pnpm: #{ `pnpm --version` rescue nil }"
|
116
80
|
$stdout.puts "ruby: #{ `ruby --version` }"
|
81
|
+
$stdout.puts "node: #{ `node --version` }"
|
82
|
+
|
83
|
+
pkg = config.package_manager
|
84
|
+
$stdout.puts "#{ pkg }: #{ `#{ pkg } --version` rescue nil }"
|
117
85
|
|
118
86
|
$stdout.puts "\n"
|
119
87
|
packages = `npm ls vite vite-plugin-ruby`
|
@@ -130,31 +98,6 @@ private
|
|
130
98
|
|
131
99
|
def_delegators :@vite_ruby, :config, :builder, :manifest, :logger, :logger=
|
132
100
|
|
133
|
-
def may_clean?
|
134
|
-
config.build_output_dir.exist? && config.manifest_paths.any?
|
135
|
-
end
|
136
|
-
|
137
|
-
def clean_files(files)
|
138
|
-
files.select { |file| File.file?(file) }.each do |file|
|
139
|
-
File.delete(file)
|
140
|
-
logger.info("Removed #{ file }")
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
def versions
|
145
|
-
all_files = Dir.glob("#{ config.build_output_dir }/**/*")
|
146
|
-
entries = all_files - config.manifest_paths - files_referenced_in_manifests
|
147
|
-
entries.reject { |file| File.directory?(file) }
|
148
|
-
.group_by { |file| File.mtime(file).utc.to_i }
|
149
|
-
.sort.reverse
|
150
|
-
end
|
151
|
-
|
152
|
-
def files_referenced_in_manifests
|
153
|
-
config.manifest_paths.flat_map { |path|
|
154
|
-
JSON.parse(path.read).map { |_, entry| entry['file'] }
|
155
|
-
}.compact.uniq.map { |path| config.build_output_dir.join(path).to_s }
|
156
|
-
end
|
157
|
-
|
158
101
|
def with_node_env(env)
|
159
102
|
original = ENV['NODE_ENV']
|
160
103
|
ENV['NODE_ENV'] = env
|
data/lib/vite_ruby/config.rb
CHANGED
@@ -96,10 +96,11 @@ private
|
|
96
96
|
def coerce_values(config)
|
97
97
|
config['mode'] = config['mode'].to_s
|
98
98
|
config['port'] = config['port'].to_i
|
99
|
-
config['root'] = Pathname.new(config['root'])
|
100
|
-
config['build_cache_dir'] =
|
101
|
-
config['ssr_output_dir'] =
|
99
|
+
config['root'] = root = Pathname.new(config['root'])
|
100
|
+
config['build_cache_dir'] = root.join(config['build_cache_dir'])
|
101
|
+
config['ssr_output_dir'] = root.join(config['ssr_output_dir'])
|
102
102
|
coerce_booleans(config, 'auto_build', 'hide_build_console_output', 'https', 'skip_compatibility_check', 'skip_proxy')
|
103
|
+
config['package_manager'] ||= detect_package_manager(root)
|
103
104
|
end
|
104
105
|
|
105
106
|
# Internal: Coerces configuration options to boolean.
|
@@ -107,6 +108,15 @@ private
|
|
107
108
|
names.each { |name| config[name] = [true, 'true'].include?(config[name]) }
|
108
109
|
end
|
109
110
|
|
111
|
+
def detect_package_manager(root)
|
112
|
+
return 'npm' if root.join('package-lock.json').exist?
|
113
|
+
return 'pnpm' if root.join('pnpm-lock.yaml').exist?
|
114
|
+
return 'bun' if root.join('bun.lockb').exist?
|
115
|
+
return 'yarn' if root.join('yarn.lock').exist?
|
116
|
+
|
117
|
+
'npm'
|
118
|
+
end
|
119
|
+
|
110
120
|
def initialize(attrs)
|
111
121
|
@config = attrs.tap { |config| coerce_values(config) }.freeze
|
112
122
|
ViteRuby::CompatibilityCheck.verify_plugin_version(root) unless skip_compatibility_check
|
@@ -189,6 +199,7 @@ private
|
|
189
199
|
|
190
200
|
# Internal: If any of these files is modified the build won't be skipped.
|
191
201
|
DEFAULT_WATCHED_PATHS = %w[
|
202
|
+
bun.lockb
|
192
203
|
package-lock.json
|
193
204
|
package.json
|
194
205
|
pnpm-lock.yaml
|
@@ -196,8 +207,8 @@ private
|
|
196
207
|
tailwind.config.js
|
197
208
|
vite.config.js
|
198
209
|
vite.config.mjs
|
199
|
-
vite.config.ts
|
200
210
|
vite.config.mts
|
211
|
+
vite.config.ts
|
201
212
|
windi.config.ts
|
202
213
|
yarn.lock
|
203
214
|
].freeze
|
data/lib/vite_ruby/manifest.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'ostruct'
|
4
|
-
|
5
3
|
# Public: Registry for accessing resources managed by Vite, using a generated
|
6
4
|
# manifest file which maps entrypoint names to file paths.
|
7
5
|
#
|
@@ -214,7 +212,7 @@ private
|
|
214
212
|
|
215
213
|
# Internal: Raises a detailed message when an entry is missing in the manifest.
|
216
214
|
def missing_entry_error(name, **options)
|
217
|
-
raise ViteRuby::MissingEntrypointError
|
215
|
+
raise ViteRuby::MissingEntrypointError.new(
|
218
216
|
file_name: resolve_entry_name(name, **options),
|
219
217
|
last_build: builder.last_build_metadata,
|
220
218
|
manifest: @manifest,
|
@@ -5,11 +5,10 @@
|
|
5
5
|
# NOTE: The complexity here is justified by the improved usability of providing
|
6
6
|
# a more specific error message depending on the situation.
|
7
7
|
class ViteRuby::MissingEntrypointError < ViteRuby::Error
|
8
|
-
|
9
|
-
def_delegators :@info, :file_name, :last_build, :manifest, :config
|
8
|
+
attr_reader :file_name, :last_build, :manifest, :config
|
10
9
|
|
11
|
-
def initialize(
|
12
|
-
@
|
10
|
+
def initialize(file_name:, last_build:, manifest:, config:)
|
11
|
+
@file_name, @last_build, @manifest, @config = file_name, last_build, manifest, config
|
13
12
|
super <<~MSG
|
14
13
|
Vite Ruby can't find #{ file_name } in the manifests.
|
15
14
|
|
data/lib/vite_ruby/runner.rb
CHANGED
@@ -28,24 +28,26 @@ private
|
|
28
28
|
# Internal: Returns an Array with the command to run.
|
29
29
|
def command_for(args)
|
30
30
|
[config.to_env(env)].tap do |cmd|
|
31
|
-
|
32
|
-
cmd.push(
|
33
|
-
cmd.push(
|
34
|
-
cmd.push(*vite_executable)
|
35
|
-
cmd.push(*args)
|
31
|
+
exec_args, vite_args = args.partition { |arg| arg.start_with?('--node-options') }
|
32
|
+
cmd.push(*vite_executable(*exec_args))
|
33
|
+
cmd.push(*vite_args)
|
36
34
|
cmd.push('--mode', config.mode) unless args.include?('--mode') || args.include?('-m')
|
37
35
|
end
|
38
36
|
end
|
39
37
|
|
40
38
|
# Internal: Resolves to an executable for Vite.
|
41
|
-
def vite_executable
|
39
|
+
def vite_executable(*exec_args)
|
42
40
|
bin_path = config.vite_bin_path
|
43
|
-
return [bin_path] if File.exist?(bin_path)
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
41
|
+
return [bin_path] if bin_path && File.exist?(bin_path)
|
42
|
+
|
43
|
+
x = case config.package_manager
|
44
|
+
when 'npm' then %w[npx]
|
45
|
+
when 'pnpm' then %w[pnpm exec]
|
46
|
+
when 'bun' then %w[bun x]
|
47
|
+
when 'yarn' then %w[yarn]
|
48
|
+
else raise ArgumentError, "Unknown package manager #{ config.package_manager.inspect }"
|
49
49
|
end
|
50
|
+
|
51
|
+
[*x, *exec_args, 'vite']
|
50
52
|
end
|
51
53
|
end
|
data/lib/vite_ruby/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vite_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Máximo Mussini
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-cli
|
@@ -208,8 +208,8 @@ homepage: https://github.com/ElMassimo/vite_ruby
|
|
208
208
|
licenses:
|
209
209
|
- MIT
|
210
210
|
metadata:
|
211
|
-
source_code_uri: https://github.com/ElMassimo/vite_ruby/tree/vite_ruby@3.
|
212
|
-
changelog_uri: https://github.com/ElMassimo/vite_ruby/blob/vite_ruby@3.
|
211
|
+
source_code_uri: https://github.com/ElMassimo/vite_ruby/tree/vite_ruby@3.8.0/vite_ruby
|
212
|
+
changelog_uri: https://github.com/ElMassimo/vite_ruby/blob/vite_ruby@3.8.0/vite_ruby/CHANGELOG.md
|
213
213
|
post_install_message: "Thanks for installing Vite Ruby!\n\nIf you upgraded the gem
|
214
214
|
manually, please run:\n\tbundle exec vite upgrade"
|
215
215
|
rdoc_options: []
|