From 2e56e320e1e5401379a6c9065106bde1b3864422 Mon Sep 17 00:00:00 2001 From: Julien Huang Date: Sat, 6 Dec 2025 22:01:40 +0100 Subject: [PATCH 1/3] fix: skip hydration components transformation --- src/dirs.ts | 4 ++++ src/plugins/hydration.ts | 15 ++++++++++++--- src/runtime/hydration/component.ts | 3 +-- 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 src/dirs.ts diff --git a/src/dirs.ts b/src/dirs.ts new file mode 100644 index 0000000..c20d289 --- /dev/null +++ b/src/dirs.ts @@ -0,0 +1,4 @@ +import { dirname } from 'node:path' +import { fileURLToPath } from 'node:url' + +export const distDir = dirname(fileURLToPath(import.meta.url)) diff --git a/src/plugins/hydration.ts b/src/plugins/hydration.ts index 5901e6b..5cbb17a 100644 --- a/src/plugins/hydration.ts +++ b/src/plugins/hydration.ts @@ -1,12 +1,15 @@ import { genImport } from 'knitwork' import MagicString from 'magic-string' +import { resolve } from 'node:path' import { parseSync, type ImportDeclaration } from 'oxc-parser' import { createUnplugin } from 'unplugin' +import { distDir } from '../dirs' const INCLUDE_VUE_RE = /\.vue$/ const EXCLUDE_NODE_MODULES = /node_modules/ const DEFINE_COMPONENT_RE = /defineComponent/ const DEFINE_NUXT_COMPONENT_RE = /defineNuxtComponent/ +const skipPath = normalizePath(resolve(distDir, 'runtime/hydration/component.ts')) export const InjectHydrationPlugin = createUnplugin(() => { return [ { @@ -16,11 +19,12 @@ export const InjectHydrationPlugin = createUnplugin(() => { filter: { id: { include: /.(vue|ts|js|tsx|jsx)$/, - exclude: EXCLUDE_NODE_MODULES, + exclude: [skipPath, EXCLUDE_NODE_MODULES], }, code: /defineNuxtComponent|defineComponent/, }, - handler(code, id) { + async handler(code, id) { + console.log(id) const m = new MagicString(code) const { program } = parseSync(id, code) const imports = program.body.filter(node => node.type === 'ImportDeclaration') @@ -77,7 +81,7 @@ export const InjectHydrationPlugin = createUnplugin(() => { filter: { id: { include: INCLUDE_VUE_RE, - exclude: EXCLUDE_NODE_MODULES, + exclude: [skipPath, EXCLUDE_NODE_MODULES], }, code: /(?!defineComponent|defineNuxtComponent)/, }, @@ -123,3 +127,8 @@ function findImportSpecifier(importDecl: ImportDeclaration[], importedName: stri return specifier.type === 'ImportSpecifier' && specifier.imported.type === 'Identifier' && specifier.imported.name === importedName }) } + + +function normalizePath(path: string) { + return path.replace(/\\/g, '/') +} \ No newline at end of file diff --git a/src/runtime/hydration/component.ts b/src/runtime/hydration/component.ts index a3fb912..b450079 100644 --- a/src/runtime/hydration/component.ts +++ b/src/runtime/hydration/component.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { defineComponent as _defineComponent, type DefineComponent } from 'vue' -import { defineNuxtComponent as _defineNuxtComponent } from 'nuxt/app' +import { defineNuxtComponent as _defineNuxtComponent, defineComponent as _defineComponent, type DefineComponent } from '#imports' import { useHydrationCheck } from './composables' export const defineNuxtComponent: typeof _defineComponent From 1823ead8be6bbbba66f02b85bc5916e54fd7367c Mon Sep 17 00:00:00 2001 From: Julien Huang Date: Sun, 7 Dec 2025 19:42:11 +0100 Subject: [PATCH 2/3] fix :imports --- src/runtime/hydration/component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/runtime/hydration/component.ts b/src/runtime/hydration/component.ts index b450079..dd7166f 100644 --- a/src/runtime/hydration/component.ts +++ b/src/runtime/hydration/component.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { defineNuxtComponent as _defineNuxtComponent, defineComponent as _defineComponent, type DefineComponent } from '#imports' +import { defineNuxtComponent as _defineNuxtComponent, defineComponent as _defineComponent } from '#imports' import { useHydrationCheck } from './composables' +import type { DefineComponent } from 'vue' export const defineNuxtComponent: typeof _defineComponent = function defineNuxtComponent(...args: any[]): any { From 71fe094a834d920ffc62e7b0036a1bf414956533 Mon Sep 17 00:00:00 2001 From: Julien Huang Date: Sun, 7 Dec 2025 19:50:40 +0100 Subject: [PATCH 3/3] chore: lint --- src/plugins/hydration.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/hydration.ts b/src/plugins/hydration.ts index 5cbb17a..8cdeea5 100644 --- a/src/plugins/hydration.ts +++ b/src/plugins/hydration.ts @@ -128,7 +128,6 @@ function findImportSpecifier(importDecl: ImportDeclaration[], importedName: stri }) } - function normalizePath(path: string) { return path.replace(/\\/g, '/') -} \ No newline at end of file +}