diff options
Diffstat (limited to 'cli/npm')
-rw-r--r-- | cli/npm/registry.rs | 4 | ||||
-rw-r--r-- | cli/npm/resolution.rs | 37 |
2 files changed, 31 insertions, 10 deletions
diff --git a/cli/npm/registry.rs b/cli/npm/registry.rs index 3b7dd4251..1604f4b11 100644 --- a/cli/npm/registry.rs +++ b/cli/npm/registry.rs @@ -27,7 +27,7 @@ use super::version_req::NpmVersionReq; // npm registry docs: https://github.com/npm/registry/blob/master/docs/REGISTRY-API.md -#[derive(Deserialize, Serialize, Clone)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct NpmPackageInfo { pub name: String, pub versions: HashMap<String, NpmPackageVersionInfo>, @@ -39,7 +39,7 @@ pub struct NpmDependencyEntry { pub version_req: NpmVersionReq, } -#[derive(Deserialize, Serialize, Clone)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct NpmPackageVersionInfo { pub version: String, pub dist: NpmPackageVersionDistInfo, 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), } |