diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-02-23 17:20:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-23 23:20:23 +0100 |
commit | e57b38f8b216bc8c0c1c22c10ab5c9ce2560c58a (patch) | |
tree | a83e2dfd1c2b0af6bfbd68e3e54b0078a1915366 /cli/resolver.rs | |
parent | da781280b8422b4116473b366fb7d207909a31da (diff) |
fix(npm): allow resolving from package.json when an import map exists (#17905)
Diffstat (limited to 'cli/resolver.rs')
-rw-r--r-- | cli/resolver.rs | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/cli/resolver.rs b/cli/resolver.rs index db6ef0c8e..bcc1c8da8 100644 --- a/cli/resolver.rs +++ b/cli/resolver.rs @@ -113,22 +113,30 @@ impl Resolver for CliGraphResolver { specifier: &str, referrer: &ModuleSpecifier, ) -> Result<ModuleSpecifier, AnyError> { - if let Some(import_map) = &self.maybe_import_map { - return import_map - .resolve(specifier, referrer) - .map_err(|err| err.into()); - } + // attempt to resolve with the import map first + let maybe_import_map_err = match self + .maybe_import_map + .as_ref() + .map(|import_map| import_map.resolve(specifier, referrer)) + { + Some(Ok(value)) => return Ok(value), + Some(Err(err)) => Some(err), + None => None, + }; + // then with package.json if let Some(deps) = self.maybe_package_json_deps.as_ref() { if let Some(specifier) = resolve_package_json_dep(specifier, deps)? { return Ok(specifier); } - if let Some(req) = deps.get(specifier) { - return Ok(ModuleSpecifier::parse(&format!("npm:{req}")).unwrap()); - } } - deno_graph::resolve_import(specifier, referrer).map_err(|err| err.into()) + // otherwise, surface the import map error or try resolving when has no import map + if let Some(err) = maybe_import_map_err { + Err(err.into()) + } else { + deno_graph::resolve_import(specifier, referrer).map_err(|err| err.into()) + } } } |