ejs
ejs copied to clipboard
`<%_` doesn’t work with a custom delimiter
Repository with repro: https://github.com/rauschma/ejs-repro
import ejs from 'ejs';
import assert from 'node:assert/strict';
{ // Custom delimiter
const opts = {
openDelimiter: '/',
closeDelimiter: '/',
delimiter: '*', // after openDelimiter, before closeDelimiter
};
assert.equal(
// 🔴 Doesn’t work: stripping preceding whitespace
ejs.render(' /*_ */\n', {}, opts),
' \n'
);
assert.equal(
// Works: stripping a succeeding newline
ejs.render(' /* -*/\n', {}, opts),
' '
);
}
{ // Normal delimiter
const opts = {};
assert.equal(
// 🟢 Works: stripping preceding whitespace
ejs.render(' <%_ %>\n', {}, opts),
'\n'
);
assert.equal(
// Works: stripping a succeeding newline
ejs.render(' <% -%>\n', {}, opts),
' '
);
}
It seems that the <%_ and _%> slurp delimiters are hardcoded here:
https://github.com/mde/ejs/blob/main/lib/ejs.js#L733
Others tags take custom delimiters into account.