vite_rails 1.0.5 → 1.0.10

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/CONTRIBUTING.md +0 -1
  4. data/README.md +31 -69
  5. data/lib/install/javascript/entrypoints/application.js +8 -4
  6. data/lib/install/template.rb +1 -1
  7. data/lib/tasks/vite/build.rake +2 -6
  8. data/lib/tasks/vite/clean.rake +1 -3
  9. data/lib/tasks/vite/info.rake +0 -1
  10. data/lib/tasks/vite/verify_install.rake +3 -3
  11. data/lib/vite_rails.rb +14 -25
  12. data/lib/vite_rails/builder.rb +11 -13
  13. data/lib/vite_rails/commands.rb +51 -10
  14. data/lib/vite_rails/config.rb +65 -30
  15. data/lib/vite_rails/dev_server_proxy.rb +26 -18
  16. data/lib/vite_rails/helper.rb +15 -8
  17. data/lib/vite_rails/manifest.rb +6 -4
  18. data/lib/vite_rails/runner.rb +3 -6
  19. data/lib/vite_rails/version.rb +1 -1
  20. data/package.json +5 -1
  21. data/package/default.vite.json +2 -1
  22. data/test/builder_test.rb +27 -22
  23. data/test/commands_test.rb +67 -0
  24. data/test/config_test.rb +133 -0
  25. data/test/dev_server_proxy_test.rb +101 -0
  26. data/test/dev_server_test.rb +0 -30
  27. data/test/engine_rake_tasks_test.rb +55 -17
  28. data/test/helper_test.rb +37 -105
  29. data/test/manifest_test.rb +33 -29
  30. data/test/mode_test.rb +6 -11
  31. data/test/mounted_app/test/dummy/config/vite.json +5 -11
  32. data/test/mounted_app/test/dummy/package.json +2 -1
  33. data/test/mounted_app/test/dummy/yarn.lock +208 -0
  34. data/test/rake_tasks_test.rb +5 -19
  35. data/test/runner_test.rb +31 -0
  36. data/test/test_app/app/frontend/entrypoints/application.js +2 -0
  37. data/test/test_app/config/vite.json +0 -2
  38. data/test/test_app/config/vite_additional_paths.json +5 -0
  39. data/test/test_app/config/vite_public_dir.json +5 -0
  40. data/test/test_app/public/vite-production/manifest.json +22 -0
  41. data/test/test_helper.rb +48 -14
  42. metadata +23 -25
  43. data/test/command_test.rb +0 -35
  44. data/test/configuration_test.rb +0 -80
  45. data/test/dev_server_runner_test.rb +0 -83
  46. data/test/test_app/app/javascript/entrypoints/application.js +0 -10
  47. data/test/test_app/app/javascript/entrypoints/multi_entry.css +0 -4
  48. data/test/test_app/app/javascript/entrypoints/multi_entry.js +0 -4
  49. data/test/test_app/config/vite_public_root.yml +0 -20
  50. data/test/test_app/public/vite/manifest.json +0 -36
  51. data/test/vite_runner_test.rb +0 -59
  52. data/test/webpacker_test.rb +0 -15
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class CommandsTest < ViteRails::Test
6
+ def stub_builder(stale:, build_with_vite:)
7
+ ViteRails.builder.stub :stale?, stale do
8
+ ViteRails.builder.stub :build_with_vite, build_with_vite do
9
+ yield
10
+ end
11
+ end
12
+ end
13
+
14
+ def test_bootstrap
15
+ assert ViteRails.bootstrap
16
+ end
17
+
18
+ def test_build_returns_success_status_when_stale
19
+ stub_builder(stale: true, build_with_vite: true) {
20
+ assert_equal true, ViteRails.build
21
+ assert_equal true, ViteRails.build_from_rake
22
+ }
23
+ end
24
+
25
+ def test_build_returns_success_status_when_fresh
26
+ stub_builder(stale: false, build_with_vite: true) {
27
+ assert_equal true, ViteRails.build
28
+ assert_equal true, ViteRails.build_from_rake
29
+ }
30
+ end
31
+
32
+ def test_build_returns_failure_status_when_stale
33
+ stub_builder(stale: true, build_with_vite: false) {
34
+ assert_equal false, ViteRails.build
35
+ }
36
+ end
37
+
38
+ def test_clean
39
+ with_rails_env('test') { |config|
40
+ manifest = config.build_output_dir.join('manifest.json')
41
+
42
+ # Should not clean, the manifest does not exist.
43
+ config.build_output_dir.mkdir unless config.build_output_dir.exist?
44
+ refute ViteRails.clean
45
+
46
+ # Should not clean, the file is recent.
47
+ manifest.write('{}')
48
+ assert ViteRails.clean_from_rake(OpenStruct.new)
49
+ assert manifest.exist?
50
+
51
+ # Should clean if we remove age restrictions.
52
+ assert ViteRails.clean(keep_up_to: 0, age_in_seconds: 0)
53
+ assert config.build_output_dir.exist?
54
+ refute manifest.exist?
55
+ }
56
+ end
57
+
58
+ def test_clobber
59
+ with_rails_env('test') { |config|
60
+ config.build_output_dir.mkdir unless config.build_output_dir.exist?
61
+ config.build_output_dir.join('manifest.json').write('{}')
62
+ assert config.build_output_dir.exist?
63
+ ViteRails.clobber
64
+ refute config.build_output_dir.exist?
65
+ }
66
+ end
67
+ end
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class ConfigTest < ViteRails::Test
6
+ def expand_path(path)
7
+ File.expand_path(Pathname.new(__dir__).join(path).to_s)
8
+ end
9
+
10
+ def assert_path(expected, actual)
11
+ assert_equal expand_path(expected), actual.to_s
12
+ end
13
+
14
+ def assert_pathname(expected, actual)
15
+ assert_equal Pathname.new(expand_path("test_app/#{ expected }")), actual
16
+ end
17
+
18
+ def resolve_config(mode: 'production', root: test_app_path, **attrs)
19
+ ViteRails::Config.resolve_config(mode: mode, root: root, **attrs)
20
+ end
21
+
22
+ def setup
23
+ @config = resolve_config
24
+ end
25
+
26
+ def test_source_code_dir
27
+ assert_equal 'app/frontend', @config.source_code_dir
28
+ end
29
+
30
+ def test_entrypoints_dir
31
+ assert_path 'test_app/app/frontend/entrypoints', @config.resolved_entrypoints_dir
32
+ end
33
+
34
+ def test_public_dir
35
+ assert_equal 'public', @config.public_dir
36
+ end
37
+
38
+ def test_build_output_dir
39
+ assert_path 'test_app/public/vite-production', @config.build_output_dir
40
+
41
+ @config = resolve_config(config_path: 'config/vite_public_dir.json')
42
+ assert_path 'public/vite', @config.build_output_dir
43
+ end
44
+
45
+ def test_manifest_path
46
+ assert_path 'test_app/public/vite-production/manifest.json', @config.manifest_path
47
+ end
48
+
49
+ def test_build_cache_dir
50
+ assert_path 'test_app/tmp/cache/vite', @config.build_cache_dir
51
+ end
52
+
53
+ def test_watch_additional_paths
54
+ assert_equal [], @config.watch_additional_paths
55
+ @config = resolve_config(config_path: 'config/vite_additional_paths.json')
56
+ assert_equal ['config/*'], @config.watch_additional_paths
57
+ end
58
+
59
+ def test_auto_build
60
+ refute @config.auto_build
61
+
62
+ with_rails_env('development') do |config|
63
+ assert config.auto_build
64
+ end
65
+
66
+ with_rails_env('test') do |config|
67
+ assert config.auto_build
68
+ end
69
+
70
+ with_rails_env('staging') do |config|
71
+ refute config.auto_build
72
+ end
73
+ end
74
+
75
+ def test_protocol
76
+ assert_equal 'http', @config.protocol
77
+ end
78
+
79
+ def test_host_with_port
80
+ assert_equal 3036, @config.port
81
+
82
+ with_rails_env('development') do |config|
83
+ assert_equal 3535, config.port
84
+ assert_equal 'localhost:3535', config.host_with_port
85
+ end
86
+ end
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
+
99
+ def test_environment_vars
100
+ ViteRails.env = {
101
+ 'VITE_RUBY_AUTO_BUILD' => 'true',
102
+ 'VITE_RUBY_HOST' => 'example.com',
103
+ 'VITE_RUBY_PORT' => '1920',
104
+ 'VITE_RUBY_HTTPS' => 'true',
105
+ 'VITE_RUBY_CONFIG_PATH' => 'config/vite_additional_paths.json',
106
+ 'VITE_RUBY_BUILD_CACHE_DIR' => 'tmp/vitebuild',
107
+ 'VITE_RUBY_PUBLIC_DIR' => 'pb',
108
+ 'VITE_RUBY_PUBLIC_OUTPUT_DIR' => 'ft',
109
+ 'VITE_RUBY_ASSETS_DIR' => 'as',
110
+ 'VITE_RUBY_SOURCE_CODE_DIR' => 'app',
111
+ 'VITE_RUBY_ENTRYPOINTS_DIR' => 'frontend/entrypoints',
112
+ 'VITE_RUBY_HIDE_BUILD_CONSOLE_OUTPUT' => 'true',
113
+ }
114
+ @config = resolve_config
115
+ assert_equal true, @config.auto_build
116
+ assert_equal 'example.com', @config.host
117
+ assert_equal 1920, @config.port
118
+ assert_equal true, @config.https
119
+ assert_equal 'https', @config.protocol
120
+ assert_equal 'config/vite_additional_paths.json', @config.config_path
121
+ assert_pathname 'tmp/vitebuild', @config.build_cache_dir
122
+ assert_equal 'pb', @config.public_dir
123
+ assert_equal Pathname.new('ft'), @config.public_output_dir
124
+ assert_pathname 'pb/ft', @config.build_output_dir
125
+ assert_equal 'as', @config.assets_dir
126
+ assert_equal 'app', @config.source_code_dir
127
+ assert_equal 'frontend/entrypoints', @config.entrypoints_dir
128
+ assert_pathname 'app/frontend/entrypoints', @config.resolved_entrypoints_dir
129
+ assert_equal true, @config.hide_build_console_output
130
+ ensure
131
+ ViteRails.env = {}
132
+ end
133
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class DevServerProxyTest < ViteRails::Test
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ # Capture all changes to the env made by the proxy.
10
+ capture_app = Rack::Builder.new.run(->(env) {
11
+ [200, { 'Content-Type' => 'application/json' }, env.to_json]
12
+ })
13
+ # Avoid actually using the proxy.
14
+ Rack::Proxy.define_method(:perform_request) { |env| capture_app.call(env) }
15
+
16
+ ViteRails::DevServerProxy.new(capture_app)
17
+ end
18
+
19
+ def test_non_asset
20
+ get_with_dev_server_running '/'
21
+ assert_not_forwarded
22
+ end
23
+
24
+ def test_non_vite_asset
25
+ get_with_dev_server_running '/example_import.js'
26
+ assert_not_forwarded
27
+ end
28
+
29
+ def test_vite_asset
30
+ get_with_dev_server_running '/vite-production/application.js'
31
+ assert_forwarded to: '/application.js'
32
+ end
33
+
34
+ def test_vite_client
35
+ get_with_dev_server_running '/@vite/client'
36
+ assert_forwarded to: '/@vite/client'
37
+ end
38
+
39
+ def test_vite_import
40
+ get_with_dev_server_running '/@fs//package/example/app/frontend/App.vue?import&t=1611322300214&vue&type=style&index=0&lang.css'
41
+ assert_forwarded to: '/@fs//package/example/app/frontend/App.vue?import&t=1611322300214&vue&type=style&index=0&lang.css'
42
+ end
43
+
44
+ def test_hmr_for_stylesheet
45
+ get_with_dev_server_running '/colored.css?t=1611322562923'
46
+ assert_forwarded to: '/colored.css?t=1611322562923'
47
+ end
48
+
49
+ def test_hmr_for_imported_entrypoint
50
+ get_with_dev_server_running '/colored.css?import&t=1611322562923'
51
+ assert_forwarded to: '/colored.css?import&t=1611322562923'
52
+ end
53
+
54
+ def test_entrypoint_imported_from_entrypoint
55
+ header 'Referer', 'http://localhost:3000/vite-production/application.js'
56
+ get_with_dev_server_running '/example_import.js'
57
+ assert_forwarded to: '/example_import.js'
58
+ end
59
+
60
+ def test_without_dev_server_running
61
+ get '/vite-production/application.js'
62
+ assert_not_forwarded
63
+
64
+ get '/colored.css?import&t=1611322562923'
65
+ assert_not_forwarded
66
+
67
+ header 'Referer', 'http://localhost:3000/vite-production/application.js'
68
+ get '/example_import.js'
69
+ assert_not_forwarded
70
+ end
71
+
72
+ private
73
+
74
+ def get_with_dev_server_running(*args)
75
+ with_dev_server_running {
76
+ get(*args)
77
+ }
78
+ end
79
+
80
+ def assert_not_forwarded
81
+ assert last_response.ok?
82
+ env = JSON.parse(last_response.body)
83
+ assert_nil env['HTTP_X_FORWARDED_HOST']
84
+ assert_nil env['HTTP_X_FORWARDED_PORT']
85
+ end
86
+
87
+ def assert_forwarded(to: nil)
88
+ assert last_response.ok?
89
+ env = JSON.parse(last_response.body)
90
+
91
+ assert_equal ViteRails.config.host, env['HTTP_X_FORWARDED_HOST']
92
+ assert_equal ViteRails.config.port, Integer(env['HTTP_X_FORWARDED_PORT'])
93
+
94
+ return unless to
95
+
96
+ path, query = to.split('?')
97
+ assert_equal path, env['PATH_INFO']
98
+ assert_equal query, env['QUERY_STRING']
99
+ assert_equal to, env['REQUEST_URI']
100
+ end
101
+ end
@@ -6,34 +6,4 @@ class DevServerTest < ViteRails::Test
6
6
  def test_running?
