From d1d35cbcea47a0878153b5d08b364dd57054b5b9 Mon Sep 17 00:00:00 2001 From: edison Date: Tue, 21 Oct 2025 08:29:08 +0800 Subject: [PATCH] feat(vapor): hydration (#13226) --- package.json | 2 +- packages/compiler-sfc/src/compileScript.ts | 5 + .../compiler-ssr/__tests__/ssrVIf.spec.ts | 18 +- .../__snapshots__/compile.spec.ts.snap | 82 +- .../compiler-vapor/__tests__/compile.spec.ts | 30 +- .../TransformTransition.spec.ts.snap | 2 +- .../__snapshots__/expression.spec.ts.snap | 12 +- .../transformChildren.spec.ts.snap | 42 +- .../transformElement.spec.ts.snap | 11 + .../__snapshots__/vFor.spec.ts.snap | 46 +- .../transforms/__snapshots__/vIf.spec.ts.snap | 16 +- .../__snapshots__/vOnce.spec.ts.snap | 8 +- .../__snapshots__/vSlot.spec.ts.snap | 4 +- .../__snapshots__/vText.spec.ts.snap | 8 +- .../transforms/transformChildren.spec.ts | 6 +- .../transforms/transformElement.spec.ts | 9 + .../src/generators/operation.ts | 16 +- .../compiler-vapor/src/generators/template.ts | 41 +- .../compiler-vapor/src/generators/text.ts | 2 +- packages/compiler-vapor/src/ir/index.ts | 9 + .../src/transforms/transformChildren.ts | 30 +- .../src/transforms/transformElement.ts | 10 +- packages/compiler-vapor/src/transforms/vIf.ts | 1 + packages/runtime-core/src/apiCreateApp.ts | 8 + packages/runtime-core/src/hydration.ts | 133 +- packages/runtime-core/src/index.ts | 14 + packages/runtime-core/src/renderer.ts | 2 + packages/runtime-dom/src/index.ts | 2 +- .../runtime-vapor/__tests__/dom/prop.spec.ts | 11 + .../__tests__/dom/template.spec.ts | 6 +- .../runtime-vapor/__tests__/hydration.spec.ts | 5359 ++++++++++++----- .../src/apiCreateDynamicComponent.ts | 26 +- packages/runtime-vapor/src/apiCreateFor.ts | 56 +- packages/runtime-vapor/src/apiCreateIf.ts | 21 +- packages/runtime-vapor/src/block.ts | 73 +- packages/runtime-vapor/src/component.ts | 57 +- packages/runtime-vapor/src/componentSlots.ts | 34 +- .../runtime-vapor/src/directives/vShow.ts | 52 +- packages/runtime-vapor/src/dom/hydration.ts | 324 +- packages/runtime-vapor/src/dom/node.ts | 161 +- packages/runtime-vapor/src/dom/prop.ts | 271 +- packages/runtime-vapor/src/dom/template.ts | 15 +- packages/runtime-vapor/src/fragment.ts | 144 +- packages/runtime-vapor/src/index.ts | 2 +- packages/runtime-vapor/src/insertionState.ts | 63 +- packages/runtime-vapor/src/vdomInterop.ts | 224 +- .../__tests__/ssrDynamicComponent.spec.ts | 2 +- pnpm-lock.yaml | 265 +- 48 files changed, 5534 insertions(+), 2201 deletions(-) diff --git a/package.json b/package.json index e94789865e..26e4f5f6ca 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "pug": "^3.0.3", "puppeteer": "~24.16.2", "rimraf": "^6.0.1", - "rollup": "4.50.1", + "rollup": "^4.52.5", "rollup-plugin-dts": "^6.2.3", "rollup-plugin-esbuild": "^6.2.1", "rollup-plugin-polyfill-node": "^0.13.0", diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 36ac654770..fe41375354 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -1021,6 +1021,11 @@ export function compileScript( : '' // wrap setup code with function. if (ctx.isTS) { + // in SSR, always use defineComponent, so __vapor flag is required + if (ssr && vapor) { + runtimeOptions += `\n __vapor: true,` + } + // for TS, make sure the exported type is still valid type with // correct props information // we have to use object spread for types to be merged properly diff --git a/packages/compiler-ssr/__tests__/ssrVIf.spec.ts b/packages/compiler-ssr/__tests__/ssrVIf.spec.ts index b544adadcf..7867a4b5fb 100644 --- a/packages/compiler-ssr/__tests__/ssrVIf.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrVIf.spec.ts @@ -82,15 +82,15 @@ describe('ssr: v-if', () => { test('