vite_rails 1.0.12 → 2.0.0

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +39 -34
  4. data/lib/tasks/vite.rake +17 -0
  5. data/lib/vite_rails.rb +5 -82
  6. data/lib/vite_rails/config.rb +11 -135
  7. data/lib/vite_rails/engine.rb +7 -11
  8. data/lib/vite_rails/installation.rb +47 -0
  9. data/lib/vite_rails/tag_helpers.rb +61 -0
  10. data/lib/vite_rails/version.rb +2 -2
  11. data/{test/mounted_app/test/dummy/config/vite.json → templates/config/rails-vite.json} +1 -0
  12. data/{lib/install/javascript → templates}/entrypoints/application.js +0 -0
  13. metadata +25 -129
  14. data/lib/install/bin/vite +0 -17
  15. data/lib/install/binstubs.rb +0 -6
  16. data/lib/install/config/vite.config.ts +0 -8
  17. data/lib/install/config/vite.json +0 -14
  18. data/lib/install/template.rb +0 -40
  19. data/lib/tasks/vite/binstubs.rake +0 -12
  20. data/lib/tasks/vite/build.rake +0 -39
  21. data/lib/tasks/vite/clean.rake +0 -23
  22. data/lib/tasks/vite/clobber.rake +0 -20
  23. data/lib/tasks/vite/info.rake +0 -20
  24. data/lib/tasks/vite/install.rake +0 -12
  25. data/lib/tasks/vite/install_dependencies.rake +0 -14
  26. data/lib/tasks/vite/verify_install.rake +0 -23
  27. data/lib/vite_rails/builder.rb +0 -111
  28. data/lib/vite_rails/commands.rb +0 -109
  29. data/lib/vite_rails/dev_server.rb +0 -23
  30. data/lib/vite_rails/dev_server_proxy.rb +0 -57
  31. data/lib/vite_rails/helper.rb +0 -71
  32. data/lib/vite_rails/manifest.rb +0 -143
  33. data/lib/vite_rails/runner.rb +0 -53
  34. data/package.json +0 -19
  35. data/package/default.vite.json +0 -16
  36. data/test/builder_test.rb +0 -77
  37. data/test/commands_test.rb +0 -67
  38. data/test/config_test.rb +0 -133
  39. data/test/dev_server_proxy_test.rb +0 -102
  40. data/test/dev_server_test.rb +0 -9
  41. data/test/engine_rake_tasks_test.rb +0 -81
  42. data/test/helper_test.rb +0 -75
  43. data/test/manifest_test.rb +0 -85
  44. data/test/mode_test.rb +0 -16
  45. data/test/mounted_app/Rakefile +0 -6
  46. data/test/mounted_app/test/dummy/Rakefile +0 -5
  47. data/test/mounted_app/test/dummy/bin/rails +0 -5
  48. data/test/mounted_app/test/dummy/bin/rake +0 -5
  49. data/test/mounted_app/test/dummy/config.ru +0 -7
  50. data/test/mounted_app/test/dummy/config/application.rb +0 -12
  51. data/test/mounted_app/test/dummy/config/environment.rb +0 -5
  52. data/test/mounted_app/test/dummy/package.json +0 -8
  53. data/test/mounted_app/test/dummy/yarn.lock +0 -208
  54. data/test/rake_tasks_test.rb +0 -60
  55. data/test/runner_test.rb +0 -31
  56. data/test/test_app/Rakefile +0 -5
  57. data/test/test_app/app/frontend/entrypoints/application.js +0 -2
  58. data/test/test_app/bin/vite +0 -17
  59. data/test/test_app/config.ru +0 -7
  60. data/test/test_app/config/application.rb +0 -13
  61. data/test/test_app/config/environment.rb +0 -6
  62. data/test/test_app/config/vite.json +0 -18
  63. data/test/test_app/config/vite_additional_paths.json +0 -5
  64. data/test/test_app/config/vite_public_dir.json +0 -5
  65. data/test/test_app/package.json +0 -13
  66. data/test/test_app/public/vite-production/manifest-assets.json +0 -10
  67. data/test/test_app/public/vite-production/manifest.json +0 -39
  68. data/test/test_app/some.config.js +0 -0
  69. data/test/test_app/yarn.lock +0 -11
  70. data/test/test_helper.rb +0 -68
