/ cloudformation-templates / node_modules / aws-cdk / lib / util / console-formatters.js
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