Commit 6bf78d8d authored by Guillaume Desforges's avatar Guillaume Desforges
Browse files

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 (9801e6e5), 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.
parent 74792751
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -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: ''