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