ai-seo
Version:
AI-native JSON-LD schema utility with automated URL-to-Schema generation, intelligent content analysis, caching, rate limiting, performance monitoring, and AI optimization (ChatGPT, Voice). Complete automation & scale features. Zero runtime dependencies.
92 lines (77 loc) ⢠3.08 kB
JavaScript
// CLI Command: generate-url
// Generate schema from URL - v1.12.0
import { URLSchemaGenerator } from '../../src/url-generator.js';
const colorCodes = {
blue: '\x1b[34m',
gray: '\x1b[90m',
red: '\x1b[31m',
yellow: '\x1b[33m',
dim: '\x1b[2m',
green: '\x1b[32m',
bold: '\x1b[1m',
cyan: '\x1b[36m',
reset: '\x1b[0m'
};
function colorize(text, color) {
return `${colorCodes[color]}${text}${colorCodes.reset}`;
}
const colors = {
blue: (text) => colorize(text, 'blue'),
gray: (text) => colorize(text, 'gray'),
red: (text) => colorize(text, 'red'),
yellow: (text) => colorize(text, 'yellow'),
dim: (text) => colorize(text, 'dim'),
green: (text) => colorize(text, 'green'),
bold: (text) => colorize(text, 'bold'),
cyan: (text) => colorize(text, 'cyan')
};
export async function generateUrlCommand(url, options = {}) {
console.log(colors.blue('š URL Schema Generator - v1.12.0\n'));
try {
console.log(colors.gray(`Generating schema from: ${url}\n`));
const result = await URLSchemaGenerator.generateFromURL(url, {
targetTypes: options.type?.split(','),
includeRelated: options.related !== false,
optimizeFor: options.optimize?.split(','),
validateWithGoogle: options.validate || false
});
if (!result.success) {
console.log(colors.red('ā Failed to generate schema\n'));
console.log(colors.yellow('Error:'), result.error);
console.log(colors.dim('Suggestion:'), result.suggestion);
return;
}
console.log(colors.green('ā
Schema generated successfully\n'));
console.log(colors.bold('Detected Type:'), result.detectedType);
console.log(colors.bold('Confidence:'), `${(result.confidence * 100).toFixed(1)}%`);
console.log(colors.bold('Schemas Generated:'), result.schemas.length);
if (result.suggestions && result.suggestions.length > 0) {
console.log(colors.yellow('\nš” Suggestions:'));
result.suggestions.forEach(s => console.log(colors.dim(` ⢠${s}`)));
}
// Output to file if requested
if (options.output) {
const fs = await import('fs/promises');
await fs.writeFile(
options.output,
JSON.stringify(result, null, 2)
);
console.log(colors.green(`\nš Saved to: ${options.output}`));
} else {
// Display schemas
console.log(colors.cyan('\nš¦ Generated Schema:\n'));
console.log(JSON.stringify(result.schemas[0], null, 2));
if (result.metadata) {
console.log(colors.cyan('\nš Metadata:\n'));
console.log(colors.dim(`Title: ${result.metadata.title}`));
console.log(colors.dim(`Description: ${result.metadata.description?.substring(0, 100)}...`));
console.log(colors.dim(`Images: ${result.metadata.images?.length || 0}`));
}
}
} catch (error) {
console.log(colors.red('ā Error:'), error.message);
if (options.debug) {
console.log(colors.dim(error.stack));
}
}
}