feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
import { theme, symbols } from './colors.ts';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Table column alignment options
|
|
|
|
|
*/
|
|
|
|
|
export type TColumnAlign = 'left' | 'right' | 'center';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Table column definition
|
|
|
|
|
*/
|
|
|
|
|
export interface ITableColumn {
|
|
|
|
|
/** Column header text */
|
|
|
|
|
header: string;
|
|
|
|
|
/** Column key in data object */
|
|
|
|
|
key: string;
|
|
|
|
|
/** Column alignment (default: left) */
|
|
|
|
|
align?: TColumnAlign;
|
|
|
|
|
/** Column width (auto-calculated if not specified) */
|
|
|
|
|
width?: number;
|
|
|
|
|
/** Color function to apply to cell values */
|
|
|
|
|
color?: (value: string) => string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Box style types with colors
|
|
|
|
|
*/
|
|
|
|
|
export type TBoxStyle = 'default' | 'success' | 'error' | 'warning' | 'info';
|
|
|
|
|
|
2025-03-26 22:19:24 +00:00
|
|
|
|
/**
|
|
|
|
|
* A simple logger class that provides consistent formatting for log messages
|
|
|
|
|
* including support for logboxes with title, lines, and closing
|
|
|
|
|
*/
|
|
|
|
|
export class Logger {
|
|
|
|
|
private currentBoxWidth: number | null = null;
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
private currentBoxStyle: TBoxStyle = 'default';
|
2025-03-26 22:28:38 +00:00
|
|
|
|
private static instance: Logger;
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
2025-03-28 16:19:43 +00:00
|
|
|
|
/** Default width to use when no width is specified */
|
|
|
|
|
private readonly DEFAULT_WIDTH = 60;
|
2025-03-26 22:19:24 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Creates a new Logger instance
|
|
|
|
|
*/
|
|
|
|
|
constructor() {
|
|
|
|
|
this.currentBoxWidth = null;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-26 22:28:38 +00:00
|
|
|
|
/**
|
|
|
|
|
* Get the singleton logger instance
|
|
|
|
|
* @returns The singleton logger instance
|
|
|
|
|
*/
|
|
|
|
|
public static getInstance(): Logger {
|
|
|
|
|
if (!Logger.instance) {
|
|
|
|
|
Logger.instance = new Logger();
|
|
|
|
|
}
|
|
|
|
|
return Logger.instance;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-26 22:19:24 +00:00
|
|
|
|
/**
|
|
|
|
|
* Log a message
|
|
|
|
|
* @param message Message to log
|
|
|
|
|
*/
|
|
|
|
|
public log(message: string): void {
|
|
|
|
|
console.log(message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
* Log an error message (red with ✗ symbol)
|
2025-03-26 22:19:24 +00:00
|
|
|
|
* @param message Error message to log
|
|
|
|
|
*/
|
|
|
|
|
public error(message: string): void {
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
console.error(`${symbols.error} ${theme.error(message)}`);
|
2025-03-26 22:19:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
* Log a warning message (yellow with ⚠ symbol)
|
2025-03-26 22:19:24 +00:00
|
|
|
|
* @param message Warning message to log
|
|
|
|
|
*/
|
|
|
|
|
public warn(message: string): void {
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
console.warn(`${symbols.warning} ${theme.warning(message)}`);
|
2025-03-26 22:19:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
* Log a success message (green with ✓ symbol)
|
2025-03-26 22:19:24 +00:00
|
|
|
|
* @param message Success message to log
|
|
|
|
|
*/
|
|
|
|
|
public success(message: string): void {
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
console.log(`${symbols.success} ${theme.success(message)}`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log an info message (cyan with ℹ symbol)
|
|
|
|
|
* @param message Info message to log
|
|
|
|
|
*/
|
|
|
|
|
public info(message: string): void {
|
|
|
|
|
console.log(`${symbols.info} ${theme.info(message)}`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log a dim/secondary message
|
|
|
|
|
* @param message Message to log in dim style
|
|
|
|
|
*/
|
|
|
|
|
public dim(message: string): void {
|
|
|
|
|
console.log(theme.dim(message));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log a highlighted/bold message
|
|
|
|
|
* @param message Message to highlight
|
|
|
|
|
*/
|
|
|
|
|
public highlight(message: string): void {
|
|
|
|
|
console.log(theme.highlight(message));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get color function for box based on style
|
|
|
|
|
*/
|
|
|
|
|
private getBoxColor(style: TBoxStyle): (text: string) => string {
|
|
|
|
|
switch (style) {
|
|
|
|
|
case 'success':
|
|
|
|
|
return theme.borderSuccess;
|
|
|
|
|
case 'error':
|
|
|
|
|
return theme.borderError;
|
|
|
|
|
case 'warning':
|
|
|
|
|
return theme.borderWarning;
|
|
|
|
|
case 'info':
|
|
|
|
|
return theme.borderInfo;
|
|
|
|
|
case 'default':
|
|
|
|
|
default:
|
|
|
|
|
return theme.borderDefault;
|
|
|
|
|
}
|
2025-03-26 22:19:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log a logbox title and set the current box width
|
|
|
|
|
* @param title Title of the logbox
|
2025-03-28 16:19:43 +00:00
|
|
|
|
* @param width Width of the logbox (including borders), defaults to DEFAULT_WIDTH
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
* @param style Box style for coloring (default, success, error, warning, info)
|
2025-03-26 22:19:24 +00:00
|
|
|
|
*/
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
public logBoxTitle(title: string, width?: number, style?: TBoxStyle): void {
|
2025-03-28 16:19:43 +00:00
|
|
|
|
this.currentBoxWidth = width || this.DEFAULT_WIDTH;
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
this.currentBoxStyle = style || 'default';
|
|
|
|
|
|
|
|
|
|
const colorFn = this.getBoxColor(this.currentBoxStyle);
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
2025-03-26 22:19:24 +00:00
|
|
|
|
// Create the title line with appropriate padding
|
|
|
|
|
const paddedTitle = ` ${title} `;
|
2025-03-28 16:19:43 +00:00
|
|
|
|
const remainingSpace = this.currentBoxWidth - 3 - paddedTitle.length;
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
2025-03-26 22:19:24 +00:00
|
|
|
|
// Title line: ┌─ Title ───┐
|
2025-03-28 16:19:43 +00:00
|
|
|
|
const titleLine = `┌─${paddedTitle}${'─'.repeat(Math.max(0, remainingSpace))}┐`;
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
console.log(colorFn(titleLine));
|
2025-03-26 22:19:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log a logbox line
|
|
|
|
|
* @param content Content of the line
|
2025-03-28 16:19:43 +00:00
|
|
|
|
* @param width Optional width override. If not provided, uses the current box width or DEFAULT_WIDTH.
|
2025-03-26 22:19:24 +00:00
|
|
|
|
*/
|
|
|
|
|
public logBoxLine(content: string, width?: number): void {
|
2025-03-28 16:19:43 +00:00
|
|
|
|
if (!this.currentBoxWidth && !width) {
|
|
|
|
|
// No current width and no width provided, use default width
|
|
|
|
|
this.logBoxTitle('', this.DEFAULT_WIDTH);
|
2025-03-26 22:19:24 +00:00
|
|
|
|
}
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
2025-03-28 16:19:43 +00:00
|
|
|
|
const boxWidth = width || this.currentBoxWidth || this.DEFAULT_WIDTH;
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
const colorFn = this.getBoxColor(this.currentBoxStyle);
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
// Calculate the available space for content (use visible length)
|
2025-03-26 22:19:24 +00:00
|
|
|
|
const availableSpace = boxWidth - 2; // Account for left and right borders
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
const visibleLen = this.visibleLength(content);
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
if (visibleLen <= availableSpace - 1) {
|
2025-03-26 22:19:24 +00:00
|
|
|
|
// If content fits with at least one space for the right border stripe
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
const padding = availableSpace - visibleLen - 1;
|
|
|
|
|
const line = `│ ${content}${' '.repeat(padding)}│`;
|
|
|
|
|
console.log(colorFn(line));
|
2025-03-26 22:19:24 +00:00
|
|
|
|
} else {
|
|
|
|
|
// Content is too long, let it flow out of boundaries.
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
const line = `│ ${content}`;
|
|
|
|
|
console.log(colorFn(line));
|
2025-03-26 22:19:24 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log a logbox end
|
2025-03-28 16:19:43 +00:00
|
|
|
|
* @param width Optional width override. If not provided, uses the current box width or DEFAULT_WIDTH.
|
2025-03-26 22:19:24 +00:00
|
|
|
|
*/
|
|
|
|
|
public logBoxEnd(width?: number): void {
|
2025-03-28 16:19:43 +00:00
|
|
|
|
const boxWidth = width || this.currentBoxWidth || this.DEFAULT_WIDTH;
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
const colorFn = this.getBoxColor(this.currentBoxStyle);
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
2025-03-26 22:19:24 +00:00
|
|
|
|
// Create the bottom border: └────────┘
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
const bottomLine = `└${'─'.repeat(boxWidth - 2)}┘`;
|
|
|
|
|
console.log(colorFn(bottomLine));
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
// Reset the current box width and style
|
2025-03-28 16:19:43 +00:00
|
|
|
|
this.currentBoxWidth = null;
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
this.currentBoxStyle = 'default';
|
2025-03-26 22:19:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log a complete logbox with title, content lines, and ending
|
|
|
|
|
* @param title Title of the logbox
|
|
|
|
|
* @param lines Array of content lines
|
2025-03-28 16:19:43 +00:00
|
|
|
|
* @param width Width of the logbox, defaults to DEFAULT_WIDTH
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
* @param style Box style for coloring
|
2025-03-26 22:19:24 +00:00
|
|
|
|
*/
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
public logBox(title: string, lines: string[], width?: number, style?: TBoxStyle): void {
|
|
|
|
|
this.logBoxTitle(title, width || this.DEFAULT_WIDTH, style);
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
2025-03-26 22:19:24 +00:00
|
|
|
|
for (const line of lines) {
|
|
|
|
|
this.logBoxLine(line);
|
|
|
|
|
}
|
2025-10-19 13:14:18 +00:00
|
|
|
|
|
2025-03-26 22:19:24 +00:00
|
|
|
|
this.logBoxEnd();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log a divider line
|
2025-03-28 16:19:43 +00:00
|
|
|
|
* @param width Width of the divider, defaults to DEFAULT_WIDTH
|
2025-03-26 22:19:24 +00:00
|
|
|
|
* @param character Character to use for the divider (default: ─)
|
|
|
|
|
*/
|
2025-03-28 16:19:43 +00:00
|
|
|
|
public logDivider(width?: number, character: string = '─'): void {
|
|
|
|
|
console.log(character.repeat(width || this.DEFAULT_WIDTH));
|
2025-03-26 22:19:24 +00:00
|
|
|
|
}
|
feat(cli): add beautiful colored output and fix daemon exit bug
Major improvements:
- Created color theme system (ts/colors.ts) with ANSI colors
- Enhanced logger with colors, table formatting, and styled boxes
- Fixed daemon exit bug - now stays running when no UPS configured
- Added config hot-reload with file watcher for live updates
- Beautified CLI help output with color-coded commands
- Added showcase test demonstrating all output features
- Fixed ANSI code handling for perfect table/box alignment
Features:
- Color-coded messages (success=green, error=red, warning=yellow, info=cyan)
- Status symbols (●○◐◯ for running/stopped/starting/unknown)
- Battery level colors (green>60%, yellow 30-60%, red<30%)
- Table formatting with auto-sizing and column alignment
- Styled boxes (success, error, warning, info styles)
- Hot-reload: daemon watches config file and reloads automatically
- Idle mode: daemon stays alive when no devices, checks periodically
Daemon improvements:
- No longer exits when no UPS devices configured
- Enters idle monitoring loop waiting for config
- File watcher detects config changes in real-time
- Auto-reloads and starts monitoring when devices added
- Logs warnings instead of errors for missing devices
Technical fixes:
- Strip ANSI codes when calculating text width for alignment
- Use visible length for padding calculations in tables and boxes
- Properly handle colored text in table cells and box lines
Breaking changes: None (backward compatible)
2025-10-19 15:08:30 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Strip ANSI color codes from string for accurate length calculation
|
|
|
|
|
*/
|
|
|
|
|
private stripAnsi(text: string): string {
|
|
|
|
|
// Remove ANSI escape codes
|
|
|
|
|
return text.replace(/\x1b\[[0-9;]*m/g, '');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get visible length of string (excluding ANSI codes)
|
|
|
|
|
*/
|
|
|
|
|
private visibleLength(text: string): number {
|
|
|
|
|
return this.stripAnsi(text).length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Align text within a column (handles ANSI color codes correctly)
|
|
|
|
|
*/
|
|
|
|
|
private alignText(text: string, width: number, align: TColumnAlign = 'left'): string {
|
|
|
|
|
const visibleLen = this.visibleLength(text);
|
|
|
|
|
|
|
|
|
|
if (visibleLen >= width) {
|
|
|
|
|
// Text is too long, truncate the visible part
|
|
|
|
|
const stripped = this.stripAnsi(text);
|
|
|
|
|
return stripped.substring(0, width);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const padding = width - visibleLen;
|
|
|
|
|
|
|
|
|
|
switch (align) {
|
|
|
|
|
case 'right':
|
|
|
|
|
return ' '.repeat(padding) + text;
|
|
|
|
|
case 'center': {
|
|
|
|
|
const leftPad = Math.floor(padding / 2);
|
|
|
|
|
const rightPad = padding - leftPad;
|
|
|
|
|
return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);
|
|
|
|
|
}
|
|
|
|
|
case 'left':
|
|
|
|
|
default:
|
|
|
|
|
return text + ' '.repeat(padding);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log a formatted table
|
|
|
|
|
* @param columns Column definitions
|
|
|
|
|
* @param rows Array of data objects
|
|
|
|
|
* @param title Optional table title
|
|
|
|
|
*/
|
|
|
|
|
public logTable(columns: ITableColumn[], rows: Record<string, string>[], title?: string): void {
|
|
|
|
|
if (rows.length === 0) {
|
|
|
|
|
this.dim('No data to display');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Calculate column widths
|
|
|
|
|
const columnWidths = columns.map((col) => {
|
|
|
|
|
if (col.width) return col.width;
|
|
|
|
|
|
|
|
|
|
// Auto-calculate width based on header and data (use visible length)
|
|
|
|
|
let maxWidth = this.visibleLength(col.header);
|
|
|
|
|
for (const row of rows) {
|
|
|
|
|
const value = String(row[col.key] || '');
|
|
|
|
|
maxWidth = Math.max(maxWidth, this.visibleLength(value));
|
|
|
|
|
}
|
|
|
|
|
return maxWidth;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Calculate total table width
|
|
|
|
|
const totalWidth = columnWidths.reduce((sum, w) => sum + w, 0) + (columns.length * 3) + 1;
|
|
|
|
|
|
|
|
|
|
// Print title if provided
|
|
|
|
|
if (title) {
|
|
|
|
|
this.logBoxTitle(title, totalWidth);
|
|
|
|
|
} else {
|
|
|
|
|
// Print top border
|
|
|
|
|
console.log('┌' + columnWidths.map((w) => '─'.repeat(w + 2)).join('┬') + '┐');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Print header row
|
|
|
|
|
const headerCells = columns.map((col, i) =>
|
|
|
|
|
theme.highlight(this.alignText(col.header, columnWidths[i], col.align))
|
|
|
|
|
);
|
|
|
|
|
console.log('│ ' + headerCells.join(' │ ') + ' │');
|
|
|
|
|
|
|
|
|
|
// Print separator
|
|
|
|
|
console.log('├' + columnWidths.map((w) => '─'.repeat(w + 2)).join('┼') + '┤');
|
|
|
|
|
|
|
|
|
|
// Print data rows
|
|
|
|
|
for (const row of rows) {
|
|
|
|
|
const cells = columns.map((col, i) => {
|
|
|
|
|
const value = String(row[col.key] || '');
|
|
|
|
|
const aligned = this.alignText(value, columnWidths[i], col.align);
|
|
|
|
|
return col.color ? col.color(aligned) : aligned;
|
|
|
|
|
});
|
|
|
|
|
console.log('│ ' + cells.join(' │ ') + ' │');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Print bottom border
|
|
|
|
|
console.log('└' + columnWidths.map((w) => '─'.repeat(w + 2)).join('┴') + '┘');
|
|
|
|
|
}
|
2025-03-26 22:28:38 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Export a singleton instance for easy use
|
2025-10-19 13:14:18 +00:00
|
|
|
|
export const logger = Logger.getInstance();
|