use std::env;
use std::path::{Path, PathBuf};
#[must_use]
pub fn global_cache_paths(home: &Path) -> Vec<PathBuf> {
let mut paths = [
".npm/_cacache",
".npm/_npx",
".cargo/registry/cache",
".cargo/registry/src",
".cargo/registry/index",
".cargo/git/db",
"go/pkg/mod",
".cache/uv",
".cache/pip",
".cache/puppeteer",
".cache/gem",
".pub-cache/hosted",
".pub-cache/hosted-hashes",
".pub-cache/git",
]
.into_iter()
.map(|relative| home.join(relative))
.collect::<Vec<_>>();
if let Some(path) = env::var_os("GOMODCACHE").map(PathBuf::from) {
if path.is_absolute() && !paths.contains(&path) {
paths.push(path);
}
}
if cfg!(target_os = "macos") {
paths.extend(
[
"Library/pnpm",
"Library/Caches/ms-playwright",
"Library/Caches/node-gyp",
]
.into_iter()
.map(|relative| home.join(relative)),
);
}
if cfg!(target_os = "windows") {
paths.extend(
[
"AppData/Local/npm-cache",
"AppData/Local/pnpm/store",
"AppData/Local/ms-playwright",
"AppData/Local/node-gyp/Cache",
]
.into_iter()
.map(|relative| home.join(relative)),
);
}
paths
}
#[must_use]
pub fn expensive_global_cache_paths(home: &Path) -> Vec<PathBuf> {
[
".cache/codex-runtimes",
".cache/huggingface",
".cache/whisper",
]
.into_iter()
.map(|relative| home.join(relative))
.collect()
}