/** * Sharp Image Processing Plugin * Automatically resize, optimize, and generate thumbnails for uploaded images * * @module @plyaz/storage/plugins/image-processing * * @example * ```typescript * import { SharpImagePlugin } from '@plyaz/storage/plugins'; * * const imagePlugin = new SharpImagePlugin({ * variants: [ * { name: 'thumbnail', width: 150, height: 150, fit: 'cover' }, * { name: 'medium', width: 800, height: 600, fit: 'inside' }, * { name: 'large', width: 1920, height: 1080, fit: 'inside' }, * ], * formats: ['webp', 'jpeg'], * quality: 85, * stripMetadata: true, * priority: 50, * }); * * const service = new StorageService({ * adapters: [adapter], * plugins: [imagePlugin], * }); * ``` */ import { BasePlugin } from '../../base/BasePlugin'; import type { StoragePluginUploadResult, StoragePluginContext, StoragePluginHealth, SharpImagePluginConfig, StorageImageProcessingPluginStatistics } from '@plyaz/types/storage'; /** * Sharp Image Processing Plugin * Production-ready image processing using Sharp library * * Features: * - Multiple variant generation (thumbnail, medium, large) * - Format conversion (JPEG, PNG, WEBP, AVIF) * - Quality optimization * - Watermark overlay * - Metadata stripping for privacy * - High-performance processing */ export declare class SharpImagePlugin extends BasePlugin { private readonly variants; private readonly formats; private readonly quality; private readonly stripMetadata; private readonly watermark?; private readonly supportedMimeTypes; private readonly uploadVariants; private readonly preserveOriginal; private watermarkBuffer?; private imagesProcessed; private variantsGenerated; constructor(config?: SharpImagePluginConfig); /** * Initialize the plugin - load watermark if configured */ initialize(): Promise; /** * Load watermark image */ private loadWatermark; /** * Process image after upload - generate variants */ afterUpload(result: StoragePluginUploadResult, context: StoragePluginContext): Promise; /** * Generate all configured variants */ private generateVariants; /** * Process a single variant */ private processVariant; /** * Apply watermark to image */ private applyWatermark; /** * Calculate watermark position */ private calculateWatermarkPosition; /** * Upload variants back to storage */ private uploadVariantsToStorage; /** * Generate variant filename */ private generateVariantFilename; /** * Check if file is an image */ private isImageFile; /** * Health check */ healthCheck(): Promise; /** * Get processing statistics */ getStatistics(): StorageImageProcessingPluginStatistics; }