vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
39 lines (38 loc) • 1.2 kB
JavaScript
export { trimWithAnsi };
export { trimWithAnsiTrailOnly };
import { assert } from './assert.js';
import { stripAnsi } from './colorsServer.js';
const whitespaceRegex = /(\s+)/; // Capturing parathesis so that split preserves separator
/* Same as trim() but works with ANSI escape codes */
function trimWithAnsi(str) {
str = trimWithAnsiHead(str);
str = trimWithAnsiTrailOnly(str);
return str;
}
function trimWithAnsiHead(str) {
return trim(str, false);
}
function trimWithAnsiTrailOnly(str) {
return trim(str, true);
}
function trim(str, trail) {
let parts = str.split(whitespaceRegex);
if (trail)
parts.reverse();
let visible = false;
parts = parts.map((line) => {
if (visible)
return line;
const lineTrimmed = line.trim();
const lineTrimmedAndStripped = stripAnsi(lineTrimmed);
assert(lineTrimmedAndStripped.trim() === lineTrimmedAndStripped);
if (lineTrimmedAndStripped !== '')
visible = true;
return lineTrimmed;
});
if (trail)
parts.reverse();
assert(str.split(whitespaceRegex).join('') === str);
const strTrimmed = parts.join('');
return strTrimmed;
}