mirror of
https://github.com/tvytlx/ai-agent-deep-dive.git
synced 2026-04-03 07:34:50 +08:00
38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
import { ansiCodesToString } from "./ansiCodes.js";
|
|
import { diffAnsiCodes } from "./diff.js";
|
|
import { reduceAnsiCodesIncremental } from "./reduce.js";
|
|
export function styledCharsFromTokens(tokens) {
|
|
let codes = [];
|
|
const ret = [];
|
|
for (const token of tokens) {
|
|
if (token.type === "ansi") {
|
|
codes = reduceAnsiCodesIncremental(codes, [token]);
|
|
}
|
|
else if (token.type === "char") {
|
|
ret.push({
|
|
...token,
|
|
styles: [...codes],
|
|
});
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
export function styledCharsToString(chars) {
|
|
let ret = "";
|
|
for (let i = 0; i < chars.length; i++) {
|
|
const char = chars[i];
|
|
if (i === 0) {
|
|
ret += ansiCodesToString(char.styles);
|
|
}
|
|
else {
|
|
ret += ansiCodesToString(diffAnsiCodes(chars[i - 1].styles, char.styles));
|
|
}
|
|
ret += char.value;
|
|
// reset active styles at the end of the string
|
|
if (i === chars.length - 1) {
|
|
ret += ansiCodesToString(diffAnsiCodes(char.styles, []));
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
//# sourceMappingURL=styledChars.js.map
|