about summary refs log tree commit diff
path: root/pkgs/development/node-packages/node-env.nix
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2020-08-28 01:40:59 +0200
committerJan Tojnar <jtojnar@gmail.com>2020-10-07 21:02:44 +0200
commit0257d8f629bd53616584738d73c3789dddf43c97 (patch)
treef3382fb3a4ab06e4113ffe9cc9ab96d77c140679 /pkgs/development/node-packages/node-env.nix
parentc7f33a55b0d8dd977395323adc1a652ea866bf4a (diff)
buildNodePackage: add internal overrideNodeAttrs function
mimicking the buildPythonPackage's overridePythonAttrs function
Diffstat (limited to 'pkgs/development/node-packages/node-env.nix')
-rw-r--r--pkgs/development/node-packages/node-env.nix33
1 files changed, 31 insertions, 2 deletions
diff --git a/pkgs/development/node-packages/node-env.nix b/pkgs/development/node-packages/node-env.nix
index e1abf53049350..b30df577f20d9 100644
--- a/pkgs/development/node-packages/node-env.nix
+++ b/pkgs/development/node-packages/node-env.nix
@@ -372,8 +372,37 @@ let
         fi
     '';
 
+  # Derivations built with `buildNodePackage` can already be overriden with `override`, `overrideAttrs`, and `overrideDerivation`.
+  # This function introduces `overrideNodeAttrs` and it overrides the call to `buildNodePackage`.
+  #
+  # THIS FUNCTION IS TEMPORARY until we have a better mechanism in place:
+  # https://github.com/NixOS/nixpkgs/pull/96509#issuecomment-682381592
+  # YOU SHOULD NOT USE IT UNLESS YOU ACCEPT THAT.
+  makeOverridableNodePackage = f: origArgs:
+    let
+      ff = f origArgs;
+      overrideWith = newArgs: origArgs // (
+        let args = if stdenv.lib.isFunction newArgs then newArgs origArgs else newArgs;
+        in
+          assert stdenv.lib.assertMsg (args.__acceptOverrideNodeAttrsCanBeDroppedAnytime or false) ''
+            overrideNodeAttrs is temporary function that will be removed once a better mechanism exists.
+            Pass it `__acceptOverrideNodeAttrsCanBeDroppedAnytime = true;` to aknowledge the fact.
+          '';
+          builtins.removeAttrs args [ "__acceptOverrideNodeAttrsCanBeDroppedAnytime" ]
+      );
+    in
+      if builtins.isAttrs ff then (ff // {
+        overrideNodeAttrs = newArgs: makeOverridableNodePackage f (overrideWith newArgs);
+      })
+      else if builtins.isFunction ff then {
+        overrideNodeAttrs = newArgs: makeOverridableNodePackage f (overrideWith newArgs);
+        __functor = self: ff;
+      }
+      else ff;
+
+
   # Builds and composes an NPM package including all its dependencies
-  buildNodePackage =
+  buildNodePackage = makeOverridableNodePackage (
     { name
     , packageName
     , version
@@ -443,7 +472,7 @@ let
         # Run post install hook, if provided
         runHook postInstall
       '';
-    } // extraArgs);
+    } // extraArgs));
 
   # Builds a development shell
   buildNodeShell =