Skip to content

Commit 9d49886

Browse files
authored
fix(migrate): do not downgrade versions (#10352)
* fix(migrate): do not downgrade versions * changeset
1 parent 6cb283e commit 9d49886

File tree

5 files changed

+46
-4
lines changed

5 files changed

+46
-4
lines changed

.changeset/cold-boxes-build.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte-migrate': patch
3+
---
4+
5+
fix: do not downgrade versions

packages/migrate/migrations/svelte-4/migrate.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import fs from 'node:fs';
22
import { Project, ts, Node } from 'ts-morph';
3+
import semver from 'semver';
34

45
export function update_pkg_json() {
56
fs.writeFileSync(
@@ -22,12 +23,21 @@ export function update_pkg_json_content(content) {
2223
*/
2324
function update_pkg(name, version, additional = '') {
2425
if (pkg.dependencies?.[name]) {
25-
log_migration(`Updated ${name} to ${version} ${additional}`);
26-
pkg.dependencies[name] = version;
26+
const existing_range = pkg.dependencies[name];
27+
28+
if (semver.validRange(existing_range) && !semver.subset(existing_range, version)) {
29+
log_migration(`Updated ${name} to ${version} ${additional}`);
30+
pkg.dependencies[name] = version;
31+
}
2732
}
33+
2834
if (pkg.devDependencies?.[name]) {
29-
log_migration(`Updated ${name} to ${version} ${additional}`);
30-
pkg.devDependencies[name] = version;
35+
const existing_range = pkg.devDependencies[name];
36+
37+
if (semver.validRange(existing_range) && !semver.subset(existing_range, version)) {
38+
log_migration(`Updated ${name} to ${version} ${additional}`);
39+
pkg.devDependencies[name] = version;
40+
}
3141
}
3242
}
3343

packages/migrate/migrations/svelte-4/migrate.spec.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,3 +362,22 @@ test('Update package.json', () => {
362362
}`
363363
);
364364
});
365+
366+
367+
test('Does not downgrade versions', () => {
368+
const result = update_pkg_json_content(`{
369+
"devDependencies": {
370+
"svelte": "^4.0.5",
371+
"typescript": "github:idk"
372+
}
373+
}`);
374+
assert.equal(
375+
result,
376+
`{
377+
"devDependencies": {
378+
"svelte": "^4.0.5",
379+
"typescript": "github:idk"
380+
}
381+
}`
382+
);
383+
});

packages/migrate/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,15 @@
2727
"kleur": "^4.1.5",
2828
"magic-string": "^0.30.0",
2929
"prompts": "^2.4.2",
30+
"semver": "^7.5.3",
3031
"tiny-glob": "^0.2.9",
3132
"ts-morph": "^19.0.0",
3233
"typescript": "^5.0.4"
3334
},
3435
"devDependencies": {
3536
"@types/node": "^16.18.6",
3637
"@types/prompts": "^2.4.1",
38+
"@types/semver": "^7.5.0",
3739
"prettier": "^2.8.0",
3840
"vitest": "^0.32.2"
3941
},

pnpm-lock.yaml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)