From 05158d2cdeb0e08cf41d0225f3fc5a6450850bf4 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Fri, 27 Feb 2026 23:51:58 +0100 Subject: [PATCH] fix: comparison of hoistPattern values (#10713) --- .changeset/slick-cases-double.md | 6 ++++++ pkg-manager/core/src/install/validateModules.ts | 4 ++-- pkg-manager/headless/src/index.ts | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 .changeset/slick-cases-double.md diff --git a/.changeset/slick-cases-double.md b/.changeset/slick-cases-double.md new file mode 100644 index 0000000000..7a4cc64ce5 --- /dev/null +++ b/.changeset/slick-cases-double.md @@ -0,0 +1,6 @@ +--- +"@pnpm/headless": patch +"@pnpm/core": patch +--- + +Fix the comparison of current and previous hoistPattern and publicHoistPattern values. diff --git a/pkg-manager/core/src/install/validateModules.ts b/pkg-manager/core/src/install/validateModules.ts index c8cbfab1d9..b790402888 100644 --- a/pkg-manager/core/src/install/validateModules.ts +++ b/pkg-manager/core/src/install/validateModules.ts @@ -63,7 +63,7 @@ export async function validateModules ( } if ( opts.forcePublicHoistPattern && - !equals(modules.publicHoistPattern, opts.publicHoistPattern || undefined) + !equals(modules.publicHoistPattern ?? [], opts.publicHoistPattern ?? []) ) { if (opts.forceNewModules && (rootProject != null)) { await purgeModulesDirsOfImporter(opts, rootProject) @@ -80,7 +80,7 @@ export async function validateModules ( if (opts.forceHoistPattern && (rootProject != null)) { try { - if (!equals(opts.currentHoistPattern, opts.hoistPattern || undefined)) { + if (!equals(opts.currentHoistPattern ?? [], opts.hoistPattern ?? [])) { throw new PnpmError( 'HOIST_PATTERN_DIFF', 'This modules directory was created using a different hoist-pattern value.' + diff --git a/pkg-manager/headless/src/index.ts b/pkg-manager/headless/src/index.ts index 701822d565..01bce59a6f 100644 --- a/pkg-manager/headless/src/index.ts +++ b/pkg-manager/headless/src/index.ts @@ -334,8 +334,8 @@ export async function headlessInstall (opts: HeadlessOptions): Promise