figlet
Version:
Creates ASCII Art from text. A full implementation of the FIGfont spec.
97 lines (83 loc) • 2.9 kB
JavaScript
import figlet from '../dist/node-figlet.mjs';
import {program} from 'commander';
import fs from 'fs';
import path from 'path';
import {fileURLToPath} from 'url';
// ES module equivalent of __dirname
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Get package version for CLI
const packageJson = JSON.parse(
fs.readFileSync(path.join(__dirname, '../package.json'), 'utf8')
);
program
.name('figlet')
.description('JavaScript FIGdriver. Generates ASCII art from text using FIGlet fonts.')
.version(packageJson.version)
.argument('[text]', 'text to convert to ASCII art')
.option('-f, --font <font>', 'font to use', 'Standard')
.option('-w, --width <width>', 'output width', '80')
.option('-h, --horizontalLayout <layout>', 'horizontal layout', 'default')
.option('-v, --verticalLayout <layout>', 'vertical layout', 'default')
.option('-l, --list', 'list available fonts')
.option('-i, --info <font>', 'show font information')
.action(async (text, options) => {
try {
// Handle list fonts option
if (options.list) {
console.log('Available fonts:');
const fonts = await figlet.fonts();
fonts.sort().forEach(font => console.log(` ${font}`));
return;
}
// Handle font info option
if (options.info) {
try {
const fontOptions = await figlet.loadFont(options.info);
console.log(`Font: ${options.info}`);
console.log('Options:', JSON.stringify(fontOptions, null, 2));
return;
} catch (error) {
console.error(`Error loading font '${options.info}':`, error.message);
process.exit(1);
}
}
// If no text provided and no special flags, show help
if (!text) {
program.help();
return;
}
// Generate ASCII art
const figletOptions = {
font: options.font,
horizontalLayout: options.horizontalLayout,
verticalLayout: options.verticalLayout,
width: parseInt(options.width, 10) || 80
};
// Load the font first
await figlet.loadFont(options.font);
// Generate the ASCII art
const result = figlet.textSync(text, figletOptions);
console.log(result);
} catch (error) {
if (error.code === 'ENOENT') {
console.error(`Font '${options.font}' not found.`);
console.error('Use --list to see available fonts.');
} else {
console.error('Error:', error.message);
}
process.exit(1);
}
});
// Handle uncaught errors
process.on('uncaughtException', (error) => {
console.error('Unexpected error:', error.message);
process.exit(1);
});
process.on('unhandledRejection', (reason) => {
console.error('Unhandled rejection:', reason);
process.exit(1);
});
// Parse command line arguments
program.parse();