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