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.



99
100
101
102
103
104
# File 'lib/vite_ruby/config.rb', line 99

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

#assets_manifest_pathObject

Internal: Path where vite-plugin-ruby outputs the assets manifest file.



22
23
24
# File 'lib/vite_ruby/config.rb', line 22

def assets_manifest_path
  build_output_dir.join('manifest-assets.json')
end

#build_output_dirObject

Public: The directory where Vite will store the built assets.



27
28
29
# File 'lib/vite_ruby/config.rb', line 27

def build_output_dir
  root.join(public_dir, public_output_dir)
end

#host_with_portObject



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

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

#load_ruby_configObject

Public: Loads an optional config/vite.rb file that can modify ViteRuby.env



47
48
49
50
# File 'lib/vite_ruby/config.rb', line 47

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_pathObject

Internal: Path where Vite outputs the manifest file.



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

def manifest_path
  build_output_dir.join('manifest.json')
end

#protocolObject



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

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

#resolved_entrypoints_dirObject

Public: The directory where the entries are located.



32
33
34
# File 'lib/vite_ruby/config.rb', line 32

def resolved_entrypoints_dir
  vite_root_dir.join(entrypoints_dir)
end

#to_envObject

Public: Sets additional environment variables for vite-plugin-ruby.



53
54
55
56
57
58
59
# File 'lib/vite_ruby/config.rb', line 53

def to_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(ViteRuby.env)
end

#vite_cache_dirObject

Internal: The directory where Vite stores its processing cache.



37
38
39
# File 'lib/vite_ruby/config.rb', line 37

def vite_cache_dir
  root.join('node_modules/.vite')
end

#vite_root_dirObject

Public: The directory that Vite uses as root.



42
43
44
# File 'lib/vite_ruby/config.rb', line 42

def vite_root_dir
  root.join(source_code_dir)
end

#watched_pathsObject

Internal: Files and directories that should be watched for changes.



62
63
64
65
66
67
68
69
70
71
# File 'lib/vite_ruby/config.rb', line 62

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