7
7
  refute ViteRails.dev_server.running?
8
8
  end
9
-
10
- def test_host
11
- with_rails_env('development') do
12
- assert_equal ViteRails.config.host, 'localhost'
13
- end
14
- end
15
-
16
- def test_port
17
- with_rails_env('development') do
18
- assert_equal ViteRails.config.port, 3035
19
- end
20
- end
21
-
22
- def test_https?
23
- with_rails_env('development') do
24
- assert_equal ViteRails.config.https, false
25
- end
26
- end
27
-
28
- def test_protocol
29
- with_rails_env('development') do
30
- assert_equal ViteRails.config.protocol, 'http'
31
- end
32
- end
33
-
34
- def test_host_with_port
35
- with_rails_env('development') do
36
- assert_equal ViteRails.config.host_with_port, 'localhost:3035'
37
- end
38
- end
39
9
  end
@@ -4,39 +4,77 @@ require 'test_helper'
4
4
 
5
5
  class EngineRakeTasksTest < Minitest::Test
6
6
  def setup
7
- remove_vite_binstubs
7
+ remove_vite_files
8
8
  end
9
9
 
10
10
  def teardown
11
- remove_vite_binstubs
11
+ remove_vite_files
12
12
  end
13
13
 
14
- def test_task_mounted
15
- output = Dir.chdir(mounted_app_path) { `rake -T` }
14
+ def test_tasks_mounted
15
+ output = within_mounted_app { `bundle exec rake -T` }
16
16
  assert_includes output, 'app:vite'
