alignString.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.alignString = void 0; 7 const string_width_1 = __importDefault(require("string-width")); 8 const utils_1 = require("./utils"); 9 const alignLeft = (subject, width) => { 10 return subject + ' '.repeat(width); 11 }; 12 const alignRight = (subject, width) => { 13 return ' '.repeat(width) + subject; 14 }; 15 const alignCenter = (subject, width) => { 16 return ' '.repeat(Math.floor(width / 2)) + subject + ' '.repeat(Math.ceil(width / 2)); 17 }; 18 const alignJustify = (subject, width) => { 19 const spaceSequenceCount = utils_1.countSpaceSequence(subject); 20 if (spaceSequenceCount === 0) { 21 return alignLeft(subject, width); 22 } 23 const addingSpaces = utils_1.distributeUnevenly(width, spaceSequenceCount); 24 if (Math.max(...addingSpaces) > 3) { 25 return alignLeft(subject, width); 26 } 27 let spaceSequenceIndex = 0; 28 return subject.replace(/\s+/g, (groupSpace) => { 29 return groupSpace + ' '.repeat(addingSpaces[spaceSequenceIndex++]); 30 }); 31 }; 32 /** 33 * Pads a string to the left and/or right to position the subject 34 * text in a desired alignment within a container. 35 */ 36 const alignString = (subject, containerWidth, alignment) => { 37 const subjectWidth = string_width_1.default(subject); 38 if (subjectWidth === containerWidth) { 39 return subject; 40 } 41 if (subjectWidth > containerWidth) { 42 throw new Error('Subject parameter value width cannot be greater than the container width.'); 43 } 44 if (subjectWidth === 0) { 45 return ' '.repeat(containerWidth); 46 } 47 const availableWidth = containerWidth - subjectWidth; 48 if (alignment === 'left') { 49 return alignLeft(subject, availableWidth); 50 } 51 if (alignment === 'right') { 52 return alignRight(subject, availableWidth); 53 } 54 if (alignment === 'justify') { 55 return alignJustify(subject, availableWidth); 56 } 57 return alignCenter(subject, availableWidth); 58 }; 59 exports.alignString = alignString;