@@ -1,102 +0,0 @@
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.remove_method(:perform_request)
15
- Rack::Proxy.define_method(:perform_request) { |env| capture_app.call(env) }
16
-
17
- ViteRails::DevServerProxy.new(capture_app)
18
- end
19
-
20
- def test_non_asset
21
- get_with_dev_server_running '/'
22
- assert_not_forwarded
23
- end
24
-
25
- def test_non_vite_asset
26
- get_with_dev_server_running '/example_import.js'
27
- assert_not_forwarded
28
- end
29
-
30
- def test_vite_asset
31
- get_with_dev_server_running '/vite-production/application.js'
32
- assert_forwarded to: '/application.js'
33
- end
34
-
35
- def test_vite_client
36
- get_with_dev_server_running '/@vite/client'
37
- assert_forwarded to: '/@vite/client'
38
- end
39
-
40
- def test_vite_import
41
- get_with_dev_server_running '/@fs//package/example/app/frontend/App.vue?import&t=1611322300214&vue&type=style&index=0&lang.css'
42
- assert_forwarded to: '/@fs//package/example/app/frontend/App.vue?import&t=1611322300214&vue&type=style&index=0&lang.css'
43
- end
44
-
45
- def test_hmr_for_stylesheet
46
- get_with_dev_server_running '/colored.css?t=1611322562923'
47
- assert_forwarded to: '/colored.css?t=1611322562923'
48
- end
49
-
50
- def test_hmr_for_imported_entrypoint
51
- get_with_dev_server_running '/colored.css?import&t=1611322562923'
52
- assert_forwarded to: '/colored.css?import&t=1611322562923'
53
- end
54
-
55
- def test_entrypoint_imported_from_entrypoint
56
- header 'Referer', 'http://localhost:3000/vite-production/application.js'
57
- get_with_dev_server_running '/example_import.js'
58
- assert_forwarded to: '/example_import.js'
59
- end
60
-
61
- def test_without_dev_server_running
62
- get '/vite-production/application.js'
63
- assert_not_forwarded
64
-
65
- get '/colored.css?import&t=1611322562923'
66
- assert_not_forwarded
67
-
68
- header 'Referer', 'http://localhost:3000/vite-production/application.js'
69
- get '/example_import.js'
70
- assert_not_forwarded
71
- end
72
-
73
- private
74
-
75
- def get_with_dev_server_running(*args)
76
- with_dev_server_running {
77
- get(*args)
78
- }
79
- end
80
-
81
- def assert_not_forwarded
82
- assert last_response.ok?
83
- env = JSON.parse(last_response.body)
84
- assert_nil env['HTTP_X_FORWARDED_HOST']
85
- assert_nil env['HTTP_X_FORWARDED_PORT']
86
- end
87
-
88
- def assert_forwarded(to: nil)
89
- assert last_response.ok?
90
- env = JSON.parse(last_response.body)
91
-
92
- assert_equal ViteRails.config.host, env['HTTP_X_FORWARDED_HOST']
93
- assert_equal ViteRails.config.port, Integer(env['HTTP_X_FORWARDED_PORT'])
94
-
95
- return unless to
96
-
97
- path, query = to.split('?')
98
- assert_equal path, env['PATH_INFO']
99
- assert_equal query.to_s, env['QUERY_STRING'].to_s
100
- assert_equal to, env['REQUEST_URI']
101
- end
102
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class DevServerTest < ViteRails::Test
6
- def test_running?
7
- refute ViteRails.dev_server.running?
8
- end
9
- end
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class EngineRakeTasksTest < Minitest::Test
6
- def setup
7
- remove_vite_files
8
- end
9
-
10
- def teardown
11
- remove_vite_files
12
- end
13
-
14
- def test_tasks_mounted
15
- output = within_mounted_app { `bundle exec rake -T` }
16
- assert_includes output, 'app:vite'
17
- end
18
-
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, [error.message, @command_results.join("\n\n")].join("\n")
42
- end
43
-
44
- private
45
-
46
- def within_mounted_app
47
- Dir.chdir(mounted_app_path) { yield }.tap { |result| @command_results << result }
48
- end
49
-
50
- def mounted_app_path
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')
68
- end
69
-
70
- def app_public_dir
71
- root_dir.join('public/vite-dev')
72
- end
73
-
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?
79
- @command_results = []
80
- end
81
- end
data/test/helper_test.rb DELETED
@@ -1,75 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class HelperTest < ActionView::TestCase
6
- include ViteRailsTestHelpers
7
-
8
- tests ViteRails::Helper
9
-
10
- attr_reader :request
11
-
12
- def setup
13
- @request = Class.new do
14
- def send_early_hints(links) end
15
-
16
- def base_url
17
- 'https://example.com'
18
- end
19
- end.new
20
- end
21
-
22
- def test_vite_client_tag
23
- assert_nil vite_client_tag
24
- with_dev_server_running {
25
- assert_equal '<script src="/vite-production/@vite/client" type="module"></script>', vite_client_tag
26
- }
27
- end
28
-
29
- def test_vite_asset_path
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
- with_dev_server_running {
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
- }
36
- end
37
-
38
- def test_vite_stylesheet_tag
39
- assert_equal link(href: '/vite-production/assets/styles.0e53e684.css'), vite_stylesheet_tag('styles')
40
-
41
- assert_equal vite_stylesheet_tag('styles'), vite_stylesheet_tag('styles.css')
42
-
43
- with_dev_server_running {
44
- assert_equal link(href: '/vite-production/styles.css'), vite_stylesheet_tag('styles')
45
-
46
- assert_equal vite_stylesheet_tag('styles'), vite_stylesheet_tag('styles.css')
47
- }
48
- end
49
-
50
- def test_vite_javascript_tag
51
- assert_equal [
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">),
54
- %(<link rel="preload" href="/vite-production/assets/example_import.8e1fddc0.js" as="script" type="text/javascript" crossorigin="anonymous">),
55
- link(href: '/vite-production/assets/application.f510c1e9.css'),
56
- ].join, vite_javascript_tag('application')
57
-
58
- assert_equal vite_javascript_tag('application'), vite_javascript_tag('application.js')
59
- assert_equal vite_javascript_tag('application'), vite_typescript_tag('application')
60
-
61
- with_dev_server_running {
62
- assert_equal %(<script src="/vite-production/application.js" crossorigin="anonymous" type="module"></script>),
63
- vite_javascript_tag('application')
64
-
65
- assert_equal %(<script src="/vite-production/application.ts" crossorigin="anonymous" type="module"></script>),
66
- vite_typescript_tag('application')
67
- }
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
75
- end
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class ManifestTest < ViteRails::Test
6
- def test_lookup_exception!
7
- asset_file = 'calendar.js'
8
-
9
- error = assert_raises_manifest_missing_entry_error do
10
- ViteRails.manifest.lookup!(asset_file)
11
- end
12
-
13
- assert_match "Vite Rails can't find #{ asset_file } in #{ manifest_path }", error.message
14
- end
15
-
16
- def test_lookup_with_type_exception!
17
- asset_file = 'calendar'
18
-
19
- error = assert_raises_manifest_missing_entry_error do
20
- ViteRails.manifest.lookup!(asset_file, type: :javascript)
21
- end
22
-
23
- assert_match "Vite Rails can't find #{ asset_file }.js in #{ manifest_path }", error.message
24
- end
25
-
26
- def test_lookup_success!
27
- entry = {
28
- 'file' => '/vite-production/assets/application.d9514acc.js',
29
- 'src' => 'application.js',
30
- 'isEntry' => true,
31
- 'imports' => [
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',
37
- ],
38
- }
39
- assert_equal entry, ViteRails.manifest.lookup!('application.js', type: :javascript)
40
- assert_equal entry.merge('src' => 'application.ts'), ViteRails.manifest.lookup!('application', type: :typescript)
41
- end
42
-
43
- def test_lookup_success_with_dev_server_running!
44
- entry = { 'file' => '/vite-production/application.js' }
45
- with_dev_server_running {
46
- assert_equal entry, ViteRails.manifest.lookup!('application.js')
47
- }
48
- entry = { 'file' => '/vite-production/application.ts' }
49
- with_dev_server_running {
50
- assert_equal entry, ViteRails.manifest.lookup!('application', type: :typescript)
51
- }
52
- end
53
-
54
- def test_lookup_nil
55
- assert_nil ViteRails.manifest.lookup('foo.js')
56
- end
57
-
58
- def test_lookup_success
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)
63
- end
64
-
65
- def test_lookup_success_with_dev_server_running
66
- entry = { 'file' => '/vite-production/styles.css' }
67
- with_dev_server_running {
68
- assert_equal entry, ViteRails.manifest.lookup('styles', type: :stylesheet)
69
- }
70
- end
71
-
72
- private
73
-
74
- def assert_raises_manifest_missing_entry_error(&block)
75
- error = nil
76
- ViteRails.config.stub :auto_build, false do
77
- error = assert_raises ViteRails::Manifest::MissingEntryError, &block
78
- end
79
- error
80
- end
81
-
82
- def manifest_path
83
- File.expand_path File.join(File.dirname(__FILE__), 'test_app/public/vite-production', 'manifest.json').to_s
84
- end
85
- end
data/test/mode_test.rb DELETED
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class ModeTest < ViteRails::Test
6
- def test_mode
7
- assert_equal Rails.env, ViteRails.config.mode
8
- assert_equal ViteRails.config.mode, ViteRails.mode
9
- end
10
-
11
- def test_mode_with_rails_env
12
- with_rails_env('staging') do |config|
13
- assert_equal 'staging', config.mode
14
- end
15
- end
16
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/setup'
4
-
5
- APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
6
- load 'rails/tasks/engine.rake'
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'config/application'
4
-
5
- Rails.application.load_tasks
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- APP_PATH = File.expand_path('../config/application', __dir__)
5
- require 'rails/commands'
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'rake'
5
- Rake.application.run
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # This file allows the `Rails.root` to be correctly determined.
4
-
5
- require_relative 'config/environment'
6
-
7
- run Rails.application
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'action_controller/railtie'
4
- require 'action_view/railtie'
5
- require 'vite_rails'
6
-
7
- module TestDummyApp
8
- class Application < Rails::Application
9
- config.secret_key_base = 'abcdef'
10
- config.eager_load = true
11
- end
12
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'application'
4
-
5
- Rails.application.initialize!
@@ -1,8 +0,0 @@
1
- {
2
- "private": true,
3
- "license": "MIT",
4
- "devDependencies": {
5
- "vite": "^2.0.0-beta.56",
6
- "vite-plugin-ruby": "^1.0.6"
7
- }
8
- }