Skip to content

Commit dbb11bc

Browse files
authored
feat: update package-lock.json workspace entry versions (#2088)
Co-authored-by: Jeff Ching <chingor@google.com> Fixes #1993
1 parent 97b0542 commit dbb11bc

4 files changed

Lines changed: 63 additions & 1 deletion

File tree

__snapshots__/package-lock-json.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,26 @@ exports['PackageLockJson updateContent v2 updates the package version 1'] = `
2424
2525
`
2626

27+
exports['PackageLockJson updateContent v3 monorepo updates the package version 1'] = `
28+
{
29+
"name": "release-please",
30+
"version": "14.0.0",
31+
"lockfileVersion": 3,
32+
"requires": true,
33+
"packages": {
34+
"": {
35+
"name": "release-please",
36+
"version": "14.0.0"
37+
},
38+
"packages/foo": {
39+
"name": "release-please-foo",
40+
"version": "2.0.0"
41+
}
42+
}
43+
}
44+
45+
`
46+
2747
exports['PackageLockJson updateContent v3 updates the package version 1'] = `
2848
{
2949
"name": "release-please",

src/updaters/node/package-lock-json.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {DefaultUpdater} from '../default';
1919
type LockFileV2 = {
2020
version: string;
2121
lockfileVersion?: number;
22-
packages: Record<string, {version: string}>;
22+
packages: Record<string, {version: string; name: string}>;
2323
};
2424

2525
/**
@@ -34,6 +34,15 @@ export class PackageLockJson extends DefaultUpdater {
3434
if (parsed.lockfileVersion === 2 || parsed.lockfileVersion === 3) {
3535
parsed.packages[''].version = this.version.toString();
3636
}
37+
if (this.versionsMap) {
38+
for (const [, obj] of Object.entries(parsed.packages)) {
39+
const ver = this.versionsMap.get(obj.name);
40+
if (ver) {
41+
obj.version = ver.toString();
42+
}
43+
}
44+
}
45+
3746
return jsonStringify(parsed, content);
3847
}
3948
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "release-please",
3+
"version": "11.1.0",
4+
"lockfileVersion": 3,
5+
"requires": true,
6+
"packages": {
7+
"": {
8+
"name": "release-please",
9+
"version": "11.1.0"
10+
},
11+
"packages/foo": {
12+
"name": "release-please-foo",
13+
"version": "1.0.0"
14+
}
15+
}
16+
}

test/updaters/package-lock-json.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,21 @@ describe('PackageLockJson', () => {
6363
snapshot(newContent.replace(/\r\n/g, '\n'));
6464
});
6565
});
66+
67+
describe('updateContent v3 monorepo', () => {
68+
it('updates the package version', async () => {
69+
const oldContent = readFileSync(
70+
resolve(fixturesPath, './package-lock-v3-workspace.json'),
71+
'utf8'
72+
);
73+
const versionsMap = new Map();
74+
versionsMap.set('release-please-foo', new Version(2, 0, 0));
75+
const packageJson = new PackageLockJson({
76+
version: Version.parse('14.0.0'),
77+
versionsMap,
78+
});
79+
const newContent = packageJson.updateContent(oldContent);
80+
snapshot(newContent.replace(/\r\n/g, '\n'));
81+
});
82+
});
6683
});

0 commit comments

Comments
 (0)