vite_rails 1.0.4 → 1.0.5
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 +9 -1
- data/README.md +1 -1
- data/lib/vite_rails.rb +6 -1
- data/lib/vite_rails/dev_server_proxy.rb +6 -4
- data/lib/vite_rails/helper.rb +29 -8
- data/lib/vite_rails/manifest.rb +16 -12
- data/lib/vite_rails/version.rb +1 -1
- data/package.json +4 -20
- 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: c1036b7b19ba86a9e76a58b29bac36a0e919bdadeac59846a37a13f5f5d3690b
|
4
|
+
data.tar.gz: 51fc54fa2138c581ca9f92182e14faa2108cba30084656718f7792c3bf5947b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13857bbd2f3b308357b82663e140a1630699259274a5bab6c738c84444ab02aba67ef0b361a9598528f60186ec8a3748584885492026a36c928db77976ec7e5b
|
7
|
+
data.tar.gz: e15766ff9f599d4f0e18b2e1a30a3cd38182dc36efc479371c474f54ed0866c8451469952afc267f4247351592a3e6651010b2b5db28ac58e99e3bc60deef3f0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
-
## Vite Rails 1.0.
|
1
|
+
## Vite Rails 1.0.5 (2020-01-20)
|
2
|
+
|
3
|
+
- Automatically add `<link rel="modulepreload">` and `<link rel="stylesheet">` when using `vite_javascript_tag`, which simplifies usage.
|
4
|
+
|
5
|
+
## Vite Rails 1.0.4 (2020-01-19)
|
6
|
+
|
7
|
+
- Remove Vue specific examples from installation templates, to ensure they always run.
|
8
|
+
|
9
|
+
## Vite Rails 1.0.0 (2020-01-18)
|
2
10
|
|
3
11
|
Initial Version
|
data/README.md
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
- 🤖 Automatic Entrypoint Detection
|
34
34
|
- ⚡️ Hot Reload
|
35
35
|
- ⚙️ Rake Tasks
|
36
|
-
-
|
36
|
+
- 🤝 Integrated with <kbd>assets:precompile</kbd> and friends
|
37
37
|
- And more! (detects changes, and builds automatically if Vite is not running)
|
38
38
|
|
39
39
|
## Documentation 📖
|
data/lib/vite_rails.rb
CHANGED
@@ -22,7 +22,7 @@ class ViteRails
|
|
22
22
|
cattr_accessor(:logger) { ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT)) }
|
23
23
|
|
24
24
|
class << self
|
25
|
-
delegate :config, :builder, :manifest, :commands, :dev_server, to: :instance
|
25
|
+
delegate :config, :builder, :manifest, :commands, :dev_server, :dev_server_running?, to: :instance
|
26
26
|
delegate :mode, to: :config
|
27
27
|
delegate :bootstrap, :clean, :clobber, :build, to: :commands
|
28
28
|
|
@@ -62,6 +62,11 @@ class ViteRails
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
+
# Public: Returns true if the Vite development server is running.
|
66
|
+
def dev_server_running?
|
67
|
+
ViteRails.run_proxy? && dev_server.running?
|
68
|
+
end
|
69
|
+
|
65
70
|
# Public: Current instance configuration for Vite.
|
66
71
|
def config
|
67
72
|
@config ||= ViteRails::Config.resolve_config
|
@@ -14,7 +14,7 @@ class ViteRails::DevServerProxy < Rack::Proxy
|
|
14
14
|
|
15
15
|
# Rack: Intercept asset requests and send them to the Vite server.
|
16
16
|
def perform_request(env)
|
17
|
-
if vite_should_handle?(env['REQUEST_URI']) && dev_server.running?
|
17
|
+
if vite_should_handle?(env['REQUEST_URI'], env['HTTP_REFERER']) && dev_server.running?
|
18
18
|
env['REQUEST_URI'] = env['REQUEST_URI']
|
19
19
|
.sub(vite_asset_url_prefix, '/')
|
20
20
|
.sub('.ts.js', '.ts') # Patch: Rails helpers always append the extension.
|
@@ -36,9 +36,11 @@ private
|
|
36
36
|
|
37
37
|
delegate :config, :dev_server, to: :@vite_rails
|
38
38
|
|
39
|
-
def vite_should_handle?(url)
|
40
|
-
url.start_with?(vite_asset_url_prefix)
|
41
|
-
|
39
|
+
def vite_should_handle?(url, referer)
|
40
|
+
return true if url.start_with?(vite_asset_url_prefix) # Vite Asset
|
41
|
+
return true if url.start_with?(VITE_DEPENDENCY_PREFIX) # Vite Package Asset
|
42
|
+
return true if url.include?('?t=') # Hot Reload
|
43
|
+
return true if referer && URI.parse(referer).path.start_with?(vite_asset_url_prefix) # Entry Imported from another Entry.
|
42
44
|
end
|
43
45
|
|
44
46
|
def vite_asset_url_prefix
|
data/lib/vite_rails/helper.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
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::VERSION::MAJOR <= 5 && Rails::VERSION::MINOR < 2
|
6
|
+
|
5
7
|
# Public: Returns the current Vite Rails instance.
|
6
8
|
def current_vite_instance
|
7
9
|
ViteRails.instance
|
@@ -12,30 +14,49 @@ module ViteRails::Helper
|
|
12
14
|
# Example:
|
13
15
|
# <%= vite_asset_path 'calendar.css' %> # => "/vite/assets/calendar-1016838bab065ae1e122.css"
|
14
16
|
def vite_asset_path(name, **options)
|
15
|
-
current_vite_instance.manifest.lookup!(name, **options)
|
17
|
+
current_vite_instance.manifest.lookup!(name, **options).fetch('file')
|
16
18
|
end
|
17
19
|
|
18
20
|
# Public: Renders a <script> tag for the specified Vite entrypoints.
|
19
|
-
def vite_javascript_tag(*names,
|
20
|
-
|
21
|
+
def vite_javascript_tag(*names,
|
22
|
+
type: 'module',
|
23
|
+
asset_type: :javascript,
|
24
|
+
skip_preload_tags: DEFAULT_VITE_SKIP_PRELOAD_TAGS,
|
25
|
+
skip_style_tags: false,
|
26
|
+
crossorigin: 'anonymous',
|
27
|
+
**options)
|
28
|
+
js_entries = names.map { |name| current_vite_instance.manifest.lookup!(name, type: asset_type) }
|
29
|
+
js_tags = javascript_include_tag(*js_entries.map { |entry| entry['file'] }, type: type, crossorigin: crossorigin, **options)
|
30
|
+
|
31
|
+
unless skip_preload_tags || ViteRails.dev_server.running?
|
32
|
+
preload_paths = js_entries.flat_map { |entry| entry['imports'] }.compact.uniq
|
33
|
+
preload_tags = preload_paths.map { |path| preload_link_tag(path, crossorigin: crossorigin) }
|
34
|
+
end
|
35
|
+
|
36
|
+
unless skip_style_tags || ViteRails.dev_server.running?
|
37
|
+
style_paths = names.map { |name| current_vite_instance.manifest.lookup(name, type: :stylesheet)&.fetch('file') }.compact
|
38
|
+
style_tags = stylesheet_link_tag(*style_paths)
|
39
|
+
end
|
40
|
+
|
41
|
+
safe_join [js_tags, preload_tags, style_tags]
|
21
42
|
end
|
22
43
|
|
23
44
|
# Public: Renders a <script> tag for the specified Vite entrypoints.
|
24
45
|
#
|
25
46
|
# NOTE: Because TypeScript is not a valid target in browsers, we only specify
|
26
47
|
# the ts file when running the Vite development server.
|
27
|
-
def vite_typescript_tag(*names,
|
28
|
-
|
48
|
+
def vite_typescript_tag(*names, **options)
|
49
|
+
vite_javascript_tag(*names, asset_type: :typescript, **options)
|
29
50
|
end
|
30
51
|
|
31
52
|
# Public: Renders a <link> tag for the specified Vite entrypoints.
|
32
53
|
def vite_stylesheet_tag(*names, **options)
|
33
|
-
stylesheet_link_tag(*
|
54
|
+
stylesheet_link_tag(*sources_from_vite_manifest(names, type: :stylesheet), **options)
|
34
55
|
end
|
35
56
|
|
36
57
|
private
|
37
58
|
|
38
|
-
def
|
39
|
-
names.
|
59
|
+
def sources_from_vite_manifest(names, type:)
|
60
|
+
names.map { |name| vite_asset_path(name, type: type) }
|
40
61
|
end
|
41
62
|
end
|
data/lib/vite_rails/manifest.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
#
|
6
6
|
# Example:
|
7
7
|
# lookup_entrypoint('calendar', type: :javascript)
|
8
|
-
# => "/vite/assets/calendar-1016838bab065ae1e314.js"
|
8
|
+
# => { "file" => "/vite/assets/calendar-1016838bab065ae1e314.js", "imports" => [] }
|
9
9
|
#
|
10
10
|
# NOTE: Using "autoBuild": true` in `config/vite.json` file will trigger a build
|
11
11
|
# on demand as needed, before performing any lookup.
|
@@ -29,7 +29,8 @@ class ViteRails::Manifest
|
|
29
29
|
# Returns a relative path, or nil if the asset is not found.
|
30
30
|
#
|
31
31
|
# Example:
|
32
|
-
# ViteRails.manifest.lookup('calendar.js')
|
32
|
+
# ViteRails.manifest.lookup('calendar.js')
|
33
|
+
# # { "file" => "/vite/assets/calendar-1016838bab065ae1e122.js", "imports" => [] }
|
33
34
|
def lookup(name, type:)
|
34
35
|
build if should_build?
|
35
36
|
|
@@ -43,12 +44,7 @@ class ViteRails::Manifest
|
|
43
44
|
|
44
45
|
private
|
45
46
|
|
46
|
-
delegate :config, :builder, :
|
47
|
-
|
48
|
-
# Public: Returns true if the Vite development server is running.
|
49
|
-
def dev_server_running?
|
50
|
-
ViteRails.run_proxy? && dev_server.running?
|
51
|
-
end
|
47
|
+
delegate :config, :builder, :dev_server_running?, to: :@vite_rails
|
52
48
|
|
53
49
|
# NOTE: Auto compilation is convenient when running tests, when the developer
|
54
50
|
# won't focus on the frontend, or when running the Vite server is not desired.
|
@@ -59,9 +55,9 @@ private
|
|
59
55
|
# Internal: Finds the specified entry in the manifest.
|
60
56
|
def find_manifest_entry(name)
|
61
57
|
if dev_server_running?
|
62
|
-
"/#{ config.public_output_dir.join(name.to_s) }"
|
63
|
-
|
64
|
-
|
58
|
+
{ 'file' => "/#{ config.public_output_dir.join(name.to_s) }" }
|
59
|
+
else
|
60
|
+
manifest[name.to_s]
|
65
61
|
end
|
66
62
|
end
|
67
63
|
|
@@ -83,7 +79,10 @@ private
|
|
83
79
|
# Internal: Returns a Hash with the entries in the manifest.json.
|
84
80
|
def load_manifest
|
85
81
|
if config.manifest_path.exist?
|
86
|
-
JSON.parse(config.manifest_path.read)
|
82
|
+
JSON.parse(config.manifest_path.read).each do |_, entry|
|
83
|
+
entry['file'] = within_public_output_dir(entry['file'])
|
84
|
+
entry['imports'] = entry['imports']&.map { |path| within_public_output_dir(path) }
|
85
|
+
end
|
87
86
|
else
|
88
87
|
{}
|
89
88
|
end
|
@@ -96,6 +95,11 @@ private
|
|
96
95
|
"#{ name }.#{ extension_for_type(entry_type) }"
|
97
96
|
end
|
98
97
|
|
98
|
+
# Internal: Scopes the paths in the manifest to the output folder in public.
|
99
|
+
def within_public_output_dir(path)
|
100
|
+
"/#{ config.public_output_dir.join(path) }"
|
101
|
+
end
|
102
|
+
|
99
103
|
# Internal: Allows to receive :javascript and :stylesheet as :type in helpers.
|
100
104
|
def extension_for_type(entry_type)
|
101
105
|
case entry_type
|
data/lib/vite_rails/version.rb
CHANGED
data/package.json
CHANGED
@@ -2,27 +2,11 @@
|
|
2
2
|
"name": "only-for-workflows",
|
3
3
|
"version": "unknown",
|
4
4
|
"scripts": {
|
5
|
-
"
|
6
|
-
"
|
5
|
+
"lint": "npm -C package run lint",
|
6
|
+
"test": "npm -C package run test"
|
7
7
|
},
|
8
8
|
"dependencies": {
|
9
|
-
"vite": "^2.0.0-beta.
|
10
|
-
"vite-plugin-ruby": "1.0.
|
11
|
-
},
|
12
|
-
"devDependencies": {
|
13
|
-
"@vitejs/plugin-vue": "^1.0.6",
|
14
|
-
"eslint": "^7.16.0",
|
15
|
-
"eslint-config-airbnb": "^18.2.0",
|
16
|
-
"eslint-config-prettier": "^7.1.0",
|
17
|
-
"eslint-plugin-import": "^2.22.1",
|
18
|
-
"eslint-plugin-jsx-a11y": "^6.3.1",
|
19
|
-
"eslint-plugin-react": "^7.21.4",
|
20
|
-
"jest": "^26.5.3"
|
21
|
-
},
|
22
|
-
"jest": {
|
23
|
-
"testRegex": "(/__tests__/.*|(\\.|/))\\.jsx?$",
|
24
|
-
"roots": [
|
25
|
-
"<rootDir>/package"
|
26
|
-
]
|
9
|
+
"vite": "^2.0.0-beta.34",
|
10
|
+
"vite-plugin-ruby": "^1.0.1"
|
27
11
|
}
|
28
12
|
}
|
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.5
|
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-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -186,8 +186,8 @@ homepage: https://github.com/ElMassimo/vite_rails
|
|
186
186
|
licenses:
|
187
187
|
- MIT
|
188
188
|
metadata:
|
189
|
-
source_code_uri: https://github.com/ElMassimo/vite_rails/tree/v1.0.
|
190
|
-
changelog_uri: https://github.com/ElMassimo/vite_rails/blob/v1.0.
|
189
|
+
source_code_uri: https://github.com/ElMassimo/vite_rails/tree/v1.0.5
|
190
|
+
changelog_uri: https://github.com/ElMassimo/vite_rails/blob/v1.0.5/CHANGELOG.md
|
191
191
|
post_install_message:
|
192
192
|
rdoc_options: []
|
193
193
|
require_paths:
|