From 44cf30a25209b331e6e8a95a4b40a768ede3604a Mon Sep 17 00:00:00 2001
From: Nate Moore <natemoo-re@users.noreply.github.com>
Date: Mon, 14 Aug 2023 14:23:14 -0500
Subject: [PATCH] chore: slim create-astro deps (#8077)

---
 .changeset/moody-houses-drum.md               |  5 ++
 packages/create-astro/package.json            |  7 +-
 .../create-astro/src/actions/dependencies.ts  |  9 +--
 packages/create-astro/src/actions/git.ts      |  8 +--
 packages/create-astro/src/messages.ts         |  4 +-
 packages/create-astro/src/shell.ts            | 44 ++++++++++++
 .../test/fixtures/not-empty/git.json          |  1 +
 packages/create-astro/test/git.test.js        | 47 ++++++++-----
 pnpm-lock.yaml                                | 69 +++++++++++--------
 9 files changed, 128 insertions(+), 66 deletions(-)
 create mode 100644 .changeset/moody-houses-drum.md
 create mode 100644 packages/create-astro/src/shell.ts
 create mode 100644 packages/create-astro/test/fixtures/not-empty/git.json

diff --git a/.changeset/moody-houses-drum.md b/.changeset/moody-houses-drum.md
new file mode 100644
index 000000000000..1dfaefba21dd
--- /dev/null
+++ b/.changeset/moody-houses-drum.md
@@ -0,0 +1,5 @@
+---
+'create-astro': minor
+---
+
+Reduce dependency installation size, swap `execa` for light `node:child_process` wrapper
diff --git a/packages/create-astro/package.json b/packages/create-astro/package.json
index 761a230cf627..3b484abb18a0 100644
--- a/packages/create-astro/package.json
+++ b/packages/create-astro/package.json
@@ -32,15 +32,14 @@
   "//b": "DEPENDENCIES IS FOR UNBUNDLED PACKAGES",
   "dependencies": {
     "@astrojs/cli-kit": "^0.2.3",
-    "chai": "^4.3.7",
-    "execa": "^6.1.0",
-    "giget": "1.0.0",
-    "mocha": "^9.2.2",
+    "giget": "^1.1.2",
     "node-fetch-native": "^1.2.0",
     "which-pm-runs": "^1.1.0"
   },
   "devDependencies": {
     "@types/which-pm-runs": "^1.0.0",
+    "chai": "^4.3.7",
+    "mocha": "^9.2.2",
     "arg": "^5.0.2",
     "astro-scripts": "workspace:*",
     "strip-ansi": "^7.1.0",
diff --git a/packages/create-astro/src/actions/dependencies.ts b/packages/create-astro/src/actions/dependencies.ts
index 2949e784d316..bf46d5d5f364 100644
--- a/packages/create-astro/src/actions/dependencies.ts
+++ b/packages/create-astro/src/actions/dependencies.ts
@@ -1,5 +1,5 @@
 import { color } from '@astrojs/cli-kit';
-import { execa } from 'execa';
+import { shell } from '../shell.js';
 import fs from 'node:fs';
 import path from 'node:path';
 import { error, info, spinner, title } from '../messages.js';
@@ -49,12 +49,7 @@ export async function dependencies(
 
 async function install({ pkgManager, cwd }: { pkgManager: string; cwd: string }) {
 	if (pkgManager === 'yarn') await ensureYarnLock({ cwd });
-	const installExec = execa(pkgManager, ['install'], { cwd });
-	return new Promise<void>((resolve, reject) => {
-		setTimeout(() => reject(`Request timed out after 1m 30s`), 90_000);
-		installExec.on('error', (e) => reject(e));
-		installExec.on('close', () => resolve());
-	});
+	return shell(pkgManager, ['install'], { cwd, timeout: 90_000, stdio: 'ignore' });
 }
 
 async function ensureYarnLock({ cwd }: { cwd: string }) {
diff --git a/packages/create-astro/src/actions/git.ts b/packages/create-astro/src/actions/git.ts
index 00c42dae5691..9711387b403c 100644
--- a/packages/create-astro/src/actions/git.ts
+++ b/packages/create-astro/src/actions/git.ts
@@ -3,7 +3,7 @@ import path from 'node:path';
 import type { Context } from './context';
 
 import { color } from '@astrojs/cli-kit';
-import { execa } from 'execa';
+import { shell } from '../shell.js';
 import { error, info, spinner, title } from '../messages.js';
 
 export async function git(ctx: Pick<Context, 'cwd' | 'git' | 'yes' | 'prompt' | 'dryRun'>) {
@@ -45,9 +45,9 @@ export async function git(ctx: Pick<Context, 'cwd' | 'git' | 'yes' | 'prompt' |
 
 async function init({ cwd }: { cwd: string }) {
 	try {
-		await execa('git', ['init'], { cwd, stdio: 'ignore' });
-		await execa('git', ['add', '-A'], { cwd, stdio: 'ignore' });
-		await execa(
+		await shell('git', ['init'], { cwd, stdio: 'ignore' });
+		await shell('git', ['add', '-A'], { cwd, stdio: 'ignore' });
+		await shell(
 			'git',
 			[
 				'commit',
diff --git a/packages/create-astro/src/messages.ts b/packages/create-astro/src/messages.ts
index ee67f3b19139..da2c08f1df15 100644
--- a/packages/create-astro/src/messages.ts
+++ b/packages/create-astro/src/messages.ts
@@ -1,7 +1,7 @@
 /* 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 { execa } from 'execa';
+import { shell } from './shell.js';
 import fetch from 'node-fetch-native';
 import { exec } from 'node:child_process';
 import stripAnsi from 'strip-ansi';
@@ -14,7 +14,7 @@ import detectPackageManager from 'which-pm-runs';
 async function getRegistry(): Promise<string> {
 	const packageManager = detectPackageManager()?.name || 'npm';
 	try {
-		const { stdout } = await execa(packageManager, ['config', 'get', 'registry']);
+		const { stdout } = await shell(packageManager, ['config', 'get', 'registry']);
 		return stdout?.trim()?.replace(/\/$/, '') || 'https://registry.npmjs.org';
 	} catch (e) {
 		return 'https://registry.npmjs.org';
diff --git a/packages/create-astro/src/shell.ts b/packages/create-astro/src/shell.ts
new file mode 100644
index 000000000000..4941d788c63a
--- /dev/null
+++ b/packages/create-astro/src/shell.ts
@@ -0,0 +1,44 @@
+// This is an extremely simplified version of [`execa`](https://github.com/sindresorhus/execa)
+// intended to keep our dependency size down
+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 { setTimeout as sleep } from 'node:timers/promises';
+
+export interface ExecaOptions {
+    cwd?: string | URL;
+    stdio?: StdioOptions;
+    timeout?: number;
+}
+export interface Output {
+    stdout: string;
+    stderr: string;
+    exitCode: number;
+}
+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<Output> {
+    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/fixtures/not-empty/git.json b/packages/create-astro/test/fixtures/not-empty/git.json
new file mode 100644
index 000000000000..9e26dfeeb6e6
--- /dev/null
+++ b/packages/create-astro/test/fixtures/not-empty/git.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/packages/create-astro/test/git.test.js b/packages/create-astro/test/git.test.js
index c8fa86e86708..0ba14c56b570 100644
--- a/packages/create-astro/test/git.test.js
+++ b/packages/create-astro/test/git.test.js
@@ -1,7 +1,6 @@
 import { expect } from 'chai';
-
-import { execa } from 'execa';
-import fs from 'node:fs';
+import { mkdir, writeFile } from 'node:fs/promises';
+import { rmSync } from 'node:fs';
 
 import { git } from '../dist/index.js';
 import { setup } from './utils.js';
@@ -16,22 +15,6 @@ describe('git', () => {
 		expect(fixture.hasMessage('Skipping Git initialization')).to.be.true;
 	});
 
-	it('already initialized', async () => {
-		const context = {
-			git: true,
-			cwd: './test/fixtures/not-empty',
-			dryRun: true,
-			prompt: () => ({ git: false }),
-		};
-		await execa('git', ['init'], { cwd: './test/fixtures/not-empty' });
-		await git(context);
-
-		expect(fixture.hasMessage('Git has already been initialized')).to.be.true;
-
-		// Cleanup
-		fs.rmSync('./test/fixtures/not-empty/.git', { recursive: true, force: true });
-	});
-
 	it('yes (--dry-run)', async () => {
 		const context = { cwd: '', dryRun: true, prompt: () => ({ git: true }) };
 		await git(context);
@@ -46,3 +29,29 @@ describe('git', () => {
 		expect(fixture.hasMessage('Skipping Git initialization')).to.be.true;
 	});
 });
+
+describe('git initialized', () => {
+	const fixture = setup();
+	const dir = new URL(new URL('./fixtures/not-empty/.git', import.meta.url));
+
+	before(async () => {
+		await mkdir(dir, { recursive: true });
+		await writeFile(new URL('./git.json', dir), '{}', { encoding: 'utf8' });
+	})
+
+	it('already initialized', async () => {
+		const context = {
+			git: true,
+			cwd: './test/fixtures/not-empty',
+			dryRun: false,
+			prompt: () => ({ git: false }),
+		};
+		await git(context);
+
+		expect(fixture.hasMessage('Git has already been initialized')).to.be.true;
+	});
+
+	after(() => {
+		rmSync(dir, { recursive: true, force: true });
+	})
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 48cd6243367e..ca505820ade8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -3593,18 +3593,9 @@ importers:
       '@astrojs/cli-kit':
         specifier: ^0.2.3
         version: 0.2.3
-      chai:
-        specifier: ^4.3.7
-        version: 4.3.7
-      execa:
-        specifier: ^6.1.0
-        version: 6.1.0
       giget:
-        specifier: 1.0.0
-        version: 1.0.0
-      mocha:
-        specifier: ^9.2.2
-        version: 9.2.2
+        specifier: ^1.1.2
+        version: 1.1.2
       node-fetch-native:
         specifier: ^1.2.0
         version: 1.2.0
@@ -3621,6 +3612,12 @@ importers:
       astro-scripts:
         specifier: workspace:*
         version: link:../../scripts
+      chai:
+        specifier: ^4.3.7
+        version: 4.3.7
+      mocha:
+        specifier: ^9.2.2
+        version: 9.2.2
       strip-ansi:
         specifier: ^7.1.0
         version: 7.1.0
@@ -9311,6 +9308,7 @@ packages:
 
   /@ungap/promise-all-settled@1.1.2:
     resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
+    dev: true
 
   /@ungap/structured-clone@0.3.4:
     resolution: {integrity: sha512-TSVh8CpnwNAsPC5wXcIyh92Bv1gq6E9cNDeeLu7Z4h8V4/qWtXJp7y42qljRkqcpmsve1iozwv1wr+3BNdILCg==}
@@ -9656,6 +9654,7 @@ packages:
   /ansi-colors@4.1.1:
     resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
     engines: {node: '>=6'}
+    dev: true
 
   /ansi-colors@4.1.3:
     resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
@@ -10085,6 +10084,7 @@ packages:
 
   /browser-stdout@1.3.1:
     resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
+    dev: true
 
   /browserslist@4.21.5:
     resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
@@ -10396,6 +10396,7 @@ packages:
       string-width: 4.2.3
       strip-ansi: 6.0.1
       wrap-ansi: 7.0.0
+    dev: true
 
   /cliui@8.0.1:
     resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
@@ -10744,6 +10745,7 @@ packages:
     dependencies:
       ms: 2.1.2
       supports-color: 8.1.1
+    dev: true
 
   /debug@4.3.4:
     resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
@@ -10772,6 +10774,7 @@ packages:
   /decamelize@4.0.0:
     resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
     engines: {node: '>=10'}
+    dev: true
 
   /decimal.js@10.4.3:
     resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
@@ -10931,6 +10934,7 @@ packages:
   /diff@5.0.0:
     resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
     engines: {node: '>=0.3.1'}
+    dev: true
 
   /diff@5.1.0:
     resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
@@ -11652,6 +11656,7 @@ packages:
   /escape-string-regexp@4.0.0:
     resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
     engines: {node: '>=10'}
+    dev: true
 
   /escape-string-regexp@5.0.0:
     resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
@@ -12091,6 +12096,7 @@ packages:
   /flat@5.0.2:
     resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
     hasBin: true
+    dev: true
 
   /flatted@3.2.7:
     resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
@@ -12235,6 +12241,7 @@ packages:
   /get-caller-file@2.0.5:
     resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
     engines: {node: 6.* || 8.* || >= 10.*}
+    dev: true
 
   /get-func-name@2.0.0:
     resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
@@ -12276,8 +12283,8 @@ packages:
       - supports-color
     dev: true
 
-  /giget@1.0.0:
-    resolution: {integrity: sha512-KWELZn3Nxq5+0So485poHrFriK9Bn3V/x9y+wgqrHkbmnGbjfLmZ685/SVA/ovW+ewoqW0gVI47pI4yW/VNobQ==}
+  /giget@1.1.2:
+    resolution: {integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==}
     hasBin: true
     dependencies:
       colorette: 2.0.20
@@ -12286,7 +12293,7 @@ packages:
       mri: 1.2.0
       node-fetch-native: 1.2.0
       pathe: 1.1.0
-      tar: 6.1.14
+      tar: 6.1.15
     transitivePeerDependencies:
       - supports-color
     dev: false
@@ -12331,6 +12338,7 @@ packages:
       minimatch: 3.1.2
       once: 1.4.0
       path-is-absolute: 1.0.1
+    dev: true
 
   /glob@7.2.3:
     resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
@@ -12455,6 +12463,7 @@ packages:
   /growl@1.10.5:
     resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==}
     engines: {node: '>=4.x'}
+    dev: true
 
   /hard-rejection@2.1.0:
     resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
@@ -13077,6 +13086,7 @@ packages:
   /is-plain-obj@2.1.0:
     resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
     engines: {node: '>=8'}
+    dev: true
 
   /is-plain-obj@4.1.0:
     resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
@@ -13164,6 +13174,7 @@ packages:
   /is-unicode-supported@0.1.0:
     resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
     engines: {node: '>=10'}
+    dev: true
 
   /is-unicode-supported@1.3.0:
     resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
@@ -13548,6 +13559,7 @@ packages:
     dependencies:
       chalk: 4.1.2
       is-unicode-supported: 0.1.0
+    dev: true
 
   /log-symbols@5.1.0:
     resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
@@ -14379,6 +14391,7 @@ packages:
     engines: {node: '>=10'}
     dependencies:
       brace-expansion: 1.1.11
+    dev: true
 
   /minimatch@5.1.6:
     resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
@@ -14495,6 +14508,7 @@ packages:
       yargs: 16.2.0
       yargs-parser: 20.2.4
       yargs-unparser: 2.0.0
+    dev: true
 
   /mri@1.2.0:
     resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
@@ -14531,6 +14545,7 @@ packages:
     resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
+    dev: true
 
   /nanoid@3.3.6:
     resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
@@ -16156,6 +16171,7 @@ packages:
   /require-directory@2.1.1:
     resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
     engines: {node: '>=0.10.0'}
+    dev: true
 
   /require-from-string@2.0.2:
     resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
@@ -16477,6 +16493,7 @@ packages:
     resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
     dependencies:
       randombytes: 2.1.0
+    dev: true
 
   /seroval@0.5.1:
     resolution: {integrity: sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==}
@@ -16922,6 +16939,7 @@ packages:
   /strip-json-comments@3.1.1:
     resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
     engines: {node: '>=8'}
+    dev: true
 
   /strip-json-comments@5.0.0:
     resolution: {integrity: sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==}
@@ -16985,6 +17003,7 @@ packages:
     engines: {node: '>=10'}
     dependencies:
       has-flag: 4.0.0
+    dev: true
 
   /supports-preserve-symlinks-flag@1.0.0:
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
@@ -17088,18 +17107,6 @@ packages:
       inherits: 2.0.4
       readable-stream: 3.6.2
 
-  /tar@6.1.14:
-    resolution: {integrity: sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw==}
-    engines: {node: '>=10'}
-    dependencies:
-      chownr: 2.0.0
-      fs-minipass: 2.1.0
-      minipass: 5.0.0
-      minizlib: 2.1.2
-      mkdirp: 1.0.4
-      yallist: 4.0.0
-    dev: false
-
   /tar@6.1.15:
     resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==}
     engines: {node: '>=10'}
@@ -18426,6 +18433,7 @@ packages:
 
   /workerpool@6.2.0:
     resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==}
+    dev: true
 
   /wrangler@2.0.23:
     resolution: {integrity: sha512-qMyK/pmHIrubxuJuXnCwcidY4LlQImcTTyOGoqMJtNz8y+pDfsluExSBpwqGSl3JPUQF2FiofqaBkj/iB8rvYw==}
@@ -18469,6 +18477,7 @@ packages:
       ansi-styles: 4.3.0
       string-width: 4.2.3
       strip-ansi: 6.0.1
+    dev: true
 
   /wrap-ansi@8.1.0:
     resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
@@ -18537,6 +18546,7 @@ packages:
   /y18n@5.0.8:
     resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
     engines: {node: '>=10'}
+    dev: true
 
   /yallist@2.1.2:
     resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
@@ -18563,6 +18573,7 @@ packages:
   /yargs-parser@20.2.4:
     resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
     engines: {node: '>=10'}
+    dev: true
 
   /yargs-parser@21.1.1:
     resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
@@ -18576,6 +18587,7 @@ packages:
       decamelize: 4.0.0
       flat: 5.0.2
       is-plain-obj: 2.1.0
+    dev: true
 
   /yargs@15.4.1:
     resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
@@ -18605,6 +18617,7 @@ packages:
       string-width: 4.2.3
       y18n: 5.0.8
       yargs-parser: 20.2.4
+    dev: true
 
   /yargs@17.7.2:
     resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
@@ -18652,25 +18665,21 @@ packages:
   file:packages/astro/test/fixtures/css-assets/packages/font-awesome:
     resolution: {directory: packages/astro/test/fixtures/css-assets/packages/font-awesome, type: directory}
     name: '@test/astro-font-awesome-package'
-    version: 0.0.1
     dev: false
 
   file:packages/astro/test/fixtures/multiple-renderers/renderers/one:
     resolution: {directory: packages/astro/test/fixtures/multiple-renderers/renderers/one, type: directory}
     name: '@test/astro-renderer-one'
-    version: 1.0.0
     dev: false
 
   file:packages/astro/test/fixtures/multiple-renderers/renderers/two:
     resolution: {directory: packages/astro/test/fixtures/multiple-renderers/renderers/two, type: directory}
     name: '@test/astro-renderer-two'
-    version: 1.0.0
     dev: false
 
   file:packages/astro/test/fixtures/solid-component/deps/solid-jsx-component:
     resolution: {directory: packages/astro/test/fixtures/solid-component/deps/solid-jsx-component, type: directory}
     name: '@test/solid-jsx-component'
-    version: 0.0.0
     dependencies:
       solid-js: 1.7.6
     dev: false