summaryrefslogtreecommitdiff
path: root/cli/npm/resolution.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/npm/resolution.rs')
-rw-r--r--cli/npm/resolution.rs37
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),
}