mkYarnPackage: fix uncopied resolutions field

Yarn only uses the "resolutions" field in the top-level package.json
file of a workspace. While it has been taken into account for
mkYarnWorkspace (9801e6e53d), it has not
been fixed for mkYarnPackage yet, which also uses the yarn workspace
mechanism under the hood.

A bit of care was needed because we don't want to introduce any IFD.
This commit is contained in:
Guillaume Desforges 2023-02-06 16:27:02 +01:00
parent 747927516e
commit 6bf78d8d3d

View File

@ -99,9 +99,17 @@ in rec {
""
) (builtins.attrNames pkgConfig));
workspaceJSON = pkgs.writeText
"${name}-workspace-package.json"
(builtins.toJSON { private = true; workspaces = ["deps/**"]; resolutions = packageResolutions; }); # scoped packages need second splat
# build-time JSON generation to avoid IFD
# see https://nixos.wiki/wiki/Import_From_Derivation
workspaceJSON = pkgs.runCommand "${name}-workspace-package.json"
{
nativeBuildInputs = [ pkgs.jq ];
inherit packageJSON;
passAsFile = [ "baseJSON" ];
baseJSON = builtins.toJSON { private = true; workspaces = [ "deps/**" ]; resolutions = packageResolutions; };
} ''
jq --slurpfile packageJSON "$packageJSON" '.resolutions = $packageJSON[0].resolutions + .resolutions' <"$baseJSONPath" >$out
'';
workspaceDependencyLinks = lib.concatMapStringsSep "\n"
(dep: ''