package_json_schema 0.3.0

Parse content from `package.json` content and consume the result as a `PackageJson` struct.
Documentation
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"))
	}
}