-
-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathindex.js
91 lines (76 loc) · 2.22 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*! snazzy. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
const chalk = require('chalk')
const standardJson = require('standard-json')
const stream = require('readable-stream')
const stripAnsi = require('strip-ansi')
const table = require('text-table')
class CompactToStylishStream extends stream.Transform {
constructor (opts) {
super(opts)
this.exitCode = 0
this._buffer = []
}
_transform (chunk, encoding, cb) {
this._buffer.push(chunk)
cb(null)
}
_flush (cb) {
const lines = Buffer.concat(this._buffer).toString()
const jsonResults = standardJson(lines, { noisey: true })
const output = processResults(jsonResults)
this.push(output)
this.exitCode = output === '' ? 0 : 1
cb(null)
}
}
/**
* Given a word and a count, append an s if count is not one.
* @param {string} word A word in its singular form.
* @param {int} count A number controlling whether word should be pluralized.
* @returns {string} The original word with an s on the end if count is not one.
*/
function pluralize (word, count) {
return (count === 1 ? word : word + 's')
}
function processResults (results) {
let output = '\n'
let total = 0
results.forEach(function (result) {
const messages = result.messages
if (messages.length === 0) {
return
}
total += messages.length
output += chalk.underline(result.filePath) + '\n'
output += table(
messages.map(function (message) {
const messageType = chalk.red('error')
return [
'',
message.line || 0,
message.column || 0,
messageType,
message.message.replace(/\.$/, ''),
chalk.dim(message.ruleId || '')
]
}),
{
align: ['', 'r', 'l'],
stringLength: function (str) {
return stripAnsi(str).length
}
}
).split('\n').map(function (el) {
return el.replace(/(\d+)\s+(\d+)/, function (m, p1, p2) {
return chalk.dim(p1 + ':' + p2)
})
}).join('\n') + '\n\n'
})
if (total > 0) {
output += chalk.red.bold([
'\u2716 ', total, pluralize(' problem', total), '\n'
].join(''))
}
return total > 0 ? output : ''
}
module.exports = CompactToStylishStream