vite_rails 1.0.8 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -1
  3. data/CONTRIBUTING.md +0 -1
  4. data/README.md +57 -32
  5. data/lib/tasks/vite.rake +17 -0
  6. data/lib/vite_rails.rb +5 -93
  7. data/lib/vite_rails/config.rb +11 -100
  8. data/lib/vite_rails/engine.rb +7 -11
  9. data/lib/vite_rails/installation.rb +47 -0
  10. data/lib/vite_rails/tag_helpers.rb +61 -0
  11. data/lib/vite_rails/version.rb +2 -2
  12. data/{lib/install/config/vite.json → templates/config/rails-vite.json} +1 -0
  13. data/{lib/install/javascript → templates}/entrypoints/application.js +0 -0
  14. metadata +25 -129
  15. data/lib/install/bin/vite +0 -17
  16. data/lib/install/binstubs.rb +0 -6
  17. data/lib/install/config/vite.config.ts +0 -11
  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 -33
  21. data/lib/tasks/vite/clean.rake +0 -25
  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 -20
  26. data/lib/tasks/vite/verify_install.rake +0 -23
  27. data/lib/vite_rails/builder.rb +0 -113
  28. data/lib/vite_rails/commands.rb +0 -68
  29. data/lib/vite_rails/dev_server.rb +0 -23
  30. data/lib/vite_rails/dev_server_proxy.rb +0 -49
  31. data/lib/vite_rails/helper.rb +0 -67
  32. data/lib/vite_rails/manifest.rb +0 -138
  33. data/lib/vite_rails/runner.rb +0 -56
  34. data/package.json +0 -16
  35. data/package/default.vite.json +0 -15
  36. data/test/builder_test.rb +0 -72
  37. data/test/command_test.rb +0 -35
  38. data/test/configuration_test.rb +0 -80
  39. data/test/dev_server_runner_test.rb +0 -83
  40. data/test/dev_server_test.rb +0 -39
  41. data/test/engine_rake_tasks_test.rb +0 -42
  42. data/test/helper_test.rb +0 -138
  43. data/test/manifest_test.rb +0 -75
  44. data/test/mode_test.rb +0 -21
  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/config/vite.json +0 -20
  53. data/test/mounted_app/test/dummy/package.json +0 -7
  54. data/test/rake_tasks_test.rb +0 -74
  55. data/test/test_app/Rakefile +0 -5
  56. data/test/test_app/app/javascript/entrypoints/application.js +0 -2
  57. data/test/test_app/app/javascript/entrypoints/multi_entry.css +0 -4
  58. data/test/test_app/app/javascript/entrypoints/multi_entry.js +0 -4
  59. data/test/test_app/bin/vite +0 -17
  60. data/test/test_app/config.ru +0 -7
  61. data/test/test_app/config/application.rb +0 -13
  62. data/test/test_app/config/environment.rb +0 -6
  63. data/test/test_app/config/vite.json +0 -20
  64. data/test/test_app/config/vite_public_root.yml +0 -20
  65. data/test/test_app/package.json +0 -13
  66. data/test/test_app/public/vite/manifest.json +0 -36
  67. data/test/test_app/some.config.js +0 -0
  68. data/test/test_app/yarn.lock +0 -11
  69. data/test/test_helper.rb +0 -34
  70. data/test/vite_runner_test.rb +0 -59
  71. data/test/webpacker_test.rb +0 -15
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'vite_rails'
4
+
5
+ # Internal: Extends the base installation script from Vite Ruby to work for a
6
+ # typical Rails app.
7
+ module ViteRails::Installation
8
+ RAILS_TEMPLATES = Pathname.new(File.expand_path('../../templates', __dir__))
9
+
10
+ # Override: Setup a typical apps/web Hanami app to use Vite.
11
+ def setup_app_files
12
+ cp RAILS_TEMPLATES.join('config/rails-vite.json'), config.config_path
13
+ setup_content_security_policy root.join('config/initializers/content_security_policy.rb')
14
+ end
15
+
16
+ # Internal: Configure CSP rules that allow to load @vite/client correctly.
17
+ def setup_content_security_policy(csp_file)
18
+ return unless csp_file.exist?
19
+
20
+ inject_line_after csp_file, 'policy.script_src', <<-CSP
21
+ # You may need to enable this in production as well depending on your setup.
22
+ policy.script_src *policy.script_src, :blob if Rails.env.test?
23
+ CSP
24
+ inject_line_after csp_file, 'policy.connect_src', <<-CSP
25
+ # Allow @vite/client to hot reload changes in development
26
+ policy.connect_src *policy.connect_src, "ws://\#{ ViteRuby.config.host_with_port }" if Rails.env.development?
27
+ CSP
28
+ inject_line_after csp_file, 'policy.script_src', <<-CSP
29
+ # Allow @vite/client to hot reload changes in development
30
+ policy.script_src *policy.script_src, :unsafe_eval, "http://#{ ViteRuby.config.host_with_port }" if Rails.env.development?
31
+ CSP
32
+ end
33
+
34
+ # Override: Create a sample JS file and attempt to inject it in an HTML template.
35
+ def install_sample_files
36
+ cp RAILS_TEMPLATES.join('entrypoints/application.js'), config.resolved_entrypoints_dir.join('application.js')
37
+
38
+ if (layout_file = root.join('app/views/layouts/application.html.erb')).exist?
39
+ inject_line_before layout_file, '</head>', <<-HTML
40
+ <%= vite_client_tag %>
41
+ <%= vite_javascript_tag 'application' %>
42
+ HTML
43
+ end
44
+ end
45
+ end
46
+
47
+ ViteRuby::CLI::Install.prepend(ViteRails::Installation)
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Public: Allows to render HTML tags for scripts and styles processed by Vite.
4
+ module ViteRails::TagHelpers
5
+ # Public: Renders a script tag for vite/client to enable HMR in development.
6
+ def vite_client_tag
7
+ return unless src = vite_manifest.vite_client_src
8
+
9
+ tag.script(src: src, type: 'module')
10
+ end
11
+
12
+ # Public: Resolves the path for the specified Vite asset.
13
+ #
14
+ # Example:
15
+ # <%= vite_asset_path 'calendar.css' %> # => "/vite/assets/calendar-1016838bab065ae1e122.css"
16
+ def vite_asset_path(name, **options)
17
+ path_to_asset vite_manifest.path_for(name, **options)
18
+ end
19
+
20
+ # Public: Renders a <script> tag for the specified Vite entrypoints.
21
+ def vite_javascript_tag(*names,
22
+ type: 'module',
23
+ asset_type: :javascript,
24
+ skip_preload_tags: false,
25
+ skip_style_tags: false,
26
+ crossorigin: 'anonymous',
27
+ **options)
28
+ entries = vite_manifest.resolve_entries(*names, type: asset_type)
29
+ tags = javascript_include_tag(*entries.fetch(:scripts), crossorigin: crossorigin, type: type, **options)
30
+ tags << vite_preload_tag(*entries.fetch(:imports), crossorigin: crossorigin) unless skip_preload_tags
31
+ tags << stylesheet_link_tag(*entries.fetch(:stylesheets)) unless skip_style_tags
32
+ tags
33
+ end
34
+
35
+ # Public: Renders a <script> tag for the specified Vite entrypoints.
36
+ def vite_typescript_tag(*names, **options)
37
+ vite_javascript_tag(*names, asset_type: :typescript, extname: false, **options)
38
+ end
39
+
40
+ # Public: Renders a <link> tag for the specified Vite entrypoints.
41
+ def vite_stylesheet_tag(*names, **options)
42
+ style_paths = names.map { |name| vite_asset_path(name, type: :stylesheet) }
43
+ stylesheet_link_tag(*style_paths, **options)
44
+ end
45
+
46
+ private
47
+
48
+ # Internal: Returns the current manifest loaded by Vite Ruby.
49
+ def vite_manifest
50
+ ViteRuby.instance.manifest
51
+ end
52
+
53
+ # Internal: Renders a modulepreload link tag.
54
+ def vite_preload_tag(*sources, crossorigin:)
55
+ sources.map { |source|
56
+ href = path_to_asset(source)
57
+ try(:request).try(:send_early_hints, 'Link' => %(<#{ href }>; rel=modulepreload; as=script; crossorigin=#{ crossorigin }))
58
+ tag.link(rel: 'modulepreload', href: href, as: 'script', crossorigin: crossorigin)
59
+ }.join("\n").html_safe
60
+ end
61
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class ViteRails
4
- VERSION = '1.0.8'
3
+ module ViteRails
4
+ VERSION = '2.0.0'
5
5
  end
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "all": {
3
+ "sourceCodeDir": "app/frontend",
3
4
  "watchAdditionalPaths": []
4
5
  },
5
6
  "development": {
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vite_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 2.0.0
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-21 00:00:00.000000000 Z
11
+ date: 2021-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: railties
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,41 +25,41 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rack-proxy
28
+ name: vite_ruby
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.6.1
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.6.1
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: railties
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '5.1'
48
- type: :runtime
47
+ version: 1.3.0
48
+ type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '5.1'
54
+ version: 1.3.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: zeitwerk
56
+ name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- type: :runtime
62
+ type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
@@ -67,33 +67,19 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: bundler
70
+ name: rubocop-minitest
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 1.3.0
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 1.3.0
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - '='
88
- - !ruby/object:Gem::Version
89
- version: 0.93.1
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - '='
95
- - !ruby/object:Gem::Version
96
- version: 0.93.1
82
+ version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: rubocop-performance
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -119,75 +105,21 @@ files:
119
105
  - CONTRIBUTING.md
120
106
  - LICENSE.txt
121
107
  - README.md
122
- - lib/install/bin/vite
123
- - lib/install/binstubs.rb
124
- - lib/install/config/vite.config.ts
125
- - lib/install/config/vite.json
126
- - lib/install/javascript/entrypoints/application.js
127
- - lib/install/template.rb
128
- - lib/tasks/vite/binstubs.rake
129
- - lib/tasks/vite/build.rake
130
- - lib/tasks/vite/clean.rake
131
- - lib/tasks/vite/clobber.rake
132
- - lib/tasks/vite/info.rake
133
- - lib/tasks/vite/install.rake
134
- - lib/tasks/vite/install_dependencies.rake
135
- - lib/tasks/vite/verify_install.rake
108
+ - lib/tasks/vite.rake
136
109
  - lib/vite_rails.rb
137
- - lib/vite_rails/builder.rb
138
- - lib/vite_rails/commands.rb
139
110
  - lib/vite_rails/config.rb
140
- - lib/vite_rails/dev_server.rb
141
- - lib/vite_rails/dev_server_proxy.rb
142
111
  - lib/vite_rails/engine.rb
143
- - lib/vite_rails/helper.rb
144
- - lib/vite_rails/manifest.rb
145
- - lib/vite_rails/runner.rb
112
+ - lib/vite_rails/installation.rb
113
+ - lib/vite_rails/tag_helpers.rb
146
114
  - lib/vite_rails/version.rb
147
- - package.json
148
- - package/default.vite.json
149
- - test/builder_test.rb
150
- - test/command_test.rb
151
- - test/configuration_test.rb
152
- - test/dev_server_runner_test.rb
153
- - test/dev_server_test.rb
154
- - test/engine_rake_tasks_test.rb
155
- - test/helper_test.rb
156
- - test/manifest_test.rb
157
- - test/mode_test.rb
158
- - test/mounted_app/Rakefile
159
- - test/mounted_app/test/dummy/Rakefile
160
- - test/mounted_app/test/dummy/bin/rails
161
- - test/mounted_app/test/dummy/bin/rake
162
- - test/mounted_app/test/dummy/config.ru
163
- - test/mounted_app/test/dummy/config/application.rb
164
- - test/mounted_app/test/dummy/config/environment.rb
165
- - test/mounted_app/test/dummy/config/vite.json
166
- - test/mounted_app/test/dummy/package.json
167
- - test/rake_tasks_test.rb
168
- - test/test_app/Rakefile
169
- - test/test_app/app/javascript/entrypoints/application.js
170
- - test/test_app/app/javascript/entrypoints/multi_entry.css
171
- - test/test_app/app/javascript/entrypoints/multi_entry.js
172
- - test/test_app/bin/vite
173
- - test/test_app/config.ru
174
- - test/test_app/config/application.rb
175
- - test/test_app/config/environment.rb
176
- - test/test_app/config/vite.json
177
- - test/test_app/config/vite_public_root.yml
178
- - test/test_app/package.json
179
- - test/test_app/public/vite/manifest.json
180
- - test/test_app/some.config.js
181
- - test/test_app/yarn.lock
182
- - test/test_helper.rb
183
- - test/vite_runner_test.rb
184
- - test/webpacker_test.rb
185
- homepage: https://github.com/ElMassimo/vite_rails
115
+ - templates/config/rails-vite.json
116
+ - templates/entrypoints/application.js
117
+ homepage: https://github.com/ElMassimo/vite_ruby
186
118
  licenses:
187
119
  - MIT
188
120
  metadata:
189
- source_code_uri: https://github.com/ElMassimo/vite_rails/tree/v1.0.8
190
- changelog_uri: https://github.com/ElMassimo/vite_rails/blob/v1.0.8/CHANGELOG.md
121
+ source_code_uri: https://github.com/ElMassimo/vite_ruby/tree/vite_rails@2.0.0/vite_rails
122
+ changelog_uri: https://github.com/ElMassimo/vite_ruby/blob/vite_rails@2.0.0/vite_rails/CHANGELOG.md
191
123
  post_install_message:
192
124
  rdoc_options: []
193
125
  require_paths:
@@ -196,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
128
  requirements:
197
129
  - - ">="
198
130
  - !ruby/object:Gem::Version
199
- version: 2.4.0
131
+ version: '2.5'
200
132
  required_rubygems_version: !ruby/object:Gem::Requirement
201
133
  requirements:
202
134
  - - ">="
@@ -207,40 +139,4 @@ rubygems_version: 3.1.4
207
139
  signing_key:
208
140
  specification_version: 4
209
141
  summary: Use Vite in Rails and bring joy to your JavaScript experience
210
- test_files:
211
- - test/builder_test.rb
212
- - test/command_test.rb
213
- - test/configuration_test.rb
214
- - test/dev_server_runner_test.rb
215
- - test/dev_server_test.rb
216
- - test/engine_rake_tasks_test.rb
217
- - test/helper_test.rb
218
- - test/manifest_test.rb
219
- - test/mode_test.rb
220
- - test/mounted_app/Rakefile
221
- - test/mounted_app/test/dummy/Rakefile
222
- - test/mounted_app/test/dummy/bin/rails
223
- - test/mounted_app/test/dummy/bin/rake
224
- - test/mounted_app/test/dummy/config.ru
225
- - test/mounted_app/test/dummy/config/application.rb
226
- - test/mounted_app/test/dummy/config/environment.rb
227
- - test/mounted_app/test/dummy/config/vite.json
228
- - test/mounted_app/test/dummy/package.json
229
- - test/rake_tasks_test.rb
230
- - test/test_app/Rakefile
231
- - test/test_app/app/javascript/entrypoints/application.js
232
- - test/test_app/app/javascript/entrypoints/multi_entry.css
233
- - test/test_app/app/javascript/entrypoints/multi_entry.js
234
- - test/test_app/bin/vite
235
- - test/test_app/config.ru
236
- - test/test_app/config/application.rb
237
- - test/test_app/config/environment.rb
238
- - test/test_app/config/vite.json
239
- - test/test_app/config/vite_public_root.yml
240
- - test/test_app/package.json
241
- - test/test_app/public/vite/manifest.json
242
- - test/test_app/some.config.js
243
- - test/test_app/yarn.lock
244
- - test/test_helper.rb
245
- - test/vite_runner_test.rb
246
- - test/webpacker_test.rb
142
+ test_files: []
data/lib/install/bin/vite DELETED
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- ENV['RAILS_ENV'] ||= ENV['RACK_ENV'] || 'development'
5
- ENV['NODE_ENV'] ||= ENV['RAILS_ENV'] == 'development' ? 'development' : 'production'
6
-
7
- require 'pathname'
8
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', Pathname.new(__FILE__).realpath)
9
-
10
- require 'bundler/setup'
11
-
12
- require 'vite_rails'
13
-
14
- APP_ROOT = File.expand_path('..', __dir__)
15
- Dir.chdir(APP_ROOT) do
16
- ViteRails.run(ARGV)
17
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- say 'Copying binstubs'
4
- directory "#{ __dir__ }/bin", 'bin'
5
-
6
- chmod 'bin', 0o755 & ~File.umask, verbose: false
@@ -1,11 +0,0 @@
1
- import { defineConfig } from 'vite'
2
- import RubyPlugin from 'vite-plugin-ruby'
3
-
4
- export default defineConfig({
5
- plugins: [
6
- RubyPlugin(),
7
- ],
8
- optimizeDeps: {
9
- exclude: [/webpack/, /vite-plugin-ruby/],
10
- },
11
- })
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Install Vite Rails
4
- say 'Creating configuration files'
5
- copy_file "#{ __dir__ }/config/vite.json", ViteRails.config.config_path
6
- copy_file "#{ __dir__ }/config/vite.config.ts", Rails.root.join('vite.config.ts')
7
-
8
- say 'Creating entrypoints directory'
9
- directory "#{ __dir__ }/javascript/entrypoints", ViteRails.config.source_code_dir.join(ViteRails.config.entrypoints_dir)
10
-
11
- apply "#{ __dir__ }/binstubs.rb"
12
-
13
- git_ignore_path = Rails.root.join('.gitignore')
14
- if git_ignore_path.exist?
15
- append_to_file(git_ignore_path) {
16
- <<~GITIGNORE
17
-
18
- # Vite on Rails
19
- /public/vite
20
- /public/vite-dev
21
- /public/vite-test
22
- node_modules
23
- *.local
24
- .DS_Store
25
- GITIGNORE
26
- }
27
- end
28
-
29
- Dir.chdir(Rails.root) do
30
- say 'Installing JavaScript dependencies for Vite Rails'
31
- package_json = File.read("#{ __dir__ }/../../package.json")
32
-
33
- vite_version = package_json.match(/"vite": "(.*)"/)[1]
34
- plugin_version = package_json.match(/"vite-plugin-ruby": "(.*)"/)[1]
35
-
36
- say 'Installing vite as direct dependencies'
37
- run "yarn add vite@#{ vite_version } vite-plugin-ruby@#{ plugin_version }"
38
- end
39
-
40
- say 'Vite ⚡️ Rails successfully installed! 🎉', :green