| 9 | import { logger } from "~/utils/logger.js"; |
| 10 | |
| 11 | const execWithSpinner = async ( |
| 12 | projectDir: string, |
| 13 | pkgManager: PackageManager, |
| 14 | options: { |
| 15 | args?: string[]; |
| 16 | stdout?: StdioOption; |
| 17 | onDataHandle?: (spinner: Ora) => (data: Buffer) => void; |
| 18 | } |
| 19 | ) => { |
| 20 | const { onDataHandle, args = ["install"], stdout = "pipe" } = options; |
| 21 | |
| 22 | const spinner = ora(`Running ${pkgManager} install...`).start(); |
| 23 | const subprocess = execa(pkgManager, args, { cwd: projectDir, stdout }); |
| 24 | |
| 25 | await new Promise<void>((res, rej) => { |
| 26 | if (onDataHandle) { |
| 27 | subprocess.stdout?.on("data", onDataHandle(spinner)); |
| 28 | } |
| 29 | |
| 30 | void subprocess.on("error", (e) => rej(e)); |
| 31 | void subprocess.on("close", () => res()); |
| 32 | }); |
| 33 | |
| 34 | return spinner; |
| 35 | }; |
| 36 | |
| 37 | const runInstallCommand = async ( |
| 38 | pkgManager: PackageManager, |