Skip to content

Commit 51d9bbe

Browse files
committed
fix(compiler-vapor): nested component
1 parent 8ea6e4f commit 51d9bbe

File tree

4 files changed

+48
-2
lines changed

4 files changed

+48
-2
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
2828
"dev-esm": "node scripts/dev.js -if esm-bundler-runtime",
2929
"dev-prepare-cjs": "node scripts/prepare-cjs.js || npm run build-all-cjs",
30-
"dev-compiler": "run-p \"dev template-explorer\" serve",
30+
"dev-compiler": "run-p \"dev template-explorer\" serve open",
3131
"dev-sfc": "run-s dev-prepare-cjs dev-sfc-run",
3232
"dev-sfc-serve": "vite packages-private/sfc-playground --host",
3333
"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",

packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap

+18
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,24 @@ export function render(_ctx) {
137137
}"
138138
`;
139139

140+
exports[`compiler: transform slot > nested component slot 1`] = `
141+
"import { resolveComponent as _resolveComponent, createComponent as _createComponent } from 'vue/vapor';
142+
143+
export function render(_ctx) {
144+
const _component_B = _resolveComponent("B")
145+
const _component_A = _resolveComponent("A")
146+
const n1 = _createComponent(_component_A, null, [
147+
{
148+
"default": () => {
149+
const n0 = _createComponent(_component_B)
150+
return n0
151+
}
152+
}
153+
], true)
154+
return n1
155+
}"
156+
`;
157+
140158
exports[`compiler: transform slot > nested slots scoping 1`] = `
141159
"import { resolveComponent as _resolveComponent, createTextNode as _createTextNode, withDestructure as _withDestructure, createComponent as _createComponent, template as _template } from 'vue/vapor';
142160
const t0 = _template(" ")

packages/compiler-vapor/__tests__/transforms/vSlot.spec.ts

+28
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,34 @@ describe('compiler: transform slot', () => {
406406
expect(code).contains(`"nav-bar-title-before"`)
407407
})
408408

409+
test('nested component slot', () => {
410+
const { ir, code } = compileWithSlots(`<A><B/></A>`)
411+
expect(code).toMatchSnapshot()
412+
expect(ir.block.operation).toMatchObject([
413+
{
414+
type: IRNodeTypes.CREATE_COMPONENT_NODE,
415+
tag: 'A',
416+
slots: [
417+
{
418+
slotType: IRSlotType.STATIC,
419+
slots: {
420+
default: {
421+
type: IRNodeTypes.BLOCK,
422+
operation: [
423+
{
424+
type: IRNodeTypes.CREATE_COMPONENT_NODE,
425+
tag: 'B',
426+
slots: [],
427+
},
428+
],
429+
},
430+
},
431+
},
432+
],
433+
},
434+
])
435+
})
436+
409437
describe('errors', () => {
410438
test('error on extraneous children w/ named default slot', () => {
411439
const onError = vi.fn()

packages/compiler-vapor/src/transforms/transformElement.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ function transformComponentElement(
104104
props: propsResult[0] ? propsResult[1] : [propsResult[1]],
105105
asset,
106106
root,
107-
slots: context.slots,
107+
slots: [...context.slots],
108108
once: context.inVOnce,
109109
})
110110
context.slots = []

0 commit comments

Comments
 (0)