summaryrefslogtreecommitdiff
path: root/cli/deno_dir.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/deno_dir.rs')
-rw-r--r--cli/deno_dir.rs55
1 files changed, 31 insertions, 24 deletions
diff --git a/cli/deno_dir.rs b/cli/deno_dir.rs
index c58a252cb..4bca1117a 100644
--- a/cli/deno_dir.rs
+++ b/cli/deno_dir.rs
@@ -291,36 +291,14 @@ impl DenoDir {
referrer: &str,
) -> Result<Url, url::ParseError> {
let specifier = self.src_file_to_url(specifier);
- let mut referrer = self.src_file_to_url(referrer);
+ let referrer = self.src_file_to_url(referrer);
debug!(
"resolve_module specifier {} referrer {}",
specifier, referrer
);
- if referrer.starts_with('.') {
- let cwd = std::env::current_dir().unwrap();
- let referrer_path = cwd.join(referrer);
- referrer = referrer_path.to_str().unwrap().to_string() + "/";
- }
-
- let j = if is_remote(&specifier)
- || (Path::new(&specifier).is_absolute() && !is_remote(&referrer))
- {
- parse_local_or_remote(&specifier)?
- } else if referrer.ends_with('/') {
- let r = Url::from_directory_path(&referrer);
- // TODO(ry) Properly handle error.
- if r.is_err() {
- error!("Url::from_directory_path error {}", referrer);
- }
- let base = r.unwrap();
- base.join(specifier.as_ref())?
- } else {
- let base = parse_local_or_remote(&referrer)?;
- base.join(specifier.as_ref())?
- };
- Ok(j)
+ resolve_file_url(specifier, referrer)
}
/// Returns (module name, local filename)
@@ -889,6 +867,35 @@ fn save_source_code_headers(
}
}
+pub fn resolve_file_url(
+ specifier: String,
+ mut referrer: String,
+) -> Result<Url, url::ParseError> {
+ if referrer.starts_with('.') {
+ let cwd = std::env::current_dir().unwrap();
+ let referrer_path = cwd.join(referrer);
+ referrer = referrer_path.to_str().unwrap().to_string() + "/";
+ }
+
+ let j = if is_remote(&specifier)
+ || (Path::new(&specifier).is_absolute() && !is_remote(&referrer))
+ {
+ parse_local_or_remote(&specifier)?
+ } else if referrer.ends_with('/') {
+ let r = Url::from_directory_path(&referrer);
+ // TODO(ry) Properly handle error.
+ if r.is_err() {
+ error!("Url::from_directory_path error {}", referrer);
+ }
+ let base = r.unwrap();
+ base.join(specifier.as_ref())?
+ } else {
+ let base = parse_local_or_remote(&referrer)?;
+ base.join(specifier.as_ref())?
+ };
+ Ok(j)
+}
+
#[cfg(test)]
mod tests {
use super::*;