From 43cfa5eab5b49315edac57a5e960fd7a6ea5341c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Fri, 4 May 2018 10:50:47 +0300 Subject: [PATCH] Fix TSV output in MaxCtrl The output in --tsv mode could break the TSV format if newlines or tabs were included in the data. --- maxctrl/lib/common.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/maxctrl/lib/common.js b/maxctrl/lib/common.js index cab6d9057..d659c1d28 100644 --- a/maxctrl/lib/common.js +++ b/maxctrl/lib/common.js @@ -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, '')