diff options
Diffstat (limited to 'cli/npm/resolution.rs')
-rw-r--r-- | cli/npm/resolution.rs | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/cli/npm/resolution.rs b/cli/npm/resolution.rs index 3b5f0b89a..e102e2fa8 100644 --- a/cli/npm/resolution.rs +++ b/cli/npm/resolution.rs @@ -186,16 +186,37 @@ impl NpmResolutionSnapshot { ) -> Result<&NpmResolutionPackage, AnyError> { match self.packages.get(referrer) { Some(referrer_package) => { - match referrer_package.dependencies.get(name_without_path(name)) { - Some(id) => Ok(self.packages.get(id).unwrap()), - None => { - bail!( - "could not find npm package '{}' referenced by '{}'", - name, - referrer - ) + let name_ = name_without_path(name); + if let Some(id) = referrer_package.dependencies.get(name_) { + return Ok(self.packages.get(id).unwrap()); + } + + if referrer_package.id.name == name_ { + return Ok(referrer_package); + } + + // TODO(bartlomieju): this should use a reverse lookup table in the + // snapshot instead of resolving best version again. + let req = NpmPackageReq { + name: name_.to_string(), + version_req: None, + }; + + if let Some(version) = self.resolve_best_package_version(name_, &req) { + let id = NpmPackageId { + name: name_.to_string(), + version, + }; + if let Some(pkg) = self.packages.get(&id) { + return Ok(pkg); } } + + bail!( + "could not find npm package '{}' referenced by '{}'", + name, + referrer + ) } None => bail!("could not find referrer npm package '{}'", referrer), } |