vercel/pkg

Puppeteer not waiting for images to load before sending the pdf buffer as response

anvaymishra1 opened this issue · 2 comments

What version of pkg are you using?

5.8.1

What version of Node.js are you using?

18.17.1

What operating system are you using?

Debian GNU/Linux 12

What CPU architecture are you using?

x86_64

What Node versions, OSs and CPU architectures are you building for?

node18-linux-x64

Describe the Bug

The code runs perfectly with all the configurations when I have not created the build i.e. the function waits for all the images to render in the dom and then prints the PDF which is the expected behaviour.

When I make the binary and run on the same amount of data. The report gets downloaded but it does not wait for all the images to render. It waits for 2-3 seconds and then generates the pdf.

I tried setting timeouts to inside the function to make it wait which works before creating the build but in the build it doesn't.

Expected Behavior

await page.evaluate(() => {
return new Promise((resolve) => {
const checkImagesLoaded = () => {
const images = Array.from(document.images);
console.log(images.length)
if (images.every(img => img.complete && img.naturalWidth > 0)) {
resolve();
} else {
setTimeout(checkImagesLoaded, 10000); // Adjust the interval as needed
}
};
checkImagesLoaded();
});
});

This function waits for all the images to render in the dom before proceeding to send the response. Which works before packaging it as a build.

To Reproduce

Try creating a pdf from any HTML file with around 200 images in it.

This issue is stale because it has been open 90 days with no activity. Remove the stale label or comment or this will be closed in 5 days. To ignore this issue entirely you can add the no-stale label

This issue is now closed due to inactivity, you can of course reopen or reference this issue if you see fit.