UNPKG

@paydirt/fmt

Version:

String formating using commonly used standards

86 lines (85 loc) 3.62 kB
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; }