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.



126
127
128
129
130
131
# File 'lib/vite_ruby/config.rb', line 126

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.



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

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
# File 'lib/vite_ruby/config.rb', line 21

def known_manifest_paths
  [
    # NOTE: Generated by Vite when `manifest: true`, which vite-plugin-ruby enables.
    build_output_dir.join(".vite/manifest.json"),

    # NOTE: Path where vite-plugin-ruby outputs the assets manifest file.
    build_output_dir.join(".vite/manifest-assets.json"),
  ]
end

#load_ruby_configObject

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



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

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.



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

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.



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

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.



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

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.



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

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

#vite_root_dirObject

Public: The directory that Vite uses as root.



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

def vite_root_dir
  root.join(source_code_dir)
end

#watched_pathsObject

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



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

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.



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

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