From 637f9bc728ea7d56fc82a862d761385f0dcd9528 Mon Sep 17 00:00:00 2001
From: Erika <3019731+Princesseuh@users.noreply.github.com>
Date: Mon, 13 Mar 2023 14:53:39 +0100
Subject: [PATCH] Fix `env.d.ts` switching back between types on every restart
 when assets are enabled (#6532)

* fix(assets): Fix assets types reverting back on every dev server starts

* chore: changeset
---
 .changeset/tough-sheep-grab.md                        | 5 +++++
 packages/astro/src/vite-plugin-inject-env-ts/index.ts | 9 ++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)
 create mode 100644 .changeset/tough-sheep-grab.md

diff --git a/.changeset/tough-sheep-grab.md b/.changeset/tough-sheep-grab.md
new file mode 100644
index 000000000000..d4870c980ea8
--- /dev/null
+++ b/.changeset/tough-sheep-grab.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Fix `env.d.ts` changing types wrongly on every restart when `experimental.assets` is enabled
diff --git a/packages/astro/src/vite-plugin-inject-env-ts/index.ts b/packages/astro/src/vite-plugin-inject-env-ts/index.ts
index bee2f37cc663..1693917f7e7e 100644
--- a/packages/astro/src/vite-plugin-inject-env-ts/index.ts
+++ b/packages/astro/src/vite-plugin-inject-env-ts/index.ts
@@ -49,18 +49,25 @@ export async function setUpEnvTs({
 
 	if (fs.existsSync(envTsPath)) {
 		let typesEnvContents = await fs.promises.readFile(envTsPath, 'utf-8');
+
+		// TODO: Remove this logic in 3.0, as `astro/client-image` will be merged into `astro/client`
 		if (settings.config.experimental.assets && typesEnvContents.includes('types="astro/client"')) {
 			typesEnvContents = typesEnvContents.replace(
 				'types="astro/client"',
 				'types="astro/client-image"'
 			);
 			await fs.promises.writeFile(envTsPath, typesEnvContents, 'utf-8');
-		} else if (typesEnvContents.includes('types="astro/client-image"')) {
+			info(logging, 'assets', `Added ${bold(envTsPathRelativetoRoot)} types`);
+		} else if (
+			!settings.config.experimental.assets &&
+			typesEnvContents.includes('types="astro/client-image"')
+		) {
 			typesEnvContents = typesEnvContents.replace(
 				'types="astro/client-image"',
 				'types="astro/client"'
 			);
 			await fs.promises.writeFile(envTsPath, typesEnvContents, 'utf-8');
+			info(logging, 'assets', `Removed ${bold(envTsPathRelativetoRoot)} types`);
 		}
 
 		if (!fs.existsSync(dotAstroDir))