use lazy_static::lazy_static;
use regex::Regex;
use semver::VersionReq;
use validator::ValidateEmail;
use validator::ValidateUrl;
use validator::ValidationError;
lazy_static! {
pub static ref PACKAGE_NAME_REGEX: Regex =
Regex::new(r"^(?:@[a-z0-9-*~][a-z0-9-*._~]*/)?[a-z0-9-~][a-z0-9-._~]*$").unwrap();
pub static ref PACKAGE_MANAGER_REGEX: Regex =
Regex::new(r"(npm|pnpm|yarn)@\d+\.\d+\.\d+(-.+)?").unwrap();
}
pub fn validate_version(version: &str) -> Result<(), ValidationError> {
VersionReq::parse(version)
.map_err(|_| ValidationError::new("version must be a valid semver string"))?;
Ok(())
}
pub fn validate_exports_path(path: &str) -> Result<(), ValidationError> {
if path.starts_with("./") {
Ok(())
} else {
Err(ValidationError::new("exports path must start with './'"))
}
}
pub fn validate_email_or_url(email_or_url: &str) -> Result<(), ValidationError> {
if email_or_url.validate_email() || email_or_url.validate_url() {
Ok(())
} else {
Err(ValidationError::new("invalid email or url"))
}
}