vite_rails 1.0.9 → 1.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +4 -4
- data/lib/vite_rails/builder.rb +1 -10
- data/lib/vite_rails/commands.rb +1 -0
- data/lib/vite_rails/config.rb +49 -26
- data/lib/vite_rails/dev_server_proxy.rb +0 -1
- data/lib/vite_rails/helper.rb +4 -4
- data/lib/vite_rails/manifest.rb +2 -1
- data/lib/vite_rails/runner.rb +1 -1
- data/lib/vite_rails/version.rb +1 -1
- data/package.json +1 -1
- data/package/default.vite.json +1 -0
- data/test/builder_test.rb +1 -1
- data/test/{configuration_test.rb → config_test.rb} +17 -6
- data/test/helper_test.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de1ef14e664eb5f06527b1126e5508598d50289c855edbf27d6e373f6ba805e1
|
4
|
+
data.tar.gz: 6754500ef38d0dcaba0e7d89de42da5b6f51fff79e215d9a4b02f116a332e13d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3207af12e9a3304b12da3f549c4ae1fe2610bb9a5511f164040b8a7e82e2324b472ebbc90163142db6fa06a5752acac2f38fb0c6ecefed0690ae6f8c2981702f
|
7
|
+
data.tar.gz: c84109e20d0ba02b594de5e99922abeee23cc69146b955816c29aed23a1b65cc1db7e6e39eae67458fb8ceb74b38784e22fad5ac98f6c209f5697e46e0bca9ac
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## Vite Rails 1.0.10 (2020-01-23)
|
2
|
+
|
3
|
+
- Use `path_to_asset` in `vite_asset_path` so that it's prefixed automatically
|
4
|
+
when using a CDN (`config.action_controller.asset_host`).
|
5
|
+
|
1
6
|
## Vite Rails 1.0.9 (2020-01-22)
|
2
7
|
|
3
8
|
- Ensure `configPath` and `publicDir` are scoped from `root`, both in Ruby and JS.
|
data/README.md
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
<h1 align="center">
|
2
2
|
Vite ⚡️ Rails
|
3
3
|
<p align="center">
|
4
|
-
|
4
|
+
<a href="https://github.com/ElMassimo/vite_rails/actions">
|
5
5
|
<img alt="Build Status" src="https://github.com/ElMassimo/vite_rails/workflows/build/badge.svg"/>
|
6
|
-
</a>
|
7
|
-
|
6
|
+
</a>
|
7
|
+
<a href="https://codeclimate.com/github/ElMassimo/vite_rails">
|
8
8
|
<img alt="Maintainability" src="https://codeclimate.com/github/ElMassimo/vite_rails/badges/gpa.svg"/>
|
9
9
|
</a>
|
10
10
|
<a href="https://codeclimate.com/github/ElMassimo/vite_rails">
|
11
11
|
<img alt="Test Coverage" src="https://codeclimate.com/github/ElMassimo/vite_rails/badges/coverage.svg"/>
|
12
|
-
</a>
|
12
|
+
</a>
|
13
13
|
<a href="https://rubygems.org/gems/vite_rails">
|
14
14
|
<img alt="Gem Version" src="https://img.shields.io/gem/v/vite_rails.svg?colorB=e9573f"/>
|
15
15
|
</a>
|
data/lib/vite_rails/builder.rb
CHANGED
@@ -68,7 +68,7 @@ private
|
|
68
68
|
logger.info 'Building with Vite ⚡️'
|
69
69
|
|
70
70
|
command = "#{ which_ruby } ./bin/vite build --mode #{ config.mode }"
|
71
|
-
stdout, stderr, status = Open3.capture3(
|
71
|
+
stdout, stderr, status = Open3.capture3(ViteRails.config.to_env, command, chdir: File.expand_path(config.root))
|
72
72
|
|
73
73
|
log_build_result(stdout, stderr, status)
|
74
74
|
|
@@ -108,13 +108,4 @@ private
|
|
108
108
|
config.config_path,
|
109
109
|
].freeze
|
110
110
|
end
|
111
|
-
|
112
|
-
# Internal: Sets additional environment variables for vite-plugin-ruby.
|
113
|
-
def vite_env
|
114
|
-
ViteRails.env.merge(
|
115
|
-
"#{ ViteRails::ENV_PREFIX }_CONFIG_PATH" => config.config_path,
|
116
|
-
"#{ ViteRails::ENV_PREFIX }_MODE" => config.mode,
|
117
|
-
"#{ ViteRails::ENV_PREFIX }_ROOT" => config.root,
|
118
|
-
).transform_values(&:to_s)
|
119
|
-
end
|
120
111
|
end
|
data/lib/vite_rails/commands.rb
CHANGED
@@ -29,6 +29,7 @@ class ViteRails::Commands
|
|
29
29
|
def clobber
|
30
30
|
config.build_output_dir.rmtree if config.build_output_dir.exist?
|
31
31
|
config.build_cache_dir.rmtree if config.build_cache_dir.exist?
|
32
|
+
config.vite_cache_dir.rmtree if config.vite_cache_dir.exist?
|
32
33
|
end
|
33
34
|
|
34
35
|
# Public: Receives arguments from a rake task.
|
data/lib/vite_rails/config.rb
CHANGED
@@ -9,11 +9,6 @@ class ViteRails::Config
|
|
9
9
|
|
10
10
|
def initialize(attrs)
|
11
11
|
@config = attrs.tap { |config| coerce_values(config) }.freeze
|
12
|
-
|
13
|
-
# Define getters for the configuration options.
|
14
|
-
CONFIGURABLE_WITH_ENV.each do |option|
|
15
|
-
define_singleton_method(option) { @config[option] }
|
16
|
-
end
|
17
12
|
end
|
18
13
|
|
19
14
|
def protocol
|
@@ -31,12 +26,26 @@ class ViteRails::Config
|
|
31
26
|
|
32
27
|
# Public: The directory where Vite will store the built assets.
|
33
28
|
def build_output_dir
|
34
|
-
|
29
|
+
root.join(public_dir, public_output_dir)
|
35
30
|
end
|
36
31
|
|
37
32
|
# Public: The directory where the entries are located.
|
38
33
|
def resolved_entrypoints_dir
|
39
|
-
|
34
|
+
root.join(source_code_dir, entrypoints_dir)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Internal: The directory where Vite stores its processing cache.
|
38
|
+
def vite_cache_dir
|
39
|
+
root.join('node_modules/.vite')
|
40
|
+
end
|
41
|
+
|
42
|
+
# Public: Sets additional environment variables for vite-plugin-ruby.
|
43
|
+
def to_env
|
44
|
+
CONFIGURABLE_WITH_ENV.each_with_object({}) do |option, env|
|
45
|
+
unless (value = @config[option]).nil?
|
46
|
+
env["#{ ViteRails::ENV_PREFIX }_#{ option.upcase }"] = value.to_s
|
47
|
+
end
|
48
|
+
end.merge(ViteRails.env)
|
40
49
|
end
|
41
50
|
|
42
51
|
private
|
@@ -46,13 +55,9 @@ private
|
|
46
55
|
def coerce_values(config)
|
47
56
|
config['mode'] = config['mode'].to_s
|
48
57
|
config['port'] = config['port'].to_i
|
58
|
+
coerce_paths(config, 'root', 'public_output_dir')
|
59
|
+
config['build_cache_dir'] = config['root'].join(config['build_cache_dir'])
|
49
60
|
coerce_booleans(config, 'auto_build', 'hide_build_console_output', 'https')
|
50
|
-
coerce_paths(config, 'config_path', 'public_output_dir', 'root')
|
51
|
-
|
52
|
-
# Prefix paths that are relative to the project root.
|
53
|
-
config.slice('build_cache_dir', 'public_dir', 'source_code_dir').each do |option, dir|
|
54
|
-
config[option] = config['root'].join(dir) if dir
|
55
|
-
end
|
56
61
|
end
|
57
62
|
|
58
63
|
# Internal: Coerces configuration options to boolean.
|
@@ -68,38 +73,46 @@ private
|
|
68
73
|
class << self
|
69
74
|
# Public: Returns the project configuration for Vite.
|
70
75
|
def resolve_config(attrs = {})
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
file_attrs = config_from_file(root: root, mode: mode, config_path: config_path)
|
76
|
-
new DEFAULT_CONFIG.merge(file_attrs).merge(config_from_env).merge(attrs)
|
76
|
+
config = attrs.transform_keys(&:to_s).reverse_merge(config_defaults)
|
77
|
+
file_path = File.join(config['root'], config['config_path'])
|
78
|
+
file_config = config_from_file(file_path, mode: config['mode'])
|
79
|
+
new DEFAULT_CONFIG.merge(file_config).merge(config_from_env).merge(config)
|
77
80
|
end
|
78
81
|
|
79
82
|
private
|
80
83
|
|
84
|
+
# Internal: Default values for a Rails application.
|
85
|
+
def config_defaults
|
86
|
+
{
|
87
|
+
'asset_host' => option_from_env('asset_host') || Rails.application&.config&.action_controller&.asset_host,
|
88
|
+
'config_path' => option_from_env('config_path') || DEFAULT_CONFIG.fetch('config_path'),
|
89
|
+
'mode' => option_from_env('mode') || Rails.env.to_s,
|
90
|
+
'root' => option_from_env('root') || Rails.root || Dir.pwd,
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
81
94
|
# Internal: Used to load a JSON file from the specified path.
|
82
95
|
def load_json(path)
|
83
96
|
JSON.parse(File.read(File.expand_path(path))).deep_transform_keys(&:underscore)
|
84
97
|
end
|
85
98
|
|
86
99
|
# Internal: Retrieves a configuration option from environment variables.
|
87
|
-
def
|
100
|
+
def option_from_env(name)
|
88
101
|
ViteRails.env["#{ ViteRails::ENV_PREFIX }_#{ name.upcase }"]
|
89
102
|
end
|
90
103
|
|
91
104
|
# Internal: Extracts the configuration options provided as env vars.
|
92
105
|
def config_from_env
|
93
|
-
CONFIGURABLE_WITH_ENV.each_with_object({}) do |
|
94
|
-
if value =
|
95
|
-
env_vars[
|
106
|
+
CONFIGURABLE_WITH_ENV.each_with_object({}) do |option, env_vars|
|
107
|
+
if value = option_from_env(option)
|
108
|
+
env_vars[option] = value
|
96
109
|
end
|
97
110
|
end
|
98
111
|
end
|
99
112
|
|
100
113
|
# Internal: Loads the configuration options provided in a JSON file.
|
101
|
-
def config_from_file(
|
102
|
-
multi_env_config = load_json(
|
114
|
+
def config_from_file(path, mode:)
|
115
|
+
multi_env_config = load_json(path)
|
103
116
|
multi_env_config.fetch('all', {})
|
104
117
|
.merge(multi_env_config.fetch(mode, {}))
|
105
118
|
rescue Errno::ENOENT => error
|
@@ -111,6 +124,16 @@ private
|
|
111
124
|
# Internal: Shared configuration with the Vite plugin for Ruby.
|
112
125
|
DEFAULT_CONFIG = load_json("#{ __dir__ }/../../package/default.vite.json").freeze
|
113
126
|
|
127
|
+
# Internal: Configuration options that can not be provided as env vars.
|
128
|
+
NOT_CONFIGURABLE_WITH_ENV = %w[watch_additional_paths].freeze
|
129
|
+
|
114
130
|
# Internal: Configuration options that can be provided as env vars.
|
115
|
-
CONFIGURABLE_WITH_ENV = (DEFAULT_CONFIG.keys + %w[mode root]).freeze
|
131
|
+
CONFIGURABLE_WITH_ENV = (DEFAULT_CONFIG.keys + %w[mode root] - NOT_CONFIGURABLE_WITH_ENV).freeze
|
132
|
+
|
133
|
+
public
|
134
|
+
|
135
|
+
# Define getters for the configuration options.
|
136
|
+
(CONFIGURABLE_WITH_ENV + NOT_CONFIGURABLE_WITH_ENV).each do |option|
|
137
|
+
define_method(option) { @config[option] }
|
138
|
+
end
|
116
139
|
end
|
@@ -29,7 +29,6 @@ private
|
|
29
29
|
def rewrite_uri_for_vite(env)
|
30
30
|
uri = env.fetch('REQUEST_URI') { [env['PATH_INFO'], env['QUERY_STRING']].reject(&:blank?).join('?') }
|
31
31
|
.sub(vite_asset_url_prefix, '/')
|
32
|
-
.sub('.ts.js', '.ts') # Patch: Rails helpers always append the extension.
|
33
32
|
env['PATH_INFO'], env['QUERY_STRING'] = (env['REQUEST_URI'] = uri).split('?')
|
34
33
|
end
|
35
34
|
|
data/lib/vite_rails/helper.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Public: Allows to render HTML tags for scripts and styles processed by Vite.
|
4
4
|
module ViteRails::Helper
|
5
|
-
DEFAULT_VITE_SKIP_PRELOAD_TAGS = Rails
|
5
|
+
DEFAULT_VITE_SKIP_PRELOAD_TAGS = Rails.gem_version < Gem::Version.new('5.2.0')
|
6
6
|
|
7
7
|
# Public: Returns the current Vite Rails instance.
|
8
8
|
def current_vite_instance
|
@@ -14,12 +14,12 @@ module ViteRails::Helper
|
|
14
14
|
content_tag('script', '', src: '/@vite/client', type: 'module') if ViteRails.dev_server_running?
|
15
15
|
end
|
16
16
|
|
17
|
-
# Public:
|
17
|
+
# Public: Resolves the path for the specified Vite asset.
|
18
18
|
#
|
19
19
|
# Example:
|
20
20
|
# <%= vite_asset_path 'calendar.css' %> # => "/vite/assets/calendar-1016838bab065ae1e122.css"
|
21
21
|
def vite_asset_path(name, **options)
|
22
|
-
current_vite_instance.manifest.lookup!(name, **options).fetch('file')
|
22
|
+
path_to_asset current_vite_instance.manifest.lookup!(name, **options).fetch('file')
|
23
23
|
end
|
24
24
|
|
25
25
|
# Public: Renders a <script> tag for the specified Vite entrypoints.
|
@@ -53,7 +53,7 @@ module ViteRails::Helper
|
|
53
53
|
# NOTE: Because TypeScript is not a valid target in browsers, we only specify
|
54
54
|
# the ts file when running the Vite development server.
|
55
55
|
def vite_typescript_tag(*names, **options)
|
56
|
-
vite_javascript_tag(*names, asset_type: :typescript, **options)
|
56
|
+
vite_javascript_tag(*names, asset_type: :typescript, extname: false, **options)
|
57
57
|
end
|
58
58
|
|
59
59
|
# Public: Renders a <link> tag for the specified Vite entrypoints.
|
data/lib/vite_rails/manifest.rb
CHANGED
@@ -130,9 +130,10 @@ private
|
|
130
130
|
[
|
131
131
|
(dev_server_running? && 'Vite has not yet re-built your latest changes.'),
|
132
132
|
(local && !dev_server_running? && "\"autoBuild\": false in your #{ config.mode } configuration."),
|
133
|
+
(local && !dev_server_running? && 'The Vite development server has crashed or is no longer available.'),
|
133
134
|
'You have misconfigured config/vite.json file.',
|
134
135
|
(!local && 'Assets have not been precompiled'),
|
135
|
-
].
|
136
|
+
].compact
|
136
137
|
rescue StandardError
|
137
138
|
[]
|
138
139
|
end
|
data/lib/vite_rails/runner.rb
CHANGED
@@ -33,7 +33,7 @@ private
|
|
33
33
|
cmd.prepend('node', '--trace-deprecation') if args.delete('--trace-deprecation')
|
34
34
|
args.append('--mode', ViteRails.mode) unless args.include?('--mode') || args.include?('-m')
|
35
35
|
cmd += args
|
36
|
-
Dir.chdir(File.expand_path('.', Dir.pwd)) { Kernel.exec(ViteRails.
|
36
|
+
Dir.chdir(File.expand_path('.', Dir.pwd)) { Kernel.exec(ViteRails.config.to_env, *cmd) }
|
37
37
|
end
|
38
38
|
|
39
39
|
# Internal: Resolves to an executable for Vite.
|
data/lib/vite_rails/version.rb
CHANGED
data/package.json
CHANGED
data/package/default.vite.json
CHANGED
data/test/builder_test.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'test_helper'
|
4
4
|
|
5
|
-
class
|
5
|
+
class ConfigTest < ViteRails::Test
|
6
6
|
def expand_path(path)
|
7
7
|
File.expand_path(Pathname.new(__dir__).join(path).to_s)
|
8
8
|
end
|
@@ -24,7 +24,7 @@ class ConfigurationTest < ViteRails::Test
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_source_code_dir
|
27
|
-
|
27
|
+
assert_equal 'app/frontend', @config.source_code_dir
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_entrypoints_dir
|
@@ -32,7 +32,7 @@ class ConfigurationTest < ViteRails::Test
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_public_dir
|
35
|
-
|
35
|
+
assert_equal 'public', @config.public_dir
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_build_output_dir
|
@@ -85,6 +85,17 @@ class ConfigurationTest < ViteRails::Test
|
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
|
+
def test_to_env
|
89
|
+
env = @config.to_env
|
90
|
+
assert_nil env['VITE_RUBY_ASSET_HOST']
|
91
|
+
|
92
|
+
Rails.application.config.action_controller.asset_host = 'assets-cdn.com'
|
93
|
+
env = refresh_config.to_env
|
94
|
+
assert_equal env['VITE_RUBY_ASSET_HOST'], 'assets-cdn.com'
|
95
|
+
ensure
|
96
|
+
Rails.application.config.action_controller.asset_host = nil
|
97
|
+
end
|
98
|
+
|
88
99
|
def test_environment_vars
|
89
100
|
ViteRails.env = {
|
90
101
|
'VITE_RUBY_AUTO_BUILD' => 'true',
|
@@ -106,13 +117,13 @@ class ConfigurationTest < ViteRails::Test
|
|
106
117
|
assert_equal 1920, @config.port
|
107
118
|
assert_equal true, @config.https
|
108
119
|
assert_equal 'https', @config.protocol
|
109
|
-
assert_equal
|
120
|
+
assert_equal 'config/vite_additional_paths.json', @config.config_path
|
110
121
|
assert_pathname 'tmp/vitebuild', @config.build_cache_dir
|
111
|
-
|
122
|
+
assert_equal 'pb', @config.public_dir
|
112
123
|
assert_equal Pathname.new('ft'), @config.public_output_dir
|
113
124
|
assert_pathname 'pb/ft', @config.build_output_dir
|
114
125
|
assert_equal 'as', @config.assets_dir
|
115
|
-
|
126
|
+
assert_equal 'app', @config.source_code_dir
|
116
127
|
assert_equal 'frontend/entrypoints', @config.entrypoints_dir
|
117
128
|
assert_pathname 'app/frontend/entrypoints', @config.resolved_entrypoints_dir
|
118
129
|
assert_equal true, @config.hide_build_console_output
|
data/test/helper_test.rb
CHANGED
@@ -63,7 +63,7 @@ class HelperTest < ActionView::TestCase
|
|
63
63
|
assert_equal %(<script src="/vite-production/application.js" crossorigin="anonymous" type="module"></script>),
|
64
64
|
vite_javascript_tag('application')
|
65
65
|
|
66
|
-
assert_equal %(<script src="/vite-production/application.ts
|
66
|
+
assert_equal %(<script src="/vite-production/application.ts" crossorigin="anonymous" type="module"></script>),
|
67
67
|
vite_typescript_tag('application')
|
68
68
|
}
|
69
69
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vite_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Máximo Mussini
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -148,7 +148,7 @@ files:
|
|
148
148
|
- package/default.vite.json
|
149
149
|
- test/builder_test.rb
|
150
150
|
- test/commands_test.rb
|
151
|
-
- test/
|
151
|
+
- test/config_test.rb
|
152
152
|
- test/dev_server_proxy_test.rb
|
153
153
|
- test/dev_server_test.rb
|
154
154
|
- test/engine_rake_tasks_test.rb
|
@@ -185,8 +185,8 @@ homepage: https://github.com/ElMassimo/vite_rails
|
|
185
185
|
licenses:
|
186
186
|
- MIT
|
187
187
|
metadata:
|
188
|
-
source_code_uri: https://github.com/ElMassimo/vite_rails/tree/v1.0.
|
189
|
-
changelog_uri: https://github.com/ElMassimo/vite_rails/blob/v1.0.
|
188
|
+
source_code_uri: https://github.com/ElMassimo/vite_rails/tree/v1.0.10
|
189
|
+
changelog_uri: https://github.com/ElMassimo/vite_rails/blob/v1.0.10/CHANGELOG.md
|
190
190
|
post_install_message:
|
191
191
|
rdoc_options: []
|
192
192
|
require_paths:
|
@@ -209,7 +209,7 @@ summary: Use Vite in Rails and bring joy to your JavaScript experience
|
|
209
209
|
test_files:
|
210
210
|
- test/builder_test.rb
|
211
211
|
- test/commands_test.rb
|
212
|
-
- test/
|
212
|
+
- test/config_test.rb
|
213
213
|
- test/dev_server_proxy_test.rb
|
214
214
|
- test/dev_server_test.rb
|
215
215
|
- test/engine_rake_tasks_test.rb
|