Class: ViteRuby::Config

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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_dirObject

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_portObject



16
17
18
# File 'lib/vite_ruby/config.rb', line 16

def host_with_port
  "#{ host }:#{ port }"
end

#known_manifest_pathsObject

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_configObject

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.expand_path(config_path.sub(/.json$/, '.rb'), root)
  load rb_config_path if File.exist?(rb_config_path)
end

#manifest_pathsObject

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

#originObject



8
9
10
# File 'lib/vite_ruby/config.rb', line 8

def origin
  "#{ protocol }://#{ host_with_port }"
end

#protocolObject



12
13
14
# File 'lib/vite_ruby/config.rb', line 12

def protocol
  https ? 'https' : 'http'
end

#resolved_entrypoints_dirObject

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_dirObject

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_dirObject

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_pathsObject

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.expand_path(root), &block)
end