Class: ViteRuby::Config
- Inherits:
-
Object
- Object
- ViteRuby::Config
- Defined in:
- lib/vite_ruby/config.rb
Overview
Public: Allows to resolve configuration sourced from ‘config/vite.json` and environment variables, combining them with the default options.
Class Method Summary collapse
-
.resolve_config(**attrs) ⇒ Object
Public: Returns the project configuration for Vite.
Instance Method Summary collapse
-
#build_output_dir ⇒ Object
Public: The directory where Vite will store the built assets.
- #host_with_port ⇒ Object
-
#known_manifest_paths ⇒ Object
Internal: Path to the manifest files generated by Vite and vite-plugin-ruby.
-
#load_ruby_config ⇒ Object
Public: Loads an optional config/vite.rb file that can modify ViteRuby.env.
-
#manifest_paths ⇒ Object
Internal: Path to the manifest files generated by Vite and vite-plugin-ruby.
- #origin ⇒ Object
- #protocol ⇒ Object
-
#resolved_entrypoints_dir ⇒ Object
Public: The directory where the entries are located.
-
#to_env(env_vars = ViteRuby.env) ⇒ Object
Public: Sets additional environment variables for vite-plugin-ruby.
-
#vite_cache_dir ⇒ Object
Internal: The directory where Vite stores its processing cache.
-
#vite_root_dir ⇒ Object
Public: The directory that Vite uses as root.
-
#watched_paths ⇒ Object
Internal: Files and directories that should be watched for changes.
-
#within_root(&block) ⇒ Object
Internal: Changes the current directory to the root dir.
Class Method Details
.resolve_config(**attrs) ⇒ Object
Public: Returns the project configuration for Vite.
119 120 121 122 123 124 |
# File 'lib/vite_ruby/config.rb', line 119 def resolve_config(**attrs) config = config_defaults.merge(attrs.transform_keys(&:to_s)) file_path = File.join(config['root'], config['config_path']) file_config = config_from_file(file_path, mode: config['mode']) new DEFAULT_CONFIG.merge(file_config).merge(config_from_env).merge(config) end |
Instance Method Details
#build_output_dir ⇒ Object
Public: The directory where Vite will store the built assets.
41 42 43 |
# File 'lib/vite_ruby/config.rb', line 41 def build_output_dir root.join(public_dir, public_output_dir) end |
#host_with_port ⇒ Object
16 17 18 |
# File 'lib/vite_ruby/config.rb', line 16 def host_with_port "#{ host }:#{ port }" end |
#known_manifest_paths ⇒ Object
Internal: Path to the manifest files generated by Vite and vite-plugin-ruby.
21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/vite_ruby/config.rb', line 21 def known_manifest_paths [ # NOTE: Generated by Vite when `manifest: true`, which vite-plugin-ruby enables. 'manifest.json', # NOTE: Path where vite-plugin-ruby outputs the assets manifest file. 'manifest-assets.json', ].flat_map { |path| [ build_output_dir.join(".vite/#{ path }"), # Vite 5 onwards build_output_dir.join(path), # Vite 4 and below ] } end |
#load_ruby_config ⇒ Object
Public: Loads an optional config/vite.rb file that can modify ViteRuby.env
61 62 63 64 |
# File 'lib/vite_ruby/config.rb', line 61 def load_ruby_config rb_config_path = File.(config_path.sub(/.json$/, '.rb'), root) load rb_config_path if File.exist?(rb_config_path) end |
#manifest_paths ⇒ Object
Internal: Path to the manifest files generated by Vite and vite-plugin-ruby.
36 37 38 |
# File 'lib/vite_ruby/config.rb', line 36 def manifest_paths known_manifest_paths.select(&:exist?) end |
#origin ⇒ Object
8 9 10 |
# File 'lib/vite_ruby/config.rb', line 8 def origin "#{ protocol }://#{ host_with_port }" end |
#protocol ⇒ Object
12 13 14 |
# File 'lib/vite_ruby/config.rb', line 12 def protocol https ? 'https' : 'http' end |
#resolved_entrypoints_dir ⇒ Object
Public: The directory where the entries are located.
46 47 48 |
# File 'lib/vite_ruby/config.rb', line 46 def resolved_entrypoints_dir vite_root_dir.join(entrypoints_dir) end |
#to_env(env_vars = ViteRuby.env) ⇒ Object
Public: Sets additional environment variables for vite-plugin-ruby.
67 68 69 70 71 72 73 |
# File 'lib/vite_ruby/config.rb', line 67 def to_env(env_vars = ViteRuby.env) CONFIGURABLE_WITH_ENV.each_with_object({}) do |option, env| unless (value = @config[option]).nil? env["#{ ViteRuby::ENV_PREFIX }_#{ option.upcase }"] = value.to_s end end.merge(env_vars) end |
#vite_cache_dir ⇒ Object
Internal: The directory where Vite stores its processing cache.
51 52 53 |
# File 'lib/vite_ruby/config.rb', line 51 def vite_cache_dir root.join('node_modules/.vite') end |
#vite_root_dir ⇒ Object
Public: The directory that Vite uses as root.
56 57 58 |
# File 'lib/vite_ruby/config.rb', line 56 def vite_root_dir root.join(source_code_dir) end |
#watched_paths ⇒ Object
Internal: Files and directories that should be watched for changes.
76 77 78 79 80 81 82 83 84 85 |
# File 'lib/vite_ruby/config.rb', line 76 def watched_paths [ *(watch_additional_paths + additional_entrypoints).reject { |dir| dir.start_with?('~/') || dir.start_with?(source_code_dir) }, "#{ source_code_dir }/**/*", config_path.sub(/.json$/, '.{rb,json}'), *DEFAULT_WATCHED_PATHS, ].freeze end |
#within_root(&block) ⇒ Object
Internal: Changes the current directory to the root dir.
88 89 90 |
# File 'lib/vite_ruby/config.rb', line 88 def within_root(&block) Dir.chdir(File.(root), &block) end |