From 2e8acbe2e73d5bcea04d51552b9959cc435f414b Mon Sep 17 00:00:00 2001 From: OrbisK Date: Tue, 26 Aug 2025 14:38:52 +0200 Subject: [PATCH 1/2] feat(upgrade): add `v3`, `v4`, `v3-nightly` and `v4-nightly` channel --- packages/nuxi/src/commands/upgrade.ts | 36 +++++++++++++++++++-------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/packages/nuxi/src/commands/upgrade.ts b/packages/nuxi/src/commands/upgrade.ts index 640c92c7a..2ac4eea10 100644 --- a/packages/nuxi/src/commands/upgrade.ts +++ b/packages/nuxi/src/commands/upgrade.ts @@ -31,8 +31,14 @@ const nuxtVersionTags = { '4.x': 'latest', } -async function getNightlyVersion(packageNames: string[]): Promise<{ npmPackages: string[], nuxtVersion: string }> { - const nuxtVersion = await logger.prompt( +type NuxtVersionTag = keyof typeof nuxtVersionTags + +function getNightlyDependency(dep: string, nuxtVersion: NuxtVersionTag) { + return `${dep}@npm:${dep}-nightly@${nuxtVersionTags[nuxtVersion]}` +} + +async function getNightlyVersion(packageNames: string[]): Promise<{ npmPackages: string[], nuxtVersion: NuxtVersionTag }> { + const nuxtVersion: NuxtVersionTag = await logger.prompt( 'Which nightly Nuxt release channel do you want to install? (3.x or 4.x)', { type: 'select', @@ -42,17 +48,27 @@ async function getNightlyVersion(packageNames: string[]): Promise<{ npmPackages: }, ).catch(() => process.exit(1)) - const npmPackages = packageNames.map(p => `${p}@npm:${p}-nightly@${nuxtVersionTags[nuxtVersion]}`) + const npmPackages = packageNames.map(p => getNightlyDependency(p, nuxtVersion)) return { npmPackages, nuxtVersion } } -async function getRequiredNewVersion(packageNames: string[], channel: string): Promise<{ npmPackages: string[], nuxtVersion: string }> { - if (channel === 'nightly') { - return getNightlyVersion(packageNames) +async function getRequiredNewVersion(packageNames: string[], channel: string): Promise<{ npmPackages: string[], nuxtVersion: NuxtVersionTag }> { + switch (channel) { + case 'nightly': + return getNightlyVersion(packageNames) + case 'v3': + return { npmPackages: packageNames.map(p => `${p}@3`), nuxtVersion: '3.x' } + case 'v3-nightly': + return { npmPackages: packageNames.map(p => getNightlyDependency(p, '3.x')), nuxtVersion: '3.x' } + case 'v4': + return { npmPackages: packageNames.map(p => `${p}@latest`), nuxtVersion: '4.x' } + case 'v4-nightly': + return { npmPackages: packageNames.map(p => getNightlyDependency(p, '4.x')), nuxtVersion: '4.x' } + case 'stable': + default: + return { npmPackages: packageNames.map(p => `${p}@latest`), nuxtVersion: '4.x' } } - - return { npmPackages: packageNames.map(p => `${p}@latest`), nuxtVersion: '4' } } export default defineCommand({ @@ -78,7 +94,7 @@ export default defineCommand({ alias: 'ch', default: 'stable', description: 'Specify a channel to install from (default: stable)', - valueHint: 'stable|nightly', + valueHint: 'stable|nightly|v3|v4|v4-nightly|v3-nightly', }, }, async run(ctx) { @@ -149,7 +165,7 @@ export default defineCommand({ }, ).catch(() => process.exit(1)) - const versionType = ctx.args.channel === 'nightly' ? 'nightly' : 'latest stable' + const versionType = ctx.args.channel === 'nightly' ? 'nightly' : `latest ${ctx.args.channel}` logger.info(`Installing ${versionType} Nuxt ${nuxtVersion} release...`) await addDependency(npmPackages, { From a3c12c5fdae2feb28baef6aeea3172f317221f08 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 8 Sep 2025 13:58:53 +0200 Subject: [PATCH 2/2] refactor: use `@4` semver instead `latest` tag for `v4` channel --- packages/nuxi/src/commands/upgrade.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxi/src/commands/upgrade.ts b/packages/nuxi/src/commands/upgrade.ts index 2ac4eea10..73855b3cd 100644 --- a/packages/nuxi/src/commands/upgrade.ts +++ b/packages/nuxi/src/commands/upgrade.ts @@ -62,7 +62,7 @@ async function getRequiredNewVersion(packageNames: string[], channel: string): P case 'v3-nightly': return { npmPackages: packageNames.map(p => getNightlyDependency(p, '3.x')), nuxtVersion: '3.x' } case 'v4': - return { npmPackages: packageNames.map(p => `${p}@latest`), nuxtVersion: '4.x' } + return { npmPackages: packageNames.map(p => `${p}@4`), nuxtVersion: '4.x' } case 'v4-nightly': return { npmPackages: packageNames.map(p => getNightlyDependency(p, '4.x')), nuxtVersion: '4.x' } case 'stable':