17
17
  end
18
18
 
19
- def test_binstubs
20
- Dir.chdir(mounted_app_path) { `bundle exec rake app:vite:binstubs` }
21
- vite_binstub_paths.each { |path| assert File.exist?(path) }
19
+ def test_rake_tasks
20
+ within_mounted_app { `bundle exec rake app:vite:binstubs` }
21
+ assert vite_binstub_path.exist?
22
+
23
+ within_mounted_app { `bundle exec rake app:vite:install` }
24
+ assert vite_config_ts_path.exist?
25
+ assert app_frontend_dir.exist?
26
+
27
+ within_mounted_app { `bundle exec rake app:vite:build` }
28
+ assert app_public_dir.exist?
29
+ assert app_public_dir.join('manifest.json').exist?
30
+ assert app_public_dir.join('assets').exist?
31
+
32
+ within_mounted_app { `bundle exec rake app:vite:clean` }
33
+ assert app_public_dir.join('manifest.json').exist? # Still fresh
34
+
35
+ within_mounted_app { `bundle exec rake app:vite:clean[0,0]` }
36
+ refute app_public_dir.join('manifest.json').exist?
37
+
38
+ within_mounted_app { `bundle exec rake app:vite:clobber` }
39
+ refute app_public_dir.exist?
40
+ rescue Minitest::Assertion => error
41
+ raise error unless Rails.gem_version >= Gem::Version.new('6.1.0')
22
42
  end
