@bgscore/report-generator
Version:
Generate reports in Excel or PDF format from HTML or template files (Excel, DOCX, etc). Supports dynamic data injection, styling, and layout rendering.
94 lines (90 loc) • 2.98 kB
text/typescript
import { Node } from 'acorn';
import * as ExcelJS from 'exceljs';
import { Browser } from 'puppeteer';
interface CompileHandlebarsOptions {
json: any;
html?: string;
js?: string | string[];
css?: string | string[];
}
interface CompiledFunction {
name: string;
fn: any;
}
interface FunctionCacheEntry {
functions: CompiledFunction[];
functionComplext: string;
}
type TypedNode = Node & {
parent?: TypedNode;
};
interface SheetImage {
sheetIndex: number;
src: string;
width: number;
height: number;
row: number;
column: number;
colspan: number;
rowspan: number;
fullSize?: boolean;
}
interface MergeRange {
startRow: number;
startCol: number;
endRow: number;
endCol: number;
}
type BorderSide = "top" | "bottom" | "left" | "right";
type NestedKeyOf<T> = T extends object ? T extends Array<infer U> ? `${number}` | `${number}.${NestedKeyOf<U>}` : {
[K in keyof T]: T[K] extends Array<infer U> ? `${K & string}` | `${K & string}[${number}]` | `${K & string}[${number}].${NestedKeyOf<U>}` : T[K] extends object ? `${K & string}` | `${K & string}.${NestedKeyOf<T[K]>}` : `${K & string}`;
}[keyof T] : never;
type PathValue<T, P extends string> = P extends `${infer K}[${infer I}].${infer R}` ? K extends keyof T ? T[K] extends Array<infer U> ? PathValue<U, R> : never : never : P extends `${infer K}[${infer I}]` ? K extends keyof T ? T[K] extends Array<infer U> ? U : never : never : P extends `${infer K}.${infer R}` ? K extends keyof T ? PathValue<T[K], R> : never : P extends keyof T ? T[P] : never;
interface PlaceholderItem {
row: number;
col: number;
items: any[];
field?: string;
cell: ExcelJS.Cell;
type: string;
expression?: string;
defaultValue?: number;
}
interface ProcessCellParams {
cell: ExcelJS.Cell;
json: Record<string, any>;
js?: string;
worksheet: ExcelJS.Worksheet;
workbook: ExcelJS.Workbook;
placeholders: PlaceholderItem[];
rowNumber: number;
colNumber: number;
}
interface TemplateExcelParams {
buffer: ExcelJS.Buffer;
json: Record<string, any>;
js?: string;
}
interface ExcelParams {
json: any;
html?: string;
js?: string;
css?: string;
fileName?: string;
browser: Browser;
buffer?: ExcelJS.Buffer;
}
interface OtherFile {
contentType: string;
fileId?: string;
}
interface ExcelResult {
base64: string;
mimeType: string;
extension: ".xlsx";
size: number;
buffer: Buffer;
fileName: string;
}
declare const excel: ({ json, html, js, css, fileName, browser, buffer, }: ExcelParams) => Promise<ExcelResult>;
export { type BorderSide, type CompileHandlebarsOptions, type CompiledFunction, type ExcelParams, type ExcelResult, type FunctionCacheEntry, type MergeRange, type NestedKeyOf, type OtherFile, type PathValue, type PlaceholderItem, type ProcessCellParams, type SheetImage, type TemplateExcelParams, type TypedNode, excel };