embedia
Version:
Zero-configuration AI chatbot integration CLI - direct file copy with embedded API keys
148 lines (132 loc) • 2.92 kB
JavaScript
const chalk = require('chalk');
/**
* Logger utility for consistent colored output
*/
class Logger {
constructor() {
this.silent = false;
}
/**
* Set silent mode
* @param {boolean} silent - Whether to suppress output
*/
setSilent(silent = true) {
this.silent = silent;
}
/**
* Log info message
* @param {string} message - Message to log
*/
info(message) {
if (!this.silent) {
console.log(chalk.blue('ℹ'), message);
}
}
/**
* Log success message
* @param {string} message - Message to log
*/
success(message) {
if (!this.silent) {
console.log(chalk.green('✅'), message);
}
}
/**
* Log warning message
* @param {string} message - Message to log
*/
warn(message) {
if (!this.silent) {
console.log(chalk.yellow('⚠️'), message);
}
}
/**
* Log error message
* @param {string} message - Message to log
*/
error(message) {
console.error(chalk.red('❌'), message);
}
/**
* Log debug message (only in verbose mode)
* @param {string} message - Message to log
*/
debug(message) {
if (process.env.DEBUG && !this.silent) {
console.log(chalk.gray('🐛'), chalk.gray(message));
}
}
/**
* Log a step in the process
* @param {string} message - Step message
*/
step(message) {
if (!this.silent) {
console.log(chalk.cyan('→'), message);
}
}
/**
* Log a header/title
* @param {string} title - Title to log
*/
title(title) {
if (!this.silent) {
console.log('\n' + chalk.bold.cyan(title));
}
}
/**
* Log with custom color
* @param {string} color - Chalk color name
* @param {string} icon - Icon to show
* @param {string} message - Message to log
*/
custom(color, icon, message) {
if (!this.silent) {
console.log(chalk[color](icon), message);
}
}
/**
* Log a list of items
* @param {Array} items - Items to log
* @param {string} color - Color for the bullets (default: gray)
*/
list(items, color = 'gray') {
if (!this.silent && Array.isArray(items)) {
items.forEach(item => {
console.log(chalk[color](' •'), item);
});
}
}
/**
* Log instructions with numbered steps
* @param {Array} steps - Steps to log
*/
instructions(steps) {
if (!this.silent && Array.isArray(steps)) {
console.log(chalk.yellow('\nNext steps:'));
steps.forEach((step, index) => {
console.log(chalk.yellow(` ${index + 1}.`), step);
});
console.log('');
}
}
/**
* Log a separator line
*/
separator() {
if (!this.silent) {
console.log(chalk.gray('─'.repeat(50)));
}
}
/**
* Clear the console
*/
clear() {
if (!this.silent) {
console.clear();
}
}
}
// Create a singleton instance
const logger = new Logger();
module.exports = logger;