From fcba5ac3d07cbc6080164f96e7e59b537785e13d Mon Sep 17 00:00:00 2001 From: Damian Glowala Date: Wed, 8 Jan 2025 18:56:29 +0100 Subject: [PATCH 1/4] feat(init): add `--nightly` flag --- src/commands/init.ts | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/commands/init.ts b/src/commands/init.ts index 1baf9ef13..ae200ca1d 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -2,13 +2,13 @@ import type { DownloadTemplateResult } from 'giget' import type { PackageManagerName } from 'nypm' import process from 'node:process' - import { defineCommand } from 'citty' import { downloadTemplate, startShell } from 'giget' import { installDependencies } from 'nypm' -import { relative, resolve } from 'pathe' -import { x } from 'tinyexec' +import { join, relative, resolve } from 'pathe' +import { readPackageJSON, writePackageJSON } from 'pkg-types' +import { x } from 'tinyexec' import { logger } from '../utils/logger' import { cwdArgs } from './_shared' @@ -63,6 +63,10 @@ export default defineCommand({ type: 'string', description: 'Package manager choice (npm, pnpm, yarn, bun)', }, + nightly: { + type: 'boolean', + description: 'Use nightly release channel instead of stable', + }, }, async run(ctx) { const cwd = resolve(ctx.args.cwd) @@ -96,6 +100,22 @@ export default defineCommand({ process.exit(1) } + if (ctx.args.nightly) { + const nightlyNuxtVersion = 'npm:nuxt-nightly@latest' + const packageJsonPath = resolve(cwd, ctx.args.dir) + + const packageJson = await readPackageJSON(packageJsonPath) + + if (packageJson.dependencies && 'nuxt' in packageJson.dependencies) { + packageJson.dependencies.nuxt = nightlyNuxtVersion + } + else if (packageJson.devDependencies && 'nuxt' in packageJson.devDependencies) { + packageJson.devDependencies.nuxt = nightlyNuxtVersion + } + + await writePackageJSON(join(packageJsonPath, 'package.json'), packageJson) + } + // Resolve package manager const packageManagerOptions: PackageManagerName[] = [ 'npm', From 225acad286db4ad6938e0d1acbc8b0b8258a7c5a Mon Sep 17 00:00:00 2001 From: Damian Glowala Date: Mon, 7 Apr 2025 18:52:46 +0200 Subject: [PATCH 2/4] feat: pull nuxt-nightly version from npm registry --- packages/nuxi/src/commands/init.ts | 36 +++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/packages/nuxi/src/commands/init.ts b/packages/nuxi/src/commands/init.ts index 616a97889..435d94655 100644 --- a/packages/nuxi/src/commands/init.ts +++ b/packages/nuxi/src/commands/init.ts @@ -89,8 +89,8 @@ export default defineCommand({ alias: 'M', }, nightly: { - type: 'boolean', - description: 'Use nightly release channel instead of stable', + type: 'string', + description: 'Use Nuxt nightly release channel (3x or latest)', }, }, async run(ctx) { @@ -174,17 +174,41 @@ export default defineCommand({ process.exit(1) } - if (ctx.args.nightly) { - const nightlyNuxtVersion = 'npm:nuxt-nightly@latest' + if (ctx.args.nightly !== undefined && !ctx.args.offline && !ctx.args.preferOffline) { + const response = await $fetch<{ + 'dist-tags': { + [key: string]: string + } + }>('https://registry.npmjs.org/nuxt-nightly') + + const nightlyChannelTag = ctx.args.nightly + || Object.keys(response['dist-tags']) + .filter(key => /^\d+x$/.test(key)) + .sort() + .reverse()[0] + + if (!nightlyChannelTag) { + logger.error(`Error getting nightly channel tag.`) + process.exit(1) + } + + if (!response['dist-tags'][nightlyChannelTag]) { + logger.error(`Nightly channel tag '${nightlyChannelTag}' not found.`) + process.exit(1) + } + + const nightlyChannelVersion = response['dist-tags'][nightlyChannelTag] + + const nightlyNuxtPackageJsonVersion = `npm:nuxt-nightly@${nightlyChannelVersion}` const packageJsonPath = resolve(cwd, ctx.args.dir) const packageJson = await readPackageJSON(packageJsonPath) if (packageJson.dependencies && 'nuxt' in packageJson.dependencies) { - packageJson.dependencies.nuxt = nightlyNuxtVersion + packageJson.dependencies.nuxt = nightlyNuxtPackageJsonVersion } else if (packageJson.devDependencies && 'nuxt' in packageJson.devDependencies) { - packageJson.devDependencies.nuxt = nightlyNuxtVersion + packageJson.devDependencies.nuxt = nightlyNuxtPackageJsonVersion } await writePackageJSON(join(packageJsonPath, 'package.json'), packageJson) From 58aa5045203a84edb74753446a6a8fdd91156786 Mon Sep 17 00:00:00 2001 From: Damian Glowala Date: Mon, 7 Apr 2025 19:14:13 +0200 Subject: [PATCH 3/4] chore: update error message --- packages/nuxi/src/commands/init.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxi/src/commands/init.ts b/packages/nuxi/src/commands/init.ts index 435d94655..f0ac5f0af 100644 --- a/packages/nuxi/src/commands/init.ts +++ b/packages/nuxi/src/commands/init.ts @@ -193,7 +193,7 @@ export default defineCommand({ } if (!response['dist-tags'][nightlyChannelTag]) { - logger.error(`Nightly channel tag '${nightlyChannelTag}' not found.`) + logger.error(`Nightly channel version for tag '${nightlyChannelTag}' not found.`) process.exit(1) } From 2308c22e184bdf9b3865075e651e605168555ad1 Mon Sep 17 00:00:00 2001 From: Damian Glowala Date: Mon, 7 Apr 2025 19:15:25 +0200 Subject: [PATCH 4/4] refactor: reuse variable --- packages/nuxi/src/commands/init.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/nuxi/src/commands/init.ts b/packages/nuxi/src/commands/init.ts index f0ac5f0af..57a029698 100644 --- a/packages/nuxi/src/commands/init.ts +++ b/packages/nuxi/src/commands/init.ts @@ -192,13 +192,13 @@ export default defineCommand({ process.exit(1) } - if (!response['dist-tags'][nightlyChannelTag]) { + const nightlyChannelVersion = response['dist-tags'][nightlyChannelTag] + + if (!nightlyChannelVersion) { logger.error(`Nightly channel version for tag '${nightlyChannelTag}' not found.`) process.exit(1) } - const nightlyChannelVersion = response['dist-tags'][nightlyChannelTag] - const nightlyNuxtPackageJsonVersion = `npm:nuxt-nightly@${nightlyChannelVersion}` const packageJsonPath = resolve(cwd, ctx.args.dir)