}"
`;
+exports[`v-on > expression with type 1`] = `
+"import { delegateEvents as _delegateEvents, template as _template } from 'vue';
+const t0 = _template("<div></div>", true)
+_delegateEvents("click")
+
+export function render(_ctx, $props, $emit, $attrs, $slots) {
+ const n0 = t0()
+ n0.$evtclick = e => _ctx.handleClick(e)
+ return n0
+}"
+`;
+
exports[`v-on > function expression w/ prefixIdentifiers: true 1`] = `
"import { delegateEvents as _delegateEvents, template as _template } from 'vue';
const t0 = _template("<div></div>", true)
'_delegate(n0, "click", _withModifiers(e => _ctx.test(e), ["stop"]))',
)
})
+
+ test('expression with type', () => {
+ const { code } = compileWithVOn(
+ `<div @click="(<number>handleClick as any)"></div>`,
+ {
+ bindingMetadata: {
+ handleClick: BindingTypes.SETUP_CONST,
+ },
+ },
+ )
+ expect(code).matchSnapshot()
+ expect(code).include('n0.$evtclick = e => _ctx.handleClick(e)')
+ })
})
NewlineType,
type SimpleExpressionNode,
type SourceLocation,
+ TS_NODE_TYPES,
advancePositionWithClone,
createSimpleExpression,
isInDestructureAssignment,
let hasMemberExpression = false
if (ids.length) {
const [frag, push] = buildCodeFragment()
+ const isTSNode = ast && TS_NODE_TYPES.includes(ast.type)
ids
.sort((a, b) => a.start! - b.start!)
.forEach((id, i) => {
const end = id.end! - 1
const last = ids[i - 1]
- const leadingText = content.slice(last ? last.end! - 1 : 0, start)
- if (leadingText.length) push([leadingText, NewlineType.Unknown])
+ if (!(isTSNode && i === 0)) {
+ const leadingText = content.slice(last ? last.end! - 1 : 0, start)
+ if (leadingText.length) push([leadingText, NewlineType.Unknown])
+ }
const source = content.slice(start, end)
const parentStack = parentStackMap.get(id)!
),
)
- if (i === ids.length - 1 && end < content.length) {
+ if (i === ids.length - 1 && end < content.length && !isTSNode) {
push([content.slice(end), NewlineType.Unknown])
}
})