colored-table 0.1.0-alpha.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +3 -3
  2. package/README.md +3 -11
  3. package/cjs/build/buildBody.js +85 -0
  4. package/cjs/build/buildHeader.js +63 -0
  5. package/cjs/build/computerMaxLen.js +48 -0
  6. package/cjs/build/createPen.js +25 -0
  7. package/cjs/build/index.js +56 -0
  8. package/cjs/core.js +51 -0
  9. package/cjs/ele/rowEle.js +12 -0
  10. package/cjs/ele/tableEle.js +13 -0
  11. package/cjs/global.js +53 -0
  12. package/cjs/index.js +20 -0
  13. package/cjs/lines.js +19 -0
  14. package/cjs/parse/parse.js +44 -0
  15. package/cjs/parse/parseCell.js +27 -0
  16. package/cjs/parse/parseRow.js +35 -0
  17. package/cjs/proto/createHeaderProto.js +33 -0
  18. package/cjs/proto/setPro.js +74 -0
  19. package/es/build/buildBody.js +83 -0
  20. package/es/build/buildHeader.js +61 -0
  21. package/es/build/computerMaxLen.js +46 -0
  22. package/es/build/createPen.js +23 -0
  23. package/es/build/index.js +54 -0
  24. package/es/core.js +49 -0
  25. package/es/ele/rowEle.js +10 -0
  26. package/es/ele/tableEle.js +11 -0
  27. package/es/global.js +49 -0
  28. package/es/index.js +16 -0
  29. package/es/lines.js +17 -0
  30. package/es/parse/parse.js +42 -0
  31. package/es/parse/parseCell.js +25 -0
  32. package/es/parse/parseRow.js +32 -0
  33. package/es/proto/createHeaderProto.js +31 -0
  34. package/es/proto/setPro.js +72 -0
  35. package/{index.d.ts → es/src/index.d.ts} +3 -3
  36. package/package.json +37 -34
  37. package/index.cjs +0 -1
  38. package/index.mjs +0 -1
  39. /package/{src → es/src}/build/buildBody.d.ts +0 -0
  40. /package/{src → es/src}/build/buildHeader.d.ts +0 -0
  41. /package/{src → es/src}/build/computerMaxLen.d.ts +0 -0
  42. /package/{src → es/src}/build/createPen.d.ts +0 -0
  43. /package/{src → es/src}/build/index.d.ts +0 -0
  44. /package/{src → es/src}/core.d.ts +0 -0
  45. /package/{src → es/src}/ele/rowEle.d.ts +0 -0
  46. /package/{src → es/src}/ele/tableEle.d.ts +0 -0
  47. /package/{src → es/src}/global.d.ts +0 -0
  48. /package/{src → es/src}/lines.d.ts +0 -0
  49. /package/{src → es/src}/parse/parse.d.ts +0 -0
  50. /package/{src → es/src}/parse/parseCell.d.ts +0 -0
  51. /package/{src → es/src}/parse/parseRow.d.ts +0 -0
  52. /package/{src → es/src}/proto/createHeaderProto.d.ts +0 -0
  53. /package/{src → es/src}/proto/setPro.d.ts +0 -0
  54. /package/{src → es/src}/types.d.ts +0 -0
package/LICENSE CHANGED
@@ -1,7 +1,7 @@
1
1
  # MIT License
2
-
3
- Copyright (c) <2025> <earthnut.dev>
4
2
 
3
+ Copyright (c) <2025> <Mr.MudBean>
4
+
5
5
  Permission to use, copy, modify, and/or distribute this software for any
6
6
  purpose with or without fee is hereby granted, provided that the above
7
7
  copyright notice and this permission notice appear in all copies.
@@ -16,7 +16,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
16
 
17
17
  # MIT 许可证
18
18
 
19
- 版权所有 (c) [2025] [花生亻]
19
+ 版权所有 (c) [2025] [泥豆君]
20
20
 
