-
-
Notifications
You must be signed in to change notification settings - Fork 77
/
table.ts
64 lines (54 loc) · 1.58 KB
/
table.ts
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
import {
alignTableData,
} from './alignTableData';
import {
calculateOutputColumnWidths,
} from './calculateOutputColumnWidths';
import {
calculateRowHeights,
} from './calculateRowHeights';
import {
drawTable,
} from './drawTable';
import {
injectHeaderConfig,
} from './injectHeaderConfig';
import {
makeTableConfig,
} from './makeTableConfig';
import {
mapDataUsingRowHeights,
} from './mapDataUsingRowHeights';
import {
padTableData,
} from './padTableData';
import {
stringifyTableData,
} from './stringifyTableData';
import {
truncateTableData,
} from './truncateTableData';
import type {
TableUserConfig,
} from './types/api';
import {
extractTruncates,
} from './utils';
import {
validateTableData,
} from './validateTableData';
export const table = (data: unknown[][], userConfig: TableUserConfig = {}): string => {
validateTableData(data);
let rows = stringifyTableData(data);
const [injectedRows, injectedSpanningCellConfig] = injectHeaderConfig(rows, userConfig);
const config = makeTableConfig(injectedRows, userConfig, injectedSpanningCellConfig);
rows = truncateTableData(injectedRows, extractTruncates(config));
const rowHeights = calculateRowHeights(rows, config);
config.spanningCellManager.setRowHeights(rowHeights);
config.spanningCellManager.setRowIndexMapping(rowHeights);
rows = mapDataUsingRowHeights(rows, rowHeights, config);
rows = alignTableData(rows, config);
rows = padTableData(rows, config);
const outputColumnWidths = calculateOutputColumnWidths(config);
return drawTable(rows, outputColumnWidths, rowHeights, config);
};