Small Nest.js-based project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
test-assignment-datawrapper/src/screenshots/screenshotter.service.ts

31 lines
734 B

import { Injectable } from '@nestjs/common';
import puppeteer from 'puppeteer';
type TakeScreenshotOptions = {
imageType: 'jpeg' | 'png';
url: URL;
};
@Injectable()
export class ScreenshotterService {
async takeScreenshot(options: TakeScreenshotOptions): Promise<Buffer> {
const browser = await puppeteer.launch();
try {
const page = await browser.newPage();
page.setViewport({
width: 1024,
height: 768,
deviceScaleFactor: 1,
});
await page.goto(options.url.toString());
const image = (await page.screenshot({
type: options.imageType,
encoding: 'binary',
})) as Buffer;
return image;
} finally {
browser.close();
}
}
}