]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
wip: test
authordaiwei <daiwei521@126.com>
Thu, 23 Jan 2025 09:53:15 +0000 (17:53 +0800)
committerdaiwei <daiwei521@126.com>
Thu, 23 Jan 2025 09:53:15 +0000 (17:53 +0800)
packages/compiler-core/src/transforms/transformElement.ts
packages/compiler-core/src/transforms/vSkip.ts
packages/compiler-core/src/transforms/vSlot.ts
packages/compiler-ssr/__tests__/ssrVSkip.spec.ts
packages/compiler-ssr/src/transforms/ssrTransformComponent.ts

index 05b215db31ac128fe564ed598ddf82aa72e94268..d3087c08d98a320a5efa7e12ea665b995a6615d1 100644 (file)
@@ -176,6 +176,8 @@ export const transformElement: NodeTransform = (node, context) => {
         const { slots, hasDynamicSlots } = buildSlots(
           node as ComponentNode,
           context,
+          undefined,
+          true,
         )
         vnodeChildren = slots
         if (hasDynamicSlots) {
index 0bbb117780bd8b1d3680dea00792cbe55692ca93..e9582e8e5a72e4b064e97831e4c2d67855559a68 100644 (file)
@@ -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 =>
index 72d9012047528cb157ba312cbb63646f4e68be65..a58d6721d733efd55f3eaeb1be5786bc64c8e520 100644 (file)
@@ -117,7 +117,7 @@ export function buildSlots(
   node: ComponentNode,
   context: TransformContext,
   buildSlotFn: SlotFnBuilder = buildClientSlotFn,
-  useCache: boolean = true,
+  useCache: boolean = false,
 ): {
   slots: SlotsExpression
   hasDynamicSlots: boolean
index 9bee16cc27bd64cc7f5d0a5f594755debdc64053..086e957c0d50c46e605b9d257410966e6960f016 100644 (file)
@@ -206,7 +206,7 @@ describe('ssr: v-skip', () => {
 
   test('on component with default slot', () => {
     expect(compile(`<Comp v-skip="ok">foo</Comp>`).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', () => {
         </Comp>`,
       ).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', () => {
         </Comp>`,
       ).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', () => {
                 }></span><div\${
                   _scopeId
                 }></div>\`)
+              } else {
+                return [
+                  _createVNode("span"),
+                  _createVNode("div")
+                ]
               }
             }),
             _: 1 /* STABLE */
@@ -313,7 +334,7 @@ describe('ssr: v-skip', () => {
       </component>`,
       ).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 */
index 4ba3e1c8d16ebc8854e3e3643a8d59c1918fd977..cad1ee8102897beab4c8990b99b43366c5d42655 100644 (file)
@@ -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') {