diff options
Diffstat (limited to 'cli/proc_state.rs')
-rw-r--r-- | cli/proc_state.rs | 17 |
1 files changed, 11 insertions, 6 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 |