.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / node_modules / table / dist / createStream.js
1 'use strict';
2
3 Object.defineProperty(exports, "__esModule", {
4   value: true
5 });
6
7 var _lodash = require('lodash');
8
9 var _lodash2 = _interopRequireDefault(_lodash);
10
11 var _makeStreamConfig = require('./makeStreamConfig');
12
13 var _makeStreamConfig2 = _interopRequireDefault(_makeStreamConfig);
14
15 var _drawRow = require('./drawRow');
16
17 var _drawRow2 = _interopRequireDefault(_drawRow);
18
19 var _drawBorder = require('./drawBorder');
20
21 var _stringifyTableData = require('./stringifyTableData');
22
23 var _stringifyTableData2 = _interopRequireDefault(_stringifyTableData);
24
25 var _truncateTableData = require('./truncateTableData');
26
27 var _truncateTableData2 = _interopRequireDefault(_truncateTableData);
28
29 var _mapDataUsingRowHeightIndex = require('./mapDataUsingRowHeightIndex');
30
31 var _mapDataUsingRowHeightIndex2 = _interopRequireDefault(_mapDataUsingRowHeightIndex);
32
33 var _alignTableData = require('./alignTableData');
34
35 var _alignTableData2 = _interopRequireDefault(_alignTableData);
36
37 var _padTableData = require('./padTableData');
38
39 var _padTableData2 = _interopRequireDefault(_padTableData);
40
41 var _calculateRowHeightIndex = require('./calculateRowHeightIndex');
42
43 var _calculateRowHeightIndex2 = _interopRequireDefault(_calculateRowHeightIndex);
44
45 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
46
47 /**
48  * @param {Array} data
49  * @param {Object} config
50  * @returns {Array}
51  */
52 const prepareData = (data, config) => {
53   let rows;
54
55   rows = (0, _stringifyTableData2.default)(data);
56
57   rows = (0, _truncateTableData2.default)(data, config);
58
59   const rowHeightIndex = (0, _calculateRowHeightIndex2.default)(rows, config);
60
61   rows = (0, _mapDataUsingRowHeightIndex2.default)(rows, rowHeightIndex, config);
62   rows = (0, _alignTableData2.default)(rows, config);
63   rows = (0, _padTableData2.default)(rows, config);
64
65   return rows;
66 };
67
68 /**
69  * @param {string[]} row
70  * @param {number[]} columnWidthIndex
71  * @param {Object} config
72  * @returns {undefined}
73  */
74 const create = (row, columnWidthIndex, config) => {
75   const rows = prepareData([row], config);
76
77   const body = rows.map(literalRow => {
78     return (0, _drawRow2.default)(literalRow, config.border);
79   }).join('');
80
81   let output;
82
83   output = '';
84
85   output += (0, _drawBorder.drawBorderTop)(columnWidthIndex, config.border);
86   output += body;
87   output += (0, _drawBorder.drawBorderBottom)(columnWidthIndex, config.border);
88
89   output = _lodash2.default.trimEnd(output);
90
91   process.stdout.write(output);
92 };
93
94 /**
95  * @param {string[]} row
96  * @param {number[]} columnWidthIndex
97  * @param {Object} config
98  * @returns {undefined}
99  */
100 const append = (row, columnWidthIndex, config) => {
101   const rows = prepareData([row], config);
102
103   const body = rows.map(literalRow => {
104     return (0, _drawRow2.default)(literalRow, config.border);
105   }).join('');
106
107   let output;
108
109   output = '\r\u001B[K';
110
111   output += (0, _drawBorder.drawBorderJoin)(columnWidthIndex, config.border);
112   output += body;
113   output += (0, _drawBorder.drawBorderBottom)(columnWidthIndex, config.border);
114
115   output = _lodash2.default.trimEnd(output);
116
117   process.stdout.write(output);
118 };
119
120 /**
121  * @param {Object} userConfig
122  * @returns {Object}
123  */
124
125 exports.default = function () {
126   let userConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
127
128   const config = (0, _makeStreamConfig2.default)(userConfig);
129
130   const columnWidthIndex = _lodash2.default.mapValues(config.columns, column => {
131     return column.width + column.paddingLeft + column.paddingRight;
132   });
133
134   let empty;
135
136   empty = true;
137
138   return {
139     /**
140      * @param {string[]} row
141      * @returns {undefined}
142      */
143     write: row => {
144       if (row.length !== config.columnCount) {
145         throw new Error('Row cell count does not match the config.columnCount.');
146       }
147
148       if (empty) {
149         empty = false;
150
151         return create(row, columnWidthIndex, config);
152       } else {
153         return append(row, columnWidthIndex, config);
154       }
155     }
156   };
157 };