summaryrefslogtreecommitdiff
path: root/cli/resolver.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-02-23 17:20:23 -0500
committerGitHub <noreply@github.com>2023-02-23 23:20:23 +0100
commite57b38f8b216bc8c0c1c22c10ab5c9ce2560c58a (patch)
treea83e2dfd1c2b0af6bfbd68e3e54b0078a1915366 /cli/resolver.rs
parentda781280b8422b4116473b366fb7d207909a31da (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.rs26
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())
+ }
}
}