23
43
 
24
44
  private
25
45
 
46
+ def within_mounted_app
47
+ Dir.chdir(mounted_app_path) { yield }
48
+ end
49
+
26
50
  def mounted_app_path
27
- File.expand_path('mounted_app', __dir__)
51
+ Pathname.new(File.expand_path(__dir__)).join('mounted_app')
52
+ end
53
+
54
+ def root_dir
55
+ mounted_app_path.join('test/dummy')
56
+ end
57
+
58
+ def vite_binstub_path
59
+ root_dir.join('bin/vite')
60
+ end
61
+
62
+ def vite_config_ts_path
63
+ root_dir.join('vite.config.ts')
64
+ end
65
+
66
+ def app_frontend_dir
67
+ root_dir.join('app/frontend')
28
68
  end
29
69
 
30
- def vite_binstub_paths
31
- [
32
- "#{ mounted_app_path }/test/dummy/bin/vite",
33
- "#{ mounted_app_path }/test/dummy/bin/vite-dev-server",
34
- ]
70
+ def app_public_dir
71
+ root_dir.join('public/vite-dev')
35
72
  end
36
73
 
37
- def remove_vite_binstubs
38
- vite_binstub_paths.each do |path|
39
- File.delete(path) if File.exist?(path)
40
- end
74
+ def remove_vite_files
75
+ vite_binstub_path.delete if vite_binstub_path.exist?
76
+ vite_config_ts_path.delete if vite_config_ts_path.exist?
77
+ app_frontend_dir.rmtree if app_frontend_dir.exist?
78
+ app_public_dir.rmtree if app_public_dir.exist?
41
79
  end
