UNPKG

dressed

Version:

A sleek, serverless-ready Discord bot framework.

48 lines 2.03 kB
/** Log a table of values with titles */ export default function logTree(...titles) { const cols = titles.map((t) => [`\x1b[4m${t}\x1b[24m`]); const asides = {}; const chopped = new Set(); return { push(...v) { var _a; for (let i = 0; i < v.length; ++i) { (_a = cols[i]) === null || _a === void 0 ? void 0 : _a.push(v[i]); } }, aside(v) { var _a; const i = cols[0].length - 1; (_a = asides[i]) !== null && _a !== void 0 ? _a : (asides[i] = []); asides[i].push(v); }, chop: () => chopped.add(cols[0].length - 1), log() { var _a; const widths = cols.map((col) => Math.max(...col.map((s) => removeAnsiLen(s)))); const rowCount = cols[0].length; const lines = []; for (let i = 0; i < rowCount; ++i) { const row = cols .map((col, j) => { var _a; const s = (_a = col[i]) !== null && _a !== void 0 ? _a : ""; const w = widths[j]; if (j === cols.length - 1 && cols.length !== 1) { return " ".repeat(pad(s, w)) + s; } else { return s + " ".repeat(pad(s, w)); } }) .join(" "); lines.push(`${i === 0 ? " " : i === 1 ? (rowCount === 2 ? "-" : "┌") : i === rowCount - 1 ? "└" : "├"} ${chopped.has(i) ? "\x1b[9m" : ""}${row}\x1b[0m`, ...((_a = asides[i]) !== null && _a !== void 0 ? _a : [])); } lines.concat("").map((l) => console.log(l)); }, }; } // biome-ignore lint/suspicious/noControlCharactersInRegex: We need a control char const removeAnsiLen = (s) => s.replace(/\x1b\[\d{1,2}m/g, "").length; const pad = (s, width) => Math.max(0, width - removeAnsiLen(s)); //# sourceMappingURL=log-tree.js.map