vite_rails 1.0.11 → 1.0.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9c6ae06bd2fe02d39882813646c291aa1984bf6f4bfbd337859c8527f83cdd66
4
- data.tar.gz: 932af2eeadf8830685a6f1d30431849b1e46227147f34a11b286824d3ce80cf7
3
+ metadata.gz: 57f866deafddde5401e02ec27cf751eb26a40a0be1fd832d9d3813fd7a69e721
4
+ data.tar.gz: 7cf22c583a3ac70f4353e227b0da4463b42067dd38f0c36774e665e619b31f2d
5
5
  SHA512:
6
- metadata.gz: 67f388f8c74bd39ee14f9d8033941a7616400f9e725a1c2cec7f459f9faa06457dcb113648d9bdb672b5497093f3905bddc13928b834c91f43cef08a58de0e65
7
- data.tar.gz: fba446503a41accc9bd4a769042858789615b2095171d6c138c0f2aaf0471ce741da98d9aa058fabc1ee92e2f667b8c19bcab48980ea4288d4b4400b53d94f15
6
+ metadata.gz: d101294de0e6f585b7df56c2881c465698f4c6ccbe8c4220117d7119c84f21e8b80e6aa2865dd353fa27b3b2c3d7a78095e80466c2d9b5f6eda60b6073a55ed0
7
+ data.tar.gz: fdbe92f7afafd6f82bafc6525a4099151efcdc385ce49e5cc5f696ea79efe5d411b6eaf093b9b1ec1402140a7d4ac34f629401fb70d9005535eaf38e989cf4cd
@@ -1,3 +1,8 @@
1
+ ## Vite Rails 1.0.12 (2020-01-29)
2
+
3
+ - Add support for Vite 2.0.0-beta.56, which modified the manifest to output a `css` field in the manifest.
4
+ - Start generating an assets manifest, since 2.0.0-beta.51 stopped including non-JS entrypoints in the manifest.
5
+
1
6
  ## Vite Rails 1.0.11 (2020-01-24)
2
7
 
3
8
  - Fix bug in `assetHost` that caused `base` to be configured incorrectly.
data/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  </a>
11
11
 
12
12
  <br>
13
-
13
+
14
14
  <p align="center">
15
15
  <a href="https://github.com/ElMassimo/vite_rails/actions">
16
16
  <img alt="Build Status" src="https://github.com/ElMassimo/vite_rails/workflows/build/badge.svg"/>
@@ -41,6 +41,8 @@
41
41
  [config file]: https://github.com/ElMassimo/vite_rails/blob/main/package/default.vite.json
42
42
  [example app]: https://github.com/ElMassimo/vite_rails/tree/main/examples/blog
43
43
  [heroku]: https://vite-rails-demo.herokuapp.com/
44
+ [Issues]: https://github.com/ElMassimo/vite_rails/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc
45
+ [Discussions]: https://github.com/ElMassimo/vite_rails/discussions
44
46
 
45
47
  [__Vite Rails__][vite_rails] allows you to use [Vite] to power the frontend of your Rails app.
46
48
 
@@ -50,7 +52,7 @@ Check an [example app] running on [Heroku].
50
52
 
51
53
  ## Features ⚡️
52
54
 
53
- - 🤖 Automatic entrypoint detection
55
+ - 💡 Instant server start
54
56
  - ⚡️ Blazing fast hot reload
55
57
  - 🚀 Zero-config deployments
56
58
  - 🤝 Integrated with <kbd>assets:precompile</kbd>
@@ -94,6 +96,13 @@ Visit any page and you should see a printed console output: `Vite ⚡️ Rails`.
94
96
 
95
97
  For more [guides] and a full [configuration reference], check the [documentation website][website].
96
98
 
99
+ ## Contact ✉️
100
+
101
+ Please use [Issues] to report bugs you find, and [Discussions] to make feature requests or get help.
102
+
103
+ Don't hesitate to _⭐️ star the project_ if you find it useful!
104
+
105
+
97
106
  ## Special Thanks 🙏
