From aa66466bce22a0a6e4adac767d10556cca864663 Mon Sep 17 00:00:00 2001
From: Bjorn Lu <bjornlu.dev@gmail.com>
Date: Thu, 15 Sep 2022 00:01:50 +0800
Subject: [PATCH] Support Vite 3.1 (#4752)

* Support Vite 3.1

* Update ~3.1.0

* Revert Vite bump
---
 .changeset/shaggy-books-give.md                           | 5 +++++
 packages/astro/src/vite-plugin-astro/index.ts             | 6 +++---
 .../astro/src/vite-style-transform/style-transform.ts     | 8 +-------
 .../astro/src/vite-style-transform/transform-with-vite.ts | 5 ++++-
 4 files changed, 13 insertions(+), 11 deletions(-)
 create mode 100644 .changeset/shaggy-books-give.md

diff --git a/.changeset/shaggy-books-give.md b/.changeset/shaggy-books-give.md
new file mode 100644
index 000000000..1f5c26945
--- /dev/null
+++ b/.changeset/shaggy-books-give.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Support Vite 3.1
diff --git a/packages/astro/src/vite-plugin-astro/index.ts b/packages/astro/src/vite-plugin-astro/index.ts
index d946dd256..5d1bf2c18 100644
--- a/packages/astro/src/vite-plugin-astro/index.ts
+++ b/packages/astro/src/vite-plugin-astro/index.ts
@@ -340,17 +340,17 @@ ${source}
 				throw err;
 			}
 		},
-		async handleHotUpdate(this: PluginContext, context) {
+		async handleHotUpdate(context) {
 			if (context.server.config.isProduction) return;
 			const compileProps: CompileProps = {
 				config,
 				filename: context.file,
 				moduleId: context.file,
 				source: await context.read(),
-				transformStyle: createTransformStyles(styleTransformer, context.file, true, this),
+				transformStyle: createTransformStyles(styleTransformer, context.file, true),
 			};
 			const compile = () => cachedCompilation(compileProps);
-			return handleHotUpdate.call(this, context, {
+			return handleHotUpdate(context, {
 				config,
 				logging,
 				compile,
diff --git a/packages/astro/src/vite-style-transform/style-transform.ts b/packages/astro/src/vite-style-transform/style-transform.ts
index 276a52246..6c63158af 100644
--- a/packages/astro/src/vite-style-transform/style-transform.ts
+++ b/packages/astro/src/vite-style-transform/style-transform.ts
@@ -30,14 +30,8 @@ export function createTransformStyles(
 	viteStyleTransformer: ViteStyleTransformer,
 	filename: string,
 	ssr: boolean,
-	pluginContext: PluginContext
+	pluginContext?: PluginContext
 ): TransformStyle {
-	// handleHotUpdate doesn't have `addWatchFile` used by transformStyleWithVite.
-	// TODO, refactor, why is this happening *here* ?
-	if (!pluginContext.addWatchFile) {
-		pluginContext.addWatchFile = () => {};
-	}
-
 	const normalizedID = getNormalizedIDForPostCSS(filename);
 
 	return async function (styleSource, lang) {
diff --git a/packages/astro/src/vite-style-transform/transform-with-vite.ts b/packages/astro/src/vite-style-transform/transform-with-vite.ts
index e473531fe..71276dd0d 100644
--- a/packages/astro/src/vite-style-transform/transform-with-vite.ts
+++ b/packages/astro/src/vite-style-transform/transform-with-vite.ts
@@ -46,7 +46,10 @@ export function createTransformStyleWithViteFn(
 
 		viteDevServer?.moduleGraph.ensureEntryFromUrl(styleId, ssr, false);
 
-		const transformResult = await transformCss.call(this, source, styleId, ssr);
+		// This function could be called in a custom Vite hook like `handleHotUpdate`
+		// which doesn't have a context
+		const ctx = this ?? { addWatchFile: () => {} };
+		const transformResult = await transformCss.call(ctx, source, styleId, ssr);
 
 		// NOTE: only `code` and `map` are returned by vite:css
 		const { code, map } = transformResult;