@entro314labs/ai-changelog-generator
Version:
AI-powered changelog generator with MCP server support - works with most providers, online and local models
211 lines (206 loc) • 8.2 kB
JavaScript
// This file is for demonstration purposes and is not needed for production
/**
* CLI Enhancement Demo
* Demonstrates the new CLI styling capabilities
*/
import process from 'node:process';
import colors from '../constants/colors.js';
import { cliUtils, EnhancedConsole, ProgressBar, SimpleSpinner, TaskList } from './cli-ui.js';
async function demoBasicStyling() {
EnhancedConsole.section('🎨 Basic Styling Demo');
// Status messages
EnhancedConsole.success('Operation completed successfully');
EnhancedConsole.error('Something went wrong');
EnhancedConsole.warn('This is a warning message');
EnhancedConsole.info("Here's some information");
EnhancedConsole.processing('Processing your request...');
EnhancedConsole.ai('AI analysis complete');
EnhancedConsole.metrics('Performance metrics updated');
EnhancedConsole.space();
}
async function demoSpinners() {
EnhancedConsole.section('⏳ Loading Indicators');
const spinner = new SimpleSpinner('Analyzing codebase...');
spinner.start();
await new Promise((resolve) => setTimeout(resolve, 2000));
spinner.succeed('Codebase analysis complete');
const spinner2 = new SimpleSpinner('Connecting to AI service...');
spinner2.start();
await new Promise((resolve) => setTimeout(resolve, 1500));
spinner2.warn('Connection timeout, using fallback');
EnhancedConsole.space();
}
async function demoProgressBar() {
EnhancedConsole.section('📊 Progress Indicators');
const progress = new ProgressBar(100, 50);
for (let i = 0; i <= 100; i += 5) {
progress.update(i, i < 30 ? 'Initializing...' : i < 70 ? 'Processing...' : 'Finalizing...');
await new Promise((resolve) => setTimeout(resolve, 50));
}
progress.finish('All files processed successfully');
EnhancedConsole.space();
}
async function demoTaskList() {
EnhancedConsole.section('✅ Task Management');
const tasks = new TaskList([
'Initialize project configuration',
'Analyze git repository',
'Process commit history',
'Generate changelog content',
'Validate output format',
]);
for (let i = 0; i < tasks.tasks.length; i++) {
tasks.start(i);
await new Promise((resolve) => setTimeout(resolve, 800));
if (i === 2) {
tasks.fail(i, 'Network timeout');
}
else {
tasks.complete(i, `${Math.floor(Math.random() * 500)}ms`);
}
}
tasks.summary();
EnhancedConsole.space();
}
async function demoBoxes() {
EnhancedConsole.section('📦 Boxed Content');
EnhancedConsole.box('System Information', `
Platform: ${process.platform}
Node.js: ${process.version}
Memory: ${Math.round(process.memoryUsage().rss / 1024 / 1024)}MB
Uptime: ${cliUtils.formatDuration(process.uptime() * 1000)}
`, { borderStyle: 'rounded', borderColor: 'success' });
EnhancedConsole.box('Configuration', `
${colors.label('AI Provider')}: ${colors.value('OpenAI GPT-5')}
${colors.label('Model')}: ${colors.value('gpt-5.2-pro')}
${colors.label('Max Tokens')}: ${colors.value('4096')}
${colors.label('Temperature')}: ${colors.value('0.7')}
`, { borderStyle: 'double', borderColor: 'info' });
EnhancedConsole.space();
}
async function demoTables() {
EnhancedConsole.section('📋 Data Tables');
const commitData = [
{ hash: 'a1b2c3d', type: 'feat', message: 'Add new authentication system', files: 12 },
{ hash: 'e4f5g6h', type: 'fix', message: 'Fix memory leak in parser', files: 3 },
{ hash: 'i7j8k9l', type: 'docs', message: 'Update API documentation', files: 8 },
{ hash: 'm1n2o3p', type: 'refactor', message: 'Restructure service layer', files: 15 },
];
EnhancedConsole.table(commitData, {
headers: ['Hash', 'Type', 'Message', 'Files'],
align: 'left',
});
EnhancedConsole.space();
}
async function demoFileList() {
EnhancedConsole.section('📁 File Listings');
const files = [
'src/components/Header.tsx',
'src/styles/main.scss',
'docs/README.md',
'package.json',
'config/database.yml',
'scripts/deploy.sql',
'tests/auth.test.js',
];
EnhancedConsole.fileList(files, 'Modified Files');
EnhancedConsole.space();
}
async function demoMetrics() {
EnhancedConsole.section('📈 Metrics Display');
const metrics = {
'Lines Added': colors.success('+247'),
'Lines Removed': colors.error('-89'),
'Files Changed': '12',
'Complexity Score': colors.warning('7.2/10'),
'Test Coverage': colors.success('94%'),
'Bundle Size': '2.3MB',
'Build Time': '12.4s',
};
EnhancedConsole.metrics(metrics);
EnhancedConsole.space();
}
async function demoSymbols() {
EnhancedConsole.section('🔤 Unicode Symbols');
console.log('Status symbols:');
console.log(` ${colors.success(colors.symbols.success)} Success`);
console.log(` ${colors.error(colors.symbols.error)} Error`);
console.log(` ${colors.warning(colors.symbols.warning)} Warning`);
console.log(` ${colors.info(colors.symbols.info)} Information`);
console.log(` ${colors.highlight(colors.symbols.refresh)} Processing`);
console.log('\nNavigation symbols:');
console.log(` ${colors.symbols.arrow} Next step`);
console.log(` ${colors.symbols.bullet} List item`);
console.log(` ${colors.symbols.play} Start process`);
console.log(` ${colors.symbols.stop} End process`);
console.log('\nMath & special:');
console.log(` ${colors.symbols.plus} Addition`);
console.log(` ${colors.symbols.minus} Subtraction`);
console.log(` ${colors.symbols.multiply} Multiplication`);
console.log(` ${colors.symbols.degree} Temperature: 23${colors.symbols.degree}C`);
console.log(` ${colors.symbols.micro} Microsecond: 150${colors.symbols.micro}s`);
EnhancedConsole.space();
}
async function runDemo() {
console.clear();
// Import gradient-string if available
let gradientTitle = '🚀 AI Changelog Generator';
try {
const { default: gradient } = await import('gradient-string');
gradientTitle = gradient(['#FF6B6B', '#4ECDC4', '#45B7D1'])(gradientTitle);
}
catch {
gradientTitle = colors.highlight(gradientTitle);
}
// Welcome header
console.log(colors.boxed(`
${gradientTitle}
${colors.secondary('Enhanced CLI Styling Demo')}
${colors.dim('Press Ctrl+C to exit at any time')}
`, {
title: 'Welcome',
borderStyle: 'double',
borderColor: 'highlight',
}));
console.log('\n');
try {
await demoBasicStyling();
await demoSpinners();
await demoProgressBar();
await demoTaskList();
await demoBoxes();
await demoTables();
await demoFileList();
await demoMetrics();
await demoSymbols();
// Final summary
EnhancedConsole.divider('═', 70);
console.log(colors.boxed(`
${colors.success('✨ Demo Complete!')}
These styling enhancements are now available throughout your CLI:
${colors.bullet} ${colors.highlight('Enhanced colors and symbols')}
${colors.bullet} ${colors.highlight('Loading spinners and progress bars')}
${colors.bullet} ${colors.highlight('Structured tables and boxes')}
${colors.bullet} ${colors.highlight('File type syntax highlighting')}
${colors.bullet} ${colors.highlight('Metrics and data visualization')}
${colors.dim('Integration examples can be found in:')}
${colors.file('src/shared/utils/cli-ui.js')}
${colors.file('src/shared/constants/colors.js')}
`, {
title: '🎯 Summary',
borderStyle: 'rounded',
borderColor: 'success',
}));
}
catch (error) {
EnhancedConsole.error(`Demo failed: ${error.message}`);
process.exit(1);
}
}
// Export for use as a module
export { demoBasicStyling, demoSpinners, demoProgressBar, demoTaskList, demoBoxes, demoTables, demoFileList, demoMetrics, demoSymbols, runDemo, };
// Run demo if called directly
if (import.meta.url === `file://${process.argv[1]}`) {
runDemo().catch(console.error);
}