42
80
  end
@@ -3,6 +3,8 @@
3
3
  require 'test_helper'
4
4
 
5
5
  class HelperTest < ActionView::TestCase
6
+ include ViteRailsTestHelpers
7
+
6
8
  tests ViteRails::Helper
7
9
 
8
10
  attr_reader :request
@@ -17,122 +19,52 @@ class HelperTest < ActionView::TestCase
17
19
  end.new
18
20
  end
19
21
 
20
- def test_asset_pack_path
21
- assert_equal '/packs/bootstrap-300631c4f0e0f9c865bc.js', asset_pack_path('bootstrap.js')
22
- assert_equal '/packs/bootstrap-c38deda30895059837cf.css', asset_pack_path('bootstrap.css')
23
- end
24
-
25
- def test_asset_pack_url
26
- assert_equal 'https://example.com/packs/bootstrap-300631c4f0e0f9c865bc.js', asset_pack_url('bootstrap.js')
27
- assert_equal 'https://example.com/packs/bootstrap-c38deda30895059837cf.css', asset_pack_url('bootstrap.css')
22
+ def test_vite_client_tag
23
+ assert_nil vite_client_tag
24
+ with_dev_server_running {
25
+ assert_equal '<script src="/@vite/client" type="module"></script>', vite_client_tag
26
+ }
28
27
  end
