/** * PuppeteerRenderer * * Renderer adapter using Puppeteer (Headless Chrome). * Extends BaseRendererAdapter. * * **Supported Formats**: PDF, PNG, JPEG, HTML * * **Pros**: * - Best HTML/CSS support (real Chrome engine) * - Handles complex layouts, flexbox, grid * - Supports modern CSS features * - Can capture screenshots * * **Cons**: * - Heavy dependency (~200MB with Chromium) * - Slower than lightweight alternatives * - Memory intensive * * **Best For**: * - Complex invoices with styling * - Documents with charts/graphs * - Professional-looking PDFs */ import { type StorageRenderOptions, type StorageRenderResult, type StorageRendererHealthCheck } from '@plyaz/types/storage'; import { BaseRendererAdapter } from '../base/BaseRendererAdapter'; import type { StoragePuppeteerRendererConfig } from '@plyaz/types/storage'; /** * PuppeteerRenderer Adapter * * Config-driven renderer using Puppeteer. * * @example * ```typescript * const renderer = new PuppeteerRenderer({ * name: 'puppeteer-main', * type: STORAGE_RENDERER_TYPE.PUPPETEER, * enabled: true, * priority: 100, * supportedFormats: [OUTPUT_FORMAT.PDF, OUTPUT_FORMAT.PNG], * logger: myLogger, * config: { * keepAlive: true, * launchOptions: { headless: true, args: ['--no-sandbox'] } * } * }); * * const result = await renderer.render({ * format: OUTPUT_FORMAT.PDF, * data: { html: '...' }, * pdfOptions: { pageSize: 'A4', orientation: 'portrait' } * }); * ``` */ export declare class PuppeteerRenderer extends BaseRendererAdapter { private browser?; private readonly launchOptions; private readonly keepAlive; private readonly timeout; constructor(config: StoragePuppeteerRendererConfig); /** * Render content */ render(options: StorageRenderOptions): Promise; /** * Render HTML to PDF * @private */ private renderPDF; /** * Render HTML to image (PNG/JPEG) * @private */ private renderImage; /** * Get or create browser instance * @private */ private getBrowser; /** * Convert storage PDF options to Puppeteer format * @private */ private convertPDFOptions; /** * Get HTML content from options * @private */ private getHtmlContent; /** * Check renderer health */ checkHealth(): Promise; /** * Cleanup resources */ destroy(): Promise; }