fix: clarify auth order exclusions

This commit is contained in:
Peter Steinberger
2026-01-24 01:17:58 +00:00
parent 8effb557d5
commit 81535d512a
4 changed files with 101 additions and 2 deletions

View File

@@ -85,6 +85,31 @@ describe("renderTable", () => {
}
});
it("resets ANSI styling on wrapped lines", () => {
const reset = "\x1b[0m";
const out = renderTable({
width: 24,
columns: [
{ key: "K", header: "K", minWidth: 3 },
{ key: "V", header: "V", flex: true, minWidth: 10 },
],
rows: [
{
K: "X",
V: `\x1b[31m${"a".repeat(80)}${reset}`,
},
],
});
const lines = out.split("\n").filter((line) => line.includes("a"));
for (const line of lines) {
const resetIndex = line.lastIndexOf(reset);
const lastSep = line.lastIndexOf("│");
expect(resetIndex).toBeGreaterThan(-1);
expect(lastSep).toBeGreaterThan(resetIndex);
}
});
it("respects explicit newlines in cell values", () => {
const out = renderTable({
width: 48,

View File

@@ -91,6 +91,27 @@ function wrapLine(text: string, width: number): string[] {
i += ch.length;
}
const firstCharIndex = tokens.findIndex((t) => t.kind === "char");
if (firstCharIndex < 0) return [text];
let lastCharIndex = -1;
for (let i = tokens.length - 1; i >= 0; i -= 1) {
if (tokens[i]?.kind === "char") {
lastCharIndex = i;
break;
}
}
const prefixAnsi = tokens
.slice(0, firstCharIndex)
.filter((t) => t.kind === "ansi")
.map((t) => t.value)
.join("");
const suffixAnsi = tokens
.slice(lastCharIndex + 1)
.filter((t) => t.kind === "ansi")
.map((t) => t.value)
.join("");
const coreTokens = tokens.slice(firstCharIndex, lastCharIndex + 1);
const lines: string[] = [];
const isBreakChar = (ch: string) =>
ch === " " || ch === "\t" || ch === "/" || ch === "-" || ch === "_" || ch === ".";
@@ -136,7 +157,7 @@ function wrapLine(text: string, width: number): string[] {
lastBreakIndex = null;
};
for (const token of tokens) {
for (const token of coreTokens) {
if (token.kind === "ansi") {
buf.push(token);
continue;
@@ -162,7 +183,12 @@ function wrapLine(text: string, width: number): string[] {
}
flushAt(buf.length);
return lines.length ? lines : [""];
if (!lines.length) return [""];
if (!prefixAnsi && !suffixAnsi) return lines;
return lines.map((line) => {
if (!line) return line;
return `${prefixAnsi}${line}${suffixAnsi}`;
});
}
function normalizeWidth(n: number | undefined): number | undefined {