Skip to content

Commit 0e14ced

Browse files
L-Quniclanton
andauthored
[rush-lib] Fix edge cases where Rush does not update the lockfile (#4839)
* fix: edge cases where Rush does not update the lockfile * rush change * Rush change. --------- Co-authored-by: qun <[email protected]> Co-authored-by: Ian Clanton-Thuon <[email protected]>
1 parent 7bc9d0d commit 0e14ced

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@microsoft/rush",
5+
"comment": "Fix an issue where Rush does not detect an outdated lockfile if the `dependenciesMeta` `package.json` field is edited.",
6+
"type": "none"
7+
}
8+
],
9+
"packageName": "@microsoft/rush"
10+
}

libraries/rush-lib/src/logic/pnpm/PnpmShrinkwrapFile.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ export class PnpmShrinkwrapFile extends BaseShrinkwrapFile {
872872

873873
// Use a new PackageJsonEditor since it will classify each dependency type, making tracking the
874874
// found versions much simpler.
875-
const { dependencyList, devDependencyList } = PackageJsonEditor.fromObject(
875+
const { dependencyList, devDependencyList, dependencyMetaList } = PackageJsonEditor.fromObject(
876876
this._pnpmfileConfiguration.transform(transformedPackageJson),
877877
project.packageJsonEditor.filePath
878878
);
@@ -960,6 +960,7 @@ export class PnpmShrinkwrapFile extends BaseShrinkwrapFile {
960960
);
961961
const importerDependencies: Set<string> = new Set(Object.keys(importer.dependencies ?? {}));
962962
const importerDevDependencies: Set<string> = new Set(Object.keys(importer.devDependencies ?? {}));
963+
const importerDependenciesMeta: Set<string> = new Set(Object.keys(importer.dependenciesMeta ?? {}));
963964

964965
for (const { dependencyType, name, version } of allDependencies) {
965966
let isOptional: boolean = false;
@@ -1019,11 +1020,18 @@ export class PnpmShrinkwrapFile extends BaseShrinkwrapFile {
10191020
}
10201021
}
10211022

1023+
for (const { name, injected } of dependencyMetaList) {
1024+
if (importer.dependenciesMeta?.[name]?.injected === injected) {
1025+
importerDependenciesMeta.delete(name);
1026+
}
1027+
}
1028+
10221029
// Finally, validate that all values in the importer are also present in the dependency list.
10231030
if (
10241031
importerOptionalDependencies.size > 0 ||
10251032
importerDependencies.size > 0 ||
1026-
importerDevDependencies.size > 0
1033+
importerDevDependencies.size > 0 ||
1034+
importerDependenciesMeta.size > 0
10271035
) {
10281036
return true;
10291037
}

0 commit comments

Comments
 (0)