/** * Configuration options for preview generation */ export interface IPreviewOptions { /** * JPEG quality (1-100) * @default 80 */ quality?: number; /** * Maximum width in pixels */ width?: number; /** * Maximum height in pixels */ height?: number; /** * PDF page number to convert (1-based) * @default 1 */ page?: number; /** * Scale factor for rendering * @default 1.0 */ scale?: number; } /** * Preview generation result */ export interface IPreviewResult { /** * Generated JPEG image buffer */ buffer: Buffer; /** * Image dimensions */ dimensions: { width: number; height: number; }; /** * File size in bytes */ size: number; /** * MIME type */ mimeType: 'image/jpeg'; } /** * Supported input formats (extensible) */ export type TSupportedInputFormat = 'pdf'; /** * Supported output formats (extensible) */ export type TSupportedOutputFormat = 'jpeg'; /** * Base interface for format processors (extensible architecture) */ export interface IFormatProcessor { /** * Supported input format */ inputFormat: TSupportedInputFormat; /** * Supported output format */ outputFormat: TSupportedOutputFormat; /** * Process the input and generate preview */ processPreview(input: Buffer, options: IPreviewOptions): Promise; } /** * PDF-specific processor interface */ export interface IPdfProcessor extends IFormatProcessor { inputFormat: 'pdf'; outputFormat: 'jpeg'; } /** * Error types for preview generation */ export type TPreviewError = | 'INVALID_INPUT' | 'UNSUPPORTED_FORMAT' | 'PROCESSING_FAILED' | 'INVALID_OPTIONS' | 'PDF_CORRUPTED' | 'PAGE_NOT_FOUND'; /** * Custom error class for preview operations */ export class PreviewError extends Error { public readonly errorType: TPreviewError; public readonly originalError?: Error; constructor(errorType: TPreviewError, message: string, originalError?: Error) { super(message); this.name = 'PreviewError'; this.errorType = errorType; this.originalError = originalError; } }