import cliWidth from 'cli-width'; | |
import wrapAnsi from 'wrap-ansi'; | |
import { readline } from './hook-engine.mjs'; | |
/** | |
* Force line returns at specific width. This function is ANSI code friendly and it'll | |
* ignore invisible codes during width calculation. | |
* @param {string} content | |
* @param {number} width | |
* @return {string} | |
*/ | |
export function breakLines(content, width) { | |
return content | |
.split('\n') | |
.flatMap((line) => wrapAnsi(line, width, { trim: false, hard: true }) | |
.split('\n') | |
.map((str) => str.trimEnd())) | |
.join('\n'); | |
} | |
/** | |
* Returns the width of the active readline, or 80 as default value. | |
* @returns {number} | |
*/ | |
export function readlineWidth() { | |
return cliWidth({ defaultWidth: 80, output: readline().output }); | |
} | |