UNPKG

1.13 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = dedent;
7
8/**
9 * An ES6 string tag that fixes indentation. Also removes leading newlines
10 * and trailing spaces and tabs, but keeps trailing newlines.
11 *
12 * Example usage:
13 * const str = dedent`
14 * {
15 * test
16 * }
17 * `;
18 * str === "{\n test\n}\n";
19 */
20function dedent(strings) {
21 var str = '';
22
23 for (var i = 0; i < strings.length; ++i) {
24 str += strings[i];
25
26 if (i < (arguments.length <= 1 ? 0 : arguments.length - 1)) {
27 str += i + 1 < 1 || arguments.length <= i + 1 ? undefined : arguments[i + 1]; // interpolation
28 }
29 }
30
31 var trimmedStr = str.replace(/^\n*/m, '') // remove leading newline
32 .replace(/[ \t]*$/, ''); // remove trailing spaces and tabs
33 // fixes indentation by removing leading spaces and tabs from each line
34
35 var indent = '';
36
37 for (var _i2 = 0; _i2 < trimmedStr.length; _i2++) {
38 var char = trimmedStr[_i2];
39
40 if (char !== ' ' && char !== '\t') {
41 break;
42 }
43
44 indent += char;
45 }
46
47 return trimmedStr.replace(RegExp('^' + indent, 'mg'), ''); // remove indent
48}