Skip to content

Commit

Permalink
fix(compiler-core): transform kebab case props to camelcase on slots (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
edison1105 authored Nov 27, 2020
1 parent 735af1c commit ef59a30
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,9 @@ describe('compiler: transform <slot> outlets', () => {
})

test('default slot outlet with props', () => {
const ast = parseWithSlots(`<slot foo="bar" :baz="qux" />`)
const ast = parseWithSlots(
`<slot foo="bar" :baz="qux" :foo-bar="foo-bar" />`
)
expect((ast.children[0] as ElementNode).codegenNode).toMatchObject({
type: NodeTypes.JS_CALL_EXPRESSION,
callee: RENDER_SLOT,
Expand Down Expand Up @@ -124,6 +126,16 @@ describe('compiler: transform <slot> outlets', () => {
content: `qux`,
isStatic: false
}
},
{
key: {
content: `fooBar`,
isStatic: true
},
value: {
content: `foo-bar`,
isStatic: false
}
}
]
}
Expand Down
14 changes: 14 additions & 0 deletions packages/compiler-core/src/transforms/transformSlotOutlet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { isSlotOutlet, findProp } from '../utils'
import { buildProps, PropsExpression } from './transformElement'
import { createCompilerError, ErrorCodes } from '../errors'
import { RENDER_SLOT } from '../runtimeHelpers'
import { camelize } from '@vue/shared/'

export const transformSlotOutlet: NodeTransform = (node, context) => {
if (isSlotOutlet(node)) {
Expand Down Expand Up @@ -68,9 +69,22 @@ export function processSlotOutlet(
const propsWithoutName = name
? node.props.filter(p => p !== name)
: node.props

if (propsWithoutName.length > 0) {
//#2488
propsWithoutName.forEach(prop => {
if (
prop.type === NodeTypes.DIRECTIVE &&
prop.arg &&
prop.arg.type === NodeTypes.SIMPLE_EXPRESSION
) {
prop.arg.content = camelize(prop.arg.content)
}
})

const { props, directives } = buildProps(node, context, propsWithoutName)
slotProps = props

if (directives.length) {
context.onError(
createCompilerError(
Expand Down

0 comments on commit ef59a30

Please sign in to comment.