You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

59 lines
1.4 KiB

"use strict";
function dedent(strings) {
var raw = void 0;
if (typeof strings === "string") {
// dedent can be used as a plain function
raw = [strings];
} else {
raw = strings.raw;
}
// first, perform interpolation
var result = "";
for (var i = 0; i < raw.length; i++) {
result += raw[i].
// join lines when there is a suppressed newline
replace(/\\\n[ \t]*/g, "").
// handle escaped backticks
replace(/\\`/g, "`");
if (i < (arguments.length <= 1 ? 0 : arguments.length - 1)) {
result += arguments.length <= i + 1 ? undefined : arguments[i + 1];
}
}
// now strip indentation
var lines = result.split("\n");
var mindent = null;
lines.forEach(function (l) {
var m = l.match(/^(\s+)\S+/);
if (m) {
var indent = m[1].length;
if (!mindent) {
// this is the first indented line
mindent = indent;
} else {
mindent = Math.min(mindent, indent);
}
}
});
if (mindent !== null) {
result = lines.map(function (l) {
return l[0] === " " ? l.slice(mindent) : l;
}).join("\n");
}
// dedent eats leading and trailing whitespace too
result = result.trim();
// handle escaped newlines at the end to ensure they don't get stripped too
return result.replace(/\\n/g, "\n");
}
if (typeof module !== "undefined") {
module.exports = dedent;
}