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
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; |
|
}
|
|
|