ejs icon indicating copy to clipboard operation
ejs copied to clipboard

`<%_` doesn’t work with a custom delimiter

Open rauschma opened this issue 10 months ago • 1 comments

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),
    '  '
  );
}

rauschma avatar Mar 13 '25 20:03 rauschma

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.

jessepav avatar Jul 03 '25 04:07 jessepav