From 8cd410a361e443eac5574aa4ee24a05641bc1980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Jona=C5=A1?= Date: Wed, 22 Mar 2023 19:06:10 +0100 Subject: [PATCH] fix(core): fix broken path elevation in npm lockfile pruning (#15833) --- packages/nx/src/lock-file/npm-parser.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/nx/src/lock-file/npm-parser.ts b/packages/nx/src/lock-file/npm-parser.ts index 7d2cb67f079ea..7000c79c07ddf 100644 --- a/packages/nx/src/lock-file/npm-parser.ts +++ b/packages/nx/src/lock-file/npm-parser.ts @@ -580,10 +580,20 @@ function elevateNestedPaths( `${segs.join('/node_modules/')}/node_modules/${packageName}`; // check if grandparent has the same package - while ( - segments.length > 1 && - !result.has(getNewPath(segments.slice(0, -1))) - ) { + const shouldElevate = (segs: string[]) => { + const newPath = getNewPath(segs.slice(0, -1)); + if (result.has(newPath)) { + const match = result.get(newPath); + const source = remappedPackages.get(path); + return ( + match.valueV1?.version === source.valueV1?.version && + match.valueV3?.version === source.valueV3?.version + ); + } + return true; + }; + + while (segments.length > 1 && shouldElevate(segments)) { segments.pop(); } const newPath = getNewPath(segments);