UNPKG

vtils

Version:

一个面向业务的 JavaScript/TypeScript 实用程序库。

75 lines (71 loc) 2.23 kB
"use strict"; exports.__esModule = true; exports.dedent = dedent; var _indent = require("./indent"); /** * 移除每一行的公共前导空白。 * * @public * @param text 文本 * @returns 返回处理后的结果 * @example * ```typescript * dedent(' a\n b') // => 'a\nb' * ``` */ /** * 首先,每一行紧跟前导空白的插入值为多行时,保持缩进。 * 然后,移除每一行的公共前导空白。 * * @public * @param literals 字面值 * @param interpolations 插入值 * @returns 返回处理后的结果 * @example * ```typescript * dedent` a\n b` // => 'a\nb' * ``` */ /** * 首先,每一行紧跟前导空白的插入值为多行时,保持缩进。 * 然后,移除每一行的公共前导空白。 * * @public * @param literals 字面值 * @param interpolations 插入值 * @returns 返回处理后的结果 * @example * ```typescript * dedent` a\n b` // => 'a\nb' * ``` */ function dedent(literals) { for (var _len = arguments.length, interpolations = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { interpolations[_key - 1] = arguments[_key]; } var text = Array.isArray(literals) ? _indent.indent.apply(void 0, [literals].concat(interpolations)) : literals; // 公共的前导空白 var commonLeadingWhitespace; // 第一个非空行 var firstLineIndex; // 最后一个非空行 var lastLineIndex; var lines = text.split(/[\r\n]/g); for (var index = 0; index < lines.length; index++) { // 当前行的前导空白 var leadingWhitespace = lines[index].match(/^\s*/)[0]; // 如果当前行的前导空白等于当前行的长度,则认为这是一个空行,跳过 if (leadingWhitespace.length !== lines[index].length) { lastLineIndex = index; if (firstLineIndex == null) { firstLineIndex = index; } if (commonLeadingWhitespace == null || leadingWhitespace.length < commonLeadingWhitespace.length) { commonLeadingWhitespace = leadingWhitespace; } } } return commonLeadingWhitespace == null ? text : lines.slice(firstLineIndex, lastLineIndex + 1).map(function (line) { return line.substr(commonLeadingWhitespace.length); }).join('\n'); }