Fix TSV output in MaxCtrl

The output in --tsv mode could break the TSV format if newlines or tabs
were included in the data.
This commit is contained in:
Markus Mäkelä 2018-05-04 10:50:47 +03:00
parent 2bb6c84be0
commit 43cfa5eab5
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19

View File

@ -19,6 +19,26 @@ var os = require('os')
var fs = require('fs')
var readlineSync = require('readline-sync')
function normalizeWhitespace(table) {
table.forEach((v) => {
if (Array.isArray(v)) {
// `table` is an array of arrays
v.forEach((k) => {
if (typeof(v[k]) == 'string') {
v[k] = v[k].replace( /\s+/g, ' ')
}
})
} else if (!Array.isArray(v) && v instanceof Object) {
// `table` is an array of objects
Object.keys(v).forEach((k) => {
if (typeof(v[k]) == 'string') {
v[k] = v[k].replace( /\s+/g, ' ')
}
})
}
})
}
module.exports = function() {
this._ = require('lodash-getpath')
@ -101,7 +121,15 @@ module.exports = function() {
}
this.tableToString = function(table) {
if (this.argv.tsv)
{
// Convert whitespace into spaces to prevent breaking the TSV format
normalizeWhitespace(table)
}
str = table.toString()
if (this.argv.tsv) {
// Based on the regex found in: https://github.com/jonschlinkert/strip-color
str = str.replace( /\x1B\[[(?);]{0,2}(;?\d)*./g, '')