1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import { exec, spawn } from 'node:child_process'
- import { promisify } from 'node:util'
- import { Listr } from 'listr2'
- import { logLogo } from './logo'
- const execAsync = promisify(exec)
- async function runCommand(
- command: string,
- task?: {
- output: string
- },
- disableStdout: boolean | undefined = false,
- ) {
- try {
- const { stdout, stderr } = await execAsync(command)
- if (!disableStdout) {
- if (stderr) {
- if (task) {
- task.output = stderr
- }
- else { console.log(stderr) }
- }
- else {
- if (task) {
- task.output = stdout
- }
- else { console.log(stdout) }
- }
- }
- }
- catch (error) {
- if (!disableStdout) {
- if (task) {
- task.output = String(error)
- }
- else { console.log(String(error)) }
- }
- }
- }
- logLogo()
- new Listr(
- [
- {
- title: 'Clearing up cache...',
- task: async (_, task) => {
- await runCommand('nuxt cleanup', task)
- await runCommand('nuxt prepare', task)
- },
- },
- {
- title: 'Launching server',
- task: async (_, task) => {
- const shouldStop = false
- const cmd = spawn('node', ['node_modules/nuxt/bin/nuxt.mjs', 'dev', '--port', '3000'])
- task.title = 'Command spawned'
- cmd.stdout.on('data', (data) => {
- task.output = `${task.output === undefined ? '-----LOGGING STARTED-----' : task.output}\n${data}`
- })
- cmd.stderr.on('data', (data) => {
- task.output = `${task.output === undefined ? '-----LOGGING STARTED-----' : task.output}\n${data}`
- })
- cmd.on('close', (code) => {
- task.title = `${task.output}\nProcess stopped with code: ${code}`
- task.skip()
- cmd.kill()
- process.exit()
- })
- process.on('SIGINT', async function () {
- task.title = 'Server stopped'
- task.skip()
- cmd.kill()
- process.exit()
- })
- while (!shouldStop) {
- await new Promise(resolve => setTimeout(resolve, 500))
- }
- },
- },
- ], {
- registerSignalListeners: false,
- },
- ).run()
|