vite_rails 1.0.12 → 2.0.5

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 +36 -0
  3. data/README.md +44 -35
  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/{lib/install/config/vite.json → templates/config/rails-vite.json} +1 -0
  12. data/{lib/install/javascript → templates}/entrypoints/application.js +0 -0
  13. metadata +27 -168
  14. data/CONTRIBUTING.md +0 -33
  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 -8
  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/config/vite.json +0 -14
  53. data/test/mounted_app/test/dummy/package.json +0 -8
  54. data/test/mounted_app/test/dummy/yarn.lock +0 -208
  55. data/test/rake_tasks_test.rb +0 -60
  56. data/test/runner_test.rb +0 -31
  57. data/test/test_app/Rakefile +0 -5
  58. data/test/test_app/app/frontend/entrypoints/application.js +0 -2
  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 -18
  64. data/test/test_app/config/vite_additional_paths.json +0 -5
  65. data/test/test_app/config/vite_public_dir.json +0 -5
  66. data/test/test_app/package.json +0 -13
  67. data/test/test_app/public/vite-production/manifest-assets.json +0 -10
  68. data/test/test_app/public/vite-production/manifest.json +0 -39
  69. data/test/test_app/some.config.js +0 -0
  70. data/test/test_app/yarn.lock +0 -11
  71. data/test/test_helper.rb +0 -68
@@ -4,36 +4,32 @@ require 'rails/railtie'
4
4
 
5
5
  class ViteRails::Engine < Rails::Engine
6
6
  initializer 'vite_rails.proxy' do |app|
7
- app.middleware.insert_before 0, ViteRails::DevServerProxy, ssl_verify_none: true if ViteRails.run_proxy?
7
+ app.middleware.insert_before 0, ViteRuby::DevServerProxy, ssl_verify_none: true if ViteRuby.run_proxy?
8
8
  end
9
9
 
10
10
  initializer 'vite_rails.helper' do
11
11
  ActiveSupport.on_load(:action_controller) do
12
- ActionController::Base.helper(ViteRails::Helper)
12
+ ActionController::Base.helper(ViteRails::TagHelpers)
13
13
  end
14
14
 
15
15
  ActiveSupport.on_load(:action_view) do
16
- include ViteRails::Helper
16
+ include ViteRails::TagHelpers
17
17
  end
18
18
  end
19
19
 
20
20
  initializer 'vite_rails.logger' do
21
21
  config.after_initialize do
22
- ViteRails.logger = if ::Rails.logger.respond_to?(:tagged)
23
- ::Rails.logger
24
- else
25
- ActiveSupport::TaggedLogging.new(::Rails.logger)
26
- end
22
+ ViteRuby.instance.logger = Rails.logger
27
23
  end
28
24
  end
29
25
 
30
26
  initializer 'vite_rails.bootstrap' do
31
27
  if defined?(Rails::Server) || defined?(Rails::Console)
32
- ViteRails.bootstrap
28
+ ViteRuby.bootstrap
33
29
  if defined?(Spring)
34
30
  require 'spring/watcher'
35
- Spring.after_fork { ViteRails.bootstrap }
36
- Spring.watch(ViteRails.config.config_path)
31
+ Spring.after_fork { ViteRuby.bootstrap }
32
+ Spring.watch(ViteRuby.config.config_path)
37
33
  end
38
34
  end
39
35
  end
@@ -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 dir = %w[app/javascript app/packs].find { |path| root.join(path).exist? }
14
+ Dry::CLI::Utils::Files.replace_first_line config.config_path, 'app/frontend', %( "sourceCodeDir": "#{ dir }",)
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, extname: false, **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, **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.12'
3
+ module ViteRails
4
+ VERSION = '2.0.5'
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,113 +1,63 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vite_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.12
4
+ version: 2.0.5
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-29 00:00:00.000000000 Z
11
+ date: 2021-03-18 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
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '5.1'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '5.1'
27
- - !ruby/object:Gem::Dependency
28
- name: rack-proxy
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
20
+ - - "<"
32
21
  - !ruby/object:Gem::Version
33
- version: 0.6.1
22
+ version: '8'
34
23
  type: :runtime
35
24
  prerelease: false
36
25
  version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 0.6.1
41
- - !ruby/object:Gem::Dependency
42
- name: railties
43
- requirement: !ruby/object:Gem::Requirement
44
26
  requirements:
45
27
  - - ">="
46
28
  - !ruby/object:Gem::Version
47
29
  version: '5.1'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
30
+ - - "<"
53
31
  - !ruby/object:Gem::Version
54
- version: '5.1'
32
+ version: '8'
55
33
  - !ruby/object:Gem::Dependency
56
- name: zeitwerk
34
+ name: vite_ruby
57
35
  requirement: !ruby/object:Gem::Requirement
58
36
  requirements:
59
- - - ">="
37
+ - - "~>"
60
38
  - !ruby/object:Gem::Version
61
- version: '0'
39
+ version: '1.0'
62
40
  type: :runtime
63
41
  prerelease: false
64
42
  version_requirements: !ruby/object:Gem::Requirement
