From 59532673648abfda811cc0592df689971d53aa1b Mon Sep 17 00:00:00 2001 From: rash Date: Thu, 27 Jul 2023 18:40:30 +0200 Subject: [PATCH] fix: run transform hooks of all earlier plugins on handleHotUpdate #211 --- packages/plugin-vue/src/handleHotUpdate.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/plugin-vue/src/handleHotUpdate.ts b/packages/plugin-vue/src/handleHotUpdate.ts index 97ceefc5..e38c51e5 100644 --- a/packages/plugin-vue/src/handleHotUpdate.ts +++ b/packages/plugin-vue/src/handleHotUpdate.ts @@ -1,4 +1,5 @@ import _debug from 'debug' +import type { SourceDescription } from 'rollup' import type { SFCBlock, SFCDescriptor } from 'vue/compiler-sfc' import type { HmrContext, ModuleNode } from 'vite' import { isCSSRequest } from 'vite' @@ -23,7 +24,7 @@ const directRequestRE = /(?:\?|&)direct\b/ * Vite-specific HMR handling */ export async function handleHotUpdate( - { file, modules, read }: HmrContext, + { file, modules, read, server }: HmrContext, options: ResolvedOptions, ): Promise { const prevDescriptor = getDescriptor(file, options, false) @@ -34,7 +35,24 @@ export async function handleHotUpdate( setPrevDescriptor(file, prevDescriptor) - const content = await read() + let content = await read() + + const vuePlugin = server.config.plugins.find((p) => p.name === 'vite:vue') + if (vuePlugin) { + for (const hook of server.config.getSortedPluginHooks('transform')) { + if (hook === vuePlugin.transform) break + const transformResult = await hook(content, file) + if (transformResult) { + if ((transformResult as Partial).code) { + content = (transformResult as Partial) + .code as string + } else { + content = transformResult as string + } + } + } + } + const { descriptor } = createDescriptor(file, content, options) let needRerender = false