29
28
 
30
- def test_image_pack_path
31
- assert_equal '/packs/application-k344a6d59eef8632c9d1.png', image_pack_path('application.png')
32
- assert_equal '/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_path('image.jpg')
33
- assert_equal '/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_path('media/images/image.jpg')
34
- assert_equal '/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_path('nested/image.jpg')
35
- assert_equal '/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_path('media/images/nested/image.jpg')
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')
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')
35
+ }
36
36
  end
37
37
 
38
- def test_image_pack_url
39
- assert_equal 'https://example.com/packs/application-k344a6d59eef8632c9d1.png', image_pack_url('application.png')
40
- assert_equal 'https://example.com/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_url('image.jpg')
41
- assert_equal 'https://example.com/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_url('media/images/image.jpg')
42
- assert_equal 'https://example.com/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_url('nested/image.jpg')
43
- assert_equal 'https://example.com/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_url('media/images/nested/image.jpg')
44
- end
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')
45
41
 
46
- def test_image_pack_tag
47
- assert_equal \
48
- '<img alt="Edit Entry" src="/packs/application-k344a6d59eef8632c9d1.png" width="16" height="10" />',
49
- image_pack_tag('application.png', size: '16x10', alt: 'Edit Entry')
50
- assert_equal \
51
- '<img alt="Edit Entry" src="/packs/media/images/image-c38deda30895059837cf.jpg" width="16" height="10" />',
52
- image_pack_tag('image.jpg', size: '16x10', alt: 'Edit Entry')
53
- assert_equal \
54
- '<img alt="Edit Entry" src="/packs/media/images/image-c38deda30895059837cf.jpg" width="16" height="10" />',
55
- image_pack_tag('media/images/image.jpg', size: '16x10', alt: 'Edit Entry')
56
- assert_equal \
57
- '<img alt="Edit Entry" src="/packs/media/images/nested/image-c38deda30895059837cf.jpg" width="16" height="10" />',
58
- image_pack_tag('nested/image.jpg', size: '16x10', alt: 'Edit Entry')
59
- assert_equal \
60
- '<img alt="Edit Entry" src="/packs/media/images/nested/image-c38deda30895059837cf.jpg" width="16" height="10" />',
61
- image_pack_tag('media/images/nested/image.jpg', size: '16x10', alt: 'Edit Entry')
62
- assert_equal \
63
- '<img srcset="/packs/media/images/image-2x-7cca48e6cae66ec07b8e.jpg 2x" src="/packs/media/images/image-c38deda30895059837cf.jpg" />',
64
- image_pack_tag('media/images/image.jpg', srcset: { 'media/images/image-2x.jpg' => '2x' })
65
- end
42
+ assert_equal vite_stylesheet_tag('colored'), vite_stylesheet_tag('colored.css')
66
43
 
