Skip to content

Commit 2f8b6c1

Browse files
authored
fix(scripts): update overrides when updating packages (#7081)
1 parent 4c074d5 commit 2f8b6c1

File tree

2 files changed

+61
-25
lines changed

2 files changed

+61
-25
lines changed

scripts/update-dependencies-config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module.exports = {
1616
'@typescript-eslint/eslint-plugin',
1717
'@typescript-eslint/parser',
1818
'eslint@8', // TODO: update to flat config, switch to eslint 9, remove the fixed version
19+
'eslint-plugin-chai-friendly',
1920
'eslint-plugin-jsx-a11y',
2021
'eslint-plugin-react',
2122
'eslint-plugin-react-hooks',

scripts/update-dependencies.js

Lines changed: 60 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@ const {
1212

1313
const UPDATE_CONFIGS = require('./update-dependencies-config');
1414

15-
async function hoistSharedDependencies(newVersions) {
15+
async function hoistSharedDependencies(root, newVersions) {
1616
try {
17-
const root = await findMonorepoRoot();
18-
1917
await withProgress('Cleaning up existing node_modules', async () => {
2018
await runInDir("npx lerna exec 'rm -Rf node_modules'", root);
2119
await runInDir('rm -Rf node_modules', root);
@@ -71,6 +69,55 @@ async function getVersion(depSpec) {
7169
return [name, version.trim()];
7270
}
7371

72+
function updateDependencies(packageJson, newVersions) {
73+
for (const depType of [
74+
'dependencies',
75+
'devDependencies',
76+
'peerDependencies',
77+
'optionalDependencies',
78+
]) {
79+
if (packageJson[depType]) {
80+
for (const packageName of Object.keys(packageJson[depType])) {
81+
if (packageJson[depType][packageName] && newVersions[packageName]) {
82+
packageJson[depType][packageName] = `^${newVersions[packageName]}`;
83+
}
84+
}
85+
}
86+
}
87+
}
88+
89+
/**
90+
* example overrides config:
91+
*
92+
* {
93+
* "overrides": {
94+
* "@npm/foo": "1.0.0",
95+
* "@npm/bar": {
96+
* ".": "1.0.0",
97+
* "@npm/buz": "1.0.0"
98+
* },
99+
* "@npm/a": {
100+
* "@npm/b": {
101+
* "@npm/c": "1.0.0"
102+
* }
103+
* }
104+
* }
105+
* }
106+
*
107+
* https://docs.npmjs.com/cli/v11/configuring-npm/package-json#overrides
108+
*/
109+
function updateOverrides(overrides, newVersions, parent) {
110+
for (const name of Object.keys(overrides ?? {})) {
111+
if (typeof overrides[name] === 'string' && newVersions[name]) {
112+
overrides[name] = `^${newVersions[name]}`;
113+
} else if (name === '.' && parent && newVersions[parent]) {
114+
overrides[name] = `^${newVersions[name]}`;
115+
} else if (typeof overrides[name] === 'object') {
116+
updateOverrides(overrides[name], newVersions, name);
117+
}
118+
}
119+
}
120+
74121
async function main() {
75122
let dependencies;
76123

@@ -124,29 +171,17 @@ async function main() {
124171
const newVersionsObj = Object.fromEntries(newVersions);
125172
let hasChanged;
126173

174+
const monorepoRoot = await findMonorepoRoot();
175+
const workspaces = [monorepoRoot].concat(
176+
await Array.fromAsync(listAllPackages(), (workspace) => workspace.location)
177+
);
178+
127179
await withProgress('Updating package.json in workspaces', async () => {
128-
for await (const props of listAllPackages()) {
129-
await updatePackageJson(props.location, (packageJson) => {
180+
for (const workspacePath of workspaces) {
181+
await updatePackageJson(workspacePath, (packageJson) => {
130182
const origPackageJson = cloneDeep(packageJson);
131-
for (const depType of [
132-
'dependencies',
133-
'devDependencies',
134-
'peerDependencies',
135-
'optionalDependencies',
136-
]) {
137-
if (packageJson[depType]) {
138-
for (const packageName of Object.keys(packageJson[depType])) {
139-
if (
140-
packageJson[depType][packageName] &&
141-
newVersionsObj[packageName]
142-
) {
143-
packageJson[depType][
144-
packageName
145-
] = `^${newVersionsObj[packageName]}`;
146-
}
147-
}
148-
}
149-
}
183+
updateDependencies(packageJson, newVersionsObj);
184+
updateOverrides(packageJson.overrides, newVersionsObj);
150185
hasChanged = hasChanged || !isEqual(origPackageJson, packageJson);
151186
return packageJson;
152187
});
@@ -159,7 +194,7 @@ async function main() {
159194
return;
160195
}
161196

162-
await hoistSharedDependencies(newVersions);
197+
await hoistSharedDependencies(monorepoRoot, newVersions);
163198

164199
console.log();
165200
console.log('Successfully updated dependencies');

0 commit comments

Comments
 (0)