import chalk from 'chalk'; import { IBaseType, ILinkList, ITree, IBinaryTree } from '../../'; import { ICompareFn } from '../../common'; export enum Cable { H = '─', V = '│', LT = '╯', TL = '╯', RT = '╰', TR = '╰', LB = '╮', BL = '╮', RB = '╭', BR = '╭', MT = '┴', TM = '┴', MB = '┬', BM = '┬', LM = '┤', ML = '┤', RM = '├', MR = '├', MM = '┼', } export interface ILogTableSelect { row?: number; col?: number; cell?: [number, number]; color?: typeof chalk.BackgroundColor; } export interface ILogTableCol { key?: number | string; title?: number | string; } export interface ILogTableRow { key?: number | string; title?: number | string; } export type ILogData = | IBaseType // Base | ILogData[] // Table, BinaryTree, Tree | ILogData[][] // Table | ILinkList // Table | Set // Table | Map // Table | { [key: string]: ILogData } // Table | object // Table | ITree // Tree | IBinaryTree; // BinaryTree export interface ILogOptions { // 数据处理相关 // 是否是用数组表示的堆结构 isHeap?: true; // 是否是用数组表示的二叉树结构 isTree?: true; // 表格展示相关 // 是否显示列头(默认显示,但在表格宽度和高度都小于等于 5 时隐藏) showColHead?: boolean; // 是否显示行头(默认显示,但在表格宽度和高度都小于等于 5 时隐藏) showRowHead?: boolean; // 是否显示表格分割线(默认在不存在嵌套复杂结构时不显示) showDivider?: boolean; // 表格列头配置信息 cols?: ILogTableCol[]; // 表格行头配置信息 rows?: ILogTableRow[]; // 表格选择信息 select?: ILogTableSelect | ILogTableSelect[]; // 是否需要将表格沿着对角线翻转 flip?: true; // 表格中单元格左右的边距 margin?: number; // 表格中单元格上下的边距 vMargin?: number; // 表格中每个单元格需要执行的值转换 valueTransform?: (v: ILogData) => ILogData; // 表格输出开始的列索引 colStart?: number; // 表格输出结束的列索引 colEnd?: number; // 表格输出开始的行索引 rowStart?: number; // 表格输出结束的行索引 rowEnd?: number; // 表格行的排序 sort?: Array<{ key: number | string; compareFn: ICompareFn }>; } export interface ICharMatrix { v: string[]; w: number; h: number; c?: string | Array<[number, number, string]>; b?: typeof chalk.BackgroundColor; }