]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-vapor): nested component
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Wed, 13 Nov 2024 01:28:15 +0000 (09:28 +0800)
committer三咲智子 Kevin Deng <sxzz@sxzz.moe>
Wed, 13 Nov 2024 01:28:15 +0000 (09:28 +0800)
package.json
packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap
packages/compiler-vapor/__tests__/transforms/vSlot.spec.ts
packages/compiler-vapor/src/transforms/transformElement.ts

index b4859ab0b706ca49cae31e0b67c6afa958a9f2a8..b1338f9866137bbd173808c125b2188091bdbbaf 100644 (file)
@@ -27,7 +27,7 @@
     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
     "dev-esm": "node scripts/dev.js -if esm-bundler-runtime",
     "dev-prepare-cjs": "node scripts/prepare-cjs.js || npm run build-all-cjs",
-    "dev-compiler": "run-p \"dev template-explorer\" serve",
+    "dev-compiler": "run-p \"dev template-explorer\" serve open",
     "dev-sfc": "run-s dev-prepare-cjs dev-sfc-run",
     "dev-sfc-serve": "vite packages-private/sfc-playground --host",
     "dev-sfc-run": "run-p \"dev compiler-sfc -f esm-browser\" \"dev vue -if esm-bundler-runtime\" \"dev vue -ipf esm-browser-runtime\" \"dev server-renderer -if esm-bundler\" dev-sfc-serve",
index 454104a434709f80f06e5c414ed654c026724d5f..d4005e6d245b6428876c2413120383652bc7623d 100644 (file)
@@ -137,6 +137,24 @@ export function render(_ctx) {
 }"
 `;
 
+exports[`compiler: transform slot > nested component slot 1`] = `
+"import { resolveComponent as _resolveComponent, createComponent as _createComponent } from 'vue/vapor';
+
+export function render(_ctx) {
+  const _component_B = _resolveComponent("B")
+  const _component_A = _resolveComponent("A")
+  const n1 = _createComponent(_component_A, null, [
+    {
+      "default": () => {
+        const n0 = _createComponent(_component_B)
+        return n0
+      }
+    }
+  ], true)
+  return n1
+}"
+`;
+
 exports[`compiler: transform slot > nested slots scoping 1`] = `
 "import { resolveComponent as _resolveComponent, createTextNode as _createTextNode, withDestructure as _withDestructure, createComponent as _createComponent, template as _template } from 'vue/vapor';
 const t0 = _template(" ")
index a018c7b5eda4fe079900a40c8ce7b61b31ece365..5cd8080faa2c72aaf56587a6501ab7433d788061 100644 (file)
@@ -406,6 +406,34 @@ describe('compiler: transform slot', () => {
     expect(code).contains(`"nav-bar-title-before"`)
   })
 
+  test('nested component slot', () => {
+    const { ir, code } = compileWithSlots(`<A><B/></A>`)
+    expect(code).toMatchSnapshot()
+    expect(ir.block.operation).toMatchObject([
+      {
+        type: IRNodeTypes.CREATE_COMPONENT_NODE,
+        tag: 'A',
+        slots: [
+          {
+            slotType: IRSlotType.STATIC,
+            slots: {
+              default: {
+                type: IRNodeTypes.BLOCK,
+                operation: [
+                  {
+                    type: IRNodeTypes.CREATE_COMPONENT_NODE,
+                    tag: 'B',
+                    slots: [],
+                  },
+                ],
+              },
+            },
+          },
+        ],
+      },
+    ])
+  })
+
   describe('errors', () => {
     test('error on extraneous children w/ named default slot', () => {
       const onError = vi.fn()
index 7ccb64004cd0bf8e5d78c8f9126b92692d9d1aed..60d7f602348c28291f791591c02c9fb09ee56cf6 100644 (file)
@@ -104,7 +104,7 @@ function transformComponentElement(
     props: propsResult[0] ? propsResult[1] : [propsResult[1]],
     asset,
     root,
-    slots: context.slots,
+    slots: [...context.slots],
     once: context.inVOnce,
   })
   context.slots = []