Console output utilities with colors, tables, spinners, and formatted messaging designed specifically for CLI interfaces and user interaction.
Core printing functions with semantic coloring and formatting.
/**
* Print informational message in default color
* @param message - Message to display
*/
info(message: any): void;
/**
* Print warning message in yellow
* @param message - Warning message to display
*/
warning(message: any): void;
/**
* Print success message in green
* @param message - Success message to display
*/
success(message: any): void;
/**
* Print highlighted message in cyan
* @param message - Message to highlight
*/
highlight(message: any): void;
/**
* Print muted message in grey
* @param message - Muted message to display
*/
muted(message: any): void;
/**
* Print error message in red
* @param message - Error message to display
*/
error(message: any): void;
/**
* Print debug information with optional title
* @param value - Value to debug print
* @param title - Optional title for debug output
*/
debug(value: any, title?: string): void;Basic Output Examples:
import { print } from "gluegun";
// Semantic messages
print.info("Processing files...");
print.success("✓ Build completed successfully");
print.warning("⚠ Config file not found, using defaults");
print.error("✗ Failed to connect to server");
print.highlight("Important: Review these changes");
print.muted("Debug: Internal state updated");
// Debug output
print.debug({ users: 42, active: true }, "App Stats");Functions for adding visual elements and spacing to CLI output.
/**
* Print a visual divider line
*/
divider(): void;
/**
* Print a newline character
*/
newline(): void;
/**
* Green checkmark symbol
*/
checkmark: string;
/**
* Red X mark symbol
*/
xmark: string;Formatting Examples:
import { print } from "gluegun";
print.info("Starting operations...");
print.divider();
print.success(`${print.checkmark} Step 1 completed`);
print.success(`${print.checkmark} Step 2 completed`);
print.error(`${print.xmark} Step 3 failed`);
print.newline();
print.info("Operations finished");Extended color functions for custom styling and theming.
/**
* Color system with all colors.js functions plus theme extensions
*/
colors: GluegunPrintColors;
interface GluegunPrintColors {
// Standard colors.js functions
red(text: string): string;
green(text: string): string;
yellow(text: string): string;
blue(text: string): string;
magenta(text: string): string;
cyan(text: string): string;
white(text: string): string;
gray(text: string): string;
grey(text: string): string;
// Text styles
bold(text: string): string;
dim(text: string): string;
italic(text: string): string;
underline(text: string): string;
strikethrough(text: string): string;
// Background colors
bgRed(text: string): string;
bgGreen(text: string): string;
bgYellow(text: string): string;
bgBlue(text: string): string;
bgMagenta(text: string): string;
bgCyan(text: string): string;
bgWhite(text: string): string;
// Gluegun theme extensions
muted(text: string): string;
highlight(text: string): string;
info(text: string): string;
warning(text: string): string;
success(text: string): string;
error(text: string): string;
}Color Examples:
import { print } from "gluegun";
// Direct color usage
console.log(print.colors.red("Error occurred"));
console.log(print.colors.green("Success!"));
console.log(print.colors.blue.bold("Important Notice"));
// Combined styling
const styled = print.colors.yellow.bold.underline("Highlighted Text");
console.log(styled);
// Theme colors
console.log(print.colors.success("Operation completed"));
console.log(print.colors.warning("Check configuration"));
console.log(print.colors.muted("Debug information"));Create formatted tables for displaying structured data in CLI output.
/**
* Print formatted table from 2D string array
* @param data - 2D array of strings representing table data
* @param options - Table formatting options
*/
table(data: string[][], options?: GluegunPrintTableOptions): void;
interface GluegunPrintTableOptions {
/** Table format style */
format?: 'markdown' | 'lean' | 'default';
/** Additional styling options */
style?: {
'padding-left'?: number;
'padding-right'?: number;
head?: string[];
border?: string[];
};
}Table Examples:
import { print } from "gluegun";
// Basic table
const data = [
["Name", "Age", "City"],
["Alice", "25", "New York"],
["Bob", "30", "Los Angeles"],
["Charlie", "28", "Chicago"]
];
print.table(data);
// Markdown format table
print.table(data, { format: 'markdown' });
// Styled table
print.table(data, {
format: 'default',
style: {
'padding-left': 2,
'padding-right': 2,
head: ['cyan', 'cyan', 'cyan'],
border: ['gray']
}
});Create animated spinners for long-running operations.
/**
* Create and control loading spinner
* @param options - Spinner text or configuration object
* @returns Spinner instance with control methods
*/
spin(options?: string | {
text?: string;
spinner?: string | object;
color?: string;
interval?: number;
}): {
start(): void;
stop(): void;
succeed(text?: string): void;
fail(text?: string): void;
warn(text?: string): void;
info(text?: string): void;
text: string;
color: string;
};Spinner Examples:
import { print } from "gluegun";
// Simple spinner
const spinner = print.spin("Loading...");
setTimeout(() => {
spinner.succeed("Loaded successfully!");
}, 2000);
// Configured spinner
const configSpinner = print.spin({
text: "Processing data...",
color: "cyan",
spinner: "dots"
});
// Simulate async operation
async function processData() {
configSpinner.start();
try {
await someAsyncOperation();
configSpinner.succeed("Data processed successfully");
} catch (error) {
configSpinner.fail(`Processing failed: ${error.message}`);
}
}Utilities for displaying CLI help information and command listings.
/**
* Print comprehensive help information for the CLI
* @param toolbox - Current toolbox context
*/
printHelp(toolbox: GluegunToolbox): void;
/**
* Print formatted list of available commands
* @param toolbox - Current toolbox context
* @param commandRoot - Optional command path filter
*/
printCommands(toolbox: GluegunToolbox, commandRoot?: string[]): void;Help Display Examples:
// In a help command
export = {
name: "help",
run: async (toolbox) => {
const { print } = toolbox;
// Print full CLI help
print.printHelp(toolbox);
// Or print just commands
print.printCommands(toolbox);
}
};Lower-level formatting utilities for custom table and layout needs.
/**
* Calculate column widths for table formatting
* @param cliTable - CLI table instance
* @returns Array of column widths
*/
findWidths(cliTable: any): number[];
/**
* Generate column header dividers
* @param cliTable - CLI table instance
* @param style - Style configuration
* @returns Array of divider strings
*/
columnHeaderDivider(cliTable: any, style: any): string[];
/**
* Print without theme formatting (deprecated)
* @param value - String to print
*/
fancy(value: string): void;interface GluegunPrint {
// Color system
colors: GluegunPrintColors;
// Symbols
checkmark: string;
xmark: string;
// Basic output
info(message: any): void;
warning(message: any): void;
success(message: any): void;
highlight(message: any): void;
muted(message: any): void;
error(message: any): void;
debug(value: any, title?: string): void;
// Formatting
divider(): void;
newline(): void;
fancy(value: string): void;
// Tables
table(data: string[][], options?: GluegunPrintTableOptions): void;
// Spinners
spin(options?: string | object): any;
// Help system
printHelp(toolbox: GluegunToolbox): void;
printCommands(toolbox: GluegunToolbox, commandRoot?: string[]): void;
// Advanced formatting
findWidths(cliTable: any): number[];
columnHeaderDivider(cliTable: any, style: any): string[];
}Complete Usage Example:
import { build } from "gluegun";
const cli = build("my-app")
.src(`${__dirname}/commands`)
.help()
.version()
.create();
// Example command using all print features
export = {
name: "deploy",
description: "Deploy application to server",
run: async (toolbox) => {
const { print, system } = toolbox;
print.info("Starting deployment process...");
print.divider();
const spinner = print.spin("Connecting to server...");
try {
// Simulate deployment steps
await system.run("npm run build");
spinner.succeed("Build completed");
const deploySpinner = print.spin("Uploading files...");
await system.run("rsync -av dist/ server:/var/www/");
deploySpinner.succeed("Files uploaded");
print.newline();
print.success(`${print.checkmark} Deployment completed successfully!`);
// Show deployment summary table
const summaryData = [
["Step", "Status", "Time"],
["Build", "✓ Success", "1.2s"],
["Upload", "✓ Success", "3.4s"],
["Total", "✓ Complete", "4.6s"]
];
print.table(summaryData, { format: 'default' });
} catch (error) {
spinner.fail("Deployment failed");
print.error(`${print.xmark} Error: ${error.message}`);
process.exit(1);
}
}
};