diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/proc_state.rs | 17 | ||||
-rw-r--r-- | cli/standalone.rs | 7 | ||||
-rw-r--r-- | cli/tsc/mod.rs | 23 |
3 files changed, 34 insertions, 13 deletions
diff --git a/cli/proc_state.rs b/cli/proc_state.rs index 4d8acf524..0fd235dea 100644 --- a/cli/proc_state.rs +++ b/cli/proc_state.rs @@ -495,13 +495,18 @@ impl ProcState { referrer: &str, permissions: &mut PermissionsContainer, ) -> Result<ModuleSpecifier, AnyError> { - if let Ok(referrer) = deno_core::resolve_url_or_path_deprecated(referrer) { - if self.npm_resolver.in_npm_package(&referrer) { + // TODO(bartlomieju): ideally we shouldn't need to call `current_dir()` on each + // call - maybe it should be caller's responsibility to pass it as an arg? + let cwd = std::env::current_dir().context("Unable to get CWD")?; + let referrer_result = deno_core::resolve_url_or_path(referrer, &cwd); + + if let Ok(referrer) = referrer_result.as_ref() { + if self.npm_resolver.in_npm_package(referrer) { // we're in an npm package, so use node resolution return self .handle_node_resolve_result(node::node_resolve( specifier, - &referrer, + referrer, NodeResolutionMode::Execution, &self.npm_resolver, permissions, @@ -512,7 +517,7 @@ impl ProcState { } let graph = self.graph_container.graph(); - let maybe_resolved = match graph.get(&referrer) { + let maybe_resolved = match graph.get(referrer) { Some(Module::Esm(module)) => { module.dependencies.get(specifier).map(|d| &d.maybe_code) } @@ -565,9 +570,9 @@ impl ProcState { // but sadly that's not the case due to missing APIs in V8. let is_repl = matches!(self.options.sub_command(), DenoSubcommand::Repl(_)); let referrer = if referrer.is_empty() && is_repl { - deno_core::resolve_path("./$deno$repl.ts", self.options.initial_cwd())? + deno_core::resolve_path("./$deno$repl.ts", &cwd)? } else { - deno_core::resolve_url_or_path_deprecated(referrer)? + referrer_result? }; // FIXME(bartlomieju): this is another hack way to provide NPM specifier diff --git a/cli/standalone.rs b/cli/standalone.rs index 7e0658165..6f6085e67 100644 --- a/cli/standalone.rs +++ b/cli/standalone.rs @@ -140,9 +140,12 @@ impl ModuleLoader for EmbeddedModuleLoader { // Try to follow redirects when resolving. let referrer = match self.eszip.get_module(referrer) { Some(eszip::Module { ref specifier, .. }) => { - deno_core::resolve_url_or_path_deprecated(specifier)? + ModuleSpecifier::parse(specifier)? + } + None => { + let cwd = std::env::current_dir().context("Unable to get CWD")?; + deno_core::resolve_url_or_path(referrer, &cwd)? } - None => deno_core::resolve_url_or_path_deprecated(referrer)?, }; self.maybe_import_map_resolver.as_ref().map_or_else( diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs index 010d65a41..e8fe58c26 100644 --- a/cli/tsc/mod.rs +++ b/cli/tsc/mod.rs @@ -13,7 +13,7 @@ use deno_core::anyhow::Context; use deno_core::error::AnyError; use deno_core::located_script_name; use deno_core::op; -use deno_core::resolve_url_or_path_deprecated; +use deno_core::resolve_url_or_path; use deno_core::serde::Deserialize; use deno_core::serde::Deserializer; use deno_core::serde::Serialize; @@ -39,6 +39,7 @@ use once_cell::sync::Lazy; use std::borrow::Cow; use std::collections::HashMap; use std::fmt; +use std::path::Path; use std::path::PathBuf; use std::sync::Arc; @@ -378,6 +379,7 @@ struct State { maybe_npm_resolver: Option<NpmPackageResolver>, remapped_specifiers: HashMap<String, ModuleSpecifier>, root_map: HashMap<String, ModuleSpecifier>, + current_dir: PathBuf, } impl State { @@ -388,6 +390,7 @@ impl State { maybe_tsbuildinfo: Option<String>, root_map: HashMap<String, ModuleSpecifier>, remapped_specifiers: HashMap<String, ModuleSpecifier>, + current_dir: PathBuf, ) -> Self { State { hash_data, @@ -397,12 +400,16 @@ impl State { maybe_response: None, remapped_specifiers, root_map, + current_dir, } } } -fn normalize_specifier(specifier: &str) -> Result<ModuleSpecifier, AnyError> { - resolve_url_or_path_deprecated(specifier).map_err(|err| err.into()) +fn normalize_specifier( + specifier: &str, + current_dir: &Path, +) -> Result<ModuleSpecifier, AnyError> { + resolve_url_or_path(specifier, current_dir).map_err(|err| err.into()) } #[derive(Debug, Deserialize)] @@ -481,7 +488,7 @@ fn op_load(state: &mut OpState, args: Value) -> Result<Value, AnyError> { let state = state.borrow_mut::<State>(); let v: LoadArgs = serde_json::from_value(args) .context("Invalid request from JavaScript for \"op_load\".")?; - let specifier = normalize_specifier(&v.specifier) + let specifier = normalize_specifier(&v.specifier, &state.current_dir) .context("Error converting a string module specifier for \"op_load\".")?; let mut hash: Option<String> = None; let mut media_type = MediaType::Unknown; @@ -584,7 +591,7 @@ fn op_resolve( } else if let Some(remapped_base) = state.root_map.get(&args.base) { remapped_base.clone() } else { - normalize_specifier(&args.base).context( + normalize_specifier(&args.base, &state.current_dir).context( "Error converting a string module specifier for \"op_resolve\".", )? }; @@ -831,6 +838,9 @@ pub fn exec(request: Request) -> Result<Response, AnyError> { request.maybe_tsbuildinfo.clone(), root_map.clone(), remapped_specifiers.clone(), + std::env::current_dir() + .context("Unable to get CWD") + .unwrap(), )); }) .build()], @@ -943,6 +953,9 @@ mod tests { maybe_tsbuildinfo, HashMap::new(), HashMap::new(), + std::env::current_dir() + .context("Unable to get CWD") + .unwrap(), ); let mut op_state = OpState::new(1); op_state.put(state); |