diff --git a/packages/utils/CHANGELOG.json b/packages/utils/CHANGELOG.json index 026523a58d..a3bf293602 100644 --- a/packages/utils/CHANGELOG.json +++ b/packages/utils/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "4.3.0", + "changes": [ + { + "note": "Add `logUtils.table` and `logUtils.header`", + "pr": "TODO" + } + ] + }, { "version": "4.2.0", "changes": [ @@ -477,4 +486,4 @@ ], "timestamp": 1516114800 } -] +] \ No newline at end of file diff --git a/packages/utils/src/log_utils.ts b/packages/utils/src/log_utils.ts index 6d9996c679..013a745b8e 100644 --- a/packages/utils/src/log_utils.ts +++ b/packages/utils/src/log_utils.ts @@ -1,12 +1,29 @@ import chalk from 'chalk'; +import * as _ from 'lodash'; + +const DEFAULT_TERMINAL_WIDTH = 80; +const TERMINAL_WIDTH = process.stdout.columns || DEFAULT_TERMINAL_WIDTH; export const logUtils = { log(...args: any[]): void { console.log(...args); // tslint:disable-line:no-console }, + header(text: string, padStr: string = '='): void { + const padLength = TERMINAL_WIDTH - text.length; + const padLengthEnd = (padLength + 1) / 2; + const leftPadded = text.padStart(TERMINAL_WIDTH - padLengthEnd, padStr); + const padded = leftPadded.padEnd(TERMINAL_WIDTH, padStr); + console.log(padded); // tslint:disable-line:no-console + }, warn(...args: any[]): void { console.warn(...args); // tslint:disable-line:no-console }, + table(columnarData: { [rowName: string]: any }): void { + const formattedColumnarData = _.mapValues(columnarData, (columnOrColumns: any, _rowName: string) => + _.isNumber(columnOrColumns) ? columnOrColumns.toLocaleString() : columnOrColumns, + ); + console.table(formattedColumnarData); // tslint:disable-line:no-console + }, logWithTime(arg: string): void { logUtils.log(`[${chalk.gray(new Date().toLocaleTimeString())}] ${arg}`); },