wrapWord.js
1 "use strict"; 2 var __importDefault = (this && this.__importDefault) || function (mod) { 3 return (mod && mod.__esModule) ? mod : { "default": mod }; 4 }; 5 Object.defineProperty(exports, "__esModule", { value: true }); 6 exports.wrapWord = void 0; 7 const slice_ansi_1 = __importDefault(require("slice-ansi")); 8 const strip_ansi_1 = __importDefault(require("strip-ansi")); 9 const calculateStringLengths = (input, size) => { 10 let subject = strip_ansi_1.default(input); 11 const chunks = []; 12 // https://regex101.com/r/gY5kZ1/1 13 const re = new RegExp('(^.{1,' + String(size) + '}(\\s+|$))|(^.{1,' + String(size - 1) + '}(\\\\|/|_|\\.|,|;|-))'); 14 do { 15 let chunk; 16 const match = re.exec(subject); 17 if (match) { 18 chunk = match[0]; 19 subject = subject.slice(chunk.length); 20 const trimmedLength = chunk.trim().length; 21 const offset = chunk.length - trimmedLength; 22 chunks.push([trimmedLength, offset]); 23 } 24 else { 25 chunk = subject.slice(0, size); 26 subject = subject.slice(size); 27 chunks.push([chunk.length, 0]); 28 } 29 } while (subject.length); 30 return chunks; 31 }; 32 const wrapWord = (input, size) => { 33 const result = []; 34 let startIndex = 0; 35 calculateStringLengths(input, size).forEach(([length, offset]) => { 36 result.push(slice_ansi_1.default(input, startIndex, startIndex + length)); 37 startIndex += length + offset; 38 }); 39 return result; 40 }; 41 exports.wrapWord = wrapWord;