It is actually important for a dedent function when the interpolands contain newlines. Consider this example:
function fmt(q, a) {
return dedent`\
Question: ${q}
Answer: ${a}
`;
}
Since `dedent` is basically syntactic sugar for developer convenience, we want this function to be equivalent to this:
function fmtDesugared(q, a) {
return `Question: ${q}\nAnswer: ${a}\n`;
}
Now consider this input:
console.log(fmt("a\nb", "c\nd"));
// should print:
Question: a
b
Answer: c
d
But if `dedent` only got to see the string after interpolation—like this—
function fmtWrong(q, a) {
return dedent(`\
Question: ${q}
Answer: ${a}
`);
}
then the
input to `dedent` would be
Question: a
b
Answer: c
d
and so `dedent` would not strip any indentation. That is, `dedent` is meant to identify the maximal common leading indentation
in the template as written by the developer, which should not depend on the values of the interpolands.
A stale GitHub issue on the dmnd/dedent repo has a real-world example where this matters and led to a subtle bug: https://github.com/dmnd/dedent/issues/22