@paydirt/fmt
Version:
String formating using commonly used standards
86 lines (85 loc) • 3.62 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import sprintf from '../sprintf';
import * as palettes from './palettes';
var defaultConfig = {
palette: palettes.DEFAULT,
padding: 1,
silent: false
};
export default function table(keyMap, data, configuration) {
if (configuration === void 0) { configuration = defaultConfig; }
// Fill in config gaps with defaults
var config = __assign(__assign({}, defaultConfig), configuration);
// Deconstruct the palette into managable chunks
var _a = config.palette.split(''), TL = _a[0], TS = _a[1], TM = _a[2], TR = _a[3], LL = _a[4], LS = _a[5], LM = _a[6], LR = _a[7], ML = _a[8], MS = _a[9], MM = _a[10], MR = _a[11], RL = _a[12], RS = _a[13], RM = _a[14], RR = _a[15], BL = _a[16], BS = _a[17], BM = _a[18], BR = _a[19];
// Convert object based keyMap to array based keyMap
var keys = Array.isArray(keyMap) ? keyMap : Object.keys(keyMap).map(function (key) {
return __assign({ key: key }, keyMap[key]);
});
// Figure out how many characters the longest value/label is per column
var lengthMap = new Map(keys.map(function (_a) {
var key = _a.key, label = _a.label;
return ([
key,
data.reduce(function (longest, item) {
var itemLength = String(item[key]).length;
return Math.max(longest, itemLength);
}, label.length) + config.padding * 2
]);
}));
// Generate placeholder whitespace for each column width
var columns = keys.map(function (_a) {
var key = _a.key;
return (sprintf("%".concat(lengthMap.get(key), "s"), ' '));
});
// generateSolidRow returns a table row of provided parts
var generateSolidRow = function (left, separator, middle, right) { return ("".concat(left).concat(columns.join(middle).replace(/ /g, separator)).concat(right)); };
// generateRow returns a table row with content
var generateRow = function (left, separator, middle, right, row) { return (left + keys.map(function (_a) {
var key = _a.key;
return (sprintf("%".concat(config.padding, "s%-").concat(Number(lengthMap.get(key)) - config.padding, "s"), '', row[key]));
}).join(middle) + right); };
// This is where the table will be stored
var result = [];
// top
result.push(generateSolidRow(TL, TS, TM, TR));
// labels
result.push(generateRow(LL, LS, LM, LR, keys.reduce(function (r, _a) {
var key = _a.key, label = _a.label;
r[key] = label;
return r;
}, {})));
// mid
result.push(generateSolidRow(ML, MS, MM, MR));
// rows
result.push(data.map(function (row) {
var formattedRow = keys.reduce(function (r, _a) {
var key = _a.key, format = _a.format;
r[key] = format ? format(row[key]) : row[key];
return r;
}, {});
return generateRow(RL, RS, RM, RR, formattedRow);
}).join('\n'));
// end
result.push(generateSolidRow(BL, BS, BM, BR));
var finalizedResult = result.join('\n');
if (config.silent === false) {
if (process) {
process.stdout.write(finalizedResult + '\n');
}
else {
console.log(finalizedResult);
}
}
return finalizedResult;
}