vite_rails 1.0.10 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +55 -30
  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 +52 -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 -127
  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 -11
  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 -29
  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 -20
  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 -69
  32. data/lib/vite_rails/manifest.rb +0 -140
  33. data/lib/vite_rails/runner.rb +0 -53
  34. data/package.json +0 -16
  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 -101
  40. data/test/dev_server_test.rb +0 -9
  41. data/test/engine_rake_tasks_test.rb +0 -80
  42. data/test/helper_test.rb +0 -70
  43. data/test/manifest_test.rb +0 -79
  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.json +0 -22
  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 -68
@@ -0,0 +1,52 @@
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
+ if root.join('app/javascript').exist?
14
+ Dry::CLI::Utils::Files.replace_first_line config.config_path, 'app/frontend', %( "sourceCodeDir": "app/javascript",)
15
+ end
16
+ setup_content_security_policy root.join('config/initializers/content_security_policy.rb')
17
+ end
18
+
19
+ # Internal: Configure CSP rules that allow to load @vite/client correctly.
20
+ def setup_content_security_policy(csp_file)
21
+ return unless csp_file.exist?
22
+
23
+ inject_line_after csp_file, 'policy.script_src', <<~CSP
24
+ # You may need to enable this in production as well depending on your setup.
25
+ # policy.script_src *policy.script_src, :blob if Rails.env.test?
26
+ CSP
27
+ inject_line_after csp_file, 'policy.connect_src', <<~CSP
28
+ # Allow @vite/client to hot reload changes in development
29
+ # policy.connect_src *policy.connect_src, "ws://\#{ ViteRuby.config.host_with_port }" if Rails.env.development?
30
+ CSP
31
+ inject_line_after csp_file, 'policy.script_src', <<~CSP
32
+ # Allow @vite/client to hot reload changes in development
33
+ # policy.script_src *policy.script_src, :unsafe_eval, "http://#{ ViteRuby.config.host_with_port }" if Rails.env.development?
34
+ CSP
35
+ end
36
+
37
+ # Override: Create a sample JS file and attempt to inject it in an HTML template.
38
+ def install_sample_files
39
+ unless config.resolved_entrypoints_dir.join('application.js').exist?
40
+ cp RAILS_TEMPLATES.join('entrypoints/application.js'), config.resolved_entrypoints_dir.join('application.js')
41
+ end
42
+
43
+ if (layout_file = root.join('app/views/layouts/application.html.erb')).exist?
44
+ inject_line_before layout_file, '</head>', <<-HTML
45
+ <%= vite_client_tag %>
46
+ <%= vite_javascript_tag 'application' %>
47
+ HTML
48
+ end
49
+ end
50
+ end
51
+
52
+ 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.10'
3
+ module ViteRails
4
+ VERSION = '2.0.2'
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.10
4
+ version: 2.0.2
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-23 00:00:00.000000000 Z
11
+ date: 2021-02-11 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,74 +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/commands_test.rb
151
- - test/config_test.rb
152
- - test/dev_server_proxy_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/mounted_app/test/dummy/yarn.lock
168
- - test/rake_tasks_test.rb
169
- - test/runner_test.rb
170
- - test/test_app/Rakefile
171
- - test/test_app/app/frontend/entrypoints/application.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_additional_paths.json
178
- - test/test_app/config/vite_public_dir.json
179
- - test/test_app/package.json
180
- - test/test_app/public/vite-production/manifest.json
181
- - test/test_app/some.config.js
182
- - test/test_app/yarn.lock
183
- - test/test_helper.rb
184
- 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
185
118
  licenses:
186
119
  - MIT
187
120
  metadata:
188
- source_code_uri: https://github.com/ElMassimo/vite_rails/tree/v1.0.10
189
- changelog_uri: https://github.com/ElMassimo/vite_rails/blob/v1.0.10/CHANGELOG.md
121
+ source_code_uri: https://github.com/ElMassimo/vite_ruby/tree/vite_rails@2.0.2/vite_rails
122
+ changelog_uri: https://github.com/ElMassimo/vite_ruby/blob/vite_rails@2.0.2/vite_rails/CHANGELOG.md
190
123
  post_install_message:
191
124
  rdoc_options: []
192
125
  require_paths:
@@ -195,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
128
  requirements:
196
129
  - - ">="
197
130
  - !ruby/object:Gem::Version
198
- version: 2.5.0
131
+ version: '2.5'
199
132
  required_rubygems_version: !ruby/object:Gem::Requirement
200
133
  requirements:
201
134
  - - ">="
@@ -206,39 +139,4 @@ rubygems_version: 3.1.4
206
139
  signing_key:
207
140
  specification_version: 4
208
141
  summary: Use Vite in Rails and bring joy to your JavaScript experience
209
- test_files:
210
- - test/builder_test.rb
211
- - test/commands_test.rb
212
- - test/config_test.rb
213
- - test/dev_server_proxy_test.rb
214
- - test/dev_server_test.rb
215
- - test/engine_rake_tasks_test.rb
216
- - test/helper_test.rb
217
- - test/manifest_test.rb
218
- - test/mode_test.rb
219
- - test/mounted_app/Rakefile
220
- - test/mounted_app/test/dummy/Rakefile
221
- - test/mounted_app/test/dummy/bin/rails
222
- - test/mounted_app/test/dummy/bin/rake
223
- - test/mounted_app/test/dummy/config.ru
224
- - test/mounted_app/test/dummy/config/application.rb
225
- - test/mounted_app/test/dummy/config/environment.rb
226
- - test/mounted_app/test/dummy/config/vite.json
227
- - test/mounted_app/test/dummy/package.json
228
- - test/mounted_app/test/dummy/yarn.lock
229
- - test/rake_tasks_test.rb
230
- - test/runner_test.rb
231
- - test/test_app/Rakefile
232
- - test/test_app/app/frontend/entrypoints/application.js
233
- - test/test_app/bin/vite
234
- - test/test_app/config.ru
235
- - test/test_app/config/application.rb
236
- - test/test_app/config/environment.rb
237
- - test/test_app/config/vite.json
238
- - test/test_app/config/vite_additional_paths.json
239
- - test/test_app/config/vite_public_dir.json
240
- - test/test_app/package.json
241
- - test/test_app/public/vite-production/manifest.json
242
- - test/test_app/some.config.js
243
- - test/test_app/yarn.lock
244
- - test/test_helper.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,14 +0,0 @@
1
- {
2
- "all": {
3
- "watchAdditionalPaths": []
4
- },
5
- "development": {
6
- "autoBuild": true,
7
- "publicOutputDir": "vite-dev",
8
- "port": 3036
9
- },
10
- "test": {
11
- "autoBuild": true,
12
- "publicOutputDir": "vite-test"
13
- }
14
- }
@@ -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.resolved_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