From 3ed5055f0f5b147a73e38d0ddc35f5fa267aa63b Mon Sep 17 00:00:00 2001
From: Johannes Kirschbauer <hsjobeki@gmail.com>
Date: Mon, 12 Aug 2024 15:35:09 +0200
Subject: [PATCH] importNpmLock: init fetcherOps per package

---
 .../node/import-npm-lock/default.nix             | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/pkgs/build-support/node/import-npm-lock/default.nix b/pkgs/build-support/node/import-npm-lock/default.nix
index d530b8ee30ff..b63e5237dc3e 100644
--- a/pkgs/build-support/node/import-npm-lock/default.nix
+++ b/pkgs/build-support/node/import-npm-lock/default.nix
@@ -17,6 +17,7 @@ let
   fetchModule =
     { module
     , npmRoot ? null
+    , fetcherOpts
     }: (
       if module ? "resolved" then
         (
@@ -34,16 +35,16 @@ let
               )
             else if (scheme == "http" || scheme == "https") then
               (
-                fetchurl {
+                fetchurl ({
                   url = module.resolved;
                   hash = module.integrity;
-                }
+                } // fetcherOpts )
               )
             else if lib.hasPrefix "git" module.resolved then
               (
-                builtins.fetchGit {
+                builtins.fetchGit ({
                   url = module.resolved;
-                }
+                }  // fetcherOpts )
               )
             else throw "Unsupported URL scheme: ${scheme}"
           )
@@ -62,6 +63,10 @@ in
     , packageLock ? importJSON (npmRoot + "/package-lock.json")
     , pname ? getName package
     , version ? getVersion package
+    # A map of additional fetcher options forwarded to the fetcher used to download the package.
+    # Example: { "node_modules/axios" = { curlOptsList = [ "--verbose" ]; }; }
+    # This will download the axios package with curl's verbose option.
+    , fetcherOpts ?  {}
     }:
     let
       mapLockDependencies =
@@ -82,10 +87,11 @@ in
       packageLock' = packageLock // {
         packages =
           mapAttrs
-            (_: module:
+            (modulePath: module:
               let
                 src = fetchModule {
                   inherit module npmRoot;
+                  fetcherOpts = fetcherOpts.${modulePath} or {};
                 };
               in
               (removeAttrs module [