fix(compiler-core): dedupe renderSlot's default props (#4557)
This commit is contained in:
parent
ed6470c845
commit
044812525f
@ -346,6 +346,26 @@ describe('compiler: transform <slot> outlets', () => {
|
|||||||
callee: RENDER_SLOT,
|
callee: RENDER_SLOT,
|
||||||
arguments: [`$slots`, `"default"`, `{}`, `undefined`, `true`]
|
arguments: [`$slots`, `"default"`, `{}`, `undefined`, `true`]
|
||||||
})
|
})
|
||||||
|
const fallback = parseWithSlots(`<slot>fallback</slot>`, {
|
||||||
|
slotted: false,
|
||||||
|
scopeId: 'foo'
|
||||||
|
})
|
||||||
|
|
||||||
|
const child = {
|
||||||
|
type: NodeTypes.JS_FUNCTION_EXPRESSION,
|
||||||
|
params: [],
|
||||||
|
returns: [
|
||||||
|
{
|
||||||
|
type: NodeTypes.TEXT,
|
||||||
|
content: `fallback`
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
expect((fallback.children[0] as ElementNode).codegenNode).toMatchObject({
|
||||||
|
type: NodeTypes.JS_CALL_EXPRESSION,
|
||||||
|
callee: RENDER_SLOT,
|
||||||
|
arguments: [`$slots`, `"default"`, `{}`, child, `true`]
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
test(`error on unexpected custom directive on <slot>`, () => {
|
test(`error on unexpected custom directive on <slot>`, () => {
|
||||||
|
@ -20,29 +20,27 @@ export const transformSlotOutlet: NodeTransform = (node, context) => {
|
|||||||
|
|
||||||
const slotArgs: CallExpression['arguments'] = [
|
const slotArgs: CallExpression['arguments'] = [
|
||||||
context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,
|
context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,
|
||||||
slotName
|
slotName,
|
||||||
|
'{}',
|
||||||
|
'undefined',
|
||||||
|
'true'
|
||||||
]
|
]
|
||||||
|
let expectedLen = 2
|
||||||
|
|
||||||
if (slotProps) {
|
if (slotProps) {
|
||||||
slotArgs.push(slotProps)
|
slotArgs[2] = slotProps
|
||||||
|
expectedLen = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
if (children.length) {
|
if (children.length) {
|
||||||
if (!slotProps) {
|
slotArgs[3] = createFunctionExpression([], children, false, false, loc)
|
||||||
slotArgs.push(`{}`)
|
expectedLen = 4
|
||||||
}
|
|
||||||
slotArgs.push(createFunctionExpression([], children, false, false, loc))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (context.scopeId && !context.slotted) {
|
if (context.scopeId && !context.slotted) {
|
||||||
if (!slotProps) {
|
expectedLen = 5
|
||||||
slotArgs.push(`{}`)
|
|
||||||
}
|
|
||||||
if (!children.length) {
|
|
||||||
slotArgs.push(`undefined`)
|
|
||||||
}
|
|
||||||
slotArgs.push(`true`)
|
|
||||||
}
|
}
|
||||||
|
slotArgs.splice(expectedLen) // remove unused arguments
|
||||||
|
|
||||||
node.codegenNode = createCallExpression(
|
node.codegenNode = createCallExpression(
|
||||||
context.helper(RENDER_SLOT),
|
context.helper(RENDER_SLOT),
|
||||||
|
Loading…
Reference in New Issue
Block a user