vtils
Version:
一个面向业务的 JavaScript/TypeScript 实用程序库。
75 lines (71 loc) • 2.23 kB
JavaScript
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');
}
;