@djangocfg/imgai 2.1.41 → 2.1.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/generator.ts","../../src/scanner/index.ts","../../src/config/generator.ts","../../src/cli/index.ts"],"names":["path","fs","sharp"],"mappings":"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","file":"index.js","sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\nimport sharp from 'sharp';\nimport OpenAI from 'openai';\nimport Anthropic from '@anthropic-ai/sdk';\nimport type {\n Config,\n GenerateOptions,\n GenerationResult,\n BatchGenerateOptions,\n BatchResult,\n ImageInfo,\n ResizeOptions,\n} from './types';\n\n// ============================================================================\n// AI IMAGE GENERATOR\n// ============================================================================\n\nexport class ImageGenerator {\n private config: Config;\n private openai?: OpenAI;\n private anthropic?: Anthropic;\n\n constructor(config: Config) {\n this.config = config;\n this.initializeProviders();\n }\n\n private initializeProviders(): void {\n const openaiKey = this.config.openaiApiKey || process.env.OPENAI_API_KEY;\n const anthropicKey = this.config.anthropicApiKey || process.env.ANTHROPIC_API_KEY;\n\n if (openaiKey) {\n this.openai = new OpenAI({ apiKey: openaiKey });\n }\n\n if (anthropicKey) {\n this.anthropic = new Anthropic({ apiKey: anthropicKey });\n }\n\n if (!this.openai && this.config.provider === 'openai') {\n throw new Error('OpenAI API key required. Set OPENAI_API_KEY or pass openaiApiKey in config.');\n }\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // SINGLE IMAGE GENERATION\n // ──────────────────────────────────────────────────────────────────────────\n\n async generate(options: GenerateOptions): Promise<GenerationResult> {\n const startTime = Date.now();\n\n try {\n // Build full prompt with style\n const fullPrompt = this.buildPrompt(options.prompt);\n\n // Generate image using OpenAI DALL-E 3\n const imageData = await this.generateWithOpenAI(fullPrompt);\n\n // Generate filename\n const filename = options.filename || this.generateFilename(options.prompt);\n const category = options.category || 'general';\n\n // Determine output path\n const outputDir = path.join(\n this.config.projectRoot,\n this.config.outputDir,\n category\n );\n await fs.ensureDir(outputDir);\n\n // Save original image\n const originalPath = path.join(outputDir, `${filename}.png`);\n await fs.writeFile(originalPath, Buffer.from(imageData, 'base64'));\n\n // Resize if needed\n const resizeOptions = options.resize || this.config.resize;\n let finalPath = originalPath;\n\n if (resizeOptions) {\n finalPath = await this.resizeImage(originalPath, resizeOptions);\n // Remove original if format changed\n if (finalPath !== originalPath) {\n await fs.remove(originalPath);\n }\n }\n\n // Get image info\n const imageInfo = await this.getImageInfo(finalPath, category);\n\n // Add metadata\n imageInfo.metadata = {\n prompt: options.prompt,\n caption: options.metadata?.caption,\n tags: options.tags,\n category,\n generatedAt: new Date(),\n model: 'dall-e-3',\n };\n\n const duration = Date.now() - startTime;\n\n return {\n success: true,\n imagePath: finalPath,\n imageUrl: imageInfo.url,\n imageInfo,\n duration,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n duration: Date.now() - startTime,\n };\n }\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // BATCH GENERATION\n // ──────────────────────────────────────────────────────────────────────────\n\n async generateBatch(options: BatchGenerateOptions): Promise<BatchResult> {\n const startTime = Date.now();\n const results: GenerationResult[] = [];\n const concurrency = options.concurrency || 2;\n const delayBetween = options.delayBetween || 2000;\n\n // Process in batches\n for (let i = 0; i < options.items.length; i += concurrency) {\n const batch = options.items.slice(i, i + concurrency);\n\n const batchPromises = batch.map(async (item) => {\n const result = await this.generate({\n prompt: item.prompt,\n filename: item.filename,\n category: item.category,\n });\n return result;\n });\n\n const batchResults = await Promise.all(batchPromises);\n\n for (const result of batchResults) {\n results.push(result);\n if (options.onProgress) {\n options.onProgress(results.length, options.items.length, result);\n }\n }\n\n // Delay between batches\n if (i + concurrency < options.items.length) {\n await this.delay(delayBetween);\n }\n }\n\n return {\n total: results.length,\n success: results.filter((r) => r.success).length,\n failed: results.filter((r) => !r.success).length,\n results,\n duration: Date.now() - startTime,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // PROMPT ENHANCEMENT (using Claude/GPT)\n // ──────────────────────────────────────────────────────────────────────────\n\n async enhancePrompt(\n basePrompt: string,\n context?: string\n ): Promise<{ prompt: string; filename: string; caption: string }> {\n const systemPrompt = `You are an expert at creating image generation prompts.\nGiven a description, create:\n1. A detailed visual prompt (max 150 words) for DALL-E 3\n2. A descriptive filename (lowercase, hyphens, max 30 chars)\n3. A short caption (max 50 words)\n\n${this.config.prefix ? `Style prefix: ${this.config.prefix}` : ''}\n${this.config.suffix ? `Style suffix: ${this.config.suffix}` : ''}\n\nReturn ONLY valid JSON: {\"prompt\": \"...\", \"filename\": \"...\", \"caption\": \"...\"}`;\n\n const userPrompt = context\n ? `Description: ${basePrompt}\\nContext: ${context}`\n : `Description: ${basePrompt}`;\n\n if (this.anthropic && this.config.provider === 'anthropic') {\n const response = await this.anthropic.messages.create({\n model: 'claude-3-5-sonnet-20241022',\n max_tokens: 500,\n messages: [\n { role: 'user', content: `${systemPrompt}\\n\\n${userPrompt}` },\n ],\n });\n\n const text = response.content[0].type === 'text' ? response.content[0].text : '';\n return JSON.parse(text);\n }\n\n if (this.openai) {\n const response = await this.openai.chat.completions.create({\n model: 'gpt-4-turbo-preview',\n messages: [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt },\n ],\n max_tokens: 500,\n temperature: 0.7,\n response_format: { type: 'json_object' },\n });\n\n const text = response.choices[0]?.message?.content || '{}';\n return JSON.parse(text);\n }\n\n throw new Error('No AI provider configured for prompt enhancement');\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // PRIVATE METHODS\n // ──────────────────────────────────────────────────────────────────────────\n\n private async generateWithOpenAI(prompt: string): Promise<string> {\n if (!this.openai) {\n throw new Error('OpenAI client not initialized');\n }\n\n const response = await this.openai.images.generate({\n model: 'dall-e-3',\n prompt,\n n: 1,\n size: this.config.size,\n quality: this.config.quality,\n style: this.config.dalleStyle || 'natural',\n response_format: 'b64_json',\n });\n\n const imageData = response.data?.[0]?.b64_json;\n if (!imageData) {\n throw new Error('No image data received from OpenAI');\n }\n\n return imageData;\n }\n\n private async resizeImage(\n inputPath: string,\n options: ResizeOptions\n ): Promise<string> {\n const { width, height, quality = 85, format = 'webp', fit = 'inside' } = options;\n\n let pipeline = sharp(inputPath);\n\n // Resize if dimensions provided\n if (width || height) {\n pipeline = pipeline.resize(width, height, {\n fit,\n withoutEnlargement: true,\n });\n }\n\n // Convert format\n const outputPath = inputPath.replace(/\\.[^.]+$/, `.${format}`);\n\n switch (format) {\n case 'webp':\n pipeline = pipeline.webp({ quality });\n break;\n case 'jpeg':\n pipeline = pipeline.jpeg({ quality });\n break;\n case 'png':\n pipeline = pipeline.png({ quality });\n break;\n case 'avif':\n pipeline = pipeline.avif({ quality });\n break;\n }\n\n await pipeline.toFile(outputPath);\n return outputPath;\n }\n\n private async getImageInfo(imagePath: string, category: string): Promise<ImageInfo> {\n const stats = await fs.stat(imagePath);\n const metadata = await sharp(imagePath).metadata();\n const filename = path.basename(imagePath);\n const extension = path.extname(filename).slice(1);\n const id = path.basename(filename, path.extname(filename));\n\n // Calculate relative path from public directory\n const publicDir = path.join(this.config.projectRoot, this.config.publicDir);\n const relativePath = path.relative(publicDir, imagePath);\n const url = '/' + relativePath.replace(/\\\\/g, '/');\n\n return {\n id,\n filename,\n extension,\n path: relativePath,\n url,\n size: stats.size,\n width: metadata.width,\n height: metadata.height,\n createdAt: stats.birthtime,\n modifiedAt: stats.mtime,\n };\n }\n\n private buildPrompt(basePrompt: string): string {\n const parts: string[] = [];\n\n if (this.config.prefix) {\n parts.push(this.config.prefix);\n }\n\n parts.push(basePrompt);\n\n if (this.config.suffix) {\n parts.push(this.config.suffix);\n }\n\n return parts.join(' ');\n }\n\n private generateFilename(prompt: string): string {\n return prompt\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, '')\n .replace(/\\s+/g, '-')\n .substring(0, 30);\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import fs from 'fs-extra';\nimport path from 'path';\nimport { glob } from 'glob';\nimport sharp from 'sharp';\nimport type {\n Config,\n ImageInfo,\n ImageCatalog,\n ScanOptions,\n ScanResult,\n} from '../core/types';\n\n// ============================================================================\n// IMAGE SCANNER\n// ============================================================================\n\nconst DEFAULT_EXTENSIONS = ['png', 'jpg', 'jpeg', 'webp', 'avif', 'gif', 'svg'];\nconst DEFAULT_DIRECTORIES = ['static/images', 'images', 'assets'];\n\nexport class ImageScanner {\n private config: Config;\n\n constructor(config: Config) {\n this.config = config;\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // SCAN IMAGES\n // ──────────────────────────────────────────────────────────────────────────\n\n async scan(options: ScanOptions = {}): Promise<ScanResult> {\n const startTime = Date.now();\n\n const {\n directories = DEFAULT_DIRECTORIES,\n extensions = DEFAULT_EXTENSIONS,\n includeDimensions = true,\n recursive = true,\n } = options;\n\n const publicDir = path.join(this.config.projectRoot, this.config.publicDir);\n const images: ImageInfo[] = [];\n const byCategory: Record<string, ImageInfo[]> = {};\n const byExtension: Record<string, number> = {};\n let totalSize = 0;\n\n // Build glob patterns\n const patterns = directories.flatMap((dir) => {\n const basePath = path.join(publicDir, dir);\n const extPattern = `*.{${extensions.join(',')}}`;\n return recursive\n ? [path.join(basePath, '**', extPattern)]\n : [path.join(basePath, extPattern)];\n });\n\n // Find all images\n for (const pattern of patterns) {\n const files = await glob(pattern, { nodir: true });\n\n for (const filePath of files) {\n try {\n const imageInfo = await this.processImage(filePath, publicDir, includeDimensions);\n images.push(imageInfo);\n\n // Update stats\n totalSize += imageInfo.size;\n byExtension[imageInfo.extension] = (byExtension[imageInfo.extension] || 0) + 1;\n\n // Group by category (directory name)\n const category = this.extractCategory(imageInfo.path);\n if (!byCategory[category]) {\n byCategory[category] = [];\n }\n byCategory[category].push(imageInfo);\n } catch (error) {\n console.warn(`Failed to process image: ${filePath}`, error);\n }\n }\n }\n\n // Sort images by modification date (newest first)\n images.sort((a, b) => b.modifiedAt.getTime() - a.modifiedAt.getTime());\n\n return {\n images,\n total: images.length,\n byCategory,\n byExtension,\n totalSize,\n scanDuration: Date.now() - startTime,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // BUILD CATALOG\n // ──────────────────────────────────────────────────────────────────────────\n\n async buildCatalog(options: ScanOptions = {}): Promise<ImageCatalog> {\n const scanResult = await this.scan(options);\n\n const byId: Record<string, ImageInfo> = {};\n for (const image of scanResult.images) {\n byId[image.id] = image;\n }\n\n return {\n version: '1.0.0',\n generatedAt: new Date(),\n count: scanResult.total,\n categories: scanResult.byCategory,\n images: scanResult.images,\n byId,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // FIND SPECIFIC IMAGES\n // ──────────────────────────────────────────────────────────────────────────\n\n async findByCategory(category: string): Promise<ImageInfo[]> {\n const scanResult = await this.scan();\n return scanResult.byCategory[category] || [];\n }\n\n async findById(id: string): Promise<ImageInfo | undefined> {\n const scanResult = await this.scan();\n return scanResult.images.find((img) => img.id === id);\n }\n\n async findByExtension(extension: string): Promise<ImageInfo[]> {\n const scanResult = await this.scan();\n return scanResult.images.filter((img) => img.extension === extension);\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // PRIVATE METHODS\n // ──────────────────────────────────────────────────────────────────────────\n\n private async processImage(\n filePath: string,\n publicDir: string,\n includeDimensions: boolean\n ): Promise<ImageInfo> {\n const stats = await fs.stat(filePath);\n const filename = path.basename(filePath);\n const extension = path.extname(filename).slice(1).toLowerCase();\n const id = path.basename(filename, path.extname(filename));\n\n // Calculate paths\n const relativePath = path.relative(publicDir, filePath).replace(/\\\\/g, '/');\n const url = '/' + relativePath;\n\n let width: number | undefined;\n let height: number | undefined;\n\n // Get dimensions if requested (skip for SVG)\n if (includeDimensions && extension !== 'svg') {\n try {\n const metadata = await sharp(filePath).metadata();\n width = metadata.width;\n height = metadata.height;\n } catch {\n // Ignore dimension errors\n }\n }\n\n return {\n id,\n filename,\n extension,\n path: relativePath,\n url,\n size: stats.size,\n width,\n height,\n createdAt: stats.birthtime,\n modifiedAt: stats.mtime,\n };\n }\n\n private extractCategory(imagePath: string): string {\n const parts = imagePath.split('/');\n // Return parent directory or 'root'\n if (parts.length > 1) {\n return parts[parts.length - 2];\n }\n return 'root';\n }\n}\n\n// ============================================================================\n// STATS & UTILITIES\n// ============================================================================\n\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n}\n\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n}\n","import fs from 'fs-extra';\nimport path from 'path';\nimport type { Config, ImageCatalog, ImageInfo } from '../core/types';\nimport { ImageScanner } from '../scanner';\n\n// ============================================================================\n// TYPESCRIPT CONFIG GENERATOR\n// ============================================================================\n\nexport class ConfigGenerator {\n private config: Config;\n private scanner: ImageScanner;\n\n constructor(config: Config) {\n this.config = config;\n this.scanner = new ImageScanner(config);\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // GENERATE IMAGES.TS\n // ──────────────────────────────────────────────────────────────────────────\n\n async generate(): Promise<string> {\n const catalog = await this.scanner.buildCatalog();\n const outputPath = path.join(this.config.projectRoot, this.config.configOutputPath);\n\n // Ensure directory exists\n await fs.ensureDir(path.dirname(outputPath));\n\n // Generate TypeScript content\n const content = this.generateTypeScript(catalog);\n\n // Write file\n await fs.writeFile(outputPath, content, 'utf-8');\n\n return outputPath;\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // TYPESCRIPT GENERATION\n // ──────────────────────────────────────────────────────────────────────────\n\n private generateTypeScript(catalog: ImageCatalog): string {\n const categories = Object.keys(catalog.categories).sort();\n const allIds = catalog.images.map((img) => img.id).sort();\n\n return `/**\n * Auto-generated image catalog\n * Generated: ${catalog.generatedAt.toISOString()}\n * Total images: ${catalog.count}\n *\n * DO NOT EDIT - This file is auto-generated by @djangocfg/imgai\n * Run \\`imgai sync\\` to regenerate\n */\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ImageData {\n id: string;\n filename: string;\n url: string;\n path: string;\n extension: string;\n width?: number;\n height?: number;\n size: number;\n}\n\nexport type ImageId = ${allIds.length > 0 ? allIds.map((id) => `'${id}'`).join(' | ') : 'string'};\nexport type ImageCategory = ${categories.length > 0 ? categories.map((c) => `'${c}'`).join(' | ') : 'string'};\n\n// ============================================================================\n// IMAGE CATALOG\n// ============================================================================\n\nexport const IMAGES: Record<ImageId, ImageData> = {\n${catalog.images.map((img) => this.generateImageEntry(img)).join(',\\n')}\n} as const;\n\n// ============================================================================\n// BY CATEGORY\n// ============================================================================\n\nexport const IMAGES_BY_CATEGORY: Record<ImageCategory, readonly ImageData[]> = {\n${categories.map((cat) => this.generateCategoryEntry(cat, catalog.categories[cat] || [])).join(',\\n')}\n} as const;\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\n/** Get image by ID */\nexport function getImage(id: ImageId): ImageData | undefined {\n return IMAGES[id];\n}\n\n/** Get image URL by ID */\nexport function getImageUrl(id: ImageId): string | undefined {\n return IMAGES[id]?.url;\n}\n\n/** Get all images in category */\nexport function getImagesByCategory(category: ImageCategory): readonly ImageData[] {\n return IMAGES_BY_CATEGORY[category] || [];\n}\n\n/** Get all image IDs */\nexport function getAllImageIds(): ImageId[] {\n return Object.keys(IMAGES) as ImageId[];\n}\n\n/** Get all categories */\nexport function getAllCategories(): ImageCategory[] {\n return Object.keys(IMAGES_BY_CATEGORY) as ImageCategory[];\n}\n\n/** Check if image exists */\nexport function hasImage(id: string): id is ImageId {\n return id in IMAGES;\n}\n\n// ============================================================================\n// METADATA\n// ============================================================================\n\nexport const IMAGE_CATALOG_META = {\n version: '${catalog.version}',\n generatedAt: '${catalog.generatedAt.toISOString()}',\n totalImages: ${catalog.count},\n categories: ${JSON.stringify(categories)},\n} as const;\n`;\n }\n\n private generateImageEntry(img: ImageInfo): string {\n const data: Record<string, unknown> = {\n id: img.id,\n filename: img.filename,\n url: img.url,\n path: img.path,\n extension: img.extension,\n size: img.size,\n };\n\n if (img.width) data.width = img.width;\n if (img.height) data.height = img.height;\n\n return ` '${img.id}': ${JSON.stringify(data, null, 4).replace(/\\n/g, '\\n ').replace(/}$/, ' }')}`;\n }\n\n private generateCategoryEntry(category: string, images: ImageInfo[]): string {\n const imageRefs = images.map((img) => `IMAGES['${img.id}']`);\n return ` '${category}': [${imageRefs.join(', ')}]`;\n }\n}\n\n// ============================================================================\n// QUICK CONFIG GENERATOR\n// ============================================================================\n\nexport async function generateImagesConfig(config: Config): Promise<string> {\n const generator = new ConfigGenerator(config);\n return generator.generate();\n}\n","import chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport ora from 'ora';\nimport type { Config, GenerateOptions, ScanOptions } from '../core/types';\nimport { ImageGenerator } from '../core/generator';\nimport { ImageScanner, formatBytes, formatDuration } from '../scanner';\nimport { ConfigGenerator } from '../config/generator';\n\n// ============================================================================\n// CLI INTERFACE\n// ============================================================================\n\nexport class ImageAICLI {\n private config: Config;\n private generator: ImageGenerator;\n private scanner: ImageScanner;\n private configGenerator: ConfigGenerator;\n\n constructor(config: Config) {\n this.config = config;\n this.generator = new ImageGenerator(config);\n this.scanner = new ImageScanner(config);\n this.configGenerator = new ConfigGenerator(config);\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // INTERACTIVE MODE\n // ──────────────────────────────────────────────────────────────────────────\n\n async interactive(): Promise<void> {\n this.printHeader();\n\n while (true) {\n try {\n const { action } = await inquirer.prompt([\n {\n type: 'list',\n name: 'action',\n message: chalk.cyan('What would you like to do?'),\n choices: [\n { name: `${chalk.green('🎨')} Generate image from prompt`, value: 'generate' },\n { name: `${chalk.blue('✨')} Generate with AI-enhanced prompt`, value: 'enhance' },\n { name: `${chalk.yellow('📦')} Batch generate images`, value: 'batch' },\n new inquirer.Separator(),\n { name: `${chalk.magenta('🔍')} Scan & catalog images`, value: 'scan' },\n { name: `${chalk.cyan('⚡')} Sync images.ts config`, value: 'sync' },\n { name: `${chalk.white('📊')} Show statistics`, value: 'stats' },\n new inquirer.Separator(),\n { name: `${chalk.gray('⚙️')} Settings`, value: 'settings' },\n { name: `${chalk.red('🚪')} Exit`, value: 'exit' },\n ],\n },\n ]);\n\n switch (action) {\n case 'generate':\n await this.promptGenerate();\n break;\n case 'enhance':\n await this.promptEnhance();\n break;\n case 'batch':\n await this.promptBatch();\n break;\n case 'scan':\n await this.runScan();\n break;\n case 'sync':\n await this.runSync();\n break;\n case 'stats':\n await this.showStats();\n break;\n case 'settings':\n await this.showSettings();\n break;\n case 'exit':\n console.log(chalk.cyan('\\n👋 Goodbye!\\n'));\n return;\n }\n\n console.log(''); // Empty line\n } catch (error) {\n // Handle Ctrl+C gracefully\n if (error instanceof Error && error.name === 'ExitPromptError') {\n console.log(chalk.cyan('\\n\\n👋 Goodbye!\\n'));\n return;\n }\n throw error;\n }\n }\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // GENERATE COMMANDS\n // ──────────────────────────────────────────────────────────────────────────\n\n async generate(options: GenerateOptions): Promise<void> {\n const spinner = ora('Generating image...').start();\n\n try {\n const result = await this.generator.generate(options);\n\n if (result.success) {\n spinner.succeed(chalk.green('Image generated successfully!'));\n console.log(chalk.gray(` Path: ${result.imagePath}`));\n console.log(chalk.gray(` URL: ${result.imageUrl}`));\n console.log(chalk.gray(` Time: ${formatDuration(result.duration || 0)}`));\n } else {\n spinner.fail(chalk.red(`Generation failed: ${result.error}`));\n }\n } catch (error) {\n spinner.fail(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n async scan(options: ScanOptions = {}): Promise<void> {\n const spinner = ora('Scanning images...').start();\n\n try {\n const result = await this.scanner.scan(options);\n spinner.succeed(chalk.green(`Found ${result.total} images`));\n\n console.log(chalk.gray(` Total size: ${formatBytes(result.totalSize)}`));\n console.log(chalk.gray(` Scan time: ${formatDuration(result.scanDuration)}`));\n\n // Show by category\n console.log(chalk.cyan('\\n Categories:'));\n for (const [category, images] of Object.entries(result.byCategory)) {\n console.log(chalk.gray(` ${category}: ${images.length} images`));\n }\n\n // Show by extension\n console.log(chalk.cyan('\\n Extensions:'));\n for (const [ext, count] of Object.entries(result.byExtension)) {\n console.log(chalk.gray(` .${ext}: ${count} files`));\n }\n } catch (error) {\n spinner.fail(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n async sync(): Promise<void> {\n const spinner = ora('Syncing images.ts config...').start();\n\n try {\n const outputPath = await this.configGenerator.generate();\n spinner.succeed(chalk.green('Config synced successfully!'));\n console.log(chalk.gray(` Output: ${outputPath}`));\n } catch (error) {\n spinner.fail(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // PRIVATE PROMPT METHODS\n // ──────────────────────────────────────────────────────────────────────────\n\n private async promptGenerate(): Promise<void> {\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'prompt',\n message: 'Enter image description:',\n validate: (input: string) => input.trim() ? true : 'Description is required',\n },\n {\n type: 'input',\n name: 'filename',\n message: 'Filename (optional, auto-generated if empty):',\n },\n {\n type: 'input',\n name: 'category',\n message: 'Category/folder (default: general):',\n default: 'general',\n },\n ]);\n\n await this.generate({\n prompt: answers.prompt,\n filename: answers.filename || undefined,\n category: answers.category,\n });\n }\n\n private async promptEnhance(): Promise<void> {\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'description',\n message: 'Describe what you want:',\n validate: (input: string) => input.trim() ? true : 'Description is required',\n },\n {\n type: 'input',\n name: 'context',\n message: 'Additional context (optional):',\n },\n {\n type: 'input',\n name: 'category',\n message: 'Category/folder (default: general):',\n default: 'general',\n },\n ]);\n\n const spinner = ora('Enhancing prompt with AI...').start();\n\n try {\n const enhanced = await this.generator.enhancePrompt(\n answers.description,\n answers.context || undefined\n );\n\n spinner.succeed('Prompt enhanced!');\n console.log(chalk.cyan('\\n Enhanced prompt:'));\n console.log(chalk.gray(` ${enhanced.prompt}\\n`));\n console.log(chalk.gray(` Filename: ${enhanced.filename}`));\n console.log(chalk.gray(` Caption: ${enhanced.caption}\\n`));\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Generate image with this prompt?',\n default: true,\n },\n ]);\n\n if (confirm) {\n await this.generate({\n prompt: enhanced.prompt,\n filename: enhanced.filename,\n category: answers.category,\n metadata: { caption: enhanced.caption },\n });\n }\n } catch (error) {\n spinner.fail(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n private async promptBatch(): Promise<void> {\n console.log(chalk.cyan('\\n Enter prompts (one per line, empty line to finish):'));\n\n const prompts: string[] = [];\n let lineNumber = 1;\n\n while (true) {\n const { prompt } = await inquirer.prompt([\n {\n type: 'input',\n name: 'prompt',\n message: ` ${lineNumber}.`,\n },\n ]);\n\n if (!prompt.trim()) break;\n prompts.push(prompt);\n lineNumber++;\n }\n\n if (prompts.length === 0) {\n console.log(chalk.yellow(' No prompts entered.'));\n return;\n }\n\n const { category, concurrency } = await inquirer.prompt([\n {\n type: 'input',\n name: 'category',\n message: 'Category for all images:',\n default: 'batch',\n },\n {\n type: 'list',\n name: 'concurrency',\n message: 'Concurrent workers:',\n choices: [\n { name: '1 (slow, safe)', value: 1 },\n { name: '2 (balanced)', value: 2 },\n { name: '3 (fast)', value: 3 },\n ],\n default: 2,\n },\n ]);\n\n console.log(chalk.cyan(`\\n Generating ${prompts.length} images...\\n`));\n\n const result = await this.generator.generateBatch({\n items: prompts.map((prompt, i) => ({\n prompt,\n category,\n filename: `batch-${Date.now()}-${i + 1}`,\n })),\n concurrency,\n onProgress: (current, total, res) => {\n const status = res.success ? chalk.green('✓') : chalk.red('✗');\n console.log(` ${status} ${current}/${total}`);\n },\n });\n\n console.log(chalk.cyan('\\n Batch complete!'));\n console.log(chalk.gray(` Success: ${result.success}`));\n console.log(chalk.gray(` Failed: ${result.failed}`));\n console.log(chalk.gray(` Time: ${formatDuration(result.duration)}`));\n }\n\n private async runScan(): Promise<void> {\n await this.scan();\n }\n\n private async runSync(): Promise<void> {\n await this.sync();\n }\n\n private async showStats(): Promise<void> {\n const spinner = ora('Gathering statistics...').start();\n\n try {\n const result = await this.scanner.scan();\n spinner.stop();\n\n console.log(chalk.cyan('\\n 📊 Image Statistics\\n'));\n console.log(chalk.white(` Total images: ${result.total}`));\n console.log(chalk.white(` Total size: ${formatBytes(result.totalSize)}`));\n console.log(chalk.white(` Categories: ${Object.keys(result.byCategory).length}`));\n\n console.log(chalk.cyan('\\n By Category:'));\n for (const [category, images] of Object.entries(result.byCategory).sort((a, b) => b[1].length - a[1].length)) {\n const size = images.reduce((sum, img) => sum + img.size, 0);\n console.log(chalk.gray(` ${category.padEnd(20)} ${images.length.toString().padStart(4)} images ${formatBytes(size).padStart(10)}`));\n }\n\n console.log(chalk.cyan('\\n By Extension:'));\n for (const [ext, count] of Object.entries(result.byExtension).sort((a, b) => b[1] - a[1])) {\n console.log(chalk.gray(` .${ext.padEnd(6)} ${count} files`));\n }\n } catch (error) {\n spinner.fail(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n private async showSettings(): Promise<void> {\n console.log(chalk.cyan('\\n ⚙️ Current Settings\\n'));\n console.log(chalk.gray(` Provider: ${this.config.provider}`));\n console.log(chalk.gray(` Size: ${this.config.size}`));\n console.log(chalk.gray(` Quality: ${this.config.quality}`));\n console.log(chalk.gray(` Output dir: ${this.config.outputDir}`));\n console.log(chalk.gray(` Config path: ${this.config.configOutputPath}`));\n\n if (this.config.resize) {\n console.log(chalk.cyan('\\n Resize Settings:'));\n console.log(chalk.gray(` Width: ${this.config.resize.width || 'auto'}`));\n console.log(chalk.gray(` Height: ${this.config.resize.height || 'auto'}`));\n console.log(chalk.gray(` Format: ${this.config.resize.format}`));\n console.log(chalk.gray(` Quality: ${this.config.resize.quality}`));\n }\n\n if (this.config.prefix || this.config.suffix) {\n console.log(chalk.cyan('\\n Prompt Modifiers:'));\n if (this.config.prefix) {\n console.log(chalk.gray(` Prefix: ${this.config.prefix.substring(0, 60)}...`));\n }\n if (this.config.suffix) {\n console.log(chalk.gray(` Suffix: ${this.config.suffix.substring(0, 60)}...`));\n }\n }\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // UI HELPERS\n // ──────────────────────────────────────────────────────────────────────────\n\n private printHeader(): void {\n console.log('');\n console.log(chalk.cyan(' ╔═══════════════════════════════════════════╗'));\n console.log(chalk.cyan(' ║') + chalk.white.bold(' 🎨 IMGAI - Image Generator ') + chalk.cyan('║'));\n console.log(chalk.cyan(' ║') + chalk.gray(' AI-powered image generation & sync ') + chalk.cyan('║'));\n console.log(chalk.cyan(' ╚═══════════════════════════════════════════╝'));\n console.log('');\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/scanner/index.ts","../../src/config/generator.ts","../../src/core/generator.ts","../../src/cli/index.ts"],"names":["fs","sharp","path"],"mappings":";;;;;;;;;;;AAiBA,IAAM,kBAAA,GAAqB,CAAC,KAAA,EAAO,KAAA,EAAO,QAAQ,MAAA,EAAQ,MAAA,EAAQ,OAAO,KAAK,CAAA;AAC9E,IAAM,mBAAA,GAAsB,CAAC,eAAA,EAAiB,QAAA,EAAU,QAAQ,CAAA;AAEzD,IAAM,eAAN,MAAmB;AAAA,EAChB,MAAA;AAAA,EAER,YAAY,MAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAA,CAAK,OAAA,GAAuB,EAAC,EAAwB;AACzD,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,MAAM;AAAA,MACJ,WAAA,GAAc,mBAAA;AAAA,MACd,UAAA,GAAa,kBAAA;AAAA,MACb,iBAAA,GAAoB,IAAA;AAAA,MACpB,SAAA,GAAY;AAAA,KACd,GAAI,OAAA;AAEJ,IAAA,MAAM,SAAA,GAAY,KAAK,IAAA,CAAK,IAAA,CAAK,OAAO,WAAA,EAAa,IAAA,CAAK,OAAO,SAAS,CAAA;AAC1E,IAAA,MAAM,SAAsB,EAAC;AAC7B,IAAA,MAAM,aAA0C,EAAC;AACjD,IAAA,MAAM,cAAsC,EAAC;AAC7C,IAAA,IAAI,SAAA,GAAY,CAAA;AAGhB,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC5C,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,GAAG,CAAA;AACzC,MAAA,MAAM,UAAA,GAAa,CAAA,GAAA,EAAM,UAAA,CAAW,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC7C,MAAA,OAAO,SAAA,GACH,CAAC,IAAA,CAAK,IAAA,CAAK,UAAU,IAAA,EAAM,UAAU,CAAC,CAAA,GACtC,CAAC,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,UAAU,CAAC,CAAA;AAAA,IACtC,CAAC,CAAA;AAGD,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,SAAS,EAAE,KAAA,EAAO,MAAM,CAAA;AAEjD,MAAA,KAAA,MAAW,YAAY,KAAA,EAAO;AAC5B,QAAA,IAAI;AACF,UAAA,MAAM,YAAY,MAAM,IAAA,CAAK,YAAA,CAAa,QAAA,EAAU,WAAW,iBAAiB,CAAA;AAChF,UAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAGrB,UAAA,SAAA,IAAa,SAAA,CAAU,IAAA;AACvB,UAAA,WAAA,CAAY,UAAU,SAAS,CAAA,GAAA,CAAK,YAAY,SAAA,CAAU,SAAS,KAAK,CAAA,IAAK,CAAA;AAG7E,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,SAAA,CAAU,IAAI,CAAA;AACpD,UAAA,IAAI,CAAC,UAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,YAAA,UAAA,CAAW,QAAQ,IAAI,EAAC;AAAA,UAC1B;AACA,UAAA,UAAA,CAAW,QAAQ,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA;AAAA,QACrC,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yBAAA,EAA4B,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,QAC5D;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,OAAA,EAAQ,GAAI,CAAA,CAAE,UAAA,CAAW,OAAA,EAAS,CAAA;AAErE,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,OAAO,MAAA,CAAO,MAAA;AAAA,MACd,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA,EAAc,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,KAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAA,CAAa,OAAA,GAAuB,EAAC,EAA0B;AACnE,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAE1C,IAAA,MAAM,OAAkC,EAAC;AACzC,IAAA,KAAA,MAAW,KAAA,IAAS,WAAW,MAAA,EAAQ;AACrC,MAAA,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,GAAI,KAAA;AAAA,IACnB;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,OAAA;AAAA,MACT,WAAA,sBAAiB,IAAA,EAAK;AAAA,MACtB,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,YAAY,UAAA,CAAW,UAAA;AAAA,MACvB,QAAQ,UAAA,CAAW,MAAA;AAAA,MACnB;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,QAAA,EAAwC;AAC3D,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,IAAA,EAAK;AACnC,IAAA,OAAO,UAAA,CAAW,UAAA,CAAW,QAAQ,CAAA,IAAK,EAAC;AAAA,EAC7C;AAAA,EAEA,MAAM,SAAS,EAAA,EAA4C;AACzD,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,IAAA,EAAK;AACnC,IAAA,OAAO,WAAW,MAAA,CAAO,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAO,EAAE,CAAA;AAAA,EACtD;AAAA,EAEA,MAAM,gBAAgB,SAAA,EAAyC;AAC7D,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,IAAA,EAAK;AACnC,IAAA,OAAO,WAAW,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,cAAc,SAAS,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,YAAA,CACZ,QAAA,EACA,SAAA,EACA,iBAAA,EACoB;AACpB,IAAA,MAAM,KAAA,GAAQ,MAAMA,GAAA,CAAG,IAAA,CAAK,QAAQ,CAAA;AACpC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACvC,IAAA,MAAM,SAAA,GAAY,KAAK,OAAA,CAAQ,QAAQ,EAAE,KAAA,CAAM,CAAC,EAAE,WAAA,EAAY;AAC9D,IAAA,MAAM,KAAK,IAAA,CAAK,QAAA,CAAS,UAAU,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAGzD,IAAA,MAAM,YAAA,GAAe,KAAK,QAAA,CAAS,SAAA,EAAW,QAAQ,CAAA,CAAE,OAAA,CAAQ,OAAO,GAAG,CAAA;AAC1E,IAAA,MAAM,MAAM,GAAA,GAAM,YAAA;AAElB,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,MAAA;AAGJ,IAAA,IAAI,iBAAA,IAAqB,cAAc,KAAA,EAAO;AAC5C,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAMC,MAAA,CAAM,QAAQ,EAAE,QAAA,EAAS;AAChD,QAAA,KAAA,GAAQ,QAAA,CAAS,KAAA;AACjB,QAAA,MAAA,GAAS,QAAA,CAAS,MAAA;AAAA,MACpB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA,EAAM,YAAA;AAAA,MACN,GAAA;AAAA,MACA,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,YAAY,KAAA,CAAM;AAAA,KACpB;AAAA,EACF;AAAA,EAEQ,gBAAgB,SAAA,EAA2B;AACjD,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA;AAEjC,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,OAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAA;AAMO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,IAAI,KAAA,KAAU,GAAG,OAAO,KAAA;AACxB,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,EAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AACpC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAClD,EAAA,OAAO,CAAA,EAAG,UAAA,CAAA,CAAY,KAAA,GAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,CAAC,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACvE;AAEO,SAAS,eAAe,EAAA,EAAoB;AACjD,EAAA,IAAI,EAAA,GAAK,GAAA,EAAM,OAAO,CAAA,EAAG,EAAE,CAAA,EAAA,CAAA;AAC3B,EAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAClC;;;ACpMO,IAAM,kBAAN,MAAsB;AAAA,EACnB,MAAA;AAAA,EACA,OAAA;AAAA,EAER,YAAY,MAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,YAAA,CAAa,MAAM,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,QAAA,GAA4B;AAChC,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,OAAA,CAAQ,YAAA,EAAa;AAChD,IAAA,MAAM,UAAA,GAAaC,KAAK,IAAA,CAAK,IAAA,CAAK,OAAO,WAAA,EAAa,IAAA,CAAK,OAAO,gBAAgB,CAAA;AAGlF,IAAA,MAAMF,GAAAA,CAAG,SAAA,CAAUE,IAAAA,CAAK,OAAA,CAAQ,UAAU,CAAC,CAAA;AAG3C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,kBAAA,CAAmB,OAAO,CAAA;AAG/C,IAAA,MAAMF,GAAAA,CAAG,SAAA,CAAU,UAAA,EAAY,OAAA,EAAS,OAAO,CAAA;AAE/C,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAMQ,mBAAmB,OAAA,EAA+B;AACxD,IAAA,MAAM,aAAa,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,UAAU,EAAE,IAAA,EAAK;AACxD,IAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAE,CAAA,CAAE,IAAA,EAAK;AAExD,IAAA,OAAO,CAAA;AAAA;AAAA,cAAA,EAEK,OAAA,CAAQ,WAAA,CAAY,WAAA,EAAa;AAAA,iBAAA,EAC9B,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,sBAAA,EAqBR,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,MAAA,CAAO,IAAI,CAAC,EAAA,KAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,KAAK,IAAI,QAAQ,CAAA;AAAA,4BAAA,EAClE,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,CAAW,IAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,KAAK,IAAI,QAAQ,CAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,EAO1G,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,EAQrE,WAAW,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAA,CAAK,sBAAsB,GAAA,EAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,KAAK,EAAE,CAAC,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,YAAA,EA0CvF,QAAQ,OAAO,CAAA;AAAA,gBAAA,EACX,OAAA,CAAQ,WAAA,CAAY,WAAA,EAAa,CAAA;AAAA,eAAA,EAClC,QAAQ,KAAK,CAAA;AAAA,cAAA,EACd,IAAA,CAAK,SAAA,CAAU,UAAU,CAAC,CAAA;AAAA;AAAA,CAAA;AAAA,EAGxC;AAAA,EAEQ,mBAAmB,GAAA,EAAwB;AACjD,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,IAAI,GAAA,CAAI,EAAA;AAAA,MACR,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,KAAK,GAAA,CAAI,GAAA;AAAA,MACT,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,MAAM,GAAA,CAAI;AAAA,KACZ;AAEA,IAAA,IAAI,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,KAAA,GAAQ,GAAA,CAAI,KAAA;AAChC,IAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,GAAA,CAAI,MAAA;AAElC,IAAA,OAAO,MAAM,GAAA,CAAI,EAAE,CAAA,GAAA,EAAM,IAAA,CAAK,UAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,CAAE,QAAQ,KAAA,EAAO,MAAM,EAAE,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA,CAAA;AAAA,EACpG;AAAA,EAEQ,qBAAA,CAAsB,UAAkB,MAAA,EAA6B;AAC3E,IAAA,MAAM,SAAA,GAAY,OAAO,GAAA,CAAI,CAAC,QAAQ,CAAA,QAAA,EAAW,GAAA,CAAI,EAAE,CAAA,EAAA,CAAI,CAAA;AAC3D,IAAA,OAAO,MAAM,QAAQ,CAAA,IAAA,EAAO,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,EAClD;AACF,CAAA;ACxIO,IAAM,iBAAN,MAAqB;AAAA,EAClB,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EAER,YAAY,MAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,EAC3B;AAAA,EAEQ,mBAAA,GAA4B;AAClC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,YAAA,IAAgB,QAAQ,GAAA,CAAI,cAAA;AAC1D,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,eAAA,IAAmB,QAAQ,GAAA,CAAI,iBAAA;AAEhE,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,SAAS,IAAI,MAAA,CAAO,EAAE,MAAA,EAAQ,WAAW,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAA,CAAK,YAAY,IAAI,SAAA,CAAU,EAAE,MAAA,EAAQ,cAAc,CAAA;AAAA,IACzD;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,aAAa,QAAA,EAAU;AACrD,MAAA,MAAM,IAAI,MAAM,6EAA6E,CAAA;AAAA,IAC/F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS,OAAA,EAAqD;AAClE,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,IAAI;AAEF,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,MAAM,CAAA;AAGlD,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,kBAAA,CAAmB,UAAU,CAAA;AAG1D,MAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,IAAY,IAAA,CAAK,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AACzE,MAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,SAAA;AAGrC,MAAA,MAAM,YAAYE,IAAAA,CAAK,IAAA;AAAA,QACrB,KAAK,MAAA,CAAO,WAAA;AAAA,QACZ,KAAK,MAAA,CAAO,SAAA;AAAA,QACZ;AAAA,OACF;AACA,MAAA,MAAMF,GAAAA,CAAG,UAAU,SAAS,CAAA;AAG5B,MAAA,MAAM,eAAeE,IAAAA,CAAK,IAAA,CAAK,SAAA,EAAW,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAM,CAAA;AAC3D,MAAA,MAAMF,IAAG,SAAA,CAAU,YAAA,EAAc,OAAO,IAAA,CAAK,SAAA,EAAW,QAAQ,CAAC,CAAA;AAGjE,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,MAAA;AACpD,MAAA,IAAI,SAAA,GAAY,YAAA;AAEhB,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,SAAA,GAAY,MAAM,IAAA,CAAK,WAAA,CAAY,YAAA,EAAc,aAAa,CAAA;AAE9D,QAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,UAAA,MAAMA,GAAAA,CAAG,OAAO,YAAY,CAAA;AAAA,QAC9B;AAAA,MACF;AAGA,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,YAAA,CAAa,WAAW,QAAQ,CAAA;AAG7D,MAAA,SAAA,CAAU,QAAA,GAAW;AAAA,QACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,OAAA,EAAS,QAAQ,QAAA,EAAU,OAAA;AAAA,QAC3B,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,QAAA;AAAA,QACA,WAAA,sBAAiB,IAAA,EAAK;AAAA,QACtB,KAAA,EAAO;AAAA,OACT;AAEA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE9B,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,SAAA;AAAA,QACX,UAAU,SAAA,CAAU,GAAA;AAAA,QACpB,SAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAA;AAAA,QAChD,QAAA,EAAU,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,OACzB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,OAAA,EAAqD;AACvE,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,UAA8B,EAAC;AACrC,IAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,CAAA;AAC3C,IAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,IAAgB,GAAA;AAG7C,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,QAAQ,KAAA,CAAM,MAAA,EAAQ,KAAK,WAAA,EAAa;AAC1D,MAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,IAAI,WAAW,CAAA;AAEpD,MAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,GAAA,CAAI,OAAO,IAAA,KAAS;AAC9C,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS;AAAA,UACjC,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,UAAU,IAAA,CAAK;AAAA,SAChB,CAAA;AACD,QAAA,OAAO,MAAA;AAAA,MACT,CAAC,CAAA;AAED,MAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AAEpD,MAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AACjC,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,QAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,UAAA,OAAA,CAAQ,WAAW,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,KAAA,CAAM,QAAQ,MAAM,CAAA;AAAA,QACjE;AAAA,MACF;AAGA,MAAA,IAAI,CAAA,GAAI,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ;AAC1C,QAAA,MAAM,IAAA,CAAK,MAAM,YAAY,CAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAO,OAAA,CAAQ,MAAA;AAAA,MACf,SAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAA,CAAE,MAAA;AAAA,MAC1C,MAAA,EAAQ,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,OAAO,CAAA,CAAE,MAAA;AAAA,MAC1C,OAAA;AAAA,MACA,QAAA,EAAU,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,KACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAA,CACJ,UAAA,EACA,OAAA,EACgE;AAChE,IAAA,MAAM,YAAA,GAAe,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,EAMvB,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA,cAAA,EAAiB,KAAK,MAAA,CAAO,MAAM,KAAK,EAAE;AAAA,EAC/D,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA,cAAA,EAAiB,KAAK,MAAA,CAAO,MAAM,KAAK,EAAE;;AAAA,8EAAA,CAAA;AAI7D,IAAA,MAAM,UAAA,GAAa,OAAA,GACf,CAAA,aAAA,EAAgB,UAAU;AAAA,SAAA,EAAc,OAAO,CAAA,CAAA,GAC/C,CAAA,aAAA,EAAgB,UAAU,CAAA,CAAA;AAE9B,IAAA,IAAI,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,aAAa,WAAA,EAAa;AAC1D,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,SAAA,CAAU,SAAS,MAAA,CAAO;AAAA,QACpD,KAAA,EAAO,4BAAA;AAAA,QACP,UAAA,EAAY,GAAA;AAAA,QACZ,QAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,GAAG,YAAY;;AAAA,EAAO,UAAU,CAAA,CAAA;AAAG;AAC9D,OACD,CAAA;AAED,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,CAAE,IAAA,KAAS,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,CAAE,IAAA,GAAO,EAAA;AAC9E,MAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IACxB;AAEA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,YAAY,MAAA,CAAO;AAAA,QACzD,KAAA,EAAO,qBAAA;AAAA,QACP,QAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,YAAA,EAAa;AAAA,UACxC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,UAAA;AAAW,SACtC;AAAA,QACA,UAAA,EAAY,GAAA;AAAA,QACZ,WAAA,EAAa,GAAA;AAAA,QACb,eAAA,EAAiB,EAAE,IAAA,EAAM,aAAA;AAAc,OACxC,CAAA;AAED,MAAA,MAAM,OAAO,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,SAAS,OAAA,IAAW,IAAA;AACtD,MAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IACxB;AAEA,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,mBAAmB,MAAA,EAAiC;AAChE,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,QAAA,CAAS;AAAA,MACjD,KAAA,EAAO,UAAA;AAAA,MACP,MAAA;AAAA,MACA,CAAA,EAAG,CAAA;AAAA,MACH,IAAA,EAAM,KAAK,MAAA,CAAO,IAAA;AAAA,MAClB,OAAA,EAAS,KAAK,MAAA,CAAO,OAAA;AAAA,MACrB,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,SAAA;AAAA,MACjC,eAAA,EAAiB;AAAA,KAClB,CAAA;AAED,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,EAAG,QAAA;AACtC,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,IACtD;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,MAAc,WAAA,CACZ,SAAA,EACA,OAAA,EACiB;AACjB,IAAA,MAAM,EAAE,OAAO,MAAA,EAAQ,OAAA,GAAU,IAAI,MAAA,GAAS,MAAA,EAAQ,GAAA,GAAM,QAAA,EAAS,GAAI,OAAA;AAEzE,IAAA,IAAI,QAAA,GAAWC,OAAM,SAAS,CAAA;AAG9B,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,QAAA,GAAW,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ;AAAA,QACxC,GAAA;AAAA,QACA,kBAAA,EAAoB;AAAA,OACrB,CAAA;AAAA,IACH;AAGA,IAAA,MAAM,aAAa,SAAA,CAAU,OAAA,CAAQ,UAAA,EAAY,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AAE7D,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,MAAA;AACH,QAAA,QAAA,GAAW,QAAA,CAAS,IAAA,CAAK,EAAE,OAAA,EAAS,CAAA;AACpC,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,QAAA,GAAW,QAAA,CAAS,IAAA,CAAK,EAAE,OAAA,EAAS,CAAA;AACpC,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,EAAE,OAAA,EAAS,CAAA;AACnC,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,QAAA,GAAW,QAAA,CAAS,IAAA,CAAK,EAAE,OAAA,EAAS,CAAA;AACpC,QAAA;AAAA;AAGJ,IAAA,MAAM,QAAA,CAAS,OAAO,UAAU,CAAA;AAChC,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEA,MAAc,YAAA,CAAa,SAAA,EAAmB,QAAA,EAAsC;AAClF,IAAA,MAAM,KAAA,GAAQ,MAAMD,GAAAA,CAAG,IAAA,CAAK,SAAS,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,MAAMC,MAAAA,CAAM,SAAS,EAAE,QAAA,EAAS;AACjD,IAAA,MAAM,QAAA,GAAWC,IAAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AACxC,IAAA,MAAM,YAAYA,IAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,CAAE,MAAM,CAAC,CAAA;AAChD,IAAA,MAAM,KAAKA,IAAAA,CAAK,QAAA,CAAS,UAAUA,IAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAGzD,IAAA,MAAM,SAAA,GAAYA,KAAK,IAAA,CAAK,IAAA,CAAK,OAAO,WAAA,EAAa,IAAA,CAAK,OAAO,SAAS,CAAA;AAC1E,IAAA,MAAM,YAAA,GAAeA,IAAAA,CAAK,QAAA,CAAS,SAAA,EAAW,SAAS,CAAA;AACvD,IAAA,MAAM,GAAA,GAAM,GAAA,GAAM,YAAA,CAAa,OAAA,CAAQ,OAAO,GAAG,CAAA;AAEjD,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA,EAAM,YAAA;AAAA,MACN,GAAA;AAAA,MACA,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,YAAY,KAAA,CAAM;AAAA,KACpB;AAAA,EACF;AAAA,EAEQ,YAAY,UAAA,EAA4B;AAC9C,IAAA,MAAM,QAAkB,EAAC;AAEzB,IAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,MAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,IAC/B;AAEA,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAErB,IAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,MAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,IAC/B;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,EACvB;AAAA,EAEQ,iBAAiB,MAAA,EAAwB;AAC/C,IAAA,OAAO,MAAA,CACJ,WAAA,EAAY,CACZ,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAA,CAC1B,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,SAAA,CAAU,GAAG,EAAE,CAAA;AAAA,EACpB;AAAA,EAEQ,MAAM,EAAA,EAA2B;AACvC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,EACzD;AACF,CAAA;;;ACxUO,IAAM,aAAN,MAAiB;AAAA,EACd,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EAER,YAAY,MAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,cAAA,CAAe,MAAM,CAAA;AAC1C,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,YAAA,CAAa,MAAM,CAAA;AACtC,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAI,eAAA,CAAgB,MAAM,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,GAA6B;AACjC,IAAA,IAAA,CAAK,WAAA,EAAY;AAEjB,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,SAAS,MAAA,CAAO;AAAA,UACvC;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,4BAA4B,CAAA;AAAA,YAChD,OAAA,EAAS;AAAA,cACP,EAAE,MAAM,CAAA,EAAG,KAAA,CAAM,MAAM,WAAI,CAAC,CAAA,2BAAA,CAAA,EAA+B,KAAA,EAAO,UAAA,EAAW;AAAA,cAC7E,EAAE,MAAM,CAAA,EAAG,KAAA,CAAM,KAAK,QAAG,CAAC,CAAA,iCAAA,CAAA,EAAqC,KAAA,EAAO,SAAA,EAAU;AAAA,cAChF,EAAE,MAAM,CAAA,EAAG,KAAA,CAAM,OAAO,WAAI,CAAC,CAAA,sBAAA,CAAA,EAA0B,KAAA,EAAO,OAAA,EAAQ;AAAA,cACtE,IAAI,SAAS,SAAA,EAAU;AAAA,cACvB,EAAE,MAAM,CAAA,EAAG,KAAA,CAAM,QAAQ,WAAI,CAAC,CAAA,sBAAA,CAAA,EAA0B,KAAA,EAAO,MAAA,EAAO;AAAA,cACtE,EAAE,MAAM,CAAA,EAAG,KAAA,CAAM,KAAK,QAAG,CAAC,CAAA,sBAAA,CAAA,EAA0B,KAAA,EAAO,MAAA,EAAO;AAAA,cAClE,EAAE,MAAM,CAAA,EAAG,KAAA,CAAM,MAAM,WAAI,CAAC,CAAA,gBAAA,CAAA,EAAoB,KAAA,EAAO,OAAA,EAAQ;AAAA,cAC/D,IAAI,SAAS,SAAA,EAAU;AAAA,cACvB,EAAE,MAAM,CAAA,EAAG,KAAA,CAAM,KAAK,cAAI,CAAC,CAAA,UAAA,CAAA,EAAc,KAAA,EAAO,UAAA,EAAW;AAAA,cAC3D,EAAE,MAAM,CAAA,EAAG,KAAA,CAAM,IAAI,WAAI,CAAC,CAAA,KAAA,CAAA,EAAS,KAAA,EAAO,MAAA;AAAO;AACnD;AACF,SACD,CAAA;AAED,QAAA,QAAQ,MAAA;AAAQ,UACd,KAAK,UAAA;AACH,YAAA,MAAM,KAAK,cAAA,EAAe;AAC1B,YAAA;AAAA,UACF,KAAK,SAAA;AACH,YAAA,MAAM,KAAK,aAAA,EAAc;AACzB,YAAA;AAAA,UACF,KAAK,OAAA;AACH,YAAA,MAAM,KAAK,WAAA,EAAY;AACvB,YAAA;AAAA,UACF,KAAK,MAAA;AACH,YAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,YAAA;AAAA,UACF,KAAK,MAAA;AACH,YAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,YAAA;AAAA,UACF,KAAK,OAAA;AACH,YAAA,MAAM,KAAK,SAAA,EAAU;AACrB,YAAA;AAAA,UACF,KAAK,UAAA;AACH,YAAA,MAAM,KAAK,YAAA,EAAa;AACxB,YAAA;AAAA,UACF,KAAK,MAAA;AACH,YAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,wBAAiB,CAAC,CAAA;AACzC,YAAA;AAAA;AAGJ,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,MAChB,SAAS,KAAA,EAAO;AAEd,QAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,iBAAA,EAAmB;AAC9D,UAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,0BAAmB,CAAC,CAAA;AAC3C,UAAA;AAAA,QACF;AACA,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS,OAAA,EAAyC;AACtD,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,qBAAqB,CAAA,CAAE,KAAA,EAAM;AAEjD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,CAAU,SAAS,OAAO,CAAA;AAEpD,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,+BAA+B,CAAC,CAAA;AAC5D,QAAA,OAAA,CAAQ,IAAI,KAAA,CAAM,IAAA,CAAK,WAAW,MAAA,CAAO,SAAS,EAAE,CAAC,CAAA;AACrD,QAAA,OAAA,CAAQ,IAAI,KAAA,CAAM,IAAA,CAAK,WAAW,MAAA,CAAO,QAAQ,EAAE,CAAC,CAAA;AACpD,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,cAAA,CAAe,OAAO,QAAA,IAAY,CAAC,CAAC,CAAA,CAAE,CAAC,CAAA;AAAA,MAC3E,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,KAAK,KAAA,CAAM,GAAA,CAAI,sBAAsB,MAAA,CAAO,KAAK,EAAE,CAAC,CAAA;AAAA,MAC9D;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAC,CAAA;AAAA,IAC9F;AAAA,EACF;AAAA,EAEA,MAAM,IAAA,CAAK,OAAA,GAAuB,EAAC,EAAkB;AACnD,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,oBAAoB,CAAA,CAAE,KAAA,EAAM;AAEhD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,OAAO,CAAA;AAC9C,MAAA,OAAA,CAAQ,QAAQ,KAAA,CAAM,KAAA,CAAM,SAAS,MAAA,CAAO,KAAK,SAAS,CAAC,CAAA;AAE3D,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,cAAA,EAAiB,YAAY,MAAA,CAAO,SAAS,CAAC,CAAA,CAAE,CAAC,CAAA;AACxE,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,cAAA,EAAiB,eAAe,MAAA,CAAO,YAAY,CAAC,CAAA,CAAE,CAAC,CAAA;AAG9E,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,iBAAiB,CAAC,CAAA;AACzC,MAAA,KAAA,MAAW,CAAC,UAAU,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,EAAG;AAClE,QAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,IAAA,EAAO,QAAQ,CAAA,EAAA,EAAK,MAAA,CAAO,MAAM,CAAA,OAAA,CAAS,CAAC,CAAA;AAAA,MACpE;AAGA,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,iBAAiB,CAAC,CAAA;AACzC,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA,EAAG;AAC7D,QAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,GAAG,CAAA,EAAA,EAAK,KAAK,QAAQ,CAAC,CAAA;AAAA,MACvD;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAC,CAAA;AAAA,IAC9F;AAAA,EACF;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,6BAA6B,CAAA,CAAE,KAAA,EAAM;AAEzD,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,eAAA,CAAgB,QAAA,EAAS;AACvD,MAAA,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,6BAA6B,CAAC,CAAA;AAC1D,MAAA,OAAA,CAAQ,IAAI,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,UAAU,EAAE,CAAC,CAAA;AAAA,IACnD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAC,CAAA;AAAA,IAC9F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAAA,GAAgC;AAC5C,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,0BAAA;AAAA,QACT,UAAU,CAAC,KAAA,KAAkB,KAAA,CAAM,IAAA,KAAS,IAAA,GAAO;AAAA,OACrD;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS,qCAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAED,IAAA,MAAM,KAAK,QAAA,CAAS;AAAA,MAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,QAAA,EAAU,QAAQ,QAAA,IAAY,MAAA;AAAA,MAC9B,UAAU,OAAA,CAAQ;AAAA,KACnB,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,aAAA,GAA+B;AAC3C,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,EAAS,yBAAA;AAAA,QACT,UAAU,CAAC,KAAA,KAAkB,KAAA,CAAM,IAAA,KAAS,IAAA,GAAO;AAAA,OACrD;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS,qCAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAED,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,6BAA6B,CAAA,CAAE,KAAA,EAAM;AAEzD,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,SAAA,CAAU,aAAA;AAAA,QACpC,OAAA,CAAQ,WAAA;AAAA,QACR,QAAQ,OAAA,IAAW,KAAA;AAAA,OACrB;AAEA,MAAA,OAAA,CAAQ,QAAQ,kBAAkB,CAAA;AAClC,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,sBAAsB,CAAC,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,SAAS,MAAM;AAAA,CAAI,CAAC,CAAA;AAChD,MAAA,OAAA,CAAQ,IAAI,KAAA,CAAM,IAAA,CAAK,eAAe,QAAA,CAAS,QAAQ,EAAE,CAAC,CAAA;AAC1D,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,SAAS,OAAO;AAAA,CAAI,CAAC,CAAA;AAE3D,MAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAM,SAAS,MAAA,CAAO;AAAA,QACxC;AAAA,UACE,IAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAM,SAAA;AAAA,UACN,OAAA,EAAS,kCAAA;AAAA,UACT,OAAA,EAAS;AAAA;AACX,OACD,CAAA;AAED,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,KAAK,QAAA,CAAS;AAAA,UAClB,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,UAAU,QAAA,CAAS,QAAA;AAAA,UACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,QAAA,EAAU,EAAE,OAAA,EAAS,QAAA,CAAS,OAAA;AAAQ,SACvC,CAAA;AAAA,MACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAC,CAAA;AAAA,IAC9F;AAAA,EACF;AAAA,EAEA,MAAc,WAAA,GAA6B;AACzC,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,yDAAyD,CAAC,CAAA;AAEjF,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,SAAS,MAAA,CAAO;AAAA,QACvC;AAAA,UACE,IAAA,EAAM,OAAA;AAAA,UACN,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,KAAK,UAAU,CAAA,CAAA;AAAA;AAC1B,OACD,CAAA;AAED,MAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAK,EAAG;AACpB,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,MAAA,UAAA,EAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,uBAAuB,CAAC,CAAA;AACjD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAY,GAAI,MAAM,SAAS,MAAA,CAAO;AAAA,MACtD;AAAA,QACE,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS,0BAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,EAAS,qBAAA;AAAA,QACT,OAAA,EAAS;AAAA,UACP,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,CAAA,EAAE;AAAA,UACnC,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,CAAA,EAAE;AAAA,UACjC,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,CAAA;AAAE,SAC/B;AAAA,QACA,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAED,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK;AAAA,aAAA,EAAkB,QAAQ,MAAM,CAAA;AAAA,CAAc,CAAC,CAAA;AAEtE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,CAAU,aAAA,CAAc;AAAA,MAChD,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,CAAA,MAAO;AAAA,QACjC,MAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAU,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA;AAAA,OACxC,CAAE,CAAA;AAAA,MACF,WAAA;AAAA,MACA,UAAA,EAAY,CAAC,OAAA,EAAS,KAAA,EAAO,GAAA,KAAQ;AACnC,QAAA,MAAM,MAAA,GAAS,IAAI,OAAA,GAAU,KAAA,CAAM,MAAM,QAAG,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,QAAG,CAAA;AAC7D,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,MAAM,IAAI,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,MAC/C;AAAA,KACD,CAAA;AAED,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,qBAAqB,CAAC,CAAA;AAC7C,IAAA,OAAA,CAAQ,IAAI,KAAA,CAAM,IAAA,CAAK,cAAc,MAAA,CAAO,OAAO,EAAE,CAAC,CAAA;AACtD,IAAA,OAAA,CAAQ,IAAI,KAAA,CAAM,IAAA,CAAK,cAAc,MAAA,CAAO,MAAM,EAAE,CAAC,CAAA;AACrD,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,WAAA,EAAc,eAAe,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAE,CAAC,CAAA;AAAA,EACzE;AAAA,EAEA,MAAc,OAAA,GAAyB;AACrC,IAAA,MAAM,KAAK,IAAA,EAAK;AAAA,EAClB;AAAA,EAEA,MAAc,OAAA,GAAyB;AACrC,IAAA,MAAM,KAAK,IAAA,EAAK;AAAA,EAClB;AAAA,EAEA,MAAc,SAAA,GAA2B;AACvC,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,yBAAyB,CAAA,CAAE,KAAA,EAAM;AAErD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAK;AACvC,MAAA,OAAA,CAAQ,IAAA,EAAK;AAEb,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,kCAA2B,CAAC,CAAA;AACnD,MAAA,OAAA,CAAQ,IAAI,KAAA,CAAM,KAAA,CAAM,sBAAsB,MAAA,CAAO,KAAK,EAAE,CAAC,CAAA;AAC7D,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,KAAA,CAAM,CAAA,mBAAA,EAAsB,YAAY,MAAA,CAAO,SAAS,CAAC,CAAA,CAAE,CAAC,CAAA;AAC9E,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,CAAA,mBAAA,EAAsB,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,CAAE,MAAM,CAAA,CAAE,CAAC,CAAA;AAEtF,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,kBAAkB,CAAC,CAAA;AAC1C,MAAA,KAAA,MAAW,CAAC,UAAU,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,CAAC,CAAA,CAAE,SAAS,CAAA,CAAE,CAAC,CAAA,CAAE,MAAM,CAAA,EAAG;AAC5G,QAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CAAO,CAAC,KAAK,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAI,IAAA,EAAM,CAAC,CAAA;AAC1D,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,QAAA,CAAS,OAAO,EAAE,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,MAAA,CAAO,QAAA,GAAW,QAAA,CAAS,CAAC,CAAC,CAAA,SAAA,EAAY,WAAA,CAAY,IAAI,EAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAE,CAAC,CAAA;AAAA,MACxI;AAEA,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAC3C,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,WAAW,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG;AACzF,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,GAAA,CAAI,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,MAAA,CAAQ,CAAC,CAAA;AAAA,MAChE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,CAAE,CAAC,CAAA;AAAA,IAC9F;AAAA,EACF;AAAA,EAEA,MAAc,YAAA,GAA8B;AAC1C,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,sCAA4B,CAAC,CAAA;AACpD,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,KAAK,MAAA,CAAO,QAAQ,EAAE,CAAC,CAAA;AACjE,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,KAAK,MAAA,CAAO,IAAI,EAAE,CAAC,CAAA;AAC7D,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,KAAK,MAAA,CAAO,OAAO,EAAE,CAAC,CAAA;AAChE,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,KAAK,MAAA,CAAO,SAAS,EAAE,CAAC,CAAA;AAClE,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,KAAK,MAAA,CAAO,gBAAgB,EAAE,CAAC,CAAA;AAEzE,IAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,sBAAsB,CAAC,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,MAAA,CAAO,KAAA,IAAS,MAAM,CAAA,CAAE,CAAC,CAAA;AAC5E,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,MAAA,CAAO,MAAA,IAAU,MAAM,CAAA,CAAE,CAAC,CAAA;AAC7E,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,KAAK,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,CAAC,CAAA;AACnE,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,KAAK,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,CAAE,CAAC,CAAA;AAAA,IACtE;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,OAAO,MAAA,EAAQ;AAC5C,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,uBAAuB,CAAC,CAAA;AAC/C,MAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,CAAK,CAAC,CAAA;AAAA,MACjF;AACA,MAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,CAAK,CAAC,CAAA;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMQ,WAAA,GAAoB;AAC1B,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,kRAAiD,CAAC,CAAA;AACzE,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,UAAK,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,mDAA4C,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,QAAG,CAAC,CAAA;AAChH,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,UAAK,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,6CAA6C,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,QAAG,CAAC,CAAA;AAC3G,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,kRAAiD,CAAC,CAAA;AACzE,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAChB;AACF","file":"index.js","sourcesContent":["import fs from 'fs-extra';\nimport { glob } from 'glob';\nimport path from 'path';\nimport sharp from 'sharp';\n\nimport type {\n Config,\n ImageInfo,\n ImageCatalog,\n ScanOptions,\n ScanResult,\n} from '../core/types';\n\n// ============================================================================\n// IMAGE SCANNER\n// ============================================================================\n\nconst DEFAULT_EXTENSIONS = ['png', 'jpg', 'jpeg', 'webp', 'avif', 'gif', 'svg'];\nconst DEFAULT_DIRECTORIES = ['static/images', 'images', 'assets'];\n\nexport class ImageScanner {\n private config: Config;\n\n constructor(config: Config) {\n this.config = config;\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // SCAN IMAGES\n // ──────────────────────────────────────────────────────────────────────────\n\n async scan(options: ScanOptions = {}): Promise<ScanResult> {\n const startTime = Date.now();\n\n const {\n directories = DEFAULT_DIRECTORIES,\n extensions = DEFAULT_EXTENSIONS,\n includeDimensions = true,\n recursive = true,\n } = options;\n\n const publicDir = path.join(this.config.projectRoot, this.config.publicDir);\n const images: ImageInfo[] = [];\n const byCategory: Record<string, ImageInfo[]> = {};\n const byExtension: Record<string, number> = {};\n let totalSize = 0;\n\n // Build glob patterns\n const patterns = directories.flatMap((dir) => {\n const basePath = path.join(publicDir, dir);\n const extPattern = `*.{${extensions.join(',')}}`;\n return recursive\n ? [path.join(basePath, '**', extPattern)]\n : [path.join(basePath, extPattern)];\n });\n\n // Find all images\n for (const pattern of patterns) {\n const files = await glob(pattern, { nodir: true });\n\n for (const filePath of files) {\n try {\n const imageInfo = await this.processImage(filePath, publicDir, includeDimensions);\n images.push(imageInfo);\n\n // Update stats\n totalSize += imageInfo.size;\n byExtension[imageInfo.extension] = (byExtension[imageInfo.extension] || 0) + 1;\n\n // Group by category (directory name)\n const category = this.extractCategory(imageInfo.path);\n if (!byCategory[category]) {\n byCategory[category] = [];\n }\n byCategory[category].push(imageInfo);\n } catch (error) {\n console.warn(`Failed to process image: ${filePath}`, error);\n }\n }\n }\n\n // Sort images by modification date (newest first)\n images.sort((a, b) => b.modifiedAt.getTime() - a.modifiedAt.getTime());\n\n return {\n images,\n total: images.length,\n byCategory,\n byExtension,\n totalSize,\n scanDuration: Date.now() - startTime,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // BUILD CATALOG\n // ──────────────────────────────────────────────────────────────────────────\n\n async buildCatalog(options: ScanOptions = {}): Promise<ImageCatalog> {\n const scanResult = await this.scan(options);\n\n const byId: Record<string, ImageInfo> = {};\n for (const image of scanResult.images) {\n byId[image.id] = image;\n }\n\n return {\n version: '1.0.0',\n generatedAt: new Date(),\n count: scanResult.total,\n categories: scanResult.byCategory,\n images: scanResult.images,\n byId,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // FIND SPECIFIC IMAGES\n // ──────────────────────────────────────────────────────────────────────────\n\n async findByCategory(category: string): Promise<ImageInfo[]> {\n const scanResult = await this.scan();\n return scanResult.byCategory[category] || [];\n }\n\n async findById(id: string): Promise<ImageInfo | undefined> {\n const scanResult = await this.scan();\n return scanResult.images.find((img) => img.id === id);\n }\n\n async findByExtension(extension: string): Promise<ImageInfo[]> {\n const scanResult = await this.scan();\n return scanResult.images.filter((img) => img.extension === extension);\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // PRIVATE METHODS\n // ──────────────────────────────────────────────────────────────────────────\n\n private async processImage(\n filePath: string,\n publicDir: string,\n includeDimensions: boolean\n ): Promise<ImageInfo> {\n const stats = await fs.stat(filePath);\n const filename = path.basename(filePath);\n const extension = path.extname(filename).slice(1).toLowerCase();\n const id = path.basename(filename, path.extname(filename));\n\n // Calculate paths\n const relativePath = path.relative(publicDir, filePath).replace(/\\\\/g, '/');\n const url = '/' + relativePath;\n\n let width: number | undefined;\n let height: number | undefined;\n\n // Get dimensions if requested (skip for SVG)\n if (includeDimensions && extension !== 'svg') {\n try {\n const metadata = await sharp(filePath).metadata();\n width = metadata.width;\n height = metadata.height;\n } catch {\n // Ignore dimension errors\n }\n }\n\n return {\n id,\n filename,\n extension,\n path: relativePath,\n url,\n size: stats.size,\n width,\n height,\n createdAt: stats.birthtime,\n modifiedAt: stats.mtime,\n };\n }\n\n private extractCategory(imagePath: string): string {\n const parts = imagePath.split('/');\n // Return parent directory or 'root'\n if (parts.length > 1) {\n return parts[parts.length - 2];\n }\n return 'root';\n }\n}\n\n// ============================================================================\n// STATS & UTILITIES\n// ============================================================================\n\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n}\n\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n}\n","import fs from 'fs-extra';\nimport path from 'path';\n\nimport { ImageScanner } from '../scanner';\n\nimport type { Config, ImageCatalog, ImageInfo } from '../core/types';\n// ============================================================================\n// TYPESCRIPT CONFIG GENERATOR\n// ============================================================================\n\nexport class ConfigGenerator {\n private config: Config;\n private scanner: ImageScanner;\n\n constructor(config: Config) {\n this.config = config;\n this.scanner = new ImageScanner(config);\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // GENERATE IMAGES.TS\n // ──────────────────────────────────────────────────────────────────────────\n\n async generate(): Promise<string> {\n const catalog = await this.scanner.buildCatalog();\n const outputPath = path.join(this.config.projectRoot, this.config.configOutputPath);\n\n // Ensure directory exists\n await fs.ensureDir(path.dirname(outputPath));\n\n // Generate TypeScript content\n const content = this.generateTypeScript(catalog);\n\n // Write file\n await fs.writeFile(outputPath, content, 'utf-8');\n\n return outputPath;\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // TYPESCRIPT GENERATION\n // ──────────────────────────────────────────────────────────────────────────\n\n private generateTypeScript(catalog: ImageCatalog): string {\n const categories = Object.keys(catalog.categories).sort();\n const allIds = catalog.images.map((img) => img.id).sort();\n\n return `/**\n * Auto-generated image catalog\n * Generated: ${catalog.generatedAt.toISOString()}\n * Total images: ${catalog.count}\n *\n * DO NOT EDIT - This file is auto-generated by @djangocfg/imgai\n * Run \\`imgai sync\\` to regenerate\n */\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ImageData {\n id: string;\n filename: string;\n url: string;\n path: string;\n extension: string;\n width?: number;\n height?: number;\n size: number;\n}\n\nexport type ImageId = ${allIds.length > 0 ? allIds.map((id) => `'${id}'`).join(' | ') : 'string'};\nexport type ImageCategory = ${categories.length > 0 ? categories.map((c) => `'${c}'`).join(' | ') : 'string'};\n\n// ============================================================================\n// IMAGE CATALOG\n// ============================================================================\n\nexport const IMAGES: Record<ImageId, ImageData> = {\n${catalog.images.map((img) => this.generateImageEntry(img)).join(',\\n')}\n} as const;\n\n// ============================================================================\n// BY CATEGORY\n// ============================================================================\n\nexport const IMAGES_BY_CATEGORY: Record<ImageCategory, readonly ImageData[]> = {\n${categories.map((cat) => this.generateCategoryEntry(cat, catalog.categories[cat] || [])).join(',\\n')}\n} as const;\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\n/** Get image by ID */\nexport function getImage(id: ImageId): ImageData | undefined {\n return IMAGES[id];\n}\n\n/** Get image URL by ID */\nexport function getImageUrl(id: ImageId): string | undefined {\n return IMAGES[id]?.url;\n}\n\n/** Get all images in category */\nexport function getImagesByCategory(category: ImageCategory): readonly ImageData[] {\n return IMAGES_BY_CATEGORY[category] || [];\n}\n\n/** Get all image IDs */\nexport function getAllImageIds(): ImageId[] {\n return Object.keys(IMAGES) as ImageId[];\n}\n\n/** Get all categories */\nexport function getAllCategories(): ImageCategory[] {\n return Object.keys(IMAGES_BY_CATEGORY) as ImageCategory[];\n}\n\n/** Check if image exists */\nexport function hasImage(id: string): id is ImageId {\n return id in IMAGES;\n}\n\n// ============================================================================\n// METADATA\n// ============================================================================\n\nexport const IMAGE_CATALOG_META = {\n version: '${catalog.version}',\n generatedAt: '${catalog.generatedAt.toISOString()}',\n totalImages: ${catalog.count},\n categories: ${JSON.stringify(categories)},\n} as const;\n`;\n }\n\n private generateImageEntry(img: ImageInfo): string {\n const data: Record<string, unknown> = {\n id: img.id,\n filename: img.filename,\n url: img.url,\n path: img.path,\n extension: img.extension,\n size: img.size,\n };\n\n if (img.width) data.width = img.width;\n if (img.height) data.height = img.height;\n\n return ` '${img.id}': ${JSON.stringify(data, null, 4).replace(/\\n/g, '\\n ').replace(/}$/, ' }')}`;\n }\n\n private generateCategoryEntry(category: string, images: ImageInfo[]): string {\n const imageRefs = images.map((img) => `IMAGES['${img.id}']`);\n return ` '${category}': [${imageRefs.join(', ')}]`;\n }\n}\n\n// ============================================================================\n// QUICK CONFIG GENERATOR\n// ============================================================================\n\nexport async function generateImagesConfig(config: Config): Promise<string> {\n const generator = new ConfigGenerator(config);\n return generator.generate();\n}\n","import fs from 'fs-extra';\nimport OpenAI from 'openai';\nimport path from 'path';\nimport sharp from 'sharp';\n\nimport Anthropic from '@anthropic-ai/sdk';\n\nimport type {\n Config,\n GenerateOptions,\n GenerationResult,\n BatchGenerateOptions,\n BatchResult,\n ImageInfo,\n ResizeOptions,\n} from './types';\n\n// ============================================================================\n// AI IMAGE GENERATOR\n// ============================================================================\n\nexport class ImageGenerator {\n private config: Config;\n private openai?: OpenAI;\n private anthropic?: Anthropic;\n\n constructor(config: Config) {\n this.config = config;\n this.initializeProviders();\n }\n\n private initializeProviders(): void {\n const openaiKey = this.config.openaiApiKey || process.env.OPENAI_API_KEY;\n const anthropicKey = this.config.anthropicApiKey || process.env.ANTHROPIC_API_KEY;\n\n if (openaiKey) {\n this.openai = new OpenAI({ apiKey: openaiKey });\n }\n\n if (anthropicKey) {\n this.anthropic = new Anthropic({ apiKey: anthropicKey });\n }\n\n if (!this.openai && this.config.provider === 'openai') {\n throw new Error('OpenAI API key required. Set OPENAI_API_KEY or pass openaiApiKey in config.');\n }\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // SINGLE IMAGE GENERATION\n // ──────────────────────────────────────────────────────────────────────────\n\n async generate(options: GenerateOptions): Promise<GenerationResult> {\n const startTime = Date.now();\n\n try {\n // Build full prompt with style\n const fullPrompt = this.buildPrompt(options.prompt);\n\n // Generate image using OpenAI DALL-E 3\n const imageData = await this.generateWithOpenAI(fullPrompt);\n\n // Generate filename\n const filename = options.filename || this.generateFilename(options.prompt);\n const category = options.category || 'general';\n\n // Determine output path\n const outputDir = path.join(\n this.config.projectRoot,\n this.config.outputDir,\n category\n );\n await fs.ensureDir(outputDir);\n\n // Save original image\n const originalPath = path.join(outputDir, `${filename}.png`);\n await fs.writeFile(originalPath, Buffer.from(imageData, 'base64'));\n\n // Resize if needed\n const resizeOptions = options.resize || this.config.resize;\n let finalPath = originalPath;\n\n if (resizeOptions) {\n finalPath = await this.resizeImage(originalPath, resizeOptions);\n // Remove original if format changed\n if (finalPath !== originalPath) {\n await fs.remove(originalPath);\n }\n }\n\n // Get image info\n const imageInfo = await this.getImageInfo(finalPath, category);\n\n // Add metadata\n imageInfo.metadata = {\n prompt: options.prompt,\n caption: options.metadata?.caption,\n tags: options.tags,\n category,\n generatedAt: new Date(),\n model: 'dall-e-3',\n };\n\n const duration = Date.now() - startTime;\n\n return {\n success: true,\n imagePath: finalPath,\n imageUrl: imageInfo.url,\n imageInfo,\n duration,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n duration: Date.now() - startTime,\n };\n }\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // BATCH GENERATION\n // ──────────────────────────────────────────────────────────────────────────\n\n async generateBatch(options: BatchGenerateOptions): Promise<BatchResult> {\n const startTime = Date.now();\n const results: GenerationResult[] = [];\n const concurrency = options.concurrency || 2;\n const delayBetween = options.delayBetween || 2000;\n\n // Process in batches\n for (let i = 0; i < options.items.length; i += concurrency) {\n const batch = options.items.slice(i, i + concurrency);\n\n const batchPromises = batch.map(async (item) => {\n const result = await this.generate({\n prompt: item.prompt,\n filename: item.filename,\n category: item.category,\n });\n return result;\n });\n\n const batchResults = await Promise.all(batchPromises);\n\n for (const result of batchResults) {\n results.push(result);\n if (options.onProgress) {\n options.onProgress(results.length, options.items.length, result);\n }\n }\n\n // Delay between batches\n if (i + concurrency < options.items.length) {\n await this.delay(delayBetween);\n }\n }\n\n return {\n total: results.length,\n success: results.filter((r) => r.success).length,\n failed: results.filter((r) => !r.success).length,\n results,\n duration: Date.now() - startTime,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // PROMPT ENHANCEMENT (using Claude/GPT)\n // ──────────────────────────────────────────────────────────────────────────\n\n async enhancePrompt(\n basePrompt: string,\n context?: string\n ): Promise<{ prompt: string; filename: string; caption: string }> {\n const systemPrompt = `You are an expert at creating image generation prompts.\nGiven a description, create:\n1. A detailed visual prompt (max 150 words) for DALL-E 3\n2. A descriptive filename (lowercase, hyphens, max 30 chars)\n3. A short caption (max 50 words)\n\n${this.config.prefix ? `Style prefix: ${this.config.prefix}` : ''}\n${this.config.suffix ? `Style suffix: ${this.config.suffix}` : ''}\n\nReturn ONLY valid JSON: {\"prompt\": \"...\", \"filename\": \"...\", \"caption\": \"...\"}`;\n\n const userPrompt = context\n ? `Description: ${basePrompt}\\nContext: ${context}`\n : `Description: ${basePrompt}`;\n\n if (this.anthropic && this.config.provider === 'anthropic') {\n const response = await this.anthropic.messages.create({\n model: 'claude-3-5-sonnet-20241022',\n max_tokens: 500,\n messages: [\n { role: 'user', content: `${systemPrompt}\\n\\n${userPrompt}` },\n ],\n });\n\n const text = response.content[0].type === 'text' ? response.content[0].text : '';\n return JSON.parse(text);\n }\n\n if (this.openai) {\n const response = await this.openai.chat.completions.create({\n model: 'gpt-4-turbo-preview',\n messages: [\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt },\n ],\n max_tokens: 500,\n temperature: 0.7,\n response_format: { type: 'json_object' },\n });\n\n const text = response.choices[0]?.message?.content || '{}';\n return JSON.parse(text);\n }\n\n throw new Error('No AI provider configured for prompt enhancement');\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // PRIVATE METHODS\n // ──────────────────────────────────────────────────────────────────────────\n\n private async generateWithOpenAI(prompt: string): Promise<string> {\n if (!this.openai) {\n throw new Error('OpenAI client not initialized');\n }\n\n const response = await this.openai.images.generate({\n model: 'dall-e-3',\n prompt,\n n: 1,\n size: this.config.size,\n quality: this.config.quality,\n style: this.config.dalleStyle || 'natural',\n response_format: 'b64_json',\n });\n\n const imageData = response.data?.[0]?.b64_json;\n if (!imageData) {\n throw new Error('No image data received from OpenAI');\n }\n\n return imageData;\n }\n\n private async resizeImage(\n inputPath: string,\n options: ResizeOptions\n ): Promise<string> {\n const { width, height, quality = 85, format = 'webp', fit = 'inside' } = options;\n\n let pipeline = sharp(inputPath);\n\n // Resize if dimensions provided\n if (width || height) {\n pipeline = pipeline.resize(width, height, {\n fit,\n withoutEnlargement: true,\n });\n }\n\n // Convert format\n const outputPath = inputPath.replace(/\\.[^.]+$/, `.${format}`);\n\n switch (format) {\n case 'webp':\n pipeline = pipeline.webp({ quality });\n break;\n case 'jpeg':\n pipeline = pipeline.jpeg({ quality });\n break;\n case 'png':\n pipeline = pipeline.png({ quality });\n break;\n case 'avif':\n pipeline = pipeline.avif({ quality });\n break;\n }\n\n await pipeline.toFile(outputPath);\n return outputPath;\n }\n\n private async getImageInfo(imagePath: string, category: string): Promise<ImageInfo> {\n const stats = await fs.stat(imagePath);\n const metadata = await sharp(imagePath).metadata();\n const filename = path.basename(imagePath);\n const extension = path.extname(filename).slice(1);\n const id = path.basename(filename, path.extname(filename));\n\n // Calculate relative path from public directory\n const publicDir = path.join(this.config.projectRoot, this.config.publicDir);\n const relativePath = path.relative(publicDir, imagePath);\n const url = '/' + relativePath.replace(/\\\\/g, '/');\n\n return {\n id,\n filename,\n extension,\n path: relativePath,\n url,\n size: stats.size,\n width: metadata.width,\n height: metadata.height,\n createdAt: stats.birthtime,\n modifiedAt: stats.mtime,\n };\n }\n\n private buildPrompt(basePrompt: string): string {\n const parts: string[] = [];\n\n if (this.config.prefix) {\n parts.push(this.config.prefix);\n }\n\n parts.push(basePrompt);\n\n if (this.config.suffix) {\n parts.push(this.config.suffix);\n }\n\n return parts.join(' ');\n }\n\n private generateFilename(prompt: string): string {\n return prompt\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, '')\n .replace(/\\s+/g, '-')\n .substring(0, 30);\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport ora from 'ora';\n\nimport { ConfigGenerator } from '../config/generator';\nimport { ImageGenerator } from '../core/generator';\nimport { formatBytes, formatDuration, ImageScanner } from '../scanner';\n\nimport type { Config, GenerateOptions, ScanOptions } from '../core/types';\n// ============================================================================\n// CLI INTERFACE\n// ============================================================================\n\nexport class ImageAICLI {\n private config: Config;\n private generator: ImageGenerator;\n private scanner: ImageScanner;\n private configGenerator: ConfigGenerator;\n\n constructor(config: Config) {\n this.config = config;\n this.generator = new ImageGenerator(config);\n this.scanner = new ImageScanner(config);\n this.configGenerator = new ConfigGenerator(config);\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // INTERACTIVE MODE\n // ──────────────────────────────────────────────────────────────────────────\n\n async interactive(): Promise<void> {\n this.printHeader();\n\n while (true) {\n try {\n const { action } = await inquirer.prompt([\n {\n type: 'list',\n name: 'action',\n message: chalk.cyan('What would you like to do?'),\n choices: [\n { name: `${chalk.green('🎨')} Generate image from prompt`, value: 'generate' },\n { name: `${chalk.blue('✨')} Generate with AI-enhanced prompt`, value: 'enhance' },\n { name: `${chalk.yellow('📦')} Batch generate images`, value: 'batch' },\n new inquirer.Separator(),\n { name: `${chalk.magenta('🔍')} Scan & catalog images`, value: 'scan' },\n { name: `${chalk.cyan('⚡')} Sync images.ts config`, value: 'sync' },\n { name: `${chalk.white('📊')} Show statistics`, value: 'stats' },\n new inquirer.Separator(),\n { name: `${chalk.gray('⚙️')} Settings`, value: 'settings' },\n { name: `${chalk.red('🚪')} Exit`, value: 'exit' },\n ],\n },\n ]);\n\n switch (action) {\n case 'generate':\n await this.promptGenerate();\n break;\n case 'enhance':\n await this.promptEnhance();\n break;\n case 'batch':\n await this.promptBatch();\n break;\n case 'scan':\n await this.runScan();\n break;\n case 'sync':\n await this.runSync();\n break;\n case 'stats':\n await this.showStats();\n break;\n case 'settings':\n await this.showSettings();\n break;\n case 'exit':\n console.log(chalk.cyan('\\n👋 Goodbye!\\n'));\n return;\n }\n\n console.log(''); // Empty line\n } catch (error) {\n // Handle Ctrl+C gracefully\n if (error instanceof Error && error.name === 'ExitPromptError') {\n console.log(chalk.cyan('\\n\\n👋 Goodbye!\\n'));\n return;\n }\n throw error;\n }\n }\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // GENERATE COMMANDS\n // ──────────────────────────────────────────────────────────────────────────\n\n async generate(options: GenerateOptions): Promise<void> {\n const spinner = ora('Generating image...').start();\n\n try {\n const result = await this.generator.generate(options);\n\n if (result.success) {\n spinner.succeed(chalk.green('Image generated successfully!'));\n console.log(chalk.gray(` Path: ${result.imagePath}`));\n console.log(chalk.gray(` URL: ${result.imageUrl}`));\n console.log(chalk.gray(` Time: ${formatDuration(result.duration || 0)}`));\n } else {\n spinner.fail(chalk.red(`Generation failed: ${result.error}`));\n }\n } catch (error) {\n spinner.fail(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n async scan(options: ScanOptions = {}): Promise<void> {\n const spinner = ora('Scanning images...').start();\n\n try {\n const result = await this.scanner.scan(options);\n spinner.succeed(chalk.green(`Found ${result.total} images`));\n\n console.log(chalk.gray(` Total size: ${formatBytes(result.totalSize)}`));\n console.log(chalk.gray(` Scan time: ${formatDuration(result.scanDuration)}`));\n\n // Show by category\n console.log(chalk.cyan('\\n Categories:'));\n for (const [category, images] of Object.entries(result.byCategory)) {\n console.log(chalk.gray(` ${category}: ${images.length} images`));\n }\n\n // Show by extension\n console.log(chalk.cyan('\\n Extensions:'));\n for (const [ext, count] of Object.entries(result.byExtension)) {\n console.log(chalk.gray(` .${ext}: ${count} files`));\n }\n } catch (error) {\n spinner.fail(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n async sync(): Promise<void> {\n const spinner = ora('Syncing images.ts config...').start();\n\n try {\n const outputPath = await this.configGenerator.generate();\n spinner.succeed(chalk.green('Config synced successfully!'));\n console.log(chalk.gray(` Output: ${outputPath}`));\n } catch (error) {\n spinner.fail(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // PRIVATE PROMPT METHODS\n // ──────────────────────────────────────────────────────────────────────────\n\n private async promptGenerate(): Promise<void> {\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'prompt',\n message: 'Enter image description:',\n validate: (input: string) => input.trim() ? true : 'Description is required',\n },\n {\n type: 'input',\n name: 'filename',\n message: 'Filename (optional, auto-generated if empty):',\n },\n {\n type: 'input',\n name: 'category',\n message: 'Category/folder (default: general):',\n default: 'general',\n },\n ]);\n\n await this.generate({\n prompt: answers.prompt,\n filename: answers.filename || undefined,\n category: answers.category,\n });\n }\n\n private async promptEnhance(): Promise<void> {\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'description',\n message: 'Describe what you want:',\n validate: (input: string) => input.trim() ? true : 'Description is required',\n },\n {\n type: 'input',\n name: 'context',\n message: 'Additional context (optional):',\n },\n {\n type: 'input',\n name: 'category',\n message: 'Category/folder (default: general):',\n default: 'general',\n },\n ]);\n\n const spinner = ora('Enhancing prompt with AI...').start();\n\n try {\n const enhanced = await this.generator.enhancePrompt(\n answers.description,\n answers.context || undefined\n );\n\n spinner.succeed('Prompt enhanced!');\n console.log(chalk.cyan('\\n Enhanced prompt:'));\n console.log(chalk.gray(` ${enhanced.prompt}\\n`));\n console.log(chalk.gray(` Filename: ${enhanced.filename}`));\n console.log(chalk.gray(` Caption: ${enhanced.caption}\\n`));\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Generate image with this prompt?',\n default: true,\n },\n ]);\n\n if (confirm) {\n await this.generate({\n prompt: enhanced.prompt,\n filename: enhanced.filename,\n category: answers.category,\n metadata: { caption: enhanced.caption },\n });\n }\n } catch (error) {\n spinner.fail(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n private async promptBatch(): Promise<void> {\n console.log(chalk.cyan('\\n Enter prompts (one per line, empty line to finish):'));\n\n const prompts: string[] = [];\n let lineNumber = 1;\n\n while (true) {\n const { prompt } = await inquirer.prompt([\n {\n type: 'input',\n name: 'prompt',\n message: ` ${lineNumber}.`,\n },\n ]);\n\n if (!prompt.trim()) break;\n prompts.push(prompt);\n lineNumber++;\n }\n\n if (prompts.length === 0) {\n console.log(chalk.yellow(' No prompts entered.'));\n return;\n }\n\n const { category, concurrency } = await inquirer.prompt([\n {\n type: 'input',\n name: 'category',\n message: 'Category for all images:',\n default: 'batch',\n },\n {\n type: 'list',\n name: 'concurrency',\n message: 'Concurrent workers:',\n choices: [\n { name: '1 (slow, safe)', value: 1 },\n { name: '2 (balanced)', value: 2 },\n { name: '3 (fast)', value: 3 },\n ],\n default: 2,\n },\n ]);\n\n console.log(chalk.cyan(`\\n Generating ${prompts.length} images...\\n`));\n\n const result = await this.generator.generateBatch({\n items: prompts.map((prompt, i) => ({\n prompt,\n category,\n filename: `batch-${Date.now()}-${i + 1}`,\n })),\n concurrency,\n onProgress: (current, total, res) => {\n const status = res.success ? chalk.green('✓') : chalk.red('✗');\n console.log(` ${status} ${current}/${total}`);\n },\n });\n\n console.log(chalk.cyan('\\n Batch complete!'));\n console.log(chalk.gray(` Success: ${result.success}`));\n console.log(chalk.gray(` Failed: ${result.failed}`));\n console.log(chalk.gray(` Time: ${formatDuration(result.duration)}`));\n }\n\n private async runScan(): Promise<void> {\n await this.scan();\n }\n\n private async runSync(): Promise<void> {\n await this.sync();\n }\n\n private async showStats(): Promise<void> {\n const spinner = ora('Gathering statistics...').start();\n\n try {\n const result = await this.scanner.scan();\n spinner.stop();\n\n console.log(chalk.cyan('\\n 📊 Image Statistics\\n'));\n console.log(chalk.white(` Total images: ${result.total}`));\n console.log(chalk.white(` Total size: ${formatBytes(result.totalSize)}`));\n console.log(chalk.white(` Categories: ${Object.keys(result.byCategory).length}`));\n\n console.log(chalk.cyan('\\n By Category:'));\n for (const [category, images] of Object.entries(result.byCategory).sort((a, b) => b[1].length - a[1].length)) {\n const size = images.reduce((sum, img) => sum + img.size, 0);\n console.log(chalk.gray(` ${category.padEnd(20)} ${images.length.toString().padStart(4)} images ${formatBytes(size).padStart(10)}`));\n }\n\n console.log(chalk.cyan('\\n By Extension:'));\n for (const [ext, count] of Object.entries(result.byExtension).sort((a, b) => b[1] - a[1])) {\n console.log(chalk.gray(` .${ext.padEnd(6)} ${count} files`));\n }\n } catch (error) {\n spinner.fail(chalk.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n private async showSettings(): Promise<void> {\n console.log(chalk.cyan('\\n ⚙️ Current Settings\\n'));\n console.log(chalk.gray(` Provider: ${this.config.provider}`));\n console.log(chalk.gray(` Size: ${this.config.size}`));\n console.log(chalk.gray(` Quality: ${this.config.quality}`));\n console.log(chalk.gray(` Output dir: ${this.config.outputDir}`));\n console.log(chalk.gray(` Config path: ${this.config.configOutputPath}`));\n\n if (this.config.resize) {\n console.log(chalk.cyan('\\n Resize Settings:'));\n console.log(chalk.gray(` Width: ${this.config.resize.width || 'auto'}`));\n console.log(chalk.gray(` Height: ${this.config.resize.height || 'auto'}`));\n console.log(chalk.gray(` Format: ${this.config.resize.format}`));\n console.log(chalk.gray(` Quality: ${this.config.resize.quality}`));\n }\n\n if (this.config.prefix || this.config.suffix) {\n console.log(chalk.cyan('\\n Prompt Modifiers:'));\n if (this.config.prefix) {\n console.log(chalk.gray(` Prefix: ${this.config.prefix.substring(0, 60)}...`));\n }\n if (this.config.suffix) {\n console.log(chalk.gray(` Suffix: ${this.config.suffix.substring(0, 60)}...`));\n }\n }\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // UI HELPERS\n // ──────────────────────────────────────────────────────────────────────────\n\n private printHeader(): void {\n console.log('');\n console.log(chalk.cyan(' ╔═══════════════════════════════════════════╗'));\n console.log(chalk.cyan(' ║') + chalk.white.bold(' 🎨 IMGAI - Image Generator ') + chalk.cyan('║'));\n console.log(chalk.cyan(' ║') + chalk.gray(' AI-powered image generation & sync ') + chalk.cyan('║'));\n console.log(chalk.cyan(' ╚═══════════════════════════════════════════╝'));\n console.log('');\n }\n}\n"]}
package/dist/index.cjs CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var fs = require('fs-extra');
4
+ var OpenAI = require('openai');
4
5
  var path2 = require('path');
5
6
  var sharp = require('sharp');
6
- var OpenAI = require('openai');
7
7
  var Anthropic = require('@anthropic-ai/sdk');
8
8
  var glob = require('glob');
9
9
  var chalk = require('chalk');
@@ -13,9 +13,9 @@ var ora = require('ora');
13
13
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
14
 
15
15
  var fs__default = /*#__PURE__*/_interopDefault(fs);
16
+ var OpenAI__default = /*#__PURE__*/_interopDefault(OpenAI);
16
17
  var path2__default = /*#__PURE__*/_interopDefault(path2);
17
18
  var sharp__default = /*#__PURE__*/_interopDefault(sharp);
18
- var OpenAI__default = /*#__PURE__*/_interopDefault(OpenAI);
19
19
  var Anthropic__default = /*#__PURE__*/_interopDefault(Anthropic);
20
20
  var chalk__default = /*#__PURE__*/_interopDefault(chalk);
21
21
  var inquirer__default = /*#__PURE__*/_interopDefault(inquirer);