From 53c901eb8d58e4c1d259db9963bd6817efc11ea2 Mon Sep 17 00:00:00 2001 From: Cosmin Popovici Date: Tue, 30 Jun 2020 12:36:34 +0300 Subject: [PATCH] fix: escape custom delimiters when ignoring expressions --- lib/escape.js | 2 +- lib/index.js | 4 ++-- test/fixtures/custom_delimiters.html | 6 +++--- test/test-core.js | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/escape.js b/lib/escape.js index 309cd7b..c7c5e46 100644 --- a/lib/escape.js +++ b/lib/escape.js @@ -11,7 +11,7 @@ */ function escapeRegexpString (input) { // match Operators - const match = /[|\\{}()[\]^$+*?.]/ + const match = /[|\\{}()[\]^$+*?.]/g return input.replace(match, '\\$&') } diff --git a/lib/index.js b/lib/index.js index b0c5603..2a7a412 100644 --- a/lib/index.js +++ b/lib/index.js @@ -148,8 +148,8 @@ module.exports = function postHTMLExpressions (options) { delimitersSettings[1] = delimiters[0] } - delimitersReplace = new RegExp(`@${delimitersSettings[1].text[0]}`, 'g') - unescapeDelimitersReplace = new RegExp(`@${delimitersSettings[0].text[0]}`, 'g') + delimitersReplace = new RegExp(`@${escapeRegexpString(delimitersSettings[1].text[0])}`, 'g') + unescapeDelimitersReplace = new RegExp(`@${escapeRegexpString(delimitersSettings[0].text[0])}`, 'g') // kick off the parsing return function (tree) { diff --git a/test/fixtures/custom_delimiters.html b/test/fixtures/custom_delimiters.html index 7e2bcc4..6521094 100644 --- a/test/fixtures/custom_delimiters.html +++ b/test/fixtures/custom_delimiters.html @@ -1,3 +1,3 @@ -x {% test %} x {% 1 + 1 %} x -

x {% test %} x

-{{% 'x&x' %}} +x %[ test ]% x %[ 1 + 1 ]% x +

x %[ test ]% x

+%[[ 'x&x' ]]% diff --git a/test/test-core.js b/test/test-core.js index 6a6e3b9..db34ec5 100644 --- a/test/test-core.js +++ b/test/test-core.js @@ -54,8 +54,8 @@ test('Unescaped', (t) => { test('Delimiters', (t) => { return process(t, 'custom_delimiters', { - delimiters: ['{%', '%}'], - unescapeDelimiters: ['{{%', '%}}'], + delimiters: ['%[', ']%'], + unescapeDelimiters: ['%[[', ']]%'], locals: { test: 'wow' } }) })