use std::path::{Path, PathBuf};
use std::str::FromStr;
use std::sync::LazyLock;
pub static MANIFEST_DIR_STR: &str = env!("CARGO_MANIFEST_DIR");
pub static MANIFEST_DIR: LazyLock<PathBuf> =
LazyLock::new(|| PathBuf::from_str(MANIFEST_DIR_STR).unwrap());
pub fn bundle(target: &Path, out: &Path) {
if cfg!(feature = "swc") {
#[cfg(feature = "swc")]
return crate::swc::bundle(target, out, true);
} else if cfg!(feature = "esbuild") {
#[cfg(feature = "esbuild")]
return crate::esbuild::bundle(target, out);
}
unreachable!();
}
#[cfg(test)]
mod tests {
use super::*;
#[test_log::test]
fn test_manifest_dir_str_is_not_empty() {
assert!(!MANIFEST_DIR_STR.is_empty());
assert!(MANIFEST_DIR_STR.contains("hyperchad"));
assert!(MANIFEST_DIR_STR.contains("js_bundler"));
}
#[test_log::test]
fn test_manifest_dir_is_valid_path() {
assert!(MANIFEST_DIR.exists());
assert!(MANIFEST_DIR.is_dir());
assert!(MANIFEST_DIR.ends_with("js_bundler"));
}
#[test_log::test]
fn test_manifest_dir_contains_cargo_toml() {
let cargo_toml = MANIFEST_DIR.join("Cargo.toml");
assert!(cargo_toml.exists());
assert!(cargo_toml.is_file());
}
}