]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
wip: add more test
authordaiwei <daiwei521@126.com>
Sun, 26 Jan 2025 03:30:00 +0000 (11:30 +0800)
committerdaiwei <daiwei521@126.com>
Sun, 26 Jan 2025 03:30:00 +0000 (11:30 +0800)
packages/compiler-core/__tests__/transforms/__snapshots__/vSkip.spec.ts.snap
packages/compiler-core/__tests__/transforms/vSkip.spec.ts
packages/compiler-ssr/src/transforms/ssrVSkip.ts

index b848eb37d48023e5bf4596a58bae830833811e35..15887f6d80ab7f4f2197c6697ce2f114955354a9 100644 (file)
@@ -389,3 +389,19 @@ return function render(_ctx, _cache) {
   }
 }"
 `;
+
+exports[`compiler: v-skip > transform > with v-memo 1`] = `
+"const _Vue = Vue
+
+return function render(_ctx, _cache) {
+  with (_ctx) {
+    const { createElementVNode: _createElementVNode, openBlock: _openBlock, createElementBlock: _createElementBlock, withMemo: _withMemo } = _Vue
+
+    return (_ctx.ok)
+      ? (_openBlock(), _createElementBlock("span", { key: 0 }))
+      : _withMemo([1], () => (_openBlock(), _createElementBlock("div", { key: 1 }, [
+          (_openBlock(), _createElementBlock("span", { key: 0 }))
+        ])), _cache, 0)
+  }
+}"
+`;
index 27a681630e77faeb76dd1234b7b9b2b8d083789c..33114486d734149ef626ed69aed2deaf266ff694 100644 (file)
@@ -13,6 +13,7 @@ import {
   type SimpleExpressionNode,
   type SkipNode,
   type VNodeCall,
+  WITH_MEMO,
   generate,
   baseParse as parse,
   transform,
@@ -23,6 +24,7 @@ import { transformIf } from '../../src/transforms/vIf'
 import { transformFor } from '../../src/transforms/vFor'
 import { transformSlotOutlet } from '../../src/transforms/transformSlotOutlet'
 import { transformSkip } from '../../src/transforms/vSkip'
+import { transformMemo } from '../../src/transforms/vMemo'
 
 export function parseWithSkipTransform(
   template: string,
@@ -36,6 +38,7 @@ export function parseWithSkipTransform(
     nodeTransforms: [
       transformIf,
       transformSkip,
+      transformMemo,
       transformFor,
       transformExpression,
       transformSlotOutlet,
@@ -255,6 +258,25 @@ describe('compiler: v-skip', () => {
       expect(generate(root).code).toMatchSnapshot()
     })
 
+    test('with v-memo', () => {
+      const { root, node } = parseWithSkipTransform(
+        `<div v-skip="ok" v-memo="[1]"><span/></div>`,
+      ) as {
+        root: RootNode
+        node: SkipNode
+      }
+      expect(node.type).toBe(NodeTypes.SKIP)
+      expect((node.test as SimpleExpressionNode).content).toBe(`_ctx.ok`)
+      expect(node.alternate.children.length).toBe(1)
+      expect(node.alternate.children[0].type).toBe(NodeTypes.ELEMENT)
+      expect((node.alternate.children[0] as ElementNode).tag).toBe(`div`)
+      const codegenNode = (node.alternate.children[0] as ElementNode)
+        .codegenNode!
+      expect(codegenNode.type).toBe(NodeTypes.JS_CALL_EXPRESSION)
+      expect((codegenNode as any).callee).toBe(WITH_MEMO)
+      expect(generate(root).code).toMatchSnapshot()
+    })
+
     test('on component without slot', () => {
       // equivalent to <Comp v-if="ok"/>
       const { root, node } = parseWithSkipTransform(`<Comp v-skip="ok"/>`) as {
index 14fce93e107e4db19436cc7a1aa9ba0ca09d0afb..7f6d101ee80c1110287b3e488ee495744595a4ed 100644 (file)
@@ -24,7 +24,7 @@ export const ssrTransformSkip: NodeTransform =
         // for non-skipNode, rewrite the ssrCodegenNode
         // `ssrRenderComponent` -> `ssrRenderSkipComponent`
         // `ssrRenderVNode` -> `ssrRenderSkipVNode`
-        if (!skipNode && node && (node as ComponentNode).ssrCodegenNode) {
+        if (!skipNode && (node as ComponentNode).ssrCodegenNode) {
           const {
             callee,
             arguments: args,