mirror of https://github.com/vuejs/core.git
fix(compat): correctly transform non-identifier expressions in legacy filter syntax (#10896)
close #10852
This commit is contained in:
parent
37f9ef8174
commit
07b3c4b786
|
@ -168,6 +168,8 @@ function parseFilter(node: SimpleExpressionNode, context: TransformContext) {
|
|||
expression = wrapFilter(expression, filters[i], context)
|
||||
}
|
||||
node.content = expression
|
||||
// reset ast since the content is replaced
|
||||
node.ast = undefined
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { type RawSourceMap, SourceMapConsumer } from 'source-map-js'
|
||||
import { parse as babelParse } from '@babel/parser'
|
||||
import {
|
||||
type SFCTemplateCompileOptions,
|
||||
compileTemplate,
|
||||
|
@ -452,6 +453,36 @@ test('prefixing edge case for reused AST ssr mode', () => {
|
|||
).not.toThrowError()
|
||||
})
|
||||
|
||||
// #10852
|
||||
test('non-identifier expression in legacy filter syntax', () => {
|
||||
const src = `
|
||||
<template>
|
||||
<div>
|
||||
Today is
|
||||
{{ new Date() | formatDate }}
|
||||
</div>
|
||||
</template>
|
||||
`
|
||||
|
||||
const { descriptor } = parse(src)
|
||||
const compilationResult = compileTemplate({
|
||||
id: 'xxx',
|
||||
filename: 'test.vue',
|
||||
ast: descriptor.template!.ast,
|
||||
source: descriptor.template!.content,
|
||||
ssr: false,
|
||||
compilerOptions: {
|
||||
compatConfig: {
|
||||
MODE: 2,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
expect(() => {
|
||||
babelParse(compilationResult.code, { sourceType: 'module' })
|
||||
}).not.toThrow()
|
||||
})
|
||||
|
||||
interface Pos {
|
||||
line: number
|
||||
column: number
|
||||
|
|
Loading…
Reference in New Issue