98
107
 
99
108
  - [webpacker]
@@ -5,7 +5,4 @@ export default defineConfig({
5
5
  plugins: [
6
6
  RubyPlugin(),
7
7
  ],
8
- optimizeDeps: {
9
- exclude: [/webpack/], // In case webpacker is installed (these deps won't be imported)
10
- },
11
8
  })
@@ -24,6 +24,11 @@ class ViteRails::Config
24
24
  build_output_dir.join('manifest.json')
25
25
  end
26
26
 
27
+ # Internal: Path where vite-plugin-ruby outputs the assets manifest file.
28
+ def assets_manifest_path
29
+ build_output_dir.join('manifest-assets.json')
30
+ end
31
+
27
32
  # Public: The directory where Vite will store the built assets.
28
33
  def build_output_dir
29
34
  root.join(public_dir, public_output_dir)
@@ -35,15 +35,15 @@ module ViteRails::Helper
35
35
  js_entries = names.map { |name| current_vite_instance.manifest.lookup!(name, type: asset_type) }
36
36
  js_tags = javascript_include_tag(*js_entries.map { |entry| entry['file'] }, crossorigin: crossorigin, type: type, **options)
37
37
 
38
+ preload_entries = js_entries.flat_map { |entry| entry['imports'] }.compact.uniq
39
+
38
40
  unless skip_preload_tags || current_vite_instance.dev_server_running?
39
- preload_paths = js_entries.flat_map { |entry| entry['imports'] }.compact.uniq
41
+ preload_paths = preload_entries.map { |entry| entry['file'] }.compact.uniq
40
42
  preload_tags = preload_paths.map { |path| preload_link_tag(path, crossorigin: crossorigin) }
41
43
  end
42
44
 
43
45
  unless skip_style_tags || current_vite_instance.dev_server_running?
44
- style_paths = names.map { |name|
45
- current_vite_instance.manifest.lookup(name.delete_suffix('.js'), type: :stylesheet)&.fetch('file')
46
- }.compact
46
+ style_paths = (js_entries + preload_entries).flat_map { |entry| entry['css'] }.compact.uniq
47
47
  style_tags = stylesheet_link_tag(*style_paths)
48
48
  end
49
49
 
@@ -37,7 +37,7 @@ class ViteRails::Manifest
37
37
  find_manifest_entry(with_file_extension(name, type))
38
38
  end
39
39
 
40
- # Public: Refreshes the cached mappings by reading the updated manifest.
40
+ # Public: Refreshes the cached mappings by reading the updated manifest files.
41
41
  def refresh
42
42
  @manifest = load_manifest
43
43
  end
@@ -81,15 +81,18 @@ private
81
81
  @manifest ||= load_manifest
82
82
  end
83
83
 
84
- # Internal: Returns a Hash with the entries in the manifest.json.
84
+ # Internal: Loads and merges the manifest files, resolving the asset paths.
85
85
  def load_manifest
86
- if config.manifest_path.exist?
87
- JSON.parse(config.manifest_path.read).each do |_, entry|
88
- entry['file'] = prefix_vite_asset(entry['file'])
89
- entry['imports'] = entry['imports']&.map { |path| prefix_vite_asset(path) }
90
- end
91
- else
92
- {}
86
+ files = [config.manifest_path, config.assets_manifest_path].select(&:exist?)
87
+ files.map { |path| JSON.parse(path.read) }.inject({}, &:merge).tap(&method(:resolve_references))
88
+ end
89
+
90
+ # Internal: Resolves the paths that reference a manifest entry.
91
+ def resolve_references(manifest)
92
+ manifest.each_value do |entry|
93
+ entry['file'] = prefix_vite_asset(entry['file'])
94
+ entry['css'] = Array.wrap(entry['css']).map { |path| prefix_vite_asset(path) } if entry['css']
95
+ entry['imports']&.map! { |name| manifest.fetch(name) }
93
96
  end
