diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap index cb1a05d2a43..dd00e552675 100644 --- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap +++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap @@ -123,6 +123,18 @@ export function render(_ctx, $props, $emit, $attrs, $slots) { }" `; +exports[`v-on > expression with type 1`] = ` +"import { delegateEvents as _delegateEvents, template as _template } from 'vue'; +const t0 = _template("
", 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("
", true) diff --git a/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts b/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts index 1ce2169366c..aca88c791b8 100644 --- a/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts +++ b/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts @@ -682,4 +682,17 @@ describe('v-on', () => { '_delegate(n0, "click", _withModifiers(e => _ctx.test(e), ["stop"]))', ) }) + + test('expression with type', () => { + const { code } = compileWithVOn( + `
`, + { + bindingMetadata: { + handleClick: BindingTypes.SETUP_CONST, + }, + }, + ) + expect(code).matchSnapshot() + expect(code).include('n0.$evtclick = e => _ctx.handleClick(e)') + }) }) diff --git a/packages/compiler-vapor/src/generators/expression.ts b/packages/compiler-vapor/src/generators/expression.ts index eedaeeb380a..f7e90ddcb7a 100644 --- a/packages/compiler-vapor/src/generators/expression.ts +++ b/packages/compiler-vapor/src/generators/expression.ts @@ -10,6 +10,7 @@ import { NewlineType, type SimpleExpressionNode, type SourceLocation, + TS_NODE_TYPES, advancePositionWithClone, createSimpleExpression, isInDestructureAssignment, @@ -64,6 +65,7 @@ export function genExpression( 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) => { @@ -72,8 +74,10 @@ export function genExpression( 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)! @@ -100,7 +104,7 @@ export function genExpression( ), ) - if (i === ids.length - 1 && end < content.length) { + if (i === ids.length - 1 && end < content.length && !isTSNode) { push([content.slice(end), NewlineType.Unknown]) } })