From 621ce975b4d959480c9594ad057b5899b1a3bba4 Mon Sep 17 00:00:00 2001 From: pooya parsa Date: Thu, 17 Mar 2022 19:49:59 +0100 Subject: [PATCH] feat(nuxi): expose `runCommand` (#3749) --- packages/nuxi/bin/nuxi.mjs | 2 +- packages/nuxi/build.config.ts | 1 + packages/nuxi/src/cli.ts | 57 ++++++++++++++++++++++++++++++++++ packages/nuxi/src/index.ts | 58 +---------------------------------- packages/nuxi/src/run.ts | 12 ++++++++ 5 files changed, 72 insertions(+), 58 deletions(-) create mode 100755 packages/nuxi/src/cli.ts create mode 100644 packages/nuxi/src/run.ts diff --git a/packages/nuxi/bin/nuxi.mjs b/packages/nuxi/bin/nuxi.mjs index fb1e6760d5..b6bf5f6a68 100755 --- a/packages/nuxi/bin/nuxi.mjs +++ b/packages/nuxi/bin/nuxi.mjs @@ -1,3 +1,3 @@ #!/usr/bin/env node process._startTime = Date.now() -import('../dist/index.mjs').then(r => (r.default || r).main()) +import('../dist/cli.mjs').then(r => (r.default || r).main()) diff --git a/packages/nuxi/build.config.ts b/packages/nuxi/build.config.ts index 58ea87d0f9..dfc2cfd55c 100644 --- a/packages/nuxi/build.config.ts +++ b/packages/nuxi/build.config.ts @@ -7,6 +7,7 @@ export default defineBuildConfig({ cjsBridge: true }, entries: [ + 'src/cli', 'src/index' ], externals: [ diff --git a/packages/nuxi/src/cli.ts b/packages/nuxi/src/cli.ts new file mode 100755 index 0000000000..5b4859e4f6 --- /dev/null +++ b/packages/nuxi/src/cli.ts @@ -0,0 +1,57 @@ +import mri from 'mri' +import { red } from 'colorette' +import consola from 'consola' +import { checkEngines } from './utils/engines' +import { commands, Command, NuxtCommand } from './commands' +import { showHelp } from './utils/help' +import { showBanner } from './utils/banner' + +async function _main () { + const _argv = process.argv.slice(2) + const args = mri(_argv, { + boolean: [ + 'no-clear' + ] + }) + // @ts-ignore + const command = args._.shift() || 'usage' + + showBanner(command === 'dev' && args.clear !== false && !args.help) + + if (!(command in commands)) { + console.log('\n' + red('Invalid command ' + command)) + + await commands.usage().then(r => r.invoke()) + process.exit(1) + } + + // Check Node.js version in background + setTimeout(() => { checkEngines() }, 1000) + + try { + // @ts-ignore default.default is hotfix for #621 + const cmd = await commands[command as Command]() as NuxtCommand + if (args.h || args.help) { + showHelp(cmd.meta) + } else { + await cmd.invoke(args) + } + } catch (err) { + onFatalError(err) + } +} + +function onFatalError (err: unknown) { + consola.error(err) + process.exit(1) +} + +// Wrap all console logs with consola for better DX +consola.wrapConsole() + +process.on('unhandledRejection', err => consola.error('[unhandledRejection]', err)) +process.on('uncaughtException', err => consola.error('[uncaughtException]', err)) + +export function main () { + _main().catch(onFatalError) +} diff --git a/packages/nuxi/src/index.ts b/packages/nuxi/src/index.ts index 5b4859e4f6..b8492c1b01 100755 --- a/packages/nuxi/src/index.ts +++ b/packages/nuxi/src/index.ts @@ -1,57 +1 @@ -import mri from 'mri' -import { red } from 'colorette' -import consola from 'consola' -import { checkEngines } from './utils/engines' -import { commands, Command, NuxtCommand } from './commands' -import { showHelp } from './utils/help' -import { showBanner } from './utils/banner' - -async function _main () { - const _argv = process.argv.slice(2) - const args = mri(_argv, { - boolean: [ - 'no-clear' - ] - }) - // @ts-ignore - const command = args._.shift() || 'usage' - - showBanner(command === 'dev' && args.clear !== false && !args.help) - - if (!(command in commands)) { - console.log('\n' + red('Invalid command ' + command)) - - await commands.usage().then(r => r.invoke()) - process.exit(1) - } - - // Check Node.js version in background - setTimeout(() => { checkEngines() }, 1000) - - try { - // @ts-ignore default.default is hotfix for #621 - const cmd = await commands[command as Command]() as NuxtCommand - if (args.h || args.help) { - showHelp(cmd.meta) - } else { - await cmd.invoke(args) - } - } catch (err) { - onFatalError(err) - } -} - -function onFatalError (err: unknown) { - consola.error(err) - process.exit(1) -} - -// Wrap all console logs with consola for better DX -consola.wrapConsole() - -process.on('unhandledRejection', err => consola.error('[unhandledRejection]', err)) -process.on('uncaughtException', err => consola.error('[uncaughtException]', err)) - -export function main () { - _main().catch(onFatalError) -} +export * from './run' diff --git a/packages/nuxi/src/run.ts b/packages/nuxi/src/run.ts new file mode 100644 index 0000000000..dbfb47d90c --- /dev/null +++ b/packages/nuxi/src/run.ts @@ -0,0 +1,12 @@ +import mri from 'mri' +import { commands, Command, NuxtCommand } from './commands' + +export async function runCommand (command: string, argv = process.argv.slice(2)) { + const args = mri(argv) + args.clear = false // used by dev + const cmd = await commands[command as Command]() as NuxtCommand + if (!cmd) { + throw new Error(`Invalid command ${command}`) + } + await cmd.invoke(args) +}