use std::path::PathBuf;
use crate::identity::embedder;
pub fn branded_env_alias_enabled(alias: &str) -> bool {
if alias.starts_with("npm_config_") || alias.starts_with("NPM_CONFIG_") {
return true;
}
if !looks_branded(alias) {
return true;
}
match embedder().env_prefix {
Some(prefix) => alias
.strip_prefix(prefix)
.is_some_and(|rest| rest.starts_with('_')),
None => false,
}
}
fn looks_branded(alias: &str) -> bool {
const NEUTRAL: &[&str] = &[
"CI",
"HTTP_PROXY",
"HTTPS_PROXY",
"NO_PROXY",
"PROXY",
"NODE_OPTIONS",
];
if NEUTRAL.contains(&alias) {
return false;
}
match alias.split_once('_') {
Some((head, _)) if !head.is_empty() => head.chars().all(|c| c.is_ascii_uppercase()),
_ => false,
}
}
pub fn is_ci() -> bool {
std::env::var_os("CI").is_some()
}
pub fn home_dir() -> Option<PathBuf> {
if let Some(h) = std::env::var_os("HOME") {
return Some(h.into());
}
#[cfg(windows)]
if let Some(h) = std::env::var_os("USERPROFILE") {
return Some(h.into());
}
None
}
fn non_empty_path_var(key: &str) -> Option<PathBuf> {
std::env::var(key)
.ok()
.map(|s| s.trim().to_string())
.filter(|s| !s.is_empty())
.map(PathBuf::from)
}
pub fn xdg_config_home() -> Option<PathBuf> {
non_empty_path_var("XDG_CONFIG_HOME")
}
pub fn xdg_data_home() -> Option<PathBuf> {
non_empty_path_var("XDG_DATA_HOME")
}
pub fn xdg_cache_home() -> Option<PathBuf> {
non_empty_path_var("XDG_CACHE_HOME")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn aube_profile_honors_every_settings_env_family() {
assert!(branded_env_alias_enabled("AUBE_NODE_LINKER"));
assert!(branded_env_alias_enabled("AUBE_NO_LOCK"));
assert!(branded_env_alias_enabled("AUBE_LINK_CONCURRENCY"));
assert!(branded_env_alias_enabled("npm_config_node_linker"));
assert!(branded_env_alias_enabled("NPM_CONFIG_NODE_LINKER"));
assert!(branded_env_alias_enabled("CI"));
assert!(branded_env_alias_enabled("HTTP_PROXY"));
assert!(branded_env_alias_enabled("NODE_OPTIONS"));
}
#[test]
fn looks_branded_distinguishes_brand_from_neutral() {
assert!(looks_branded("AUBE_NODE_LINKER"));
assert!(looks_branded("FOO_BAR")); assert!(!looks_branded("CI"));
assert!(!looks_branded("HTTP_PROXY"));
assert!(!looks_branded("NODE_OPTIONS"));
assert!(!looks_branded("npm_config_node_linker")); }
}