UNPKG

1.46 kBJavaScriptView Raw
1'use strict'
2
3const chalk = require('chalk')
4const figures = require('figures')
5
6/**
7 * 按行(每行)缩进指定宽度
8 *
9 * @param {string} string 要操作的字符串
10 * @param {number} [span=2] 缩进
11 * @returns {string} 处理后的文本
12 */
13function padding (string, span = 2) {
14 const spaces = ' '.repeat(span)
15 return spaces + string.replace(/\n/g, `\n${spaces}`)
16}
17
18/**
19 * 移除多余的空行
20 * 连续两个以上的 \n 合并为两个
21 *
22 * @param {string} string 要操作的字符串
23 * @returns {string} 处理后的文本
24 */
25function reduceEmptyLine (string) {
26 return string.replace(/\n([ ]*\n)+/g, '\n\n')
27}
28
29/**
30 * @typedef Result
31 * @property {string} name 段落名
32 * @property {string} output 段落内容
33 * @property {boolean} success 是否成功
34 */
35
36const passedMessage = chalk.green(`${figures.tick} Passed`)
37
38/**
39 * report
40 *
41 * @param {Result[]} results 要输出到命令行的内容
42 * @returns {string} output
43 */
44function report (results) {
45 const arr = []
46
47 results.forEach(result => {
48 const name = result.name
49 const output = result.output
50 const success = result.success
51
52 arr.push('\n')
53 arr.push(`${chalk.bold(`> ${name}:`)}\n`)
54 arr.push('\n')
55
56 if (success && !output.trim()) {
57 arr.push(padding(passedMessage))
58 } else {
59 arr.push(padding(output))
60 }
61
62 arr.push('\n')
63 })
64
65 arr.push('\n')
66
67 return reduceEmptyLine(arr.join(''))
68}
69
70module.exports = report