diff --git a/knip.json b/knip.json index cb954048..3f9a15fd 100644 --- a/knip.json +++ b/knip.json @@ -25,6 +25,7 @@ "test/fixtures/*" ], "ignoreDependencies": [ + "@clack/prompts", "c12", "clipboardy", "confbox", @@ -45,7 +46,6 @@ "semver", "srvx", "ufo", - "undici", "youch" ] } diff --git a/packages/nuxi/package.json b/packages/nuxi/package.json index e3d5e5f3..da2b5a94 100644 --- a/packages/nuxi/package.json +++ b/packages/nuxi/package.json @@ -39,6 +39,7 @@ "test:dist": "node ./bin/nuxi.mjs info ./playground" }, "devDependencies": { + "@clack/prompts": "^1.0.0-alpha.6", "@nuxt/kit": "^4.1.3", "@nuxt/schema": "^4.1.3", "@nuxt/test-utils": "^3.19.2", diff --git a/packages/nuxi/src/commands/init.ts b/packages/nuxi/src/commands/init.ts index 0fdcbcc4..d2f68a81 100644 --- a/packages/nuxi/src/commands/init.ts +++ b/packages/nuxi/src/commands/init.ts @@ -5,6 +5,7 @@ import type { PackageManagerName } from 'nypm' import { existsSync } from 'node:fs' import process from 'node:process' +import { box, spinner } from '@clack/prompts' import { defineCommand } from 'citty' import { colors } from 'consola/utils' import { downloadTemplate, startShell } from 'giget' @@ -333,8 +334,9 @@ export default defineCommand({ logger.info('Skipping install dependencies step.') } else { - logger.start('Installing dependencies...') + const spin = spinner() + spin.start('Installing dependencies...') try { await installDependencies({ cwd: template.dir, @@ -343,16 +345,16 @@ export default defineCommand({ command: selectedPackageManager, }, }) + spin.stop('Dependencies installed successfully') } catch (err) { + spin.stop('Failed to install dependencies') if (process.env.DEBUG) { throw err } logger.error((err as Error).toString()) process.exit(1) } - - logger.success('Installation completed.') } if (ctx.args.gitInit === undefined) { @@ -467,21 +469,25 @@ export default defineCommand({ } // Display next steps - logger.log( - `\n✨ Nuxt project has been created with the \`${template.name}\` template. Next steps:`, - ) const relativeTemplateDir = relative(process.cwd(), template.dir) || '.' const runCmd = selectedPackageManager === 'deno' ? 'task' : 'run' const nextSteps = [ !ctx.args.shell && relativeTemplateDir.length > 1 - && `\`cd ${relativeTemplateDir}\``, - `Start development server with \`${selectedPackageManager} ${runCmd} dev\``, + && `cd ${themeColor}${relativeTemplateDir}\x1B[0m`, + `Start development server with ${themeColor}${selectedPackageManager}\x1B[0m ${themeColor}${runCmd} dev\x1B[0m`, ].filter(Boolean) - for (const step of nextSteps) { - logger.log(` › ${step}`) - } + box(`Next steps:\n${nextSteps.map(step => ` › ${step}`).join('\n')}`, ` ✨ Nuxt project created with ${themeColor}${template.name}\x1B[0m template `, { + contentAlign: 'left', + titleAlign: 'left', + width: 'auto', + titlePadding: 2, + contentPadding: 2, + rounded: true, + includePrefix: true, + formatBorder: (text: string) => `${themeColor + text}\x1B[0m`, + }) if (ctx.args.shell) { startShell(template.dir) diff --git a/packages/nuxt-cli/package.json b/packages/nuxt-cli/package.json index 4ad05c06..c2530982 100644 --- a/packages/nuxt-cli/package.json +++ b/packages/nuxt-cli/package.json @@ -33,6 +33,7 @@ "prepack": "unbuild" }, "dependencies": { + "@clack/prompts": "^1.0.0-alpha.6", "c12": "^3.3.0", "citty": "^0.1.6", "clipboardy": "^5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8c46b608..a24c0aec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -107,6 +107,9 @@ importers: packages/nuxi: devDependencies: + '@clack/prompts': + specifier: ^1.0.0-alpha.6 + version: 1.0.0-alpha.6 '@nuxt/kit': specifier: ^4.1.3 version: 4.1.3(magicast@0.3.5) @@ -230,6 +233,9 @@ importers: packages/nuxt-cli: dependencies: + '@clack/prompts': + specifier: ^1.0.0-alpha.6 + version: 1.0.0-alpha.6 c12: specifier: ^3.3.0 version: 3.3.0(magicast@0.3.5) @@ -556,9 +562,15 @@ packages: '@clack/core@0.5.0': resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} + '@clack/core@1.0.0-alpha.6': + resolution: {integrity: sha512-eG5P45+oShFG17u9I1DJzLkXYB1hpUgTLi32EfsMjSHLEqJUR8BOBCVFkdbUX2g08eh/HCi6UxNGpPhaac1LAA==} + '@clack/prompts@0.11.0': resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} + '@clack/prompts@1.0.0-alpha.6': + resolution: {integrity: sha512-75NCtYOgDHVBE2nLdKPTDYOaESxO0GLAKC7INREp5VbS988Xua1u+588VaGlcvXiLc/kSwc25Cd+4PeTSpY6QQ==} + '@cloudflare/kv-asset-handler@0.4.0': resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} @@ -5876,12 +5888,23 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 + '@clack/core@1.0.0-alpha.6': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@clack/prompts@0.11.0': dependencies: '@clack/core': 0.5.0 picocolors: 1.1.1 sisteransi: 1.0.5 + '@clack/prompts@1.0.0-alpha.6': + dependencies: + '@clack/core': 1.0.0-alpha.6 + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@cloudflare/kv-asset-handler@0.4.0': dependencies: mime: 3.0.0