94
97
  end
95
98
 
@@ -106,7 +109,7 @@ private
106
109
  case entry_type
107
110
  when :javascript then 'js'
108
111
  when :stylesheet then 'css'
109
- when :typescript then dev_server_running? ? 'ts' : 'js'
112
+ when :typescript then 'ts'
110
113
  else entry_type
111
114
  end
112
115
  end
@@ -115,12 +118,12 @@ private
115
118
  def missing_entry_error(name, type: nil, **_options)
116
119
  file_name = with_file_extension(name, type)
117
120
  raise ViteRails::Manifest::MissingEntryError, <<~MSG
118
- Vite Rails can't find #{ file_name } in #{ config.manifest_path }.
121
+ Vite Rails can't find #{ file_name } in #{ config.manifest_path } or #{ config.assets_manifest_path }.
119
122
 
120
123
  Possible causes:
121
124
  #{ missing_entry_causes.map { |cause| "\t- #{ cause }" }.join("\n") }
122
125
 
123
- Your manifest contains:
126
+ Content in your manifests:
124
127
  #{ JSON.pretty_generate(@manifest) }
125
128
  MSG
126
129
  end
@@ -133,7 +136,7 @@ private
133
136
  (local && !dev_server_running? && 'The Vite development server has crashed or is no longer available.'),
134
137
  'You have misconfigured config/vite.json file.',
135
138
  (!local && 'Assets have not been precompiled'),
136
- ].compact
139
+ ].select(&:present?)
137
140
  rescue StandardError
138
141
  []
139
142
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ViteRails
4
- VERSION = '1.0.11'
4
+ VERSION = '1.0.12'
5
5
  end
@@ -13,7 +13,7 @@
13
13
  "test": "npm -C package run test"
14
14
  },
15
15
  "dependencies": {
16
- "vite": "^2.0.0-beta.46",
17
- "vite-plugin-ruby": "^1.0.5"
16
+ "vite": "^2.0.0-beta.56",
17
+ "vite-plugin-ruby": "^1.0.6"
18
18
  }
19
19
  }
@@ -96,7 +96,7 @@ private
96
96
 
97
97
  path, query = to.split('?')
98
98
  assert_equal path, env['PATH_INFO']
99
- assert_equal query, env['QUERY_STRING']
99
+ assert_equal query.to_s, env['QUERY_STRING'].to_s
100
100
  assert_equal to, env['REQUEST_URI']
101
101
  end
102
102
  end
@@ -27,33 +27,32 @@ class HelperTest < ActionView::TestCase
27
27
  end
28
28
 
29
29
  def test_vite_asset_path
30
- assert_equal '/vite-production/assets/colored.1173bfe0.js', vite_asset_path('colored.js')
31
- assert_equal '/vite-production/assets/colored.84277fd6.css', vite_asset_path('colored.css')
30
+ assert_equal '/vite-production/assets/application.d9514acc.js', vite_asset_path('application.ts')
31
+ assert_equal '/vite-production/assets/styles.0e53e684.css', vite_asset_path('styles.css')
32
32
  with_dev_server_running {
33
- assert_equal '/vite-production/colored.js', vite_asset_path('colored.js')
34
- assert_equal '/vite-production/colored.css', vite_asset_path('colored.css')
33
+ assert_equal '/vite-production/application.ts', vite_asset_path('application.ts')
34
+ assert_equal '/vite-production/styles.css', vite_asset_path('styles.css')
35
35
  }
36
36
  end
37
37
 
38
38
  def test_vite_stylesheet_tag
39
- assert_equal %(<link rel="stylesheet" media="screen" href="/vite-production/assets/colored.84277fd6.css" />),
40
- vite_stylesheet_tag('colored')
39
+ assert_equal link(href: '/vite-production/assets/styles.0e53e684.css'), vite_stylesheet_tag('styles')
41
40
 