21
21
  特此免费授予任何获得本软件及相关文档文件(以下简称“软件”)副本的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、再许可和/或出售该软件副本的权利,并允许向其提供该软件的人这样做,但须遵守以下条件:
22
22
 
package/README.md CHANGED
@@ -1,9 +1,5 @@
1
1
  # 彩色表格
2
2
 
3
- ~~一个在控制台构建表格的工具(自定义版 console.table )~~
4
-
5
- ~~本来想着写成在终端(node 环境)和控制台(浏览器环境)公用的,但是发现在浏览器环境表现不佳,且不同的浏览器环境渲染效果不同,还不如使用 `console.table`~~
6
-
7
3
  现在支持在浏览器环境打印彩色文本的表格,但是目前不支持自定义边框及长文本换行。因为在 `node` 使用的终端和浏览器的控制台渲染的方式不同,其核心代码也不尽相同。
8
4
 
9
5
  (目前的小问题就是当同行表情过多时会产生偏移)
@@ -12,10 +8,6 @@
12
8
 
13
9
  ```bash
14
10
  npm install --save colored-table
15
-
16
- # 亦可 (两包以后将同步版本发布)
17
-
18
- npm install --save @qqi/table
19
11
  ```
20
12
 
21
13
  ## 使用
@@ -49,11 +41,11 @@ table();
49
41
 
50
42
  在浏览器效果:
51
43
 
