safeer-pdf-generator
Version:
Framework-agnostic PDF generation library with chunking, merging, S3 upload, and email delivery
75 lines • 1.96 kB
TypeScript
import { EventEmitter } from 'events';
import { PdfGenerationResult } from '../types.js';
/**
* Typed event map for PDF lifecycle events
*/
export interface PdfEventMap {
'generation:started': {
title: string;
rowCount: number;
timestamp: string;
};
'generation:complete': {
result: PdfGenerationResult;
};
'chunk:processed': {
chunkIndex: number;
totalChunks: number;
sizeBytes: number;
};
's3:upload:complete': {
url: string;
key: string;
requestPayload?: Record<string, any>;
};
'email:sent': {
to: string;
messageId?: string;
};
'file:saved': {
path: string;
sizeBytes: number;
};
'error': {
error: Error;
phase: string;
stack?: string;
};
}
/**
* Typed event emitter for PDF lifecycle events.
*
* @example
* ```typescript
* const events = new PdfEventEmitter();
*
* events.on('generation:started', ({ title, rowCount }) => {
* console.log(`Generating PDF: ${title} with ${rowCount} rows`);
* });
*
* events.on('s3:upload:complete', ({ url }) => {
* notifyClient(url);
* });
*
* events.on('error', ({ error, phase }) => {
* alertOps(`PDF failed at ${phase}: ${error.message}`);
* });
*
* await generatePdf({ title: 'Report', data, columns, events });
* ```
*/
export declare class PdfEventEmitter extends EventEmitter {
/**
* Emit a typed lifecycle event
*/
emitEvent<K extends keyof PdfEventMap>(event: K, payload: PdfEventMap[K]): boolean;
/**
* Listen for a typed lifecycle event
*/
onEvent<K extends keyof PdfEventMap>(event: K, listener: (payload: PdfEventMap[K]) => void): this;
/**
* Listen for a typed lifecycle event (once)
*/
onceEvent<K extends keyof PdfEventMap>(event: K, listener: (payload: PdfEventMap[K]) => void): this;
}
//# sourceMappingURL=PdfEventEmitter.d.ts.map