42
- assert_equal vite_stylesheet_tag('colored'), vite_stylesheet_tag('colored.css')
41
+ assert_equal vite_stylesheet_tag('styles'), vite_stylesheet_tag('styles.css')
43
42
 
44
43
  with_dev_server_running {
45
- assert_equal %(<link rel="stylesheet" media="screen" href="/vite-production/colored.css" />),
46
- vite_stylesheet_tag('colored')
44
+ assert_equal link(href: '/vite-production/styles.css'), vite_stylesheet_tag('styles')
47
45
 
48
- assert_equal vite_stylesheet_tag('colored'), vite_stylesheet_tag('colored.css')
46
+ assert_equal vite_stylesheet_tag('styles'), vite_stylesheet_tag('styles.css')
49
47
  }
50
48
  end
51
49
 
52
50
  def test_vite_javascript_tag
53
51
  assert_equal [
54
- %(<script src="/vite-production/assets/application.a0ba047e.js" crossorigin="anonymous" type="module"></script>),
52
+ %(<script src="/vite-production/assets/application.d9514acc.js" crossorigin="anonymous" type="module"></script>),
53
+ %(<link rel="preload" href="/vite-production/assets/vendor.880705da.js" as="script" type="text/javascript" crossorigin="anonymous">),
55
54
  %(<link rel="preload" href="/vite-production/assets/example_import.8e1fddc0.js" as="script" type="text/javascript" crossorigin="anonymous">),
56
- %(<link rel="stylesheet" media="screen" href="/vite-production/assets/application.cccfef34.css" />),
55
+ link(href: '/vite-production/assets/application.f510c1e9.css'),
57
56
  ].join, vite_javascript_tag('application')
58
57
 
59
58
  assert_equal vite_javascript_tag('application'), vite_javascript_tag('application.js')
@@ -67,4 +66,10 @@ class HelperTest < ActionView::TestCase
67
66
  vite_typescript_tag('application')
68
67
  }
69
68
  end
69
+
70
+ def link(href:, rel: 'stylesheet', media: 'screen')
71
+ attrs = [%(media="#{ media }"), %(href="#{ href }")]
72
+ attrs.reverse! if Rails.gem_version > Gem::Version.new('6.1.1')
73
+ %(<link rel="#{ rel }" #{ attrs.join(' ') } />)
74
+ end
70
75
  end
@@ -25,13 +25,19 @@ class ManifestTest < ViteRails::Test
25
25
 
26
26
  def test_lookup_success!
27
27
  entry = {
28
- 'file' => '/vite-production/assets/application.a0ba047e.js',
28
+ 'file' => '/vite-production/assets/application.d9514acc.js',
29
+ 'src' => 'application.js',
30
+ 'isEntry' => true,
29
31
  'imports' => [
30
- '/vite-production/assets/example_import.8e1fddc0.js',
32
+ { 'file' => '/vite-production/assets/vendor.880705da.js' },
33
+ { 'file' => '/vite-production/assets/example_import.8e1fddc0.js', 'src' => 'example_import.js', 'isEntry' => true },
34
+ ],
35
+ 'css' => [
36
+ '/vite-production/assets/application.f510c1e9.css',
31
37
  ],
32
38
  }
33
39
  assert_equal entry, ViteRails.manifest.lookup!('application.js', type: :javascript)
34
- assert_equal entry, ViteRails.manifest.lookup!('application', type: :typescript)
40
+ assert_equal entry.merge('src' => 'application.ts'), ViteRails.manifest.lookup!('application', type: :typescript)
35
41
  end
36
42
 
37
43
  def test_lookup_success_with_dev_server_running!
@@ -50,16 +56,16 @@ class ManifestTest < ViteRails::Test
50
56
  end
51
57
 
52
58
  def test_lookup_success
53
- entry = { 'file' => '/vite-production/assets/application.cccfef34.css', 'imports' => nil }
54
- assert_equal entry, ViteRails.manifest.lookup('application.css')
55
- assert_equal entry, ViteRails.manifest.lookup('application.css', type: :stylesheet)
56
- assert_equal entry, ViteRails.manifest.lookup('application', type: :stylesheet)
59
+ entry = { 'file' => '/vite-production/assets/styles.0e53e684.css', 'src' => 'styles.css' }
60
+ assert_equal entry, ViteRails.manifest.lookup('styles.css')
61
+ assert_equal entry, ViteRails.manifest.lookup('styles.css', type: :stylesheet)
62
+ assert_equal entry, ViteRails.manifest.lookup('styles', type: :stylesheet)
57
63
  end
58
64
 
59
65
  def test_lookup_success_with_dev_server_running
60
- entry = { 'file' => '/vite-production/application.css' }
66
+ entry = { 'file' => '/vite-production/styles.css' }
61
67
  with_dev_server_running {
62
- assert_equal entry, ViteRails.manifest.lookup('application', type: :stylesheet)
68
+ assert_equal entry, ViteRails.manifest.lookup('styles', type: :stylesheet)
63
69
  }
64
70
  end
65
71
 
@@ -2,7 +2,7 @@
2
2
  "private": true,
3
3
  "license": "MIT",
4
4
  "devDependencies": {
5
- "vite": "^2.0.0-beta.46",
6
- "vite-plugin-ruby": "^1.0.5"
5
+ "vite": "^2.0.0-beta.56",
6
+ "vite-plugin-ruby": "^1.0.6"
7
7
  }
8
8
  }
