From 7d318dfe3b95f6ce5f97db40a3b2dee704d75227 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Mon, 30 Mar 2026 22:57:31 +0200 Subject: [PATCH] pnpm_11: init at 11.1.0 Signed-off-by: Sefa Eyeoglu --- .../javascript.section.md | 56 ++++------------ .../node/fetch-pnpm-deps/serve.nix | 5 ++ pkgs/development/tools/pnpm/default.nix | 4 ++ pkgs/development/tools/pnpm/generic.nix | 29 +++++---- pkgs/test/pnpm/default.nix | 1 + pkgs/test/pnpm/pnpm-fixup-state-db/index.db | Bin 65536 -> 61440 bytes pkgs/test/pnpm/pnpm_11/default.nix | 60 ++++++++++++++++++ pkgs/test/pnpm/pnpm_11/src/.gitignore | 2 + pkgs/test/pnpm/pnpm_11/src/index.ts | 1 + pkgs/test/pnpm/pnpm_11/src/package.json | 20 ++++++ pkgs/test/pnpm/pnpm_11/src/pnpm-lock.yaml | 39 ++++++++++++ pkgs/test/pnpm/pnpm_11/src/tsconfig.json | 13 ++++ pkgs/top-level/all-packages.nix | 3 +- 13 files changed, 176 insertions(+), 57 deletions(-) create mode 100644 pkgs/test/pnpm/pnpm_11/default.nix create mode 100644 pkgs/test/pnpm/pnpm_11/src/.gitignore create mode 100644 pkgs/test/pnpm/pnpm_11/src/index.ts create mode 100644 pkgs/test/pnpm/pnpm_11/src/package.json create mode 100644 pkgs/test/pnpm/pnpm_11/src/pnpm-lock.yaml create mode 100644 pkgs/test/pnpm/pnpm_11/src/tsconfig.json diff --git a/doc/languages-frameworks/javascript.section.md b/doc/languages-frameworks/javascript.section.md index 362130e5ba5f..58a0805cc58d 100644 --- a/doc/languages-frameworks/javascript.section.md +++ b/doc/languages-frameworks/javascript.section.md @@ -305,7 +305,7 @@ This package puts the corepack wrappers for pnpm and yarn in your PATH, and they ### pnpm {#javascript-pnpm} -pnpm is available as the top-level package `pnpm`. Additionally, there are variants pinned to certain major versions, like `pnpm_8`, `pnpm_9` and `pnpm_10`, which support different sets of lock file versions. +pnpm is available as the top-level package `pnpm`. Additionally, there are variants pinned to certain major versions, like `pnpm_8`, `pnpm_9`, `pnpm_10`, `pnpm_10_29_2` and `pnpm_11`, which support different sets of lock file versions. When packaging an application that includes a `pnpm-lock.yaml`, you need to fetch the pnpm store for that project using a fixed-output-derivation. The function `fetchPnpmDeps` can create this pnpm store derivation. In conjunction, the setup hook `pnpmConfigHook` will prepare the build environment to install the pre-fetched dependencies store. Here is an example for a package that contains `package.json` and a `pnpm-lock.yaml` files using the fetcher and setup hook above: @@ -313,11 +313,18 @@ When packaging an application that includes a `pnpm-lock.yaml`, you need to fetc { fetchPnpmDeps, nodejs, - pnpm, + pnpm_11, pnpmConfigHook, stdenv, }: - +let + # It is recommended to pin pnpm to a major version, due to regular breaking changes in the store format + # The latest major version is always available under `pkgs.pnpm` + # Optionally override pnpm to use a custom nodejs version + # Make sure that the same nodejs version is referenced in nativeBuildInputs + # pnpm = pnpm_11.override { nodejs = nodejs_24; }; + pnpm = pnpm_11; +in stdenv.mkDerivation (finalAttrs: { pname = "foo"; version = "0-unstable-1980-01-01"; @@ -334,54 +341,13 @@ stdenv.mkDerivation (finalAttrs: { pnpmDeps = fetchPnpmDeps { inherit (finalAttrs) pname version src; + inherit pnpm; fetcherVersion = 3; hash = "..."; }; }) ``` -It is highly recommended to use a pinned version of pnpm (i.e., `pnpm_9` or `pnpm_10`), to increase future reproducibility. It might also be required to use an older version if the package needs support for a certain lock file version. To do so, you can pass the `pnpm` argument to `fetchPnpmDeps` and override the `pnpm` arg in `pnpmConfigHook`. Here are the changes in the example above to use a pinned pnpm version: - - - -```diff - { - fetchPnpmDeps, - nodejs, -- pnpm, -+ pnpm_10, - pnpmConfigHook, - stdenv, - }: -+let -+ # Optionally override pnpm to use a custom nodejs version -+ # Make sure that the same nodejs version is referenced in nativeBuildInputs -+ # pnpm = pnpm_10.override { nodejs = nodejs_20; }; -+in - stdenv.mkDerivation (finalAttrs: { - pname = "foo"; - version = "0-unstable-1980-01-01"; - - src = { - #... - }; - - nativeBuildInputs = [ - nodejs # in case scripts are run outside of a pnpm call - pnpmConfigHook -- pnpm # At least required by pnpmConfigHook, if not other (custom) phases -+ pnpm_10 # At least required by pnpmConfigHook, if not other (custom) phases - ]; - - pnpmDeps = fetchPnpmDeps { - inherit (finalAttrs) pname version src; -+ pnpm = pnpm_10; - fetcherVersion = 3; - hash = "..."; - }; - }) -``` - In case you are patching `package.json` or `pnpm-lock.yaml`, make sure to pass `finalAttrs.patches` to the function as well (i.e., `inherit (finalAttrs) patches`. `pnpmConfigHook` supports adding additional `pnpm install` flags via `pnpmInstallFlags` which can be set to a Nix string array: diff --git a/pkgs/build-support/node/fetch-pnpm-deps/serve.nix b/pkgs/build-support/node/fetch-pnpm-deps/serve.nix index 9aa5d380a0cd..46288e974660 100644 --- a/pkgs/build-support/node/fetch-pnpm-deps/serve.nix +++ b/pkgs/build-support/node/fetch-pnpm-deps/serve.nix @@ -3,6 +3,7 @@ pnpm, pnpmDeps, zstd, + lib, }: writeShellApplication { @@ -41,4 +42,8 @@ writeShellApplication { pnpm server start \ --store-dir "$storePath" ''; + + meta = { + broken = lib.versionAtLeast pnpm.version "11"; + }; } diff --git a/pkgs/development/tools/pnpm/default.nix b/pkgs/development/tools/pnpm/default.nix index 3975dbc04277..c1423124fc24 100644 --- a/pkgs/development/tools/pnpm/default.nix +++ b/pkgs/development/tools/pnpm/default.nix @@ -25,6 +25,10 @@ let version = "10.33.4"; hash = "sha256-jnDdxmSbGLw9iVzzqQjAKR6kw4A5rYcixH4Bja8enPw="; }; + "11" = { + version = "11.1.0"; + hash = "sha256-VzyCrTVuiwl+bKxIG3OB+d7tM6MYr38xGYSFjr4fl+8="; + }; }; callPnpm = variant: callPackage ./generic.nix { inherit (variant) version hash; }; diff --git a/pkgs/development/tools/pnpm/generic.nix b/pkgs/development/tools/pnpm/generic.nix index 76a0b40835e4..aa50a4fd3a52 100644 --- a/pkgs/development/tools/pnpm/generic.nix +++ b/pkgs/development/tools/pnpm/generic.nix @@ -10,6 +10,7 @@ testers, buildPackages, bashNonInteractive, + tests, withNode ? true, version, @@ -43,16 +44,21 @@ stdenvNoCC.mkDerivation (finalAttrs: { rm -r package/dist/reflink.*node package/dist/vendor ''; - installPhase = '' - runHook preInstall + installPhase = + let + # Use ESM pnpm for versions > 11 + ext = if lib.versionOlder finalAttrs.version "11" then "cjs" else "mjs"; + in + '' + runHook preInstall - install -d $out/{bin,libexec} - cp -R . $out/libexec/pnpm - ln -s $out/libexec/pnpm/bin/pnpm.cjs $out/bin/pnpm - ln -s $out/libexec/pnpm/bin/pnpx.cjs $out/bin/pnpx + install -d $out/{bin,libexec} + cp -R . $out/libexec/pnpm + ln -s $out/libexec/pnpm/bin/pnpm.${ext} $out/bin/pnpm + ln -s $out/libexec/pnpm/bin/pnpx.${ext} $out/bin/pnpx - runHook postInstall - ''; + runHook postInstall + ''; postInstall = if lib.toInt (lib.versions.major version) < 9 then @@ -105,9 +111,10 @@ stdenvNoCC.mkDerivation (finalAttrs: { ); inherit nodejs majorVersion; - tests.version = lib.optionalAttrs withNode ( - testers.testVersion { package = finalAttrs.finalPackage; } - ); + tests = { + inherit (tests) pnpm; + version = lib.optionalAttrs withNode (testers.testVersion { package = finalAttrs.finalPackage; }); + }; updateScript = writeScript "pnpm-update-script" '' #!/usr/bin/env nix-shell #!nix-shell -i bash -p curl jq common-updater-scripts diff --git a/pkgs/test/pnpm/default.nix b/pkgs/test/pnpm/default.nix index 85874ec1a57f..8cc5708ec735 100644 --- a/pkgs/test/pnpm/default.nix +++ b/pkgs/test/pnpm/default.nix @@ -2,4 +2,5 @@ { pnpm-empty-lockfile = callPackage ./pnpm-empty-lockfile { }; pnpm-fixup-state-db = callPackage ./pnpm-fixup-state-db { }; + pnpm_11 = callPackage ./pnpm_11 { }; } diff --git a/pkgs/test/pnpm/pnpm-fixup-state-db/index.db b/pkgs/test/pnpm/pnpm-fixup-state-db/index.db index 705910416a042a68be532125cea69f6f6ee943dc..aa5dcd007e269e2024d09d8e4a995fa0b588a1ad 100644 GIT binary patch delta 13499 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 delta 11263 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 PHg297p2e}T;V2UT#`6ba diff --git a/pkgs/test/pnpm/pnpm_11/default.nix b/pkgs/test/pnpm/pnpm_11/default.nix new file mode 100644 index 000000000000..bf3ab4d4f551 --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11/default.nix @@ -0,0 +1,60 @@ +{ + fetchPnpmDeps, + lib, + makeShellWrapper, + nodejs, + pnpmConfigHook, + pnpm_11, + stdenv, + testers, +}: +let + pnpm = pnpm_11; +in +stdenv.mkDerivation (finalAttrs: { + pname = "pnpm-test"; + inherit (pnpm) version; + + src = ./src; + + pnpmDeps = testers.invalidateFetcherByDrvHash fetchPnpmDeps { + inherit (finalAttrs) pname version src; + inherit pnpm; + fetcherVersion = 3; + hash = "sha256-+Vrv5ZiVIARDZrR5/4OYRmaecQQZmcZFtMjK4qhXKb8="; + }; + + nativeBuildInputs = [ + makeShellWrapper + nodejs + pnpm + pnpmConfigHook + ]; + + buildPhase = '' + runHook preBuild + + pnpm build + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + install -Dm644 -t $out/lib/pnpm-11-test dist/index.js + + makeWrapper ${lib.getExe nodejs} $out/bin/pnpm11test \ + --add-flags "$out/lib/pnpm11test" + + runHook postInstall + ''; + + __structuredAttrs = true; + + meta = { + license = lib.licenses.mit; + mainProgram = "pnpm11test"; + inherit (pnpm.meta) maintainers; + }; +}) diff --git a/pkgs/test/pnpm/pnpm_11/src/.gitignore b/pkgs/test/pnpm/pnpm_11/src/.gitignore new file mode 100644 index 000000000000..1eae0cf6700c --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11/src/.gitignore @@ -0,0 +1,2 @@ +dist/ +node_modules/ diff --git a/pkgs/test/pnpm/pnpm_11/src/index.ts b/pkgs/test/pnpm/pnpm_11/src/index.ts new file mode 100644 index 000000000000..accefceba62b --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11/src/index.ts @@ -0,0 +1 @@ +console.log("Hello World"); diff --git a/pkgs/test/pnpm/pnpm_11/src/package.json b/pkgs/test/pnpm/pnpm_11/src/package.json new file mode 100644 index 000000000000..1eb3b51b3886 --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11/src/package.json @@ -0,0 +1,20 @@ +{ + "name": "pnpm11test", + "version": "1.0.0", + "description": "", + "main": "dist/index.js", + "scripts": { + "build": "tsc", + "start": "node dist/index.js" + }, + "license": "MIT", + "packageManager": "pnpm", + "type": "module", + "files": [ + "dist/" + ], + "devDependencies": { + "@types/node": "^25.5.0", + "typescript": "^6.0.2" + } +} diff --git a/pkgs/test/pnpm/pnpm_11/src/pnpm-lock.yaml b/pkgs/test/pnpm/pnpm_11/src/pnpm-lock.yaml new file mode 100644 index 000000000000..def71aa4e5a2 --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11/src/pnpm-lock.yaml @@ -0,0 +1,39 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@types/node': + specifier: ^25.5.0 + version: 25.5.0 + typescript: + specifier: ^6.0.2 + version: 6.0.2 + +packages: + + '@types/node@25.5.0': + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} + + typescript@6.0.2: + resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + +snapshots: + + '@types/node@25.5.0': + dependencies: + undici-types: 7.18.2 + + typescript@6.0.2: {} + + undici-types@7.18.2: {} diff --git a/pkgs/test/pnpm/pnpm_11/src/tsconfig.json b/pkgs/test/pnpm/pnpm_11/src/tsconfig.json new file mode 100644 index 000000000000..3471bd329666 --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11/src/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "dist", + "rootDir": ".", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0133a2683d37..f864001a47cc 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3141,8 +3141,9 @@ with pkgs; pnpm_9 pnpm_10_29_2 pnpm_10 + pnpm_11 ; - pnpm = pnpm_10; + pnpm = pnpm_11; inherit (callPackages ../build-support/node/fetch-pnpm-deps { }) fetchPnpmDeps