console-formatters.js
1 "use strict"; 2 Object.defineProperty(exports, "__esModule", { value: true }); 3 exports.formatAsBanner = void 0; 4 const colors = require("colors/safe"); 5 /** 6 * Returns a set of strings when printed on the console produces a banner msg. The message is in the following format - 7 * ******************** 8 * *** msg line x *** 9 * *** msg line xyz *** 10 * ******************** 11 * 12 * Spec: 13 * - The width of every line is equal, dictated by the longest message string 14 * - The first and last lines are '*'s for the full length of the line 15 * - Each line in between is prepended with '*** ' and appended with ' ***' 16 * - The text is indented left, i.e. whitespace is right-padded when the length is shorter than the longest. 17 * 18 * @param msgs array of strings containing the message lines to be printed in the banner. Returns empty string if array 19 * is empty. 20 * @returns array of strings containing the message formatted as a banner 21 */ 22 function formatAsBanner(msgs) { 23 const printLen = (str) => colors.strip(str).length; 24 if (msgs.length === 0) { 25 return []; 26 } 27 const leftPad = '*** '; 28 const rightPad = ' ***'; 29 const bannerWidth = printLen(leftPad) + printLen(rightPad) + 30 msgs.reduce((acc, msg) => Math.max(acc, printLen(msg)), 0); 31 const bannerLines = []; 32 bannerLines.push('*'.repeat(bannerWidth)); 33 // Improvement: If any 'msg' is wider than the terminal width, wrap message across lines. 34 msgs.forEach((msg) => { 35 const padding = ' '.repeat(bannerWidth - (printLen(msg) + printLen(leftPad) + printLen(rightPad))); 36 bannerLines.push(''.concat(leftPad, msg, padding, rightPad)); 37 }); 38 bannerLines.push('*'.repeat(bannerWidth)); 39 return bannerLines; 40 } 41 exports.formatAsBanner = formatAsBanner; 42 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS1mb3JtYXR0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uc29sZS1mb3JtYXR0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxJQUFjO0lBQzNDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUUzRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3RCxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7SUFDakMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFMUMseUZBQXlGO0lBQ3pGLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNuQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDLENBQUMsQ0FBQztJQUVILFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUF2QkQsd0NBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29sb3JzIGZyb20gJ2NvbG9ycy9zYWZlJztcblxuLyoqXG4gKiBSZXR1cm5zIGEgc2V0IG9mIHN0cmluZ3Mgd2hlbiBwcmludGVkIG9uIHRoZSBjb25zb2xlIHByb2R1Y2VzIGEgYmFubmVyIG1zZy4gVGhlIG1lc3NhZ2UgaXMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQgLVxuICogKioqKioqKioqKioqKioqKioqKipcbiAqICoqKiBtc2cgbGluZSB4ICAgKioqXG4gKiAqKiogbXNnIGxpbmUgeHl6ICoqKlxuICogKioqKioqKioqKioqKioqKioqKipcbiAqXG4gKiBTcGVjOlxuICogLSBUaGUgd2lkdGggb2YgZXZlcnkgbGluZSBpcyBlcXVhbCwgZGljdGF0ZWQgYnkgdGhlIGxvbmdlc3QgbWVzc2FnZSBzdHJpbmdcbiAqIC0gVGhlIGZpcnN0IGFuZCBsYXN0IGxpbmVzIGFyZSAnKidzIGZvciB0aGUgZnVsbCBsZW5ndGggb2YgdGhlIGxpbmVcbiAqIC0gRWFjaCBsaW5lIGluIGJldHdlZW4gaXMgcHJlcGVuZGVkIHdpdGggJyoqKiAnIGFuZCBhcHBlbmRlZCB3aXRoICcgKioqJ1xuICogLSBUaGUgdGV4dCBpcyBpbmRlbnRlZCBsZWZ0LCBpLmUuIHdoaXRlc3BhY2UgaXMgcmlnaHQtcGFkZGVkIHdoZW4gdGhlIGxlbmd0aCBpcyBzaG9ydGVyIHRoYW4gdGhlIGxvbmdlc3QuXG4gKlxuICogQHBhcmFtIG1zZ3MgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBtZXNzYWdlIGxpbmVzIHRvIGJlIHByaW50ZWQgaW4gdGhlIGJhbm5lci4gUmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgYXJyYXlcbiAqIGlzIGVtcHR5LlxuICogQHJldHVybnMgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBtZXNzYWdlIGZvcm1hdHRlZCBhcyBhIGJhbm5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QXNCYW5uZXIobXNnczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHByaW50TGVuID0gKHN0cjogc3RyaW5nKSA9PiBjb2xvcnMuc3RyaXAoc3RyKS5sZW5ndGg7XG5cbiAgaWYgKG1zZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGVmdFBhZCA9ICcqKiogJztcbiAgY29uc3QgcmlnaHRQYWQgPSAnICoqKic7XG4gIGNvbnN0IGJhbm5lcldpZHRoID0gcHJpbnRMZW4obGVmdFBhZCkgKyBwcmludExlbihyaWdodFBhZCkgK1xuICAgIG1zZ3MucmVkdWNlKChhY2MsIG1zZykgPT4gTWF0aC5tYXgoYWNjLCBwcmludExlbihtc2cpKSwgMCk7XG5cbiAgY29uc3QgYmFubmVyTGluZXM6IHN0cmluZ1tdID0gW107XG4gIGJhbm5lckxpbmVzLnB1c2goJyonLnJlcGVhdChiYW5uZXJXaWR0aCkpO1xuXG4gIC8vIEltcHJvdmVtZW50OiBJZiBhbnkgJ21zZycgaXMgd2lkZXIgdGhhbiB0aGUgdGVybWluYWwgd2lkdGgsIHdyYXAgbWVzc2FnZSBhY3Jvc3MgbGluZXMuXG4gIG1zZ3MuZm9yRWFjaCgobXNnKSA9PiB7XG4gICAgY29uc3QgcGFkZGluZyA9ICcgJy5yZXBlYXQoYmFubmVyV2lkdGggLSAocHJpbnRMZW4obXNnKSArIHByaW50TGVuKGxlZnRQYWQpICsgcHJpbnRMZW4ocmlnaHRQYWQpKSk7XG4gICAgYmFubmVyTGluZXMucHVzaCgnJy5jb25jYXQobGVmdFBhZCwgbXNnLCBwYWRkaW5nLCByaWdodFBhZCkpO1xuICB9KTtcblxuICBiYW5uZXJMaW5lcy5wdXNoKCcqJy5yZXBlYXQoYmFubmVyV2lkdGgpKTtcbiAgcmV0dXJuIGJhbm5lckxpbmVzO1xufVxuIl19