From: daiwei Date: Mon, 11 Aug 2025 03:49:09 +0000 (+0800) Subject: refactor: vapor hydration X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c511b9a5d7deddb50d86e4914ad94a466e70b5f1;p=thirdparty%2Fvuejs%2Fcore.git refactor: vapor hydration --- diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts index bae13372a9..dfcc1bef3c 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 99020bcf1a..0b5dcca8f7 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 9983071609..03a32e0113 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 10121fb5d5..11077df625 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 29d1853d2d..1d832388fe 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 fb2fff8657..2fde4560ec 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 57e4f022c0..f1d509acfb 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 712c09d094..7b3d1962c3 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 e8e7dfb253..9e70dac0bd 100644 --- a/packages/compiler-ssr/__tests__/ssrInjectCssVars.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrInjectCssVars.spec.ts @@ -70,14 +70,12 @@ describe('ssr: inject