express-react-pdf
Version:
Middleware generator for react-pdf in express
25 lines (24 loc) • 1.61 kB
TypeScript
import { Request, RequestHandler } from "express";
import { ReactElement } from "react";
/**
* Purpose: extract data needed for the root node from the request
* Uses the generic types of the Request and RequestHandler from express
*/
export type RootDataExtractor<Data> = <Params, ReqBody, ResBody, QueryParams, Locals extends Record<string, unknown>>(req: Request<Params, ReqBody, ResBody, QueryParams, Locals>) => Data & JSX.IntrinsicAttributes;
/**
* Purpose: ensure type safety between the content being passed in and the dataExtractor function
* Uses the generic types of the Request and RequestHandler from express
*/
export type PDFGenerator = <ContentData, Params, ReqBody, ResBody, QueryParams, Locals extends Record<string, unknown>>(Content: (data: ContentData) => ReactElement, contentDataExtractor: (req: Request<Params, ReqBody, ResBody, QueryParams, Locals>) => ContentData & JSX.IntrinsicAttributes, fileName?: string) => RequestHandler<Params, ReqBody, ResBody, QueryParams, Locals>;
/**
* Purpose: build a PDFGenerator middleware from a root node and data extractor
*/
export type PDFMiddlewareBuilder = <RootData>(Root: (data: RootData) => ReactElement, rootDataExtractor: RootDataExtractor<RootData>) => PDFGenerator;
/**
* Builds pdf middleware using the provided root node and data extractor
* Sets up the correct headers and returns data from the pdf wrapper
* @param Root Root node
* @param rootDataExtractor Extracts data needed for the root node from the request
* @returns pdf generator middleware
*/
export declare const pdfMiddlewareBuilder: PDFMiddlewareBuilder;