UNPKG

pretty-print

Version:

Print formatted data to the the command line

135 lines (102 loc) 3.13 kB
var _ = require('lodash'); var feedback = require('feedback'); var chalk = require('chalk'); var util = require('util'); var asArray = require('as-array'); var print = module.exports = function (data, options) { if (isBasicArray(data)) return printBasicArray(data, options); if (isArray(data)) return printArrayOfObjects(data, options); if (isObject(data)) return printObject(data, options); }; function printObject (data, options) { options = options || {}; var defaults = { leftPadding: 2, rightPadding: 2 }; _.defaults(options, defaults); var keys = _.keys(data); var maxKeyLen = _.max(_.map(keys, function (key) { return key.length; })) + options.rightPadding; _.each(keys, function (key) { var paddedKey = addPadding(key, maxKeyLen); var leftPadding = options.leftPadding; var lPad = ''; while (leftPadding--) { lPad += ' '; } if (util.isArray(data[key]) && data[key].length > 0){ var blankKey = key.replace(/./gi, ' '); // used for spacing var blankPaddedKey = addPadding(blankKey, maxKeyLen); var arr = data[key]; feedback.info(lPad + paddedKey + JSON.stringify(arr[0]).replace(/^\"|\"$/g, '')); for(var i = 1; i < arr.length; i += 1) { feedback.info(lPad + blankPaddedKey + JSON.stringify(arr[i]).replace(/^\"|\"$/g, '')); } } else{ var output = Array.isArray(data[key]) ? asArray(data[key]) .map(function (item) { return JSON.stringify(item).replace(/^\"|\"$/g, ''); }) .join('') : JSON.stringify(data[key]).replace(/^\"|\"$/g, ''); feedback.info(lPad + paddedKey + output); } }); } function printArrayOfObjects (data, options) { var defaults = { padding: 0, leftPadding: 2, rightPadding: 2 }; _.defaults(options, defaults); var maxKeyLen = _.max(_.map(data, function (obj) { return obj[options.key].length; })) + options.rightPadding; _.each(data, function (obj) { var objKey = obj[options.key]; var leftPadding = options.leftPadding; var lPad = ''; if (!objKey) return; while (leftPadding--) { lPad += ' '; } var paddedKey = lPad + addPadding(objKey, maxKeyLen); if (options.value) paddedKey += obj[options.value]; feedback.info(paddedKey); }); } function printBasicArray (data, options) { var defaults = { leftPadding: 2 }; var leftPadding = options.leftPadding; var lPad = ''; while (leftPadding--) { lPad += ' '; } _.defaults(options, defaults); _.each(data, function (val) { feedback.info(lPad + val); }); }; function addPadding (key, maxPadding) { var padding = _.map(Array(maxPadding - key.length), function () { return ' '; }); return key.split('').concat(padding).join(''); } function isArrayOfObjects (data) { return _.isObject(data[0]) && !_.isArray(data[0]); } function isBasicArray (data) { return _.isArray(data) && !_.isObject(data[0]); } function isArray (data) { return _.isArray(data) && isArrayOfObjects(data); } function isObject(data) { return _.isObject(data) && !_.isArray(data); }