From c511b9a5d7deddb50d86e4914ad94a466e70b5f1 Mon Sep 17 00:00:00 2001 From: daiwei Date: Mon, 11 Aug 2025 11:49:09 +0800 Subject: [PATCH] refactor: vapor hydration --- packages/compiler-core/src/ast.ts | 4 + packages/compiler-core/src/codegen.ts | 2 + packages/compiler-core/src/options.ts | 5 + packages/compiler-core/src/transform.ts | 2 + packages/compiler-sfc/src/compileTemplate.ts | 1 + .../__tests__/ssrComponent.spec.ts | 9 +- .../compiler-ssr/__tests__/ssrElement.spec.ts | 46 - .../__tests__/ssrFallthroughAttrs.spec.ts | 1 - .../__tests__/ssrInjectCssVars.spec.ts | 2 - .../__tests__/ssrSlotOutlet.spec.ts | 1 - .../__tests__/ssrTransitionGroup.spec.ts | 13 +- .../compiler-ssr/__tests__/ssrVFor.spec.ts | 16 +- .../compiler-ssr/__tests__/ssrVIf.spec.ts | 17 +- .../compiler-ssr/__tests__/ssrVModel.spec.ts | 12 +- .../__tests__/ssrVaporAnchors.spec.ts | 322 ++ packages/compiler-ssr/__tests__/utils.ts | 8 +- .../compiler-ssr/src/ssrCodegenTransform.ts | 212 +- .../src/transforms/ssrTransformComponent.ts | 78 +- .../src/transforms/ssrTransformSlotOutlet.ts | 6 + .../compiler-ssr/src/transforms/ssrVFor.ts | 7 +- .../compiler-ssr/src/transforms/ssrVIf.ts | 10 +- .../__snapshots__/compile.spec.ts.snap | 8 +- .../__snapshots__/vFor.spec.ts.snap | 2 +- .../transforms/__snapshots__/vIf.spec.ts.snap | 4 +- .../__snapshots__/vOnce.spec.ts.snap | 2 +- .../__snapshots__/vSlot.spec.ts.snap | 4 +- packages/compiler-vapor/src/generate.ts | 3 +- .../src/generators/operation.ts | 30 +- .../compiler-vapor/src/generators/template.ts | 24 +- packages/compiler-vapor/src/transform.ts | 2 +- .../src/transforms/transformChildren.ts | 53 +- .../runtime-core/__tests__/hydration.spec.ts | 52 +- packages/runtime-core/src/hydration.ts | 20 +- .../runtime-vapor/__tests__/hydration.spec.ts | 3953 ++++++----------- packages/runtime-vapor/src/dom/hydration.ts | 89 +- packages/runtime-vapor/src/dom/node.ts | 51 +- packages/runtime-vapor/src/insertionState.ts | 17 +- .../server-renderer/__tests__/render.spec.ts | 14 +- .../__tests__/ssrAttrFallthrough.spec.ts | 4 +- .../__tests__/ssrDynamicComponent.spec.ts | 14 +- .../__tests__/ssrScopeId.spec.ts | 12 +- .../server-renderer/__tests__/ssrSlot.spec.ts | 30 +- .../src/helpers/ssrRenderSlot.ts | 6 +- packages/shared/src/domAnchors.ts | 19 +- 44 files changed, 2145 insertions(+), 3042 deletions(-) create mode 100644 packages/compiler-ssr/__tests__/ssrVaporAnchors.spec.ts diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts index bae13372a..dfcc1bef3 100644 --- a/packages/compiler-core/src/ast.ts +++ b/packages/compiler-core/src/ast.ts @@ -163,6 +163,7 @@ export interface ComponentNode extends BaseElementNode { | MemoExpression // when cached by v-memo | undefined ssrCodegenNode?: CallExpression + anchor?: string } export interface SlotOutletNode extends BaseElementNode { @@ -172,6 +173,7 @@ export interface SlotOutletNode extends BaseElementNode { | CacheExpression // when cached by v-once | undefined ssrCodegenNode?: CallExpression + anchor?: string } export interface TemplateNode extends BaseElementNode { @@ -287,6 +289,7 @@ export interface IfNode extends Node { type: NodeTypes.IF branches: IfBranchNode[] codegenNode?: IfConditionalExpression | CacheExpression //
+ anchor?: string } export interface IfBranchNode extends Node { @@ -306,6 +309,7 @@ export interface ForNode extends Node { parseResult: ForParseResult children: TemplateChildNode[] codegenNode?: ForCodegenNode + anchor?: string } export interface ForParseResult { diff --git a/packages/compiler-core/src/codegen.ts b/packages/compiler-core/src/codegen.ts index 99020bcf1..0b5dcca8f 100644 --- a/packages/compiler-core/src/codegen.ts +++ b/packages/compiler-core/src/codegen.ts @@ -167,6 +167,7 @@ function createCodegenContext( ssr = false, isTS = false, inSSR = false, + vapor = false, }: CodegenOptions, ): CodegenContext { const context: CodegenContext = { @@ -182,6 +183,7 @@ function createCodegenContext( ssr, isTS, inSSR, + vapor, source: ast.source, code: ``, column: 1, diff --git a/packages/compiler-core/src/options.ts b/packages/compiler-core/src/options.ts index 998307160..03a32e011 100644 --- a/packages/compiler-core/src/options.ts +++ b/packages/compiler-core/src/options.ts @@ -220,6 +220,11 @@ interface SharedTransformCodegenOptions { * @default 'template.vue.html' */ filename?: string + + /** + * Indicates vapor component + */ + vapor?: boolean } export interface TransformOptions diff --git a/packages/compiler-core/src/transform.ts b/packages/compiler-core/src/transform.ts index 10121fb5d..11077df62 100644 --- a/packages/compiler-core/src/transform.ts +++ b/packages/compiler-core/src/transform.ts @@ -146,6 +146,7 @@ export function createTransformContext( slotted = true, ssr = false, inSSR = false, + vapor = false, ssrCssVars = ``, bindingMetadata = EMPTY_OBJ, inline = false, @@ -173,6 +174,7 @@ export function createTransformContext( slotted, ssr, inSSR, + vapor, ssrCssVars, bindingMetadata, inline, diff --git a/packages/compiler-sfc/src/compileTemplate.ts b/packages/compiler-sfc/src/compileTemplate.ts index 29d1853d2..1d832388f 100644 --- a/packages/compiler-sfc/src/compileTemplate.ts +++ b/packages/compiler-sfc/src/compileTemplate.ts @@ -253,6 +253,7 @@ function doCompileTemplate({ slotted, sourceMap: true, ...compilerOptions, + vapor, hmr: !isProd, nodeTransforms: nodeTransforms.concat( compilerOptions.nodeTransforms || [], diff --git a/packages/compiler-ssr/__tests__/ssrComponent.spec.ts b/packages/compiler-ssr/__tests__/ssrComponent.spec.ts index fb2fff865..2fde4560e 100644 --- a/packages/compiler-ssr/__tests__/ssrComponent.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrComponent.spec.ts @@ -39,7 +39,6 @@ describe('ssr: components', () => { return function ssrRender(_ctx, _push, _parent, _attrs) { _ssrRenderVNode(_push, _createVNode(_resolveDynamicComponent("foo"), _mergeProps({ prop: "b" }, _attrs), null), _parent) - _push(\`\`) }" `) @@ -50,7 +49,6 @@ describe('ssr: components', () => { return function ssrRender(_ctx, _push, _parent, _attrs) { _ssrRenderVNode(_push, _createVNode(_resolveDynamicComponent(_ctx.foo), _mergeProps({ prop: "b" }, _attrs), null), _parent) - _push(\`\`) }" `) }) @@ -246,8 +244,7 @@ describe('ssr: components', () => { _ssrRenderList(list, (i) => { _push(\`\`) }) - _push(\`
\`) - _push(\`\`) + _push(\`\`) } else { _push(\`\`) } @@ -270,8 +267,7 @@ describe('ssr: components', () => { _ssrRenderList(_ctx.list, (i) => { _push(\`\`) }) - _push(\`\`) - _push(\`\`) + _push(\`\`) } else { _push(\`\`) } @@ -365,7 +361,6 @@ describe('ssr: components', () => { _push(\`\`) if (false) { _push(\`\`) - _push(\`\`) } else { _push(\`\`) } diff --git a/packages/compiler-ssr/__tests__/ssrElement.spec.ts b/packages/compiler-ssr/__tests__/ssrElement.spec.ts index 57e4f022c..f1d509acf 100644 --- a/packages/compiler-ssr/__tests__/ssrElement.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrElement.spec.ts @@ -396,50 +396,4 @@ describe('ssr: element', () => { `) }) }) - - describe('dynamic anchor', () => { - test('two consecutive components', () => { - expect( - getCompiledString(` -
-
- - -
-
- `), - ).toMatchInlineSnapshot(` - "\`
\`) - _push(_ssrRenderComponent(_component_Comp1, null, null, _parent)) - _push(\`\`) - _push(_ssrRenderComponent(_component_Comp2, null, null, _parent)) - _push(\`
\`" - `) - }) - - test('multiple consecutive components', () => { - expect( - getCompiledString(` -
-
- - - - -
-
- `), - ).toMatchInlineSnapshot(` - "\`
\`) - _push(_ssrRenderComponent(_component_Comp1, null, null, _parent)) - _push(\`\`) - _push(_ssrRenderComponent(_component_Comp2, null, null, _parent)) - _push(\`\`) - _push(_ssrRenderComponent(_component_Comp3, null, null, _parent)) - _push(\`\`) - _push(_ssrRenderComponent(_component_Comp4, null, null, _parent)) - _push(\`
\`" - `) - }) - }) }) diff --git a/packages/compiler-ssr/__tests__/ssrFallthroughAttrs.spec.ts b/packages/compiler-ssr/__tests__/ssrFallthroughAttrs.spec.ts index 712c09d09..7b3d1962c 100644 --- a/packages/compiler-ssr/__tests__/ssrFallthroughAttrs.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrFallthroughAttrs.spec.ts @@ -29,7 +29,6 @@ describe('ssr: attrs fallthrough', () => { _push(\`\`) if (true) { _push(\`
\`) - _push(\`\`) } else { _push(\`\`) } diff --git a/packages/compiler-ssr/__tests__/ssrInjectCssVars.spec.ts b/packages/compiler-ssr/__tests__/ssrInjectCssVars.spec.ts index e8e7dfb25..9e70dac0b 100644 --- a/packages/compiler-ssr/__tests__/ssrInjectCssVars.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrInjectCssVars.spec.ts @@ -70,14 +70,12 @@ describe('ssr: inject