createStream.js 3.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _mapValues2 = _interopRequireDefault(require("lodash/mapValues"));

var _values2 = _interopRequireDefault(require("lodash/values"));

var _trimEnd2 = _interopRequireDefault(require("lodash/trimEnd"));

var _makeStreamConfig = _interopRequireDefault(require("./makeStreamConfig"));

var _drawRow = _interopRequireDefault(require("./drawRow"));

var _drawBorder = require("./drawBorder");

var _stringifyTableData = _interopRequireDefault(require("./stringifyTableData"));

var _truncateTableData = _interopRequireDefault(require("./truncateTableData"));

var _mapDataUsingRowHeightIndex = _interopRequireDefault(require("./mapDataUsingRowHeightIndex"));

var _alignTableData = _interopRequireDefault(require("./alignTableData"));

var _padTableData = _interopRequireDefault(require("./padTableData"));

var _calculateRowHeightIndex = _interopRequireDefault(require("./calculateRowHeightIndex"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * @param {Array} data
 * @param {Object} config
 * @returns {Array}
 */
const prepareData = (data, config) => {
  let rows;
  rows = (0, _stringifyTableData.default)(data);
  rows = (0, _truncateTableData.default)(data, config);
  const rowHeightIndex = (0, _calculateRowHeightIndex.default)(rows, config);
  rows = (0, _mapDataUsingRowHeightIndex.default)(rows, rowHeightIndex, config);
  rows = (0, _alignTableData.default)(rows, config);
  rows = (0, _padTableData.default)(rows, config);
  return rows;
};
/**
 * @param {string[]} row
 * @param {number[]} columnWidthIndex
 * @param {Object} config
 * @returns {undefined}
 */


const create = (row, columnWidthIndex, config) => {
  const rows = prepareData([row], config);
  const body = rows.map(literalRow => {
    return (0, _drawRow.default)(literalRow, config.border);
  }).join('');
  let output;
  output = '';
  output += (0, _drawBorder.drawBorderTop)(columnWidthIndex, config.border);
  output += body;
  output += (0, _drawBorder.drawBorderBottom)(columnWidthIndex, config.border);
  output = (0, _trimEnd2.default)(output);
  process.stdout.write(output);
};
/**
 * @param {string[]} row
 * @param {number[]} columnWidthIndex
 * @param {Object} config
 * @returns {undefined}
 */


const append = (row, columnWidthIndex, config) => {
  const rows = prepareData([row], config);
  const body = rows.map(literalRow => {
    return (0, _drawRow.default)(literalRow, config.border);
  }).join('');
  let output = '';
  const bottom = (0, _drawBorder.drawBorderBottom)(columnWidthIndex, config.border);

  if (bottom !== '\n') {
    output = '\r\u001B[K';
  }

  output += (0, _drawBorder.drawBorderJoin)(columnWidthIndex, config.border);
  output += body;
  output += bottom;
  output = (0, _trimEnd2.default)(output);
  process.stdout.write(output);
};
/**
 * @param {Object} userConfig
 * @returns {Object}
 */


const createStream = (userConfig = {}) => {
  const config = (0, _makeStreamConfig.default)(userConfig); // @todo Use 'Object.values' when Node.js v6 support is dropped.

  const columnWidthIndex = (0, _values2.default)((0, _mapValues2.default)(config.columns, column => {
    return column.width + column.paddingLeft + column.paddingRight;
  }));
  let empty;
  empty = true;
  return {
    /**
     * @param {string[]} row
     * @returns {undefined}
     */
    write: row => {
      if (row.length !== config.columnCount) {
        throw new Error('Row cell count does not match the config.columnCount.');
      }

      if (empty) {
        empty = false;
        return create(row, columnWidthIndex, config);
      } else {
        return append(row, columnWidthIndex, config);
      }
    }
  };
};

var _default = createStream;
exports.default = _default;
//# sourceMappingURL=createStream.js.map