diff --git a/packages/create-astro/src/actions/dependencies.ts b/packages/create-astro/src/actions/dependencies.ts index bf46d5d5f..339e3379f 100644 --- a/packages/create-astro/src/actions/dependencies.ts +++ b/packages/create-astro/src/actions/dependencies.ts @@ -1,8 +1,8 @@ import { color } from '@astrojs/cli-kit'; -import { shell } from '../shell.js'; import fs from 'node:fs'; import path from 'node:path'; import { error, info, spinner, title } from '../messages.js'; +import { shell } from '../shell.js'; import type { Context } from './context'; export async function dependencies( diff --git a/packages/create-astro/src/actions/git.ts b/packages/create-astro/src/actions/git.ts index 9711387b4..c2a59b0b3 100644 --- a/packages/create-astro/src/actions/git.ts +++ b/packages/create-astro/src/actions/git.ts @@ -3,8 +3,8 @@ import path from 'node:path'; import type { Context } from './context'; import { color } from '@astrojs/cli-kit'; -import { shell } from '../shell.js'; import { error, info, spinner, title } from '../messages.js'; +import { shell } from '../shell.js'; export async function git(ctx: Pick) { if (fs.existsSync(path.join(ctx.cwd, '.git'))) { diff --git a/packages/create-astro/src/messages.ts b/packages/create-astro/src/messages.ts index da2c08f1d..89ccddcdb 100644 --- a/packages/create-astro/src/messages.ts +++ b/packages/create-astro/src/messages.ts @@ -1,11 +1,11 @@ /* eslint no-console: 'off' */ import { color, say as houston, label, spinner as load } from '@astrojs/cli-kit'; import { align, sleep } from '@astrojs/cli-kit/utils'; -import { shell } from './shell.js'; import fetch from 'node-fetch-native'; import { exec } from 'node:child_process'; import stripAnsi from 'strip-ansi'; import detectPackageManager from 'which-pm-runs'; +import { shell } from './shell.js'; // Users might lack access to the global npm registry, this function // checks the user's project type and will return the proper npm registry diff --git a/packages/create-astro/src/shell.ts b/packages/create-astro/src/shell.ts index 4941d788c..d2d7ef033 100644 --- a/packages/create-astro/src/shell.ts +++ b/packages/create-astro/src/shell.ts @@ -3,42 +3,47 @@ import type { StdioOptions } from 'node:child_process'; import type { Readable } from 'node:stream'; -import { text as textFromStream } from 'node:stream/consumers'; import { spawn } from 'node:child_process'; +import { text as textFromStream } from 'node:stream/consumers'; import { setTimeout as sleep } from 'node:timers/promises'; export interface ExecaOptions { - cwd?: string | URL; - stdio?: StdioOptions; - timeout?: number; + cwd?: string | URL; + stdio?: StdioOptions; + timeout?: number; } export interface Output { - stdout: string; - stderr: string; - exitCode: number; + stdout: string; + stderr: string; + exitCode: number; } -const text = (stream: NodeJS.ReadableStream | Readable | null) => stream ? textFromStream(stream).then(t => t.trimEnd()) : ''; +const text = (stream: NodeJS.ReadableStream | Readable | null) => + stream ? textFromStream(stream).then((t) => t.trimEnd()) : ''; -export async function shell(command: string, flags: string[], opts: ExecaOptions = {}): Promise { - const controller = opts.timeout ? new AbortController() : undefined; - const child = spawn(command, flags, { - cwd: opts.cwd, - shell: true, - stdio: opts.stdio, - signal: controller?.signal - }) - const stdout = await text(child.stdout); - const stderr = await text(child.stderr); - if (opts.timeout) { - sleep(opts.timeout).then(() => { - controller!.abort(); - throw { stdout, stderr, exitCode: 1 } - }) - } - await new Promise((resolve) => child.on('exit', resolve)) - const { exitCode } = child; - if (exitCode !== 0) { - throw { stdout, stderr, exitCode }; - } - return { stdout, stderr, exitCode } +export async function shell( + command: string, + flags: string[], + opts: ExecaOptions = {} +): Promise { + const controller = opts.timeout ? new AbortController() : undefined; + const child = spawn(command, flags, { + cwd: opts.cwd, + shell: true, + stdio: opts.stdio, + signal: controller?.signal, + }); + const stdout = await text(child.stdout); + const stderr = await text(child.stderr); + if (opts.timeout) { + sleep(opts.timeout).then(() => { + controller!.abort(); + throw { stdout, stderr, exitCode: 1 }; + }); + } + await new Promise((resolve) => child.on('exit', resolve)); + const { exitCode } = child; + if (exitCode !== 0) { + throw { stdout, stderr, exitCode }; + } + return { stdout, stderr, exitCode }; } diff --git a/packages/create-astro/test/git.test.js b/packages/create-astro/test/git.test.js index 0ba14c56b..d05ad5bdc 100644 --- a/packages/create-astro/test/git.test.js +++ b/packages/create-astro/test/git.test.js @@ -37,7 +37,7 @@ describe('git initialized', () => { before(async () => { await mkdir(dir, { recursive: true }); await writeFile(new URL('./git.json', dir), '{}', { encoding: 'utf8' }); - }) + }); it('already initialized', async () => { const context = { @@ -53,5 +53,5 @@ describe('git initialized', () => { after(() => { rmSync(dir, { recursive: true, force: true }); - }) -}) + }); +});