diff --git a/packages/nx/src/utils/lock-file/npm.ts b/packages/nx/src/utils/lock-file/npm.ts index 86a54b79b1..1deedd8767 100644 --- a/packages/nx/src/utils/lock-file/npm.ts +++ b/packages/nx/src/utils/lock-file/npm.ts @@ -1,6 +1,11 @@ import { satisfies } from 'semver'; import { LockFileData, PackageDependency } from './lock-file-type'; -import { sortObject, hashString, TransitiveLookupFunctionInput } from './utils'; +import { + sortObject, + hashString, + TransitiveLookupFunctionInput, + generatePrunnedHash, +} from './utils'; type PackageMeta = { path: string; @@ -460,7 +465,11 @@ Returning entire lock file.` ...pruneRootPackage(lockFileData, packages, projectName), }; let prunedLockFileData: LockFileData; - prunedLockFileData = { dependencies, lockFileMetadata, hash: '' }; + prunedLockFileData = { + dependencies, + lockFileMetadata, + hash: generatePrunnedHash(lockFileData.hash, packages, projectName), + }; return prunedLockFileData; } diff --git a/packages/nx/src/utils/lock-file/pnpm.ts b/packages/nx/src/utils/lock-file/pnpm.ts index 27b5c31890..4087bde21b 100644 --- a/packages/nx/src/utils/lock-file/pnpm.ts +++ b/packages/nx/src/utils/lock-file/pnpm.ts @@ -5,6 +5,7 @@ import { hashString, isRootVersion, TransitiveLookupFunctionInput, + generatePrunnedHash, } from './utils'; import { satisfies } from 'semver'; @@ -345,7 +346,7 @@ export function prunePnpmLockFile( const prunedLockFileData = { lockFileMetadata: lockFileData.lockFileMetadata, dependencies, - hash: '', + hash: generatePrunnedHash(lockFileData.hash, packages, projectName), }; return prunedLockFileData; } diff --git a/packages/nx/src/utils/lock-file/utils.ts b/packages/nx/src/utils/lock-file/utils.ts index 6b4e9f6a88..fa04cfe8ef 100644 --- a/packages/nx/src/utils/lock-file/utils.ts +++ b/packages/nx/src/utils/lock-file/utils.ts @@ -245,3 +245,22 @@ function traverseExternalNodesDependencies( } }); } + +/** + * Generate new hash based on the original hash and pruning input parameters - packages and project name + * @param originalHash + * @param packages + * @param projectName + * @returns + */ +export function generatePrunnedHash( + originalHash: string, + packages: string[], + projectName?: string +) { + const hashingInput = [originalHash, ...packages]; + if (projectName) { + hashingInput.push(projectName); + } + return defaultHashing.hashArray(hashingInput); +} diff --git a/packages/nx/src/utils/lock-file/yarn.ts b/packages/nx/src/utils/lock-file/yarn.ts index 12b2a56a87..a4f465d659 100644 --- a/packages/nx/src/utils/lock-file/yarn.ts +++ b/packages/nx/src/utils/lock-file/yarn.ts @@ -10,6 +10,7 @@ import { hashString, isRootVersion, TransitiveLookupFunctionInput, + generatePrunnedHash, } from './utils'; type LockFileDependencies = Record< @@ -204,10 +205,13 @@ export function pruneYarnLockFile( ), }, dependencies: prunedDependencies, - hash: '', + hash: generatePrunnedHash(lockFileData.hash, packages, projectName), }; } else { - prunedLockFileData = { dependencies: prunedDependencies, hash: '' }; + prunedLockFileData = { + dependencies: prunedDependencies, + hash: generatePrunnedHash(lockFileData.hash, packages, projectName), + }; } prunedLockFileData.hash = hashString(JSON.stringify(prunedLockFileData));