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)
|
expression = wrapFilter(expression, filters[i], context)
|
||||||
}
|
}
|
||||||
node.content = expression
|
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 { type RawSourceMap, SourceMapConsumer } from 'source-map-js'
|
||||||
|
import { parse as babelParse } from '@babel/parser'
|
||||||
import {
|
import {
|
||||||
type SFCTemplateCompileOptions,
|
type SFCTemplateCompileOptions,
|
||||||
compileTemplate,
|
compileTemplate,
|
||||||
|
@ -452,6 +453,36 @@ test('prefixing edge case for reused AST ssr mode', () => {
|
||||||
).not.toThrowError()
|
).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 {
|
interface Pos {
|
||||||
line: number
|
line: number
|
||||||
column: number
|
column: number
|
||||||
|
|
Loading…
Reference in New Issue