52
- [![浏览器表格](https://raw.githubusercontent.com/earthnutDev/qqi/main/media/浏览器表格.png)](https://github.com/earthnutDev/qqi/blob/main/media/浏览器表格.png)
44
+ [![浏览器表格](https://raw.githubusercontent.com/MrMudBean/qqi/main/media/浏览器表格.png)](https://github.com/MrMudBean/qqi/blob/main/media/浏览器表格.png)
53
45
 
54
46
  带表情的效果
55
47
 
56
- [![浏览器表格](https://raw.githubusercontent.com/earthnutDev/qqi/main/media/浏览器表格-with-emoji.png)](https://github.com/earthnutDev/qqi/blob/main/media/浏览器表格-with-emoji.png)
48
+ [![浏览器表格](https://raw.githubusercontent.com/MrMudBean/qqi/main/media/浏览器表格-with-emoji.png)](https://github.com/MrMudBean/qqi/blob/main/media/浏览器表格-with-emoji.png)
57
49
 
58
50
  ### setFontSize
59
51
 
@@ -70,4 +62,4 @@ table.setFontSize(16); // 渲染表格会在控制台显示更大
70
62
 
71
63
  ## 文档地址
72
64
 
73
- [colored-table](https://earthnut.dev/colored-table)
65
+ [colored-table](https://earthnut.dev/nmp/colored-table)
@@ -0,0 +1,85 @@
1
+ 'use strict';
2
+
3
+ var aTypeOfJs = require('a-type-of-js');
4
+ var createPen = require('./createPen.js');
5
+ var colorPen = require('color-pen');
6
+ var lines = require('../lines.js');
7
+ var _static = require('@color-pen/static');
8
+
9
+ /** 构建表头 */
10
+ function buildBody(body, lineList, hasHeader) {
11
+ /** 结果 */
12
+ let result = '';
13
+ /** 最大的下标 */
14
+ const lineMaxIndex = lineList.length - 1;
15
+ const { fine } = lines.lines;
16
+ lineList.forEach((e, i) => {
17
+ if (i === 0) {
18
+ result += _static.terminalResetStyle;
19
+ result += hasHeader ? fine.lc : fine.lt;
20
+ }
21
+ result += _static.terminalResetStyle;
22
+ result += fine.l.repeat(e + 2);
23
+ if (i === lineMaxIndex) {
24
+ result += _static.terminalResetStyle;
25
+ result += hasHeader ? fine.rc : fine.rt;
26
+ }
27
+ else {
28
+ result += _static.terminalResetStyle;
29
+ result += hasHeader ? fine.c : fine.ct;
30
+ }
31
+ });
32
+ result += '\n';
33
+ body.forEach((row, index) => {
34
+ /** 默认的画笔 (用于绘制空值时的表格) */
35
+ const defaultPen = createPen.createPen(row);
36
+ lineList.forEach((e, i) => {
37
+ result += _static.terminalResetStyle;
38
+ result += fine.v;
39
+ /** 当前的元素 */
40
+ const ele = row.data[i];
41
+ // 元素为空则输出默认的样式
42
+ if (aTypeOfJs.isUndefined(ele) || aTypeOfJs.isNull(ele)) {
43
+ result += defaultPen `${'\u2002'.repeat(e + 2)}`;
44
+ }
45
+ else {
46
+ /** 默认的画笔 (用于绘制空值时的表格) */
47
+ const cellPen = createPen.createPen(ele);
48
+ let str = ele.content?.toString() || '';
49
+ str = str
50
+ .replace(/[\n]/g, '\\n')
51
+ .replace(/\r/g, '\\r')
52
+ .replace(/\t/g, '\\t');
53
+ result += _static.terminalResetStyle;
54
+ result += cellPen `\u2002${colorPen.cutoffStringWithChar(str, e)}\u2002`;
55
+ }
56
+ if (i === lineMaxIndex) {
57
+ result += _static.terminalResetStyle;
58
+ result += fine.v;
59
+ }
60
+ });
61
+ result += '\n';
62
+ const isLastRow = body.length - 1 === index;
63
+ lineList.forEach((e, i) => {
64
+ if (i === 0) {
65
+ result += _static.terminalResetStyle;
66
+ result += isLastRow ? fine.lb : fine.lc;
67
+ }
68
+ result += _static.terminalResetStyle;
69
+ result += fine.l.repeat(e + 2);
70
+ if (i === lineMaxIndex) {
71
+ // 最后一行的最后一个
72
+ result += _static.terminalResetStyle;
73
+ result += isLastRow ? fine.rb : fine.rc;
74
+ }
75
+ else {
76
+ result += _static.terminalResetStyle;
77
+ result += isLastRow ? fine.cb : fine.c;
78
+ }
79
+ });
80
+ result += '\n';
81
+ });
82
+ return result;
83
+ }
84
+
85
+ exports.buildBody = buildBody;
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ var aTypeOfJs = require('a-type-of-js');
4
+ var createPen = require('./createPen.js');
5
+ var colorPen = require('color-pen');
6
+ var lines = require('../lines.js');
7
+ var _static = require('@color-pen/static');
8
+
9
+ /** 构建表头 */
10
+ function buildHeader(header, lineList) {
11
+ /** 结果 */
12
+ let result = '';
13
+ /** 最大的下标 */
14
+ const lineMaxIndex = lineList.length - 1;
15
+ const { fine } = lines.lines;
16
+ /** 默认的画笔 (用于绘制空值时的表格) */
17
+ const defaultPen = createPen.createPen(header);
18
+ lineList.forEach((e, i) => {
19
+ if (i === 0) {
20
+ result += fine.lt;
21
+ }
22
+ result += _static.terminalResetStyle;
23
+ result += fine.l.repeat(e + 2);
24
+ if (i === lineMaxIndex) {
25
+ result += _static.terminalResetStyle;
26
+ result += fine.rt;
27
+ }
28
+ else {
29
+ result += _static.terminalResetStyle;
30
+ result += fine.ct;
31
+ }
32
+ });
33
+ result += '\n';
34
+ lineList.forEach((e, i) => {
35
+ result += _static.terminalResetStyle;
36
+ result += fine.v;
37
+ /** 当前的元素 */
38
+ const ele = header.data[i];
39
+ // 元素为空则输出默认的样式
40
+ if (aTypeOfJs.isUndefined(ele) || aTypeOfJs.isNull(ele)) {
41
+ result += _static.terminalResetStyle;
42
+ result += defaultPen('\u2002'.repeat(e + 2));
43
+ }
44
+ else {
45
+ /** 默认的画笔 (用于绘制空值时的表格) */
46
+ const cellPen = createPen.createPen(ele);
47
+ let str = ele.content?.toString() ?? '';
48
+ str = str
49
+ .replace(/[\n]/g, '\\n')
50
+ .replace(/\r/g, '\\r')
51
+ .replace(/\t/g, '\\t');
52
+ result += _static.terminalResetStyle;
53
+ result += cellPen `\u2002${colorPen.cutoffStringWithChar(str, e)}\u2002`;
54
+ }
55
+ if (i === lineMaxIndex) {
56
+ result += fine.v;
57
+ }
58
+ });
59
+ result += '\n';
60
+ return result;
61
+ }
62
+
63
+ exports.buildHeader = buildHeader;
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ var colorPen = require('color-pen');
4
+ var global = require('../global.js');
5
+
6
+ /** 计算得到最大的值 */
7
+ function computerMaxLen(data) {
8
+ const result = [];
9
+ /** 计算 */
10
+ if (data.header) {
11
+ data.header.data.forEach((e, i) => {
12
+ const current = e?.content?.toString() ?? '';
13
+ result[i] = Math.max(result[i] ?? 0, global.browserEnv ? strInBrowserLength(current) : colorPen.strInTerminalLength(current));
14
+ });
15
+ }
16
+ if (data.body) {
17
+ data.body.forEach(row => {
18
+ row.data.forEach((e, i) => {
19
+ const current = e?.content?.toString() ?? '';
20
+ result[i] = Math.max(result[i] ?? 0, global.browserEnv
21
+ ? strInBrowserLength(current)
22
+ : colorPen.strInTerminalLength(current));
23
+ });
24
+ });
25
+ }
26
+ return result;
27
+ }
28
+ /** 字符串在浏览器环境的字符长度 */
29
+ function strInBrowserLength(str) {
30
+ /** */
31
+ let result = 0;
32
+ [...str].forEach(e => {
33
+ global.data.emojiRegex.lastIndex = 0;
34
+ global.data.chineseRegex.lastIndex = 0;
35
+ if (e.match(global.data.emojiRegex)) {
36
+ result += global.data.emojiLength;
37
+ }
38
+ else if (e.match(global.data.chineseRegex)) {
39
+ result += global.data.chineseLength;
40
+ }
41
+ else {
42
+ result++;
43
+ }
44
+ });
45
+ return Math.ceil(result);
46
+ }
47
+
48
+ exports.computerMaxLen = computerMaxLen;
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var aTypeOfJs = require('a-type-of-js');
4
+ var colorPen = require('color-pen');
5
+
6
+ /** 默认的笔 */
7
+ function createPen(options) {
8
+ let defaultPen = colorPen.pen;
9
+ if (aTypeOfJs.isType(options)) {
10
+ if (options.bold)
11
+ defaultPen = defaultPen.bold;
12
+ if (!aTypeOfJs.isBusinessEmptyString(options.bgColor) &&
13
+ !aTypeOfJs.isUndefined(options.bgColor))
14
+ defaultPen = defaultPen.bgColor(options.bgColor);
15
+ if (!aTypeOfJs.isBusinessEmptyString(options.color) && !aTypeOfJs.isUndefined(options.color))
16
+ defaultPen = defaultPen.color(options.color);
17
+ if (options.italic)
18
+ defaultPen = defaultPen.italic;
19
+ if (options.underline)
20
+ defaultPen = defaultPen.underline;
21
+ }
22
+ return defaultPen;
23
+ }
24
+
25
+ exports.createPen = createPen;
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ var colorPen = require('color-pen');
4
+ var buildBody = require('./buildBody.js');
5
+ var buildHeader = require('./buildHeader.js');
6
+ var computerMaxLen = require('./computerMaxLen.js');
7
+ var global = require('../global.js');
8
+
9
+ /** 渲染 */
10
+ function render(table, fontSize) {
11
+ /** 获取每一行最大宽度的元素的宽度组成的数组 */
12
+ const lineLen = computerMaxLen.computerMaxLen(table);
13
+ /** 是否有表头 */
14
+ let hasHeader = false;
15
+ let buildStr = '';
16
+ // 构建表头
17
+ if (table.header) {
18
+ hasHeader = true;
19
+ buildStr += buildHeader.buildHeader(table.header, lineLen);
20
+ }
21
+ buildStr += buildBody.buildBody(table.body, lineLen, hasHeader);
22
+ /** 彩色数组 */
23
+ const colorTextArr = colorPen.colorText(buildStr);
24
+ if (global.browserEnv) {
25
+ const strList = colorTextArr[0].split('%c');
26
+ const result = colorTextArr.map((e, i) => {
27
+ if (i > 0) {
28
+ /** 构建最小的单位的组 */
29
+ const doubleByteCharNumber = [...strList[i]].reduce((v, e) => {
30
+ if (colorPen.strInTerminalLength(e) > 1) {
31
+ global.data.emojiRegex.lastIndex = 0;
32
+ if (e.match(global.data.emojiRegex))
33
+ return v - (global.data.emojiLength - 2);
34
+ return v + (2 - global.data.chineseLength);
35
+ }
36
+ return v;
37
+ }, 0);
38
+ const newStr = e +
39
+ "font-family: Consolas,Monaco,Courier,'Courier New','等宽字体',monospace; font-size:" +
40
+ fontSize +
41
+ 'px;word-spacing:normal;padding:0;margin:0;padding-right:' +
42
+ doubleByteCharNumber * fontSize +
43
+ 'px';
44
+ return newStr;
45
+ }
46
+ return e;
47
+ });
48
+ /// 渲染表格
49
+ console.log(...result);
50
+ }
51
+ else {
52
+ console.log(...colorTextArr);
53
+ }
54
+ }
55
+
56
+ exports.render = render;
package/cjs/core.js ADDED
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ var createHeaderProto = require('./proto/createHeaderProto.js');
4
+ var parse = require('./parse/parse.js');
5
+ var parseRow = require('./parse/parseRow.js');
6
+ var index = require('./build/index.js');
7
+
8
+ /** 构建一个用于控制台的表格 */
9
+ function table(options) {
10
+ /** 构建初始化配置的表单 */
11
+ const [tableEle, tablePro] = parse.parse(options);
12
+ let fontSize = 12;
13
+ /**
14
+ * 核心技能
15
+ *
16
+ * 这里将构建表格
17
+ *
18
+ *
19
+ */
20
+ const core = () => index.render(tableEle, fontSize);
21
+ Object.setPrototypeOf(core, this);
22
+ Object.defineProperties(core, {
23
+ addRow: {
24
+ value: (data) => {
25
+ tableEle.body.push(parseRow.parseRow(data, tablePro));
26
+ return core;
27
+ },
28
+ configurable: false,
29
+ writable: false,
30
+ enumerable: false,
31
+ },
32
+ setHeader: {
33
+ value: (data) => {
34
+ tableEle.header = parseRow.parseRow(data, createHeaderProto.createHeaderProto(tablePro));
35
+ return core;
36
+ },
37
+ configurable: false,
38
+ writable: false,
39
+ enumerable: false,
40
+ },
41
+ setFontSize: {
42
+ value: (_fontSize) => {
43
+ fontSize = _fontSize;
44
+ return core;
45
+ },
46
+ },
47
+ });
48
+ return core;
49
+ }
50
+
51
+ exports.table = table;
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var aJsTools = require('a-js-tools');
4
+
5
+ /** 构建行 原始类 */
6
+ const RowEleClass = aJsTools.createConstructor(function (proto) {
7
+ this.data = [];
8
+ Object.setPrototypeOf(this, proto);
9
+ return this;
10
+ });
11
+
12
+ exports.RowEleClass = RowEleClass;
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var aJsTools = require('a-js-tools');
4
+
5
+ /** TableEleClass 类,原始构建类 */
6
+ const TableEleClass = aJsTools.createConstructor(function (proto) {
7
+ this.body = [];
8
+ this.header = undefined;
9
+ Object.setPrototypeOf(this, proto);
10
+ return this;
11
+ });
12
+
13
+ exports.TableEleClass = TableEleClass;
package/cjs/global.js ADDED
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var aJsTools = require('a-js-tools');
4
+
5
+ /** 浏览器环境 */
6
+ const browserEnv = !aJsTools.isNode();
7
+ const data = {
8
+ emojiLength: 2.08,
9
+ emojiRegex: /[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{1F900}-\u{1F9FF}]/gu,
10
+ chineseLength: 1.8,
11
+ /** 中文的正则 */
12
+ chineseRegex: /[\u4E00-\u9FFF]/g,
13
+ };
14
+ /** 全局的属性 */
15
+ class ColoredTableGlobalData {
16
+ align = 'left';
17
+ color = '';
18
+ bgColor = '';
19
+ bold = false;
20
+ underline = false;
21
+ italic = false;
22
+ border = {
23
+ left: {
24
+ color: undefined,
25
+ style: 'simple',
26
+ },
27
+ right: {
28
+ color: undefined,
29
+ style: 'simple',
30
+ },
31
+ top: {
32
+ color: undefined,
33
+ style: 'simple',
34
+ },
35
+ bottom: {
36
+ color: undefined,
37
+ style: 'simple',
38
+ },
39
+ };
40
+ }
41
+ /**
42
+ *
43
+ * 全局 table 配置
44
+ *
45
+ * 若没有其他特殊说名,将使用该数据作为最终的渲染依据
46
+ *
47
+ * 即为默认属性
48
+ */
49
+ const globalData = new ColoredTableGlobalData();
50
+
51
+ exports.browserEnv = browserEnv;
52
+ exports.data = data;
53
+ exports.globalData = globalData;
package/cjs/index.js ADDED
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var aJsTools = require('a-js-tools');
4
+ var core = require('./core.js');
5
+ var global = require('./global.js');
6
+
7
+ /**
8
+ *
9
+ * # 构建 DIY 表单
10
+ *
11
+ * 使用 console.table 构建的表单默认不支持彩色文本(目前我没找到支持的方法),遂花几日写该方法
12
+ *
13
+ *
14
+ *
15
+ */
16
+ const tableClass = aJsTools.createConstructor(core.table);
17
+
18
+ exports.ColoredTableGlobalData = global.globalData;
19
+ exports.ColoredTable = tableClass;
20
+ exports.Table = tableClass;
package/cjs/lines.js ADDED
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ const lines = {
4
+ fine: {
5
+ lt: '┌',
6
+ ct: '┬',
7
+ rt: '┐',
8
+ lc: '├',
9
+ c: '┼',
10
+ rc: '┤',
11
+ lb: '└',
12
+ cb: '┴',
13
+ rb: '┘',
14
+ l: '─',
15
+ v: '│',
16
+ },
17
+ };
18
+
19
+ exports.lines = lines;
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+
3
+ var aTypeOfJs = require('a-type-of-js');
4
+ var global = require('../global.js');
5
+ var setPro = require('../proto/setPro.js');
6
+ var tableEle = require('../ele/tableEle.js');
7
+ var parseRow = require('./parseRow.js');
8
+ var createHeaderProto = require('../proto/createHeaderProto.js');
9
+
10
+ /** 表格的 */
11
+ class TableProto {
12
+ }
13
+ /**
14
+ *
15
+ * 解析并转化(可选)参数为定值属性
16
+ *
17
+ */
18
+ function parse(options) {
19
+ // 初始化时可为空(undefined)
20
+ if (aTypeOfJs.isUndefined(options)) {
21
+ options = {};
22
+ }
23
+ // 数组参数转化为对象
24
+ if (aTypeOfJs.isArray(options)) {
25
+ options = {
26
+ body: options,
27
+ };
28
+ }
29
+ /** 表格的原型属性 */
30
+ const tableProto = new TableProto();
31
+ // 将在 options 上配置的属性配置到原型上
32
+ setPro.setPro(tableProto, options);
33
+ Object.setPrototypeOf(tableProto, global.globalData);
34
+ // 创建表格
35
+ const table = new tableEle.TableEleClass(tableProto);
36
+ // 解析表头
37
+ if (options.header)
38
+ table.header = parseRow.parseRow(options.header, createHeaderProto.createHeaderProto(tableProto));
39
+ /** 解析表干 */
40
+ options.body?.forEach(e => table.body.push(parseRow.parseRow(e, tableProto)));
41
+ return [table, tableProto];
42
+ }
43
+
44
+ exports.parse = parse;
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ var aTypeOfJs = require('a-type-of-js');
4
+ var setPro = require('../proto/setPro.js');
5
+
6
+ /** 解析为单元格 */
7
+ function parseCell(data, parentPro) {
8
+ // 空值直接返回空
9
+ if (aTypeOfJs.isUndefined(data)) {
10
+ return undefined;
11
+ }
12
+ // 直接值转化为对象值,方便后续统一处理
13
+ if (aTypeOfJs.isType(data, i => !aTypeOfJs.isPlainObject(i))) {
14
+ data = {
15
+ content: data,
16
+ };
17
+ }
18
+ /** 单元格的属性 */
19
+ const cell = {
20
+ content: data.content,
21
+ }; // 其他的属性在下面的 `setPro` 中进行给值
22
+ setPro.setPro(cell, data); // 构建属性的值
23
+ Object.setPrototypeOf(cell, parentPro);
24
+ return cell;
25
+ }
26
+
27
+ exports.parseCell = parseCell;
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var aTypeOfJs = require('a-type-of-js');
4
+ var rowEle = require('../ele/rowEle.js');
5
+ var setPro = require('../proto/setPro.js');
6
+ var parseCell = require('./parseCell.js');
7
+
8
+ /** 表格的行原型 */
9
+ class RowProto {
10
+ }
11
+ /**
12
+ * 解析行
13
+ *
14
+ * @param data 行数据
15
+ * @param parentPro 父级的属性参数
16
+ */
17
+ function parseRow(data, parentPro) {
18
+ // 数组转化为对,方便后续统一处理
19
+ if (aTypeOfJs.isArray(data))
20
+ data = { data };
21
+ /** 表格的原型属性 */
22
+ const rowProto = new RowProto();
23
+ setPro.setPro(rowProto, data); // 设置已配置的属性
24
+ /** 行数据 */
25
+ const result = new rowEle.RowEleClass(rowProto);
26
+ Object.setPrototypeOf(rowProto, parentPro);
27
+ data.data?.forEach(e => {
28
+ if (e)
29
+ result.data.push(parseCell.parseCell(e, rowProto));
30
+ });
31
+ return result;
32
+ }
33
+
34
+ exports.RowProto = RowProto;
35
+ exports.parseRow = parseRow;
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ var parseRow = require('../parse/parseRow.js');
4
+
5
+ /** 表头 */
6
+ class HeaderProto extends parseRow.RowProto {
7
+ border = {
8
+ left: {
9
+ style: 'bold',
10
+ color: undefined,
11
+ },
12
+ right: {
13
+ style: 'bold',
14
+ color: undefined,
15
+ },
16
+ top: {
17
+ style: 'bold',
18
+ color: undefined,
19
+ },
20
+ bottom: {
21
+ style: 'bold',
22
+ color: undefined,
23
+ },
24
+ };
25
+ }
26
+ /** 设置 header 的原型 */
27
+ function createHeaderProto(tableProto) {
28
+ const headerProto = new HeaderProto();
29
+ Object.setPrototypeOf(headerProto, tableProto);
30
+ return headerProto;
31
+ }
32
+
33
+ exports.createHeaderProto = createHeaderProto;