Skip to content

Commit

Permalink
fix(compiler-core): dedupe renderSlot's default props (#4557)
Browse files Browse the repository at this point in the history
  • Loading branch information
HerringtonDarkholme authored Sep 21, 2021
1 parent ed6470c commit 0448125
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,26 @@ describe('compiler: transform <slot> outlets', () => {
callee: RENDER_SLOT,
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>`, () => {
Expand Down
24 changes: 11 additions & 13 deletions packages/compiler-core/src/transforms/transformSlotOutlet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,27 @@ export const transformSlotOutlet: NodeTransform = (node, context) => {

const slotArgs: CallExpression['arguments'] = [
context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,
slotName
slotName,
'{}',
'undefined',
'true'
]
let expectedLen = 2

if (slotProps) {
slotArgs.push(slotProps)
slotArgs[2] = slotProps
expectedLen = 3
}

if (children.length) {
if (!slotProps) {
slotArgs.push(`{}`)
}
slotArgs.push(createFunctionExpression([], children, false, false, loc))
slotArgs[3] = createFunctionExpression([], children, false, false, loc)
expectedLen = 4
}

if (context.scopeId && !context.slotted) {
if (!slotProps) {
slotArgs.push(`{}`)
}
if (!children.length) {
slotArgs.push(`undefined`)
}
slotArgs.push(`true`)
expectedLen = 5
}
slotArgs.splice(expectedLen) // remove unused arguments

node.codegenNode = createCallExpression(
context.helper(RENDER_SLOT),
Expand Down

1 comment on commit 0448125

@transtone
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may cause a NutUI bug: jdf2e/nutui#681

Please sign in to comment.