use url::Url;
#[cfg(not(target_arch = "wasm32"))]
pub fn normalize_uri(uri: &str) -> String {
let trimmed = uri.trim();
if trimmed.is_empty() {
return String::new();
}
if let Some(normalized) = crate::classify::normalize_legacy_windows_uri(trimmed) {
return normalized;
}
let path = std::path::Path::new(trimmed);
if path.is_absolute()
&& let Ok(uri_string) = crate::fs_path_to_uri(path)
{
return uri_string;
}
if let Ok(url) = Url::parse(trimmed) {
if url.scheme() == "file"
&& crate::classify::is_local_file_authority(url.host_str())
&& let Some(fs_path) = crate::uri_to_fs_path(trimmed)
&& let Ok(normalized) = crate::fs_path_to_uri(&fs_path)
{
return normalized;
}
return url.to_string();
}
if let Ok(uri_string) = crate::fs_path_to_uri(path) {
return uri_string;
}
if trimmed.starts_with("file://")
&& let Some(fs_path) = crate::uri_to_fs_path(trimmed)
&& let Ok(normalized) = crate::fs_path_to_uri(&fs_path)
{
return normalized;
}
trimmed.to_string()
}
#[cfg(target_arch = "wasm32")]
pub fn normalize_uri(uri: &str) -> String {
let trimmed = uri.trim();
if trimmed.is_empty() {
return String::new();
}
if let Some(normalized) = crate::classify::normalize_legacy_windows_uri(trimmed) {
return normalized;
}
if let Ok(url) = Url::parse(trimmed) { url.to_string() } else { trimmed.to_string() }
}