summary refs log tree commit diff
diff options
context:
space:
mode:
authorWinter <winter@winter.cafe>2022-11-09 22:13:12 -0500
committerWinter <winter@winter.cafe>2022-11-21 15:00:08 -0500
commit03a7739d75285320d7ebff7626a122c6a6592878 (patch)
tree433531a5aac4c83b082485e0252d0962e30565a8
parent276982bd5e389e11c6051ac47f2647b0e860494c (diff)
prefetch-npm-deps: skip bundled dependencies in v1 lockfiles
-rw-r--r--pkgs/build-support/node/fetch-npm-deps/src/main.rs10
1 files changed, 10 insertions, 0 deletions
diff --git a/pkgs/build-support/node/fetch-npm-deps/src/main.rs b/pkgs/build-support/node/fetch-npm-deps/src/main.rs
index 9ad1c38742061..5f1e0096d5706 100644
--- a/pkgs/build-support/node/fetch-npm-deps/src/main.rs
+++ b/pkgs/build-support/node/fetch-npm-deps/src/main.rs
@@ -26,6 +26,8 @@ struct PackageLock {
 #[derive(Deserialize)]
 struct OldPackage {
     version: UrlOrString,
+    #[serde(default)]
+    bundled: bool,
     resolved: Option<UrlOrString>,
     integrity: Option<String>,
     dependencies: Option<HashMap<String, OldPackage>>,
@@ -61,6 +63,13 @@ fn to_new_packages(
     let mut new = HashMap::new();
 
     for (name, mut package) in old_packages {
+        // In some cases, a bundled dependency happens to have the same version as a non-bundled one, causing
+        // the bundled one without a URL to override the entry for the non-bundled instance, which prevents the
+        // dependency from being downloaded.
+        if package.bundled {
+            continue;
+        }
+
         if let UrlOrString::Url(v) = &package.version {
             for (scheme, host) in [
                 ("github", "github.com"),
@@ -404,6 +413,7 @@ mod tests {
                     version: UrlOrString::Url(Url::parse(
                         "github:mapbox/node-sqlite3#593c9d498be2510d286349134537e3bf89401c4a",
                     ).unwrap()),
+                    bundled: false,
                     resolved: None,
                     integrity: None,
                     dependencies: None,