refactor: rename figlet app to ascii and update all references
This commit is contained in:
80
lib/ascii/asciiService.ts
Normal file
80
lib/ascii/asciiService.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
'use client';
|
||||
|
||||
import figlet from 'figlet';
|
||||
import type { ASCIIOptions } from '@/types/ascii';
|
||||
import { loadFont } from './fontLoader';
|
||||
|
||||
/**
|
||||
* Convert text to ASCII art using figlet
|
||||
*/
|
||||
export async function textToAscii(
|
||||
text: string,
|
||||
fontName: string = 'Standard',
|
||||
options: ASCIIOptions = {}
|
||||
): Promise<string> {
|
||||
if (!text) {
|
||||
return '';
|
||||
}
|
||||
|
||||
try {
|
||||
// Load the font
|
||||
const fontData = await loadFont(fontName);
|
||||
|
||||
if (!fontData) {
|
||||
throw new Error(`Font ${fontName} could not be loaded`);
|
||||
}
|
||||
|
||||
// Parse and load the font into figlet
|
||||
figlet.parseFont(fontName, fontData);
|
||||
|
||||
// Generate ASCII art
|
||||
return new Promise((resolve, reject) => {
|
||||
figlet.text(
|
||||
text,
|
||||
{
|
||||
font: fontName,
|
||||
horizontalLayout: options.horizontalLayout || 'default',
|
||||
verticalLayout: options.verticalLayout || 'default',
|
||||
width: options.width,
|
||||
whitespaceBreak: options.whitespaceBreak ?? true,
|
||||
},
|
||||
(err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(result || '');
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error generating ASCII art:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate ASCII art synchronously (requires font to be pre-loaded)
|
||||
*/
|
||||
export function textToAsciiSync(
|
||||
text: string,
|
||||
fontName: string = 'Standard',
|
||||
options: ASCIIOptions = {}
|
||||
): string {
|
||||
if (!text) {
|
||||
return '';
|
||||
}
|
||||
|
||||
try {
|
||||
return figlet.textSync(text, {
|
||||
font: fontName as any,
|
||||
horizontalLayout: options.horizontalLayout || 'default',
|
||||
verticalLayout: options.verticalLayout || 'default',
|
||||
width: options.width,
|
||||
whitespaceBreak: options.whitespaceBreak ?? true,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error generating ASCII art (sync):', error);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user