fix(compiler-ssr): should escape template string interpolation chars in generated code
This commit is contained in:
parent
181541045b
commit
5f15d9aa4b
@ -891,7 +891,7 @@ function genTemplateLiteral(node: TemplateLiteral, context: CodegenContext) {
|
|||||||
for (let i = 0; i < l; i++) {
|
for (let i = 0; i < l; i++) {
|
||||||
const e = node.elements[i]
|
const e = node.elements[i]
|
||||||
if (isString(e)) {
|
if (isString(e)) {
|
||||||
push(e.replace(/`/g, '\\`'))
|
push(e.replace(/(`|\$|\\)/g, '\\$1'))
|
||||||
} else {
|
} else {
|
||||||
push('${')
|
push('${')
|
||||||
if (multilines) indent()
|
if (multilines) indent()
|
||||||
|
@ -6,6 +6,21 @@ describe('ssr: text', () => {
|
|||||||
expect(getCompiledString(`foo`)).toMatchInlineSnapshot(`"\`foo\`"`)
|
expect(getCompiledString(`foo`)).toMatchInlineSnapshot(`"\`foo\`"`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('static text with template string special chars', () => {
|
||||||
|
expect(getCompiledString(`\`\${foo}\``)).toMatchInlineSnapshot(
|
||||||
|
`"\`\\\\\`\\\\\${foo}\\\\\`\`"`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('static text with char escape', () => {
|
||||||
|
// the desired generated code should be `\\\$foo`
|
||||||
|
// snapshot -> inline snapshot goes through two escapes
|
||||||
|
// so that makes a total of 3 * 2 * 2 = 12 back slashes
|
||||||
|
expect(getCompiledString(`\\$foo`)).toMatchInlineSnapshot(
|
||||||
|
`"\`\\\\\\\\\\\\$foo\`"`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
test('comments', () => {
|
test('comments', () => {
|
||||||
expect(getCompiledString(`<!--bar-->`)).toMatchInlineSnapshot(
|
expect(getCompiledString(`<!--bar-->`)).toMatchInlineSnapshot(
|
||||||
`"\`<!--bar-->\`"`
|
`"\`<!--bar-->\`"`
|
||||||
|
Loading…
Reference in New Issue
Block a user