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.



114
115
116
117
118
119
# File 'lib/vite_ruby/config.rb', line 114

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.



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

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.



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

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

#load_ruby_configObject

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



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

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.



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

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

#manifest_pathsObject

Internal: Path to the manifest files generated by Vite and vite-plugin-ruby.



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

def manifest_paths
  [manifest_path, assets_manifest_path].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.



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

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.



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

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.



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

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

#vite_root_dirObject

Public: The directory that Vite uses as root.



51
52
53
# File 'lib/vite_ruby/config.rb', line 51

def vite_root_dir
  root.join(source_code_dir)
end

#watched_pathsObject

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



71
72
73
74
75
76
77
78
79
80
# File 'lib/vite_ruby/config.rb', line 71

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.



83
84
85
# File 'lib/vite_ruby/config.rb', line 83

def within_root(&block)
  Dir.chdir(File.expand_path(root), &block)
end