Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/warm-moose-argue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'svelte-migrate': patch
---

fix: prompt SvelteKit 2 migration during Svelte 5 migration if necessary
52 changes: 40 additions & 12 deletions packages/migrate/migrations/svelte-5/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import semver from 'semver';
import glob from 'tiny-glob/sync.js';
import { bail, check_git, update_js_file, update_svelte_file } from '../../utils.js';
import { migrate as migrate_svelte_4 } from '../svelte-4/index.js';
import { migrate as migrate_sveltekit_2 } from '../sveltekit-2/index.js';
import { transform_module_code, transform_svelte_code, update_pkg_json } from './migrate.js';

export async function migrate() {
Expand All @@ -22,37 +23,64 @@ export async function migrate() {
);

const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));

const svelte_dep = pkg.devDependencies?.svelte ?? pkg.dependencies?.svelte;
if (svelte_dep && semver.validRange(svelte_dep) && semver.gtr('4.0.0', svelte_dep)) {
console.log(
colors
.bold()
.yellow(
'\nDetected Svelte 3. We recommend running the `svelte-4` migration first (`npx svelte-migrate svelte-4`).\n'
'\nDetected Svelte 3. You need to upgrade to Svelte version 4 first (`npx svelte-migrate svelte-4`).\n'
)
);
const response = await prompts({
type: 'confirm',
name: 'value',
message: 'Run `svelte-4` migration now?',
message: 'Run svelte-4 migration now?',
initial: false
});
if (!response.value) {
process.exit(1);
} else {
await migrate_svelte_4();
console.log(
colors.bold().green('`svelte-4` migration complete. Continue with `svelte-5` migration?\n')
colors
.bold()
.green(
'svelte-4 migration complete. Check that everything is ok, then run `npx svelte-migrate svelte-5` again to continue the Svelte 5 migration.\n'
)
);
const response = await prompts({
type: 'confirm',
name: 'value',
message: 'Continue?',
initial: false
});
if (!response.value) {
process.exit(1);
}
process.exit(0);
}
}

const kit_dep = pkg.devDependencies?.['@sveltejs/kit'] ?? pkg.dependencies?.['@sveltejs/kit'];
if (kit_dep && semver.validRange(kit_dep) && semver.gtr('2.0.0', kit_dep)) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's a little surprising to me to see 2 > kit_dep vs kit_dep < 2

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yoda-speak - it's done like that in all other migration, I don't care honestly.

console.log(
colors
.bold()
.yellow(
'\nDetected SvelteKit 1. You need to upgrade to SvelteKit version 2 first (`npx svelte-migrate sveltekit-2`).\n'
)
);
const response = await prompts({
type: 'confirm',
name: 'value',
message: 'Run sveltekit-2 migration now?',
initial: false
});
if (!response.value) {
process.exit(1);
} else {
await migrate_sveltekit_2();
console.log(
colors
.bold()
.green(
'sveltekit-2 migration complete. Check that everything is ok, then run `npx svelte-migrate svelte-5` again to continue the Svelte 5 migration.\n'
)
);
process.exit(0);
}
}

Expand Down