67
- def test_favicon_pack_tag
68
- assert_equal \
69
- '<link rel="apple-touch-icon" type="image/png" href="/packs/application-k344a6d59eef8632c9d1.png" />',
70
- favicon_pack_tag('application.png', rel: 'apple-touch-icon', type: 'image/png')
71
- assert_equal \
72
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/mb-icon-c38deda30895059837cf.png" />',
73
- favicon_pack_tag('mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
74
- assert_equal \
75
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/mb-icon-c38deda30895059837cf.png" />',
76
- favicon_pack_tag('media/images/mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
77
- assert_equal \
78
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/nested/mb-icon-c38deda30895059837cf.png" />',
79
- favicon_pack_tag('nested/mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
80
- assert_equal \
81
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/nested/mb-icon-c38deda30895059837cf.png" />',
82
- favicon_pack_tag('media/images/nested/mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
83
- end
44
+ with_dev_server_running {
45
+ assert_equal %(<link rel="stylesheet" media="screen" href="/vite-production/colored.css" />),
46
+ vite_stylesheet_tag('colored')
84
47
 
85
- def test_javascript_pack_tag
86
- assert_equal \
87
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js"></script>),
88
- javascript_pack_tag('bootstrap.js')
48
+ assert_equal vite_stylesheet_tag('colored'), vite_stylesheet_tag('colored.css')
49
+ }
89
50
  end
90
51
 
91
- def test_javascript_pack_tag_symbol
92
- assert_equal \
93
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js"></script>),
94
- javascript_pack_tag(:bootstrap)
95
- end
52
+ def test_vite_javascript_tag
53
+ assert_equal [
54
+ %(<script src="/vite-production/assets/application.a0ba047e.js" crossorigin="anonymous" type="module"></script>),
55
+ %(<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" />),
57
+ ].join, vite_javascript_tag('application')
96
58
 
97
- def test_javascript_pack_tag_splat
98
- assert_equal \
99
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js" defer="defer"></script>\n) +
100
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js" defer="defer"></script>),
101
- javascript_pack_tag('bootstrap.js', 'application.js', defer: true)
102
- end
59
+ assert_equal vite_javascript_tag('application'), vite_javascript_tag('application.js')
60
+ assert_equal vite_javascript_tag('application'), vite_typescript_tag('application')
103
61
 
104
- def test_javascript_pack_tag_split_chunks
105
- assert_equal \
106
- %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js"></script>\n) +
107
- %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js"></script>\n) +
108
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js"></script>),
109
- javascript_packs_with_chunks_tag('application')
110
- end
111
-
112
- def test_stylesheet_pack_tag_split_chunks
113
- assert_equal \
114
- %(<link rel="stylesheet" media="screen" href="/packs/1-c20632e7baf2c81200d3.chunk.css" />\n) +
115
- %(<link rel="stylesheet" media="screen" href="/packs/application-k344a6d59eef8632c9d1.chunk.css" />\n) +
116
- %(<link rel="stylesheet" media="screen" href="/packs/hello_stimulus-k344a6d59eef8632c9d1.chunk.css" />),
117
- stylesheet_packs_with_chunks_tag('application', 'hello_stimulus')
118
- end
119
-
120
- def test_stylesheet_pack_tag
121
- assert_equal \
122
- %(<link rel="stylesheet" media="screen" href="/packs/bootstrap-c38deda30895059837cf.css" />),
123
- stylesheet_pack_tag('bootstrap.css')
124
- end
125
-
126
- def test_stylesheet_pack_tag_symbol
127
- assert_equal \
128
- %(<link rel="stylesheet" media="screen" href="/packs/bootstrap-c38deda30895059837cf.css" />),
129
- stylesheet_pack_tag(:bootstrap)
130
- end
62
+ with_dev_server_running {
63
+ assert_equal %(<script src="/vite-production/application.js" crossorigin="anonymous" type="module"></script>),
64
+ vite_javascript_tag('application')
131
65
 
132
- def test_stylesheet_pack_tag_splat
133
- assert_equal \
134
- %(<link rel="stylesheet" media="all" href="/packs/bootstrap-c38deda30895059837cf.css" />\n) +
135
- %(<link rel="stylesheet" media="all" href="/packs/application-dd6b1cd38bfa093df600.css" />),
136
- stylesheet_pack_tag('bootstrap.css', 'application.css', media: 'all')
66
+ assert_equal %(<script src="/vite-production/application.ts" crossorigin="anonymous" type="module"></script>),
67
+ vite_typescript_tag('application')
68
+ }
137
69
  end
138
70
  end