vite_rails 1.0.11 → 1.0.12

Sign up to get free protection for your applications and to get access to all the features.
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