pnpmConfigHook: add support for __structuredAttrs = true (#528517)

This commit is contained in:
Gergő Gutyina
2026-06-10 21:53:32 +00:00
committed by GitHub
10 changed files with 120 additions and 7 deletions
@@ -71,12 +71,13 @@ pnpmConfigHook() {
pnpm config set package-import-method clone-or-copy
echo "Installing dependencies"
if [[ -n "$pnpmWorkspaces" ]]; then
local IFS=" "
for ws in $pnpmWorkspaces; do
pnpmInstallFlags+=("--filter=$ws")
done
fi
local -a pnpmWorkspacesArray
concatTo pnpmWorkspacesArray pnpmWorkspaces
for ws in "${pnpmWorkspacesArray[@]}"; do
pnpmInstallFlags+=("--filter=$ws")
done
runHook prePnpmInstall
+2 -1
View File
@@ -1,7 +1,8 @@
{ callPackage }:
{ callPackage, lib }:
{
pnpm-empty-lockfile = callPackage ./pnpm-empty-lockfile { };
pnpm-fixup-state-db = callPackage ./pnpm-fixup-state-db { };
pnpm-workspaces = lib.recurseIntoAttrs (callPackage ./pnpm-workspaces { });
pnpm_11_v3 = callPackage ./pnpm_11_v3 { };
pnpm_11_v4 = callPackage ./pnpm_11_v4 { };
}
@@ -0,0 +1,57 @@
{
stdenv,
fetchPnpmDeps,
pnpm,
pnpmConfigHook,
testers,
}:
let
mkTest =
{ structuredAttrs }:
stdenv.mkDerivation (finalAttrs: {
name = "pnpm-workspaces-${if structuredAttrs then "structured" else "legacy"}";
src = ./src;
pnpmDeps = testers.invalidateFetcherByDrvHash fetchPnpmDeps {
pname = "pnpm-workspaces";
inherit (finalAttrs) src pnpmWorkspaces;
inherit pnpm;
fetcherVersion = 4;
hash = "sha256-dIp6CNh1Kn4aqJWku1G/FUdn/u+epzhqlqwnAkB2uW0=";
};
pnpmWorkspaces = [
"@pnpm-workspaces-test/a"
"@pnpm-workspaces-test/b"
];
__structuredAttrs = structuredAttrs;
nativeBuildInputs = [
pnpm
pnpmConfigHook
];
buildPhase = ''
runHook preBuild
for package in a b; do
if [ -e "packages/$package/node_modules/@pnpm-workspaces-test/$package-dep" ]; then
echo "$package was installed (its dependency $package-dep is linked)"
else
echo "ERROR: $package was not installed"
exit 1
fi
done
touch $out
runHook postBuild
'';
});
in
{
legacy = mkTest { structuredAttrs = false; };
structured = mkTest { structuredAttrs = true; };
}
@@ -0,0 +1,5 @@
{
"name": "pnpm-workspaces-test",
"version": "0.0.0",
"private": true
}
@@ -0,0 +1,4 @@
{
"name": "@pnpm-workspaces-test/a-dep",
"version": "0.0.0"
}
@@ -0,0 +1,7 @@
{
"name": "@pnpm-workspaces-test/a",
"version": "0.0.0",
"dependencies": {
"@pnpm-workspaces-test/a-dep": "workspace:*"
}
}
@@ -0,0 +1,4 @@
{
"name": "@pnpm-workspaces-test/b-dep",
"version": "0.0.0"
}
@@ -0,0 +1,7 @@
{
"name": "@pnpm-workspaces-test/b",
"version": "0.0.0",
"dependencies": {
"@pnpm-workspaces-test/b-dep": "workspace:*"
}
}
+25
View File
@@ -0,0 +1,25 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.: {}
packages/a:
dependencies:
'@pnpm-workspaces-test/a-dep':
specifier: workspace:*
version: link:../a-dep
packages/a-dep: {}
packages/b:
dependencies:
'@pnpm-workspaces-test/b-dep':
specifier: workspace:*
version: link:../b-dep
packages/b-dep: {}
@@ -0,0 +1,2 @@
packages:
- 'packages/*'