dressed
Version:
A sleek, serverless-ready Discord bot framework.
48 lines • 2.03 kB
JavaScript
/** 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