for (let i = 0; i < l; i++) {
const e = node.elements[i]
if (isString(e)) {
- push(e.replace(/`/g, '\\`'))
+ push(e.replace(/(`|\$|\\)/g, '\\$1'))
} else {
push('${')
if (multilines) indent()
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', () => {
expect(getCompiledString(`<!--bar-->`)).toMatchInlineSnapshot(
`"\`<!--bar-->\`"`