Skip to content
This repository has been archived by the owner on Apr 19, 2023. It is now read-only.

Commit

Permalink
✨ Add Playwrite module
Browse files Browse the repository at this point in the history
  • Loading branch information
AnandChowdhary committed Nov 14, 2020
1 parent 2a3cae0 commit 7d1c291
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import { GeolocationModule } from './providers/geolocation/geolocation.module';
import { GitHubModule } from './providers/github/github.module';
import { GoogleMapsModule } from './providers/google-maps/google-maps.module';
import { MailModule } from './providers/mail/mail.module';
import { PlaywrightModule } from './providers/playwright/playwright.module';
import { PrismaModule } from './providers/prisma/prisma.module';
import { S3Module } from './providers/s3/s3.module';
import { SlackModule } from './providers/slack/slack.module';
Expand Down Expand Up @@ -78,6 +79,7 @@ import { TasksModule } from './providers/tasks/tasks.module';
FirebaseModule,
GitHubModule,
GoogleMapsModule,
PlaywrightModule,
],
providers: [
{
Expand Down
10 changes: 10 additions & 0 deletions src/providers/playwright/playwright.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { PlaywrightService } from './playwright.service';

@Module({
imports: [ConfigModule],
providers: [PlaywrightService],
exports: [PlaywrightService],
})
export class PlaywrightModule {}
61 changes: 61 additions & 0 deletions src/providers/playwright/playwright.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { Injectable } from '@nestjs/common';
import { chromium, firefox, webkit } from 'playwright';

@Injectable()
export class PlaywrightService {
chromium = chromium;
firefox = firefox;
webkit = webkit;

async renderHtmlToImage(
html: string,
viewport?: { width: number; height: number },
) {
const browser = await chromium.launch({
executablePath: process.env.CHROMIUM_PATH,
args: ['--no-sandbox'],
});
const page = await browser.newPage();
if (viewport) await page.setViewportSize(viewport);
await page.setContent(html, { waitUntil: 'networkidle' });
const screenshot = await page.screenshot();
await browser.close();
return screenshot;
}

async renderHtmlToPdf(
html: string,
viewport?: { width: number; height: number },
options?: {
path?: string;
scale?: number;
displayHeaderFooter?: boolean;
headerTemplate?: string;
footerTemplate?: string;
printBackground?: boolean;
landscape?: boolean;
pageRanges?: string;
format?: string;
width?: string | number;
height?: string | number;
margin?: {
top?: string | number;
right?: string | number;
bottom?: string | number;
left?: string | number;
};
preferCSSPageSize?: boolean;
},
) {
const browser = await chromium.launch({
executablePath: process.env.CHROMIUM_PATH,
args: ['--no-sandbox'],
});
const page = await browser.newPage();
if (viewport) await page.setViewportSize(viewport);
await page.setContent(html, { waitUntil: 'networkidle' });
const file = await page.pdf(options);
await browser.close();
return file;
}
}

0 comments on commit 7d1c291

Please sign in to comment.