From 1626045b43afb5acddc858c076cd28b36f30dce3 Mon Sep 17 00:00:00 2001 From: Shaun Lloyd Date: Tue, 28 Nov 2023 09:52:37 -0500 Subject: [PATCH] Use execa --- code/lib/cli/src/scaffold-new-project.ts | 9 ++++++-- code/lib/cli/src/utils.ts | 29 ------------------------ 2 files changed, 7 insertions(+), 31 deletions(-) diff --git a/code/lib/cli/src/scaffold-new-project.ts b/code/lib/cli/src/scaffold-new-project.ts index ffea00fbc4cb..440596af04d7 100644 --- a/code/lib/cli/src/scaffold-new-project.ts +++ b/code/lib/cli/src/scaffold-new-project.ts @@ -2,11 +2,11 @@ import boxen from 'boxen'; import chalk from 'chalk'; import prompts from 'prompts'; import dedent from 'ts-dedent'; +import execa from 'execa'; import { logger } from '@storybook/node-logger'; import { GenerateNewProjectOnInitError } from '@storybook/core-events/server-errors'; import type { PackageManagerName } from './js-package-manager'; -import { exec } from './utils'; type CoercedPackageManagerName = 'npm' | 'yarn' | 'pnpm'; @@ -152,7 +152,12 @@ export const scaffoldNewProject = async (packageManager: PackageManagerName) => logger.plain( `Creating a new "${projectDisplayName}" project with ${chalk.bold(packageManagerName)}...` ); - await exec(createScript, { stdio: 'inherit' }); + await execa.command(createScript, { + stdio: 'pipe', + shell: true, + cwd: process.cwd(), + cleanup: true, + }); } catch (e) { throw new GenerateNewProjectOnInitError({ error: e, diff --git a/code/lib/cli/src/utils.ts b/code/lib/cli/src/utils.ts index ce08ce45ac5f..119baed08542 100644 --- a/code/lib/cli/src/utils.ts +++ b/code/lib/cli/src/utils.ts @@ -132,32 +132,3 @@ export const isCorePackage = (pkg: string) => pkg.startsWith('@storybook/') && !pkg.startsWith('@storybook/preset-') && !PACKAGES_EXCLUDED_FROM_CORE.includes(pkg); - -/** - * - * @param command A shell command string to execute. - * @param options Options to pass to the node `spawn` function. - * @returns A promise that resolves when the command has finished executing. - */ -export const exec = async (command: string, options: Record) => { - const { spawn } = await import('cross-spawn'); - return new Promise((resolve, reject) => { - const child = spawn(command, { - ...options, - shell: true, - stdio: 'pipe', - }); - - child.stderr.pipe(process.stdout); - child.stdout.pipe(process.stdout); - - child.on('exit', (code) => { - if (code === 0) { - resolve(undefined); - } else { - logger.error(chalk.red(`An error occurred while executing: \`${command}\``)); - reject(new Error(`Command failed with exit code: ${code}`)); - } - }); - }); -};