react-pdf icon indicating copy to clipboard operation
react-pdf copied to clipboard

Suport render pdf for nest js

Open sy-nguyenv-otsv opened this issue 1 year ago • 2 comments

Hi all.

Now I am using react-pdf/renderer for nest js But i have problem when run time error Error [ERR_REQUIRE_ESM]: require() of ES Module .../node_modules/.pnpm/@[email protected][email protected]/node_modules/@react-pdf/renderer/lib/react-pdf.js from /.../services/a.js not supported. Instead change the require of react-pdf.js in.../services/a.js to a dynamic import() which is available in all CommonJS modules. at Hook.Module.require (.../node_modules/.pnpm/[email protected]/node_modules/dd-trace/packages/dd-trace/src/ritm.js:97:33) at.../services/a.js:59:95 at async generatePdf (.../services/a.js:59:22) { code: 'ERR_REQUIRE_ESM' } I don't know this package can support smoothly for nest js

Thanks

sy-nguyenv-otsv avatar Apr 08 '25 06:04 sy-nguyenv-otsv

I have the same issue

maxime-aubry avatar May 14 '25 08:05 maxime-aubry

If anyone's interested, I was able to get the latest major revision of the lib (4.3.0 ) to work in Nest 11 (node 20.10) with the following "hack"

import { awaitSync } from '@kaciras/deasync';
import { loadEsm } from 'load-esm'; // Note: `load-esm` is also used internally by Nest's `FileTypeValidator`, which faces a similar challenge due to the import of ESM-only `file-type`

export function importReactPdfRendererSync(): typeof import('@react-pdf/renderer') {
    return awaitSync(loadEsm<typeof import('@react-pdf/renderer')>('@react-pdf/renderer'));
}

Example usage:

// SomePdfTemplate.tsx

import type { DocumentProps } from '@react-pdf/renderer';

const { Page, Text, View, Document, StyleSheet, Image, Link } = importReactPdfRendererSync();

export const SomePdfTemplate = (): React.ReactElement<DocumentProps> => {
    return (
        <Document>
           ...

I would not advise this in production code though (specifically for the usage of deasync, which as per documentation can introduce performance degradation and can even deadlock the event loop).

francescosalvi avatar May 16 '25 11:05 francescosalvi