vite_rails 1.0.0 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad566a46292f652f6533c40901952359b27afdc98224af3f67bd4414a906a951
4
- data.tar.gz: f3a035a74e1f3d092b99d46a25dfd32cd2d6cb50071f7dc971473f0958a76893
3
+ metadata.gz: c1036b7b19ba86a9e76a58b29bac36a0e919bdadeac59846a37a13f5f5d3690b
4
+ data.tar.gz: 51fc54fa2138c581ca9f92182e14faa2108cba30084656718f7792c3bf5947b4
5
5
  SHA512:
6
- metadata.gz: 77d1dd2b22130bdee130dc814e4453d1c63ad6823c3cc0cd9e6a1f8a17c3f02adb31f8924e2f97d686dc707bbd2b56b327948e6e12f5bcdf2c47132f62293891
7
- data.tar.gz: 635ea8d95ed3e8cd3dc0e2f44fd962fdf3920578bdeb51f6cabf2be251035555371d20adb1ac9ab5a6e81d6620def27a0b646fc2f3bd8f769869d328c1ef5c40
6
+ metadata.gz: 13857bbd2f3b308357b82663e140a1630699259274a5bab6c738c84444ab02aba67ef0b361a9598528f60186ec8a3748584885492026a36c928db77976ec7e5b
7
+ data.tar.gz: e15766ff9f599d4f0e18b2e1a30a3cd38182dc36efc479371c474f54ed0866c8451469952afc267f4247351592a3e6651010b2b5db28ac58e99e3bc60deef3f0
@@ -1,3 +1,11 @@
1
- ## Vite Rails 1.0.0
1
+ ## Vite Rails 1.0.5 (2020-01-20)
2
+
3
+ - Automatically add `<link rel="modulepreload">` and `<link rel="stylesheet">` when using `vite_javascript_tag`, which simplifies usage.
4
+
5
+ ## Vite Rails 1.0.4 (2020-01-19)
6
+
7
+ - Remove Vue specific examples from installation templates, to ensure they always run.
8
+
9
+ ## Vite Rails 1.0.0 (2020-01-18)
2
10
 
3
11
  Initial Version
data/README.md CHANGED
@@ -22,6 +22,7 @@
22
22
  [vite_rails]: https://github.com/ElMassimo/vite_rails
23
23
  [webpacker]: https://github.com/rails/webpacker
24
24
  [vite]: http://vitejs.dev/
25
+ [config file]: https://github.com/ElMassimo/vite_rails/blob/main/package/default.vite.json
25
26
 
26
27
  [__Vite Rails__][vite_rails] allows you to use [Vite] to power the frontend.
27
28
 
@@ -32,11 +33,12 @@
32
33
  - 🤖 Automatic Entrypoint Detection
33
34
  - ⚡️ Hot Reload
34
35
  - ⚙️ Rake Tasks
35
- - 🪝 Hooks to <kbd>assets:precompile</kbd> and friends
36
+ - 🤝 Integrated with <kbd>assets:precompile</kbd> and friends
37
+ - And more! (detects changes, and builds automatically if Vite is not running)
36
38
 
37
39
  ## Documentation 📖
38
40
 
39
- Coming Soon!
41
+ A documentation website is coming soon!
40
42
 
41
43
  ## Installation 💿
42
44
 
@@ -55,6 +57,71 @@ bin/rake vite:install
55
57
 
56
58
  This will generate configuration files and a sample setup.
57
59
 