@@ -188,17 +188,17 @@ to-regex-range@^5.0.1:
188
188
  dependencies:
189
189
  is-number "^7.0.0"
190
190
 
191
- vite-plugin-ruby@^1.0.4:
192
- version "1.0.4"
193
- resolved "https://registry.yarnpkg.com/vite-plugin-ruby/-/vite-plugin-ruby-1.0.4.tgz#0f4a263fd79a082a84917a54b0881f02a3bbfa61"
194
- integrity sha512-WJE+c2TGLwcbSHzkqcwCmPcHxasUnXmx5Bi1HPO89Yo+Mggi8t/fO/WIPUF7NxSlp9q2lq5/L3Vnkt3R/tolPg==
191
+ vite-plugin-ruby@^1.0.6:
192
+ version "1.0.6"
193
+ resolved "https://registry.yarnpkg.com/vite-plugin-ruby/-/vite-plugin-ruby-1.0.6.tgz#7ecaf2b8ad4237096c631587e7170c4ce95c0a26"
194
+ integrity sha512-wJ0Djf/t1bqaowO14ceeNKeqgKW69WwNHboV/Gxq+66NpuDSm8jLKRtm+CiqnvlT9fK5NCiNwtyFkgsKbKAH/g==
195
195
  dependencies:
196
196
  fast-glob "^3.2.4"
197
197
 
198
- vite@^2.0.0-beta.46:
199
- version "2.0.0-beta.46"
200
- resolved "https://registry.yarnpkg.com/vite/-/vite-2.0.0-beta.46.tgz#9c0d35019c350fbebd17f84c4e7243fffccd1819"
201
- integrity sha512-RiiJdjiFDaM9youfcTFnCztstwBXHHSdsSATZVD5A4QSb39KJRTpSKoveFo0PT7VJM5HjOP7QC/sVOqX011F6Q==
198
+ vite@^2.0.0-beta.56:
199
+ version "2.0.0-beta.56"
200
+ resolved "https://registry.yarnpkg.com/vite/-/vite-2.0.0-beta.56.tgz#b254ec4647ae1383d7c5b6f3fdb01f8971b5bcdd"
201
+ integrity sha512-MX20PSXT6wTfq37B9d/iTmfAut4kBT6DOquw60zVFRtnO7hR9sNmkM6pmoNyVuYJrlkhKZZqoO2DnYs3C7LKCw==
202
202
  dependencies:
