diff --git a/src/server/template-renderer/parse-template.js b/src/server/template-renderer/parse-template.js index da5cba36998..1ccfe899620 100644 --- a/src/server/template-renderer/parse-template.js +++ b/src/server/template-renderer/parse-template.js @@ -2,7 +2,7 @@ const compile = require('lodash.template') const compileOptions = { - escape: /{{[^{]([\s\S]+?)[^}]}}/g, + escape: /{{([^{][\s\S]+?[^}])}}/g, interpolate: /{{{([\s\S]+?)}}}/g } diff --git a/test/ssr/ssr-template.spec.js b/test/ssr/ssr-template.spec.js index 2d169ceb13c..2229c9fbcc6 100644 --- a/test/ssr/ssr-template.spec.js +++ b/test/ssr/ssr-template.spec.js @@ -330,5 +330,38 @@ describe('SSR: template option', () => { }) }) }) + + it('whitespace insensitive interpolation', done => { + const interpolateTemplate = `{{title}}{{{snippet}}}` + const renderer = createRenderer({ + template: interpolateTemplate + }) + + const context = { + title: '', + snippet: '
foo
', + head: '', + styles: '', + state: { a: 1 } + } + + renderer.renderToString(new Vue({ + template: '
hi
' + }), context, (err, res) => { + expect(err).toBeNull() + expect(res).toContain( + `` + + // double mustache should be escaped + `<script>hacks</script>` + + `${context.head}${context.styles}` + + `
hi
` + + `` + + // triple should be raw + `
foo
` + + `` + ) + done() + }) + }) } })