diff options
author | Jan Tojnar <jtojnar@gmail.com> | 2020-08-28 01:40:59 +0200 |
---|---|---|
committer | Jan Tojnar <jtojnar@gmail.com> | 2020-10-07 21:02:44 +0200 |
commit | 0257d8f629bd53616584738d73c3789dddf43c97 (patch) | |
tree | f3382fb3a4ab06e4113ffe9cc9ab96d77c140679 /pkgs/development/node-packages/node-env.nix | |
parent | c7f33a55b0d8dd977395323adc1a652ea866bf4a (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.nix | 33 |
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 = |