From: daiwei Date: Thu, 23 Jan 2025 09:53:15 +0000 (+0800) Subject: wip: test X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e756c520e1589fa9935b20b34d1546f43b8a2cdf;p=thirdparty%2Fvuejs%2Fcore.git wip: test --- diff --git a/packages/compiler-core/src/transforms/transformElement.ts b/packages/compiler-core/src/transforms/transformElement.ts index 05b215db31..d3087c08d9 100644 --- a/packages/compiler-core/src/transforms/transformElement.ts +++ b/packages/compiler-core/src/transforms/transformElement.ts @@ -176,6 +176,8 @@ export const transformElement: NodeTransform = (node, context) => { const { slots, hasDynamicSlots } = buildSlots( node as ComponentNode, context, + undefined, + true, ) vnodeChildren = slots if (hasDynamicSlots) { diff --git a/packages/compiler-core/src/transforms/vSkip.ts b/packages/compiler-core/src/transforms/vSkip.ts index 0bbb117780..e9582e8e5a 100644 --- a/packages/compiler-core/src/transforms/vSkip.ts +++ b/packages/compiler-core/src/transforms/vSkip.ts @@ -87,7 +87,7 @@ export function processSkip( // for components, extract default slot without props // if not found, throw an error if (node.tagType === ElementTypes.COMPONENT) { - const { slots } = buildSlots(node, context) + const { slots } = buildSlots(node, context, undefined, true) if (slots.type === NodeTypes.JS_OBJECT_EXPRESSION) { const prop = slots.properties.find( p => diff --git a/packages/compiler-core/src/transforms/vSlot.ts b/packages/compiler-core/src/transforms/vSlot.ts index 72d9012047..a58d6721d7 100644 --- a/packages/compiler-core/src/transforms/vSlot.ts +++ b/packages/compiler-core/src/transforms/vSlot.ts @@ -117,7 +117,7 @@ export function buildSlots( node: ComponentNode, context: TransformContext, buildSlotFn: SlotFnBuilder = buildClientSlotFn, - useCache: boolean = true, + useCache: boolean = false, ): { slots: SlotsExpression hasDynamicSlots: boolean diff --git a/packages/compiler-ssr/__tests__/ssrVSkip.spec.ts b/packages/compiler-ssr/__tests__/ssrVSkip.spec.ts index 9bee16cc27..086e957c0d 100644 --- a/packages/compiler-ssr/__tests__/ssrVSkip.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrVSkip.spec.ts @@ -206,7 +206,7 @@ describe('ssr: v-skip', () => { test('on component with default slot', () => { expect(compile(`foo`).code).toMatchInlineSnapshot(` - "const { withCtx: _withCtx, resolveComponent: _resolveComponent } = require("vue") + "const { withCtx: _withCtx, resolveComponent: _resolveComponent, createTextVNode: _createTextVNode } = require("vue") const { ssrRenderComponent: _ssrRenderComponent } = require("vue/server-renderer") return function ssrRender(_ctx, _push, _parent, _attrs) { @@ -219,6 +219,10 @@ describe('ssr: v-skip', () => { default: _withCtx((_, _push, _parent, _scopeId) => { if (_push) { _push(\`foo\`) + } else { + return [ + _createTextVNode("foo") + ] } }), _: 1 /* STABLE */ @@ -237,7 +241,7 @@ describe('ssr: v-skip', () => { `, ).code, ).toMatchInlineSnapshot(` - "const { withCtx: _withCtx, resolveComponent: _resolveComponent } = require("vue") + "const { withCtx: _withCtx, resolveComponent: _resolveComponent, createTextVNode: _createTextVNode } = require("vue") const { ssrRenderComponent: _ssrRenderComponent } = require("vue/server-renderer") return function ssrRender(_ctx, _push, _parent, _attrs) { @@ -250,11 +254,19 @@ describe('ssr: v-skip', () => { default: _withCtx((_, _push, _parent, _scopeId) => { if (_push) { _push(\`default\`) + } else { + return [ + _createTextVNode("default") + ] } }), foo: _withCtx((_, _push, _parent, _scopeId) => { if (_push) { _push(\`foo\`) + } else { + return [ + _createTextVNode("foo") + ] } }), _: 1 /* STABLE */ @@ -274,7 +286,7 @@ describe('ssr: v-skip', () => { `, ).code, ).toMatchInlineSnapshot(` - "const { withCtx: _withCtx, resolveComponent: _resolveComponent } = require("vue") + "const { withCtx: _withCtx, resolveComponent: _resolveComponent, createTextVNode: _createTextVNode, createVNode: _createVNode } = require("vue") const { ssrRenderComponent: _ssrRenderComponent } = require("vue/server-renderer") return function ssrRender(_ctx, _push, _parent, _attrs) { @@ -287,6 +299,10 @@ describe('ssr: v-skip', () => { foo: _withCtx((_, _push, _parent, _scopeId) => { if (_push) { _push(\`foo\`) + } else { + return [ + _createTextVNode("foo") + ] } }), default: _withCtx((_, _push, _parent, _scopeId) => { @@ -296,6 +312,11 @@ describe('ssr: v-skip', () => { }>\`) + } else { + return [ + _createVNode("span"), + _createVNode("div") + ] } }), _: 1 /* STABLE */ @@ -313,7 +334,7 @@ describe('ssr: v-skip', () => { `, ).code, ).toMatchInlineSnapshot(` - "const { withCtx: _withCtx, resolveDynamicComponent: _resolveDynamicComponent, createVNode: _createVNode } = require("vue") + "const { withCtx: _withCtx, resolveDynamicComponent: _resolveDynamicComponent, renderSlot: _renderSlot, createVNode: _createVNode } = require("vue") const { ssrRenderSlot: _ssrRenderSlot, ssrRenderVNode: _ssrRenderVNode } = require("vue/server-renderer") return function ssrRender(_ctx, _push, _parent, _attrs) { @@ -324,6 +345,10 @@ describe('ssr: v-skip', () => { default: _withCtx((_, _push, _parent, _scopeId) => { if (_push) { _ssrRenderSlot(_ctx.$slots, "default", {}, null, _push, _parent, _scopeId) + } else { + return [ + _renderSlot(_ctx.$slots, "default") + ] } }), _: 3 /* FORWARDED */ diff --git a/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts b/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts index 4ba3e1c8d1..cad1ee8102 100644 --- a/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts +++ b/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts @@ -173,7 +173,7 @@ export const ssrTransformComponent: NodeTransform = (node, context) => { } const slots = node.children.length - ? buildSlots(node, context, buildSSRSlotFn, false).slots + ? buildSlots(node, context, buildSSRSlotFn).slots : `null` if (typeof component !== 'string') {