65
43
  requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: bundler
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: 1.3.0
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
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
- - - '='
44
+ - - "~>"
95
45
  - !ruby/object:Gem::Version
96
- version: 0.93.1
46
+ version: '1.0'
97
47
  - !ruby/object:Gem::Dependency
98
- name: rubocop-performance
48
+ name: spring
99
49
  requirement: !ruby/object:Gem::Requirement
100
50
  requirements:
101
- - - ">="
51
+ - - "~>"
102
52
  - !ruby/object:Gem::Version
103
- version: '0'
53
+ version: '2.1'
104
54
  type: :development
105
55
  prerelease: false
106
56
  version_requirements: !ruby/object:Gem::Requirement
107
57
  requirements:
108
- - - ">="
58
+ - - "~>"
109
59
  - !ruby/object:Gem::Version
110
- version: '0'
60
+ version: '2.1'
111
61
  description:
112
62
  email:
113
63
  - maximomussini@gmail.com
@@ -116,78 +66,23 @@ extensions: []
116
66
  extra_rdoc_files: []
117
67
  files:
118
68
  - CHANGELOG.md
119
- - CONTRIBUTING.md
120
69
  - LICENSE.txt
121
70
  - 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
71
+ - lib/tasks/vite.rake
136
72
  - lib/vite_rails.rb
137
- - lib/vite_rails/builder.rb
138
- - lib/vite_rails/commands.rb
139
73
  - lib/vite_rails/config.rb
140
- - lib/vite_rails/dev_server.rb
141
- - lib/vite_rails/dev_server_proxy.rb
142
74
  - lib/vite_rails/engine.rb
143
- - lib/vite_rails/helper.rb
144
- - lib/vite_rails/manifest.rb
145
- - lib/vite_rails/runner.rb
75
+ - lib/vite_rails/installation.rb
76
+ - lib/vite_rails/tag_helpers.rb
146
77
  - 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-assets.json
181
- - test/test_app/public/vite-production/manifest.json
182
- - test/test_app/some.config.js
183
- - test/test_app/yarn.lock
184
- - test/test_helper.rb
185
- homepage: https://github.com/ElMassimo/vite_rails
78
+ - templates/config/rails-vite.json
79
+ - templates/entrypoints/application.js
80
+ homepage: https://github.com/ElMassimo/vite_ruby
186
81
  licenses:
187
82
  - MIT
188
83
  metadata:
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
84
+ source_code_uri: https://github.com/ElMassimo/vite_ruby/tree/vite_rails@2.0.5/vite_rails
85
+ changelog_uri: https://github.com/ElMassimo/vite_ruby/blob/vite_rails@2.0.5/vite_rails/CHANGELOG.md
191
86
  post_install_message:
192
87
  rdoc_options: []
193
88
  require_paths:
@@ -196,7 +91,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
91
  requirements:
197
92
  - - ">="
198
93
  - !ruby/object:Gem::Version
199
- version: 2.5.0
94
+ version: '2.5'
200
95
  required_rubygems_version: !ruby/object:Gem::Requirement
201
96
  requirements:
202
97
  - - ">="
@@ -207,40 +102,4 @@ rubygems_version: 3.1.4
207
102
  signing_key:
208
103
  specification_version: 4
209
104
  summary: Use Vite in Rails and bring joy to your JavaScript experience
210
- test_files:
211
- - test/builder_test.rb
212
- - test/commands_test.rb
213
- - test/config_test.rb
214
- - test/dev_server_proxy_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/mounted_app/test/dummy/yarn.lock
230
- - test/rake_tasks_test.rb
231
- - test/runner_test.rb
232
- - test/test_app/Rakefile
233
- - test/test_app/app/frontend/entrypoints/application.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_additional_paths.json
240
- - test/test_app/config/vite_public_dir.json
241
- - test/test_app/package.json
242
- - test/test_app/public/vite-production/manifest-assets.json
243
- - test/test_app/public/vite-production/manifest.json
244
- - test/test_app/some.config.js
245
- - test/test_app/yarn.lock
246
- - test/test_helper.rb
105
+ test_files: []
data/CONTRIBUTING.md DELETED
@@ -1,33 +0,0 @@
1
- ## Setting Up a Development Environment
2
-
3
- 1. Install [Yarn](https://yarnpkg.com/)
4
-
5
- 2. Run the following commands to set up the development environment.
6
-
7
- ```
8
- bundle install
9
- ```
10
-
11
- ## Making sure your changes pass all tests
12
- There are a number of automated checks which run on GitHub Actions when a pull request is created.
13
- You can run those checks on your own locally to make sure that your changes would not break the CI build.
14
-
15
- ### 1. Check the code for JavaScript style violations
16
- ```
17
- yarn lint
18
- ```
19
-
20
- ### 2. Check the code for Ruby style violations
21
- ```
22
- bundle exec rubocop
23
- ```
24
-
25
- ### 3. Run the JavaScript test suite
26
- ```
27
- yarn test
28
- ```
29
-
30
- ### 4. Run the Ruby test suite
31
- ```
32
- bundle exec rake test
33
- ```