203
203
  esbuild "^0.8.34"
204
204
  postcss "^8.2.1"
@@ -0,0 +1,10 @@
1
+ {
2
+ "logo.svg": {
3
+ "file": "assets/logo.490fa4f8.svg",
4
+ "src": "logo.svg"
5
+ },
6
+ "styles.css": {
7
+ "file": "assets/styles.0e53e684.css",
8
+ "src": "styles.css"
9
+ }
10
+ }
@@ -1,22 +1,39 @@
1
1
  {
2
2
  "application.js": {
3
- "file": "assets/application.a0ba047e.js",
3
+ "file": "assets/application.d9514acc.js",
4
+ "src": "application.js",
5
+ "isEntry": true,
4
6
  "imports": [
5
- "assets/example_import.8e1fddc0.js"
7
+ "_vendor.880705da.js",
8
+ "example_import.js"
9
+ ],
10
+ "css": [
11
+ "assets/application.f510c1e9.css"
12
+ ]
13
+ },
14
+ "application.ts": {
15
+ "file": "assets/application.d9514acc.js",
16
+ "src": "application.ts",
17
+ "isEntry": true,
18
+ "imports": [
19
+ "_vendor.880705da.js",
20
+ "example_import.js"
21
+ ],
22
+ "css": [
23
+ "assets/application.f510c1e9.css"
6
24
  ]
7
25
  },
8
26
  "example_import.js": {
9
27
  "file": "assets/example_import.8e1fddc0.js",
10
- "imports": []
11
- },
12
- "colored.js": {
13
- "file": "assets/colored.1173bfe0.js",
14
- "imports": []
28
+ "src": "example_import.js",
29
+ "isEntry": true
15
30
  },
16
- "application.css": {
17
- "file": "assets/application.cccfef34.css"
31
+ "logo.svg": {
32
+ "file": "assets/logo.f1745d22.js",
33
+ "src": "logo.svg",
34
+ "isEntry": true
18
35
  },
19
- "colored.css": {
20
- "file": "assets/colored.84277fd6.css"
36
+ "_vendor.880705da.js": {
37
+ "file": "assets/vendor.880705da.js"
21
38
  }
22
39
  }
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.11
4
+ version: 1.0.12
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-24 00:00:00.000000000 Z
11
+ date: 2021-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -177,6 +177,7 @@ files:
177
177
  - test/test_app/config/vite_additional_paths.json
178
178
  - test/test_app/config/vite_public_dir.json
179
179
  - test/test_app/package.json
180
+ - test/test_app/public/vite-production/manifest-assets.json
180
181
  - test/test_app/public/vite-production/manifest.json
181
182
  - test/test_app/some.config.js
182
183
  - test/test_app/yarn.lock
@@ -185,8 +186,8 @@ homepage: https://github.com/ElMassimo/vite_rails
185
186
  licenses:
186
187
  - MIT
187
188
  metadata:
188
- source_code_uri: https://github.com/ElMassimo/vite_rails/tree/v1.0.11
189
- changelog_uri: https://github.com/ElMassimo/vite_rails/blob/v1.0.11/CHANGELOG.md
189
+ source_code_uri: https://github.com/ElMassimo/vite_rails/tree/v1.0.12
190
+ changelog_uri: https://github.com/ElMassimo/vite_rails/blob/v1.0.12/CHANGELOG.md
190
191
  post_install_message:
191
192
  rdoc_options: []
192
193
  require_paths:
@@ -238,6 +239,7 @@ test_files:
238
239
  - test/test_app/config/vite_additional_paths.json
239
240
  - test/test_app/config/vite_public_dir.json
240
241
  - test/test_app/package.json
242
+ - test/test_app/public/vite-production/manifest-assets.json
241
243
  - test/test_app/public/vite-production/manifest.json
242
244
  - test/test_app/some.config.js
243
245
  - test/test_app/yarn.lock