60
+ ## Usage 🚀
61
+
62
+ Drawing inspiration from [webpacker], any files in `app/javascript/entrypoints`
63
+ will be considered entries to your application (SPAs or pages).
64
+
65
+ These files will be detected, and passed on to Vite, all configuration is done
66
+ for you.
67
+
68
+ ### Imports ⤵️
69
+
70
+ For convenience, a `~/` import alias is configured to `app/javascript`, allowing
71
+ you to use absolute paths:
72
+
73
+ ```js
74
+ import { createApp } from 'vue'
75
+ import App from '~/App.vue'
76
+ import '~/channels'
77
+
78
+ createApp(App).mount('#app')
79
+ ```
80
+
81
+ ### Tags 🏷
82
+
83
+ `vite_typescript_tag`, `vite_javascript_tag`, and `vite_stylesheet_tag` can be
84
+ used to output `<script>` and `<link>` tags in your Rails layouts or templates.
85
+
86
+ ```html
87
+ <head>
88
+ <title>Joie</title>
89
+ <%= csrf_meta_tags %>
90
+ <%= csp_meta_tag %>
91
+
92
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
93
+ <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
94
+
95
+ <%= vite_stylesheet_tag 'strange' %>
96
+ <%= vite_typescript_tag 'application' %>
97
+ </head>
98
+ ```
99
+
100
+ For other types of assets, you can use `vite_asset_path` and pass that to the appropriate tag helper.
101
+
102
+ ## Configuration ⚙️
103
+
104
+ This is what your `config/vite.json` might look like:
105
+
106
+ ```json
107
+ {
108
+ "all": {
109
+ "watchAdditionalPaths": []
110
+ },
111
+ "development": {
112
+ "autoBuild": true,
113
+ "publicOutputDir": "vite-dev",
114
+ "port": 3036
115
+ },
116
+ "test": {
117
+ "autoBuild": true,
118
+ "publicOutputDir": "vite-test"
119
+ }
120
+ }
121
+ ```
122
+
123
+ Check [this file][config file] to see all config options, documentation is coming soon.
124
+
58
125
  ## Inspiration 💡
59
126
 
60
127
  - [webpacker]
@@ -0,0 +1,17 @@
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
@@ -0,0 +1,11 @@
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
+ })
@@ -0,0 +1,14 @@
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
+ }
@@ -0,0 +1,18 @@
1
+ // Example: Load Rails libraries in Vite.
2
+ //
3
+ // import '@rails/ujs'
4
+ //
5
+ // import Turbolinks from 'turbolinks'
6
+ // import ActiveStorage from '@rails/activestorage'
7
+ //
8
+ // // Import all channels.
9
+ // import.meta.globEager('./**/*_channel.js')
10
+ //
11
+ // Turbolinks.start()
12
+ // ActiveStorage.start()
13
+
14
+ // Example: Import a stylesheet in app/javascript/index.css
15
+ // import '~/index.css'
16
+
17
+ console.log('Vite ⚡️ Rails')
18
+
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Install ViteRails
3
+ # Install Vite Rails
4
+ say 'Creating configuration files'
4
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')
5
7
 
6
- if Dir.exist?(ViteRails.config.source_code_dir)
7
- say 'The JavaScript app source directory already exists. Move it and try again to see a basic setup.'
8
- else
9
- say 'Creating JavaScript app source directory'
10
- directory "#{ __dir__ }/javascript", ViteRails.config.source_code_dir
11
- end
8
+ say 'Creating entrypoints directory'
9
+ directory "#{ __dir__ }/javascript/entrypoints", ViteRails.config.source_code_dir.join(ViteRails.config.entrypoints_dir)
12
10
 
13
11
  apply "#{ __dir__ }/binstubs.rb"
14
12
 
@@ -28,14 +26,6 @@ if git_ignore_path.exist?
28
26
  }
29
27
  end
30
28
 
31
- install = if Rails.root.join('yarn.lock').exist?
32
- 'yarn add'
33
- elsif Rails.root.join('pnpm-lock.yaml').exist?
34
- 'pnpm install'
35
- else
36
- 'npm install'
37
- end
38
-
39
29
  Dir.chdir(Rails.root) do
40
30
  say 'Installing JavaScript dependencies for Vite Rails'
41
31
  package_json = File.read("#{ __dir__ }/../../package.json")
@@ -44,19 +34,7 @@ Dir.chdir(Rails.root) do
44
34
  plugin_version = package_json.match(/"vite-plugin-ruby": "(.*)"/)[1]
45
35
 
46
36
  say 'Installing vite as direct dependencies'
47
- run "#{ install } vite@#{ vite_version } vite-plugin-ruby@#{ plugin_version }"
48
- end
49
-
50
- if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR > 1
51
- src = begin
52
- "#{ ViteRails.config.protocol }://#{ ViteRails.config.host_with_port }"
53
- rescue StandardError
54
- 'http://localhost:3036'
55
- end
56
- say 'You need to allow vite-dev-server host as allowed origin for connect-src.', :yellow
57
- say 'This can be done in Rails 5.2+ for development environment in the CSP initializer', :yellow
58
- say 'config/initializers/content_security_policy.rb with a snippet like this:', :yellow
59
- say %(policy.connect_src :self, :https, "http://#{ src }", "ws://#{ src }" if Rails.env.development?), :yellow
37
+ run "yarn add vite@#{ vite_version } vite-plugin-ruby@#{ plugin_version }"
60
38
  end
61
39
 
62
- say 'ViteRails successfully installed 🎉 🍰', :green
40
+ say 'Vite ⚡️ Rails successfully installed! 🎉', :green
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ binstubs_template_path = File.expand_path('../../install/binstubs.rb', __dir__).freeze
4
+ bin_path = ENV['BUNDLE_BIN'] || Rails.root.join('bin')
5
+
6
+ namespace :vite do
7
+ desc 'Installs Vite binstubs in this application'
8
+ task :binstubs do |task|
9
+ prefix = task.name.split(/#|vite:binstubs/).first
10
+ exec "#{ RbConfig.ruby } #{ bin_path }/rails #{ prefix }app:template LOCATION=#{ binstubs_template_path }"
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ $stdout.sync = true
4
+
5
+ def enhance_assets_precompile
6
+ Rake::Task['assets:precompile'] do |task|
7
+ prefix = task.name.split(/#|assets:precompile/).first
8
+
9
+ Rake::Task["#{ prefix }vite:build"].invoke
10
+ end
11
+ end
12
+
13
+ namespace :vite do
14
+ desc 'Compile JavaScript packs using vite for production with digests'
15
+ task build: [:'vite:verify_install', :environment] do
16
+ ViteRails.with_node_env(ENV.fetch('NODE_ENV', 'production')) do
17
+ ViteRails.ensure_log_goes_to_stdout do
18
+ ViteRails.build || exit!
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ # Compile packs after we've compiled all other assets during precompilation
25
+ skip_vite_precompile = %w[no false n f].include?(ENV['VITE_RUBY_PRECOMPILE'])
26
+
27
+ unless skip_vite_precompile
28
+ if Rake::Task.task_defined?('assets:precompile')
29
+ enhance_assets_precompile
30
+ else
31
+ Rake::Task.define_task('assets:precompile' => [:'vite:install_dependencies', :'vite:build'])
32
+ end
33
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ $stdout.sync = true
4
+
5
+ namespace :vite do
6
+ desc 'Remove old compiled vites'
7
+ task :clean, [:keep, :age] => [:'vite:verify_install', :environment] do |_, args|
8
+ ViteRails.ensure_log_goes_to_stdout do
9
+ ViteRails.clean(keep_up_to: Integer(args.keep || 2), age_in_seconds: Integer(args.age || 3600))
10
+ end
11
+ end
12
+ end
13
+
14
+ skip_vite_clean = %w[no false n f].include?(ENV['VITE_RUBY_PRECOMPILE'])
15
+
16
+ unless skip_vite_clean
17
+ # Run clean if the assets:clean is run
18
+ if Rake::Task.task_defined?('assets:clean')
19
+ Rake::Task['assets:clean'].enhance do
20
+ Rake::Task['vite:clean'].invoke
21
+ end
22
+ else
23
+ Rake::Task.define_task('assets:clean' => 'vite:clean')
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :vite do
4
+ desc 'Remove the vite build output directory'
5
+ task clobber: [:'vite:verify_install', :environment] do
6
+ ViteRails.clobber
7
+ $stdout.puts "Removed vite build output directory #{ ViteRails.config.build_output_dir }"
8
+ end
9
+ end
10
+
11
+ skip_vite_clobber = %w[no false n f].include?(ENV['VITE_RUBY_PRECOMPILE'])
12
+
13
+ unless skip_vite_clobber
14
+ # Run clobber if the assets:clobber is run
15
+ if Rake::Task.task_defined?('assets:clobber')
16
+ Rake::Task['assets:clobber'].enhance do
17
+ Rake::Task['vite:clobber'].invoke
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :vite do
4
+ desc "Provide information on ViteRails's environment"
5
+ task :info do
6
+ Dir.chdir(Rails.root) do
7
+ $stdout.puts "Ruby: #{ `ruby --version` }"
8
+ $stdout.puts "Rails: #{ Rails.version }"
9
+ $stdout.puts "ViteRails: #{ ViteRails::VERSION }"
10
+ $stdout.puts "Node: #{ `node --version` }"
11
+ $stdout.puts "Yarn: #{ `yarn --version` }"
12
+
13
+ $stdout.puts "\n"
14
+ $stdout.puts "vite-plugin-ruby: \n#{ `npm list vite-plugin-ruby version` }"
15
+
16
+ $stdout.puts "Is bin/vite present?: #{ File.exist? 'bin/vite' }"
17
+ $stdout.puts "Is bin/vite-dev-server present?: #{ File.exist? 'bin/vite-dev-server' }"
18
+ $stdout.puts "Is bin/yarn present?: #{ File.exist? 'bin/yarn' }"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ install_template_path = File.expand_path('../../install/template.rb', __dir__).freeze
4
+ bin_path = ENV['BUNDLE_BIN'] || Rails.root.join('bin')
5
+
6
+ namespace :vite do
7
+ desc 'Install ViteRails in this application'
8
+ task :install do |task|
9
+ prefix = task.name.split(/#|vite:install/).first
10
+ exec "#{ RbConfig.ruby } #{ bin_path }/rails #{ prefix }app:template LOCATION=#{ install_template_path }"
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :vite do
4
+ desc 'Support for older Rails versions. Install all JavaScript dependencies as specified via Yarn'
5
+ task :install_dependencies do
6
+ valid_node_envs = %w[test development production]
7
+ node_env = ENV.fetch('NODE_ENV') { valid_node_envs.include?(Rails.env) ? Rails.env : 'production' }
8
+ Dir.chdir(Rails.root) do
9
+ install_command = if Rails.root.join('yarn.lock').exist?
10
+ v1 = `yarn --version`.start_with?('1')
11
+ "yarn install #{ v1 ? '--no-progress --frozen-lockfile' : '--immutable' }"
12
+ elsif Rails.root.join('pnpm-lock.yaml').exist?
13
+ 'pnpm install'
14
+ else
15
+ 'npm ci'
16
+ end
17
+ system({ 'NODE_ENV' => node_env }, install_command)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :vite do
4
+ desc 'Verifies if Vite Rails is installed'
5
+ task :verify_install do
6
+ unless File.exist?(Rails.root.join('bin/vite'))
7
+ warn <<~WARN
8
+ vite binstub not found.
9
+ Have you run rails vite:install?
10
+ Make sure the bin directory and bin/vite are not included in .gitignore
11
+ WARN
12
+ exit!
13
+ end
14
+ unless ViteRails.config.config_path.exist?
15
+ path = ViteRails.config.config_path.relative_path_from(Pathname.new(pwd)).to_s
16
+ warn <<~WARN
17
+ Configuration #{ path } file for vite-plugin-ruby not found.
18
+ Make sure vite:install has run successfully before running dependent tasks.
19
+ WARN
20
+ exit!
21
+ end
22
+ end
23
+ end
@@ -22,7 +22,7 @@ class ViteRails
22
22
  cattr_accessor(:logger) { ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT)) }
23
23
 
24
24
  class << self
25
- delegate :config, :builder, :manifest, :commands, :dev_server, to: :instance
25
+ delegate :config, :builder, :manifest, :commands, :dev_server, :dev_server_running?, to: :instance
26
26
  delegate :mode, to: :config
27
27
  delegate :bootstrap, :clean, :clobber, :build, to: :commands
28
28
 
@@ -62,6 +62,11 @@ class ViteRails
62
62
  end
63
63
  end
64
64
 
65
+ # Public: Returns true if the Vite development server is running.
66
+ def dev_server_running?
67
+ ViteRails.run_proxy? && dev_server.running?
68
+ end
69
+
65
70
  # Public: Current instance configuration for Vite.
66
71
  def config
67
72
  @config ||= ViteRails::Config.resolve_config
@@ -66,8 +66,6 @@ private
66
66
  # Internal: Used to load a JSON file from the specified path.
67
67
  def load_json(path)
68
68
  JSON.parse(File.read(File.expand_path(path))).deep_transform_keys(&:underscore)
69
- rescue => error
70
- (require 'pry-byebug';binding.pry;);
71
69
  end
72
70
 
73
71
  # Internal: Retrieves a configuration option from environment variables.
@@ -14,7 +14,7 @@ class ViteRails::DevServerProxy < Rack::Proxy
14
14
 
15
15
  # Rack: Intercept asset requests and send them to the Vite server.
16
16
  def perform_request(env)
17
- if vite_should_handle?(env['REQUEST_URI']) && dev_server.running?
17
+ if vite_should_handle?(env['REQUEST_URI'], env['HTTP_REFERER']) && dev_server.running?
18
18
  env['REQUEST_URI'] = env['REQUEST_URI']
19
19
  .sub(vite_asset_url_prefix, '/')
20
20
  .sub('.ts.js', '.ts') # Patch: Rails helpers always append the extension.
@@ -36,9 +36,11 @@ private
36
36
 
37
37
  delegate :config, :dev_server, to: :@vite_rails
38
38
 
39
- def vite_should_handle?(url)
40
- url.start_with?(vite_asset_url_prefix) || url.start_with?(VITE_DEPENDENCY_PREFIX) ||
41
- url.include?('?t=') # Direct Hot Reload
39
+ def vite_should_handle?(url, referer)
40
+ return true if url.start_with?(vite_asset_url_prefix) # Vite Asset
41
+ return true if url.start_with?(VITE_DEPENDENCY_PREFIX) # Vite Package Asset
42
+ return true if url.include?('?t=') # Hot Reload
43
+ return true if referer && URI.parse(referer).path.start_with?(vite_asset_url_prefix) # Entry Imported from another Entry.
42
44
  end
43
45
 
44
46
  def vite_asset_url_prefix
@@ -2,6 +2,8 @@
2
2
 
3
3
  # Public: Allows to render HTML tags for scripts and styles processed by Vite.
4
4
  module ViteRails::Helper
5
+ DEFAULT_VITE_SKIP_PRELOAD_TAGS = Rails::VERSION::MAJOR <= 5 && Rails::VERSION::MINOR < 2
6
+
5
7
  # Public: Returns the current Vite Rails instance.
6
8
  def current_vite_instance
7
9
  ViteRails.instance
@@ -12,30 +14,49 @@ module ViteRails::Helper
12
14
  # Example:
13
15
  # <%= vite_asset_path 'calendar.css' %> # => "/vite/assets/calendar-1016838bab065ae1e122.css"
14
16
  def vite_asset_path(name, **options)
15
- current_vite_instance.manifest.lookup!(name, **options)
17
+ current_vite_instance.manifest.lookup!(name, **options).fetch('file')
16
18
  end
17
19
 
18
20
  # Public: Renders a <script> tag for the specified Vite entrypoints.
19
- def vite_javascript_tag(*names, type: 'module', **options)
20
- javascript_include_tag(*sources_from_vite_manifest_entrypoints(names, type: :javascript), type: type, **options)
21
+ def vite_javascript_tag(*names,
22
+ type: 'module',
23
+ asset_type: :javascript,
24
+ skip_preload_tags: DEFAULT_VITE_SKIP_PRELOAD_TAGS,
25
+ skip_style_tags: false,
26
+ crossorigin: 'anonymous',
27
+ **options)
28
+ js_entries = names.map { |name| current_vite_instance.manifest.lookup!(name, type: asset_type) }
29
+ js_tags = javascript_include_tag(*js_entries.map { |entry| entry['file'] }, type: type, crossorigin: crossorigin, **options)
30
+
31
+ unless skip_preload_tags || ViteRails.dev_server.running?
32
+ preload_paths = js_entries.flat_map { |entry| entry['imports'] }.compact.uniq
33
+ preload_tags = preload_paths.map { |path| preload_link_tag(path, crossorigin: crossorigin) }
34
+ end
35
+
36
+ unless skip_style_tags || ViteRails.dev_server.running?
37
+ style_paths = names.map { |name| current_vite_instance.manifest.lookup(name, type: :stylesheet)&.fetch('file') }.compact
38
+ style_tags = stylesheet_link_tag(*style_paths)
39
+ end
40
+
41
+ safe_join [js_tags, preload_tags, style_tags]
21
42
  end
22
43
 
23
44
  # Public: Renders a <script> tag for the specified Vite entrypoints.
24
45
  #
25
46
  # NOTE: Because TypeScript is not a valid target in browsers, we only specify
26
47
  # the ts file when running the Vite development server.
27
- def vite_typescript_tag(*names, type: 'module', **options)
28
- javascript_include_tag(*sources_from_vite_manifest_entrypoints(names, type: :typescript), type: type, **options)
48
+ def vite_typescript_tag(*names, **options)
49
+ vite_javascript_tag(*names, asset_type: :typescript, **options)
29
50
  end
30
51
 
31
52
  # Public: Renders a <link> tag for the specified Vite entrypoints.
32
53
  def vite_stylesheet_tag(*names, **options)
33
- stylesheet_link_tag(*sources_from_vite_manifest_entrypoints(names, type: :stylesheet), **options)
54
+ stylesheet_link_tag(*sources_from_vite_manifest(names, type: :stylesheet), **options)
34
55
  end
35
56
 
36
57
  private
37
58
 
38
- def sources_from_vite_manifest_entrypoints(names, type:)
39
- names.flat_map { |name| vite_asset_path(name, type: type) }.uniq
59
+ def sources_from_vite_manifest(names, type:)
60
+ names.map { |name| vite_asset_path(name, type: type) }
40
61
  end
41
62
  end
@@ -5,7 +5,7 @@
5
5
  #
6
6
  # Example:
7
7
  # lookup_entrypoint('calendar', type: :javascript)
8
- # => "/vite/assets/calendar-1016838bab065ae1e314.js"
8
+ # => { "file" => "/vite/assets/calendar-1016838bab065ae1e314.js", "imports" => [] }
9
9
  #
10
10
  # NOTE: Using "autoBuild": true` in `config/vite.json` file will trigger a build
11
11
  # on demand as needed, before performing any lookup.
@@ -29,7 +29,8 @@ class ViteRails::Manifest
29
29
  # Returns a relative path, or nil if the asset is not found.
30
30
  #
31
31
  # Example:
32
- # ViteRails.manifest.lookup('calendar.js') # => "/vite/assets/calendar-1016838bab065ae1e122.js"
32
+ # ViteRails.manifest.lookup('calendar.js')
33
+ # # { "file" => "/vite/assets/calendar-1016838bab065ae1e122.js", "imports" => [] }
33
34
  def lookup(name, type:)
34
35
  build if should_build?
35
36
 
@@ -43,12 +44,7 @@ class ViteRails::Manifest
43
44
 
44
45
  private
45
46
 
46
- delegate :config, :builder, :dev_server, to: :@vite_rails
47
-
48
- # Public: Returns true if the Vite development server is running.
49
- def dev_server_running?
50
- ViteRails.run_proxy? && dev_server.running?
51
- end
47
+ delegate :config, :builder, :dev_server_running?, to: :@vite_rails
52
48
 
53
49
  # NOTE: Auto compilation is convenient when running tests, when the developer
54
50
  # won't focus on the frontend, or when running the Vite server is not desired.
@@ -59,9 +55,9 @@ private
59
55
  # Internal: Finds the specified entry in the manifest.
60
56
  def find_manifest_entry(name)
61
57
  if dev_server_running?
62
- "/#{ config.public_output_dir.join(name.to_s) }"
63
- elsif file = manifest.dig(name.to_s, 'file')
64
- "/#{ config.public_output_dir.join(file) }"
58
+ { 'file' => "/#{ config.public_output_dir.join(name.to_s) }" }
59
+ else
60
+ manifest[name.to_s]
65
61
  end
66
62
  end
67
63
 
@@ -83,7 +79,10 @@ private
83
79
  # Internal: Returns a Hash with the entries in the manifest.json.
84
80
  def load_manifest
85
81
  if config.manifest_path.exist?
86
- JSON.parse(config.manifest_path.read)
82
+ JSON.parse(config.manifest_path.read).each do |_, entry|
83
+ entry['file'] = within_public_output_dir(entry['file'])
84
+ entry['imports'] = entry['imports']&.map { |path| within_public_output_dir(path) }
85
+ end
87
86
  else
88
87
  {}
89
88
  end
@@ -96,6 +95,11 @@ private
96
95
  "#{ name }.#{ extension_for_type(entry_type) }"
97
96
  end
98
97
 
98
+ # Internal: Scopes the paths in the manifest to the output folder in public.
99
+ def within_public_output_dir(path)
100
+ "/#{ config.public_output_dir.join(path) }"
101
+ end
102
+
99
103
  # Internal: Allows to receive :javascript and :stylesheet as :type in helpers.
100
104
  def extension_for_type(entry_type)
101
105
  case entry_type
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ViteRails
4
- VERSION = '1.0.0'
4
+ VERSION = '1.0.5'
5
5
  end
@@ -2,27 +2,11 @@
2
2
  "name": "only-for-workflows",
3
3
  "version": "unknown",
4
4
  "scripts": {
5
- "test": "jest",
6
- "lint": "eslint package/"
5
+ "lint": "npm -C package run lint",
6
+ "test": "npm -C package run test"
7
7
  },
8
8
  "dependencies": {
9
- "vite": "^2.0.0-beta.30",
10
- "vite-plugin-ruby": "1.0.0"
11
- },
12
- "devDependencies": {
13
- "@vitejs/plugin-vue": "^1.0.6",
14
- "eslint": "^7.16.0",
15
- "eslint-config-airbnb": "^18.2.0",
16
- "eslint-config-prettier": "^7.1.0",
17
- "eslint-plugin-import": "^2.22.1",
18
- "eslint-plugin-jsx-a11y": "^6.3.1",
19
- "eslint-plugin-react": "^7.21.4",
20
- "jest": "^26.5.3"
21
- },
22
- "jest": {
23
- "testRegex": "(/__tests__/.*|(\\.|/))\\.jsx?$",
24
- "roots": [
25
- "<rootDir>/package"
26
- ]
9
+ "vite": "^2.0.0-beta.34",
10
+ "vite-plugin-ruby": "^1.0.1"
27
11
  }
28
12
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vite_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.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-19 00:00:00.000000000 Z
11
+ date: 2021-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -119,8 +119,20 @@ files:
119
119
  - CONTRIBUTING.md
120
120
  - LICENSE.txt
121
121
  - README.md
122
+ - lib/install/bin/vite
122
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
123
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
124
136
  - lib/vite_rails.rb
125
137
  - lib/vite_rails/builder.rb
126
138
  - lib/vite_rails/commands.rb
@@ -174,8 +186,8 @@ homepage: https://github.com/ElMassimo/vite_rails
174
186
  licenses:
175
187
  - MIT
176
188
  metadata:
177
- source_code_uri: https://github.com/ElMassimo/vite_rails/tree/v1.0.0
178
- changelog_uri: https://github.com/ElMassimo/vite_rails/blob/v1.0.0/CHANGELOG.md
189
+ source_code_uri: https://github.com/ElMassimo/vite_rails/tree/v1.0.5
190
+ changelog_uri: https://github.com/ElMassimo/vite_rails/blob/v1.0.5/CHANGELOG.md
179
191
  post_install_message:
180
192
  rdoc_options: []
181
193
  require_paths: