From 09cec0f560e3eebab64a632ad59c49bf70f03d55 Mon Sep 17 00:00:00 2001 From: Pyrox Date: Thu, 24 Oct 2024 01:06:27 -0400 Subject: [PATCH 1/4] pnpm.fetchDeps: pnpmWorkspace -> pnpmWorkspaces --- .../javascript.section.md | 31 +++++++++++++++---- .../tools/pnpm/fetch-deps/default.nix | 11 +++++-- .../tools/pnpm/fetch-deps/pnpm-config-hook.sh | 14 +++++++-- 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/doc/languages-frameworks/javascript.section.md b/doc/languages-frameworks/javascript.section.md index e68a29b0b3fdf..9acfd4181108a 100644 --- a/doc/languages-frameworks/javascript.section.md +++ b/doc/languages-frameworks/javascript.section.md @@ -428,7 +428,26 @@ NOTE: It is highly recommended to use a pinned version of pnpm (i.e. `pnpm_8` or 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`. -`pnpm.configHook` supports adding additional `pnpm install` flags via `pnpmInstallFlags` which can be set to a Nix string array. +`pnpm.configHook` supports adding additional `pnpm install` flags via `pnpmInstallFlags` which can be set to a Nix string array: + +```nix +{ + pnpm, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "foo"; + version = "0-unstable-1980-01-01"; + + src = ...; + + pnpmInstallFlags = [ "--shamefully-hoist" ]; + + pnpmDeps = pnpm.fetchDeps { + inherit (finalAttrs) pnpmInstallFlags; + }; +}) +``` #### Dealing with `sourceRoot` {#javascript-pnpm-sourceRoot} @@ -459,16 +478,16 @@ Assuming the following directory structure, we can define `sourceRoot` and `pnpm #### PNPM Workspaces {#javascript-pnpm-workspaces} -If you need to use a PNPM workspace for your project, then set `pnpmWorkspace = ""` in your `pnpm.fetchDeps` call, -which will make PNPM only install dependencies for that workspace package. +If you need to use a PNPM workspace for your project, then set `pnpmWorkspaces = [ "" "" ]`, etc, in your `pnpm.fetchDeps` call, +which will make PNPM only install dependencies for those workspace packages. For example: ```nix ... -pnpmWorkspace = "@astrojs/language-server"; +pnpmWorkspaces = [ "@astrojs/language-server" ]; pnpmDeps = pnpm.fetchDeps { - inherit (finalAttrs) pnpmWorkspace; + inherit (finalAttrs) pnpmWorkspaces; ... } ``` @@ -476,7 +495,7 @@ pnpmDeps = pnpm.fetchDeps { The above would make `pnpm.fetchDeps` call only install dependencies for the `@astrojs/language-server` workspace package. Note that you do not need to set `sourceRoot` to make this work. -Usually in such cases, you'd want to use `pnpm --filter=$pnpmWorkspace build` to build your project, as `npmHooks.npmBuildHook` probably won't work. A `buildPhase` based on the following example will probably fit most workspace projects: +Usually in such cases, you'd want to use `pnpm --filter= build` to build your project, as `npmHooks.npmBuildHook` probably won't work. A `buildPhase` based on the following example will probably fit most workspace projects: ```nix buildPhase = '' diff --git a/pkgs/development/tools/pnpm/fetch-deps/default.nix b/pkgs/development/tools/pnpm/fetch-deps/default.nix index d891600644069..a8200fcad65a8 100644 --- a/pkgs/development/tools/pnpm/fetch-deps/default.nix +++ b/pkgs/development/tools/pnpm/fetch-deps/default.nix @@ -15,7 +15,7 @@ { hash ? "", pname, - pnpmWorkspace ? "", + pnpmWorkspaces ? [ ], prePnpmInstall ? "", ... }@args: @@ -32,8 +32,14 @@ outputHash = ""; outputHashAlgo = "sha256"; }; - installFlags = lib.optionalString (pnpmWorkspace != "") "--filter=${pnpmWorkspace}"; + + filterFlags = lib.map (package: "--filter=${package}") pnpmWorkspaces; in + # pnpmWorkspace was deprecated, so throw if it's used. + assert (lib.throwIf (args ? pnpmWorkspace) + "pnpm.fetchDeps: `pnpmWorkspace` is no longer supported, please migrate to `pnpmWorkspaces`." + ) true; + stdenvNoCC.mkDerivation ( finalAttrs: ( @@ -74,6 +80,7 @@ --force \ --ignore-scripts \ ${installFlags} \ + ${lib.escapeShellArgs filterFlags} \ --frozen-lockfile runHook postInstall diff --git a/pkgs/development/tools/pnpm/fetch-deps/pnpm-config-hook.sh b/pkgs/development/tools/pnpm/fetch-deps/pnpm-config-hook.sh index e82a62f9101cd..a47e3184e9cbd 100644 --- a/pkgs/development/tools/pnpm/fetch-deps/pnpm-config-hook.sh +++ b/pkgs/development/tools/pnpm/fetch-deps/pnpm-config-hook.sh @@ -22,11 +22,19 @@ pnpmConfigHook() { pnpm config set store-dir "$STORE_PATH" - echo "Installing dependencies" - if [[ -n "$pnpmWorkspace" ]]; then - pnpmInstallFlags+=("--filter=$pnpmWorkspace") + echo "'pnpmWorkspace' is deprecated, please migrate to 'pnpmWorkspaces'." + exit 2 + fi + + echo "Installing dependencies" + if [[ -n "$pnpmWorkspaces" ]]; then + local IFS=" " + for ws in $pnpmWorkspaces; do + pnpmInstallFlags+=("--filter=$ws") + done fi + runHook prePnpmInstall pnpm install \ From 698f4accb3a879e7dfcee54b09f445848ca1e0d5 Mon Sep 17 00:00:00 2001 From: Pyrox Date: Thu, 24 Oct 2024 01:06:41 -0400 Subject: [PATCH 2/4] pnpm.fetchDeps: Better pnpmInstallFlags support --- pkgs/development/tools/pnpm/fetch-deps/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/tools/pnpm/fetch-deps/default.nix b/pkgs/development/tools/pnpm/fetch-deps/default.nix index a8200fcad65a8..ae2c1e1193cbe 100644 --- a/pkgs/development/tools/pnpm/fetch-deps/default.nix +++ b/pkgs/development/tools/pnpm/fetch-deps/default.nix @@ -17,6 +17,7 @@ pname, pnpmWorkspaces ? [ ], prePnpmInstall ? "", + pnpmInstallFlags ? [ ], ... }@args: let @@ -79,8 +80,8 @@ pnpm install \ --force \ --ignore-scripts \ - ${installFlags} \ ${lib.escapeShellArgs filterFlags} \ + ${lib.escapeShellArgs pnpmInstallFlags} \ --frozen-lockfile runHook postInstall From 1a1f5b8b8f1c51b5f4ebcadc15130f8584420cde Mon Sep 17 00:00:00 2001 From: Pyrox Date: Thu, 24 Oct 2024 01:07:48 -0400 Subject: [PATCH 3/4] astro-language-server: pnpmWorkspace -> pnpmWorkspaces --- pkgs/by-name/as/astro-language-server/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/as/astro-language-server/package.nix b/pkgs/by-name/as/astro-language-server/package.nix index a979dafd8a24c..23c06cfe5062c 100644 --- a/pkgs/by-name/as/astro-language-server/package.nix +++ b/pkgs/by-name/as/astro-language-server/package.nix @@ -22,7 +22,7 @@ stdenv.mkDerivation (finalAttrs: { pname version src - pnpmWorkspace + pnpmWorkspaces prePnpmInstall ; hash = "sha256-/X8ZoWK5kBPm/8clBDP+B9A5ofXnH2svmy4kMc2t5iA="; @@ -37,7 +37,7 @@ stdenv.mkDerivation (finalAttrs: { # Must specify to download "@astrojs/yaml2ts" depencendies # https://pnpm.io/filtering#--filter-package_name-1 - pnpmWorkspace = "@astrojs/language-server..."; + pnpmWorkspaces = [ "@astrojs/language-server..." ]; prePnpmInstall = '' # Warning section for "pnpm@v8" # https://pnpm.io/cli/install#--filter-package_selector From 42fb6465a130d71b5a49aa59800c4a16cdeb86d9 Mon Sep 17 00:00:00 2001 From: Pyrox Date: Thu, 24 Oct 2024 01:08:01 -0400 Subject: [PATCH 4/4] bash-language-server: pnpmWorkspace -> pnpmWorkspaces --- pkgs/by-name/ba/bash-language-server/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ba/bash-language-server/package.nix b/pkgs/by-name/ba/bash-language-server/package.nix index 2778d255cecba..a5853aeb9e2cf 100644 --- a/pkgs/by-name/ba/bash-language-server/package.nix +++ b/pkgs/by-name/ba/bash-language-server/package.nix @@ -19,9 +19,9 @@ stdenv.mkDerivation (finalAttrs: { hash = "sha256-yJ81oGd9aNsWQMLvDSgMVVH1//Mw/SVFYFIPsJTQYzE="; }; - pnpmWorkspace = "bash-language-server"; + pnpmWorkspaces = [ "bash-language-server" ]; pnpmDeps = pnpm_8.fetchDeps { - inherit (finalAttrs) pname version src pnpmWorkspace; + inherit (finalAttrs) pname version src pnpmWorkspaces; hash = "sha256-W25xehcxncBs9QgQBt17F5YHK0b+GDEmt27XzTkyYWg="; };