UNPKG

safeer-pdf-generator

Version:

Framework-agnostic PDF generation library with chunking, merging, S3 upload, and email delivery

62 lines (50 loc) 2.46 kB
// BYOB Browser Reuse + Lifecycle Event Emitters (v1.1.0) // Demonstrates passing an external browser and listening for lifecycle events import puppeteer from 'puppeteer'; import { generatePdf, PdfEventEmitter, consoleLogger } from 'safeer-pdf-generator'; async function main() { // ── 1. Launch a shared browser (BYOB) ── // Use a single browser for multiple PDF generations to save memory & startup time const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'], }); console.log('🌐 Shared browser launched (PID:', browser.process()?.pid, ')'); // ── 2. Create an event emitter ── const events = new PdfEventEmitter(); events.onEvent('generation:started', ({ title, rowCount, timestamp }) => { console.log(`🚀 Started: "${title}" (${rowCount} rows) at ${timestamp}`); }); events.onEvent('generation:complete', ({ result }) => { console.log(`✅ Complete: ${result.pageCount} pages, ${(result.sizeBytes / 1024).toFixed(1)} KB, ${result.durationMs}ms`); }); events.onEvent('error', ({ error, phase }) => { console.error(`❌ Error during ${phase}: ${error.message}`); }); // ── 3. Generate multiple PDFs sharing the same browser ── const reports = [ { title: 'Sales Q1', data: [{ name: 'Alice', amount: 5000 }, { name: 'Bob', amount: 3000 }] }, { title: 'Sales Q2', data: [{ name: 'Alice', amount: 7000 }, { name: 'Bob', amount: 4500 }] }, { title: 'Sales Q3', data: [{ name: 'Alice', amount: 6200 }, { name: 'Bob', amount: 5100 }] }, ]; const columns = [ { key: 'name', title: 'Name', dataIndex: 'name' }, { key: 'amount', title: 'Amount', dataIndex: 'amount' }, ]; for (const report of reports) { await generatePdf({ title: report.title, data: report.data, columns, events, // Lifecycle events puppeteer: { browserInstance: browser }, // BYOB — reuse this browser logging: consoleLogger, }); } // ── 4. Close the browser yourself ── // The library did NOT close it — you manage the lifecycle console.log('🌐 Browser still connected:', browser.connected); // true await browser.close(); console.log('🌐 Browser closed by us'); } main().catch(console.error);