'a'
mh-two-thousand-and-two
2024-04-12 44d2c92345cd156a59fc327b3060292a282d2893
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
var each = require('./each');
var strWidth = require('./strWidth');
var map = require('./map');
var repeat = require('./repeat');
var cloneDeep = require('./cloneDeep');
exports = function(rows) {
    rows = cloneDeep(rows);
    var options = {
        border: defBorder
    };
    options.columns = getColumns(rows);
    padData(rows, options);
    return render(rows, options);
};
function padData(rows, options) {
    var columnCount = options.columns.length;
    for (var i = 0, len = rows.length; i < len; i++) {
        while (rows[i].length < columnCount) {
            rows[i].push('');
        }
    }
    return loopData(rows, function(data, row, column) {
        var _options$columns$colu = options.columns[column],
            paddingLeft = _options$columns$colu.paddingLeft,
            width = _options$columns$colu.width,
            paddingRight = _options$columns$colu.paddingRight;
        return (
            repeat(' ', paddingLeft) +
            data +
            repeat(' ', width - strWidth(data) - paddingRight)
        );
    });
}
function loopData(rows, handler) {
    for (var i = 0, len = rows.length; i < len; i++) {
        var row = rows[i];
        for (var j = 0, _len = row.length; j < _len; j++) {
            var data = handler(row[j], i, j);
            if (data) {
                row[j] = data;
            }
        }
    }
}
function getColumns(rows) {
    var columns = [];
    var paddingLeft = 1;
    var paddingRight = 1;
    loopData(rows, function(data, row, column) {
        columns[column] = columns[column] || {
            width: paddingLeft + paddingRight,
            paddingLeft: paddingLeft,
            paddingRight: paddingRight
        };
        var width = strWidth(data) + paddingLeft + paddingRight;
        if (width > columns[column].width) {
            columns[column].width = width;
        }
    });
    return columns;
}
function render(rows, options) {
    var ret = '';
    ret += renderBorder('top', options);
    each(rows, function(row, idx) {
        ret += renderRow(row, options);
        if (idx === rows.length - 1) {
            ret += renderBorder('bottom', options);
        } else {
            ret += renderBorder('join', options);
        }
    });
    return ret;
}
function renderRow(columns, options) {
    var border = options.border;
    return (
        border.bodyLeft +
        columns.join(border.bodyJoin) +
        border.bodyRight +
        '\n'
    );
}
function renderBorder(type, options) {
    var border = options.border,
        columns = options.columns;
    var left = border[type + 'Left'];
    var right = border[type + 'Right'];
    var body = border[type + 'Body'];
    var join = border[type + 'Join'];
    var ret = map(columns, function(column) {
        return repeat(body, column.width);
    }).join(join);
    ret = left + ret + right;
    if (type !== 'bottom') {
        ret += '\n';
    }
    return ret;
}
var defBorder = {
    topBody: '─',
    topJoin: '┬',
    topLeft: '┌',
    topRight: '┐',
    bottomBody: '─',
    bottomJoin: '┴',
    bottomLeft: '└',
    bottomRight: '┘',
    bodyLeft: '│',
    bodyRight: '│',
    bodyJoin: '│',
    joinBody: '─',
    joinLeft: '├',
    joinRight: '┤',
    joinJoin: '┼'
};
 
module.exports = exports;