UNPKG

@topgroup/diginext

Version:

A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.

65 lines (64 loc) 2.57 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const makeDaySlug_1 = require("diginext-utils/dist/string/makeDaySlug"); const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const puppeteer_1 = __importDefault(require("puppeteer")); const app_config_1 = require("../../app.config"); const const_1 = require("../../config/const"); const defaultExportPdfOptions = { viewport: { width: 1400, height: 900 }, path: "../public/screenshots/screen.png", type: "png", fullPage: true, encoding: "binary", }; const screenshot = async (url, options = defaultExportPdfOptions) => { if (!url) throw new Error("URL parameter is missing."); const _options = { ...defaultExportPdfOptions, ...options }; const { viewport, ...screenshotOptions } = _options; // upload directory const dir = path_1.default.resolve(const_1.CLI_DIR, "public/upload/screenshot"); if (!(0, fs_1.existsSync)(dir)) (0, fs_1.mkdirSync)(dir, { recursive: true }); const fileName = `screenshot-${(0, makeDaySlug_1.makeDaySlug)({ divider: "" })}.${screenshotOptions.type}`; const filePath = path_1.default.resolve(dir, fileName); const fileUrl = `${app_config_1.Config.BASE_URL}/upload/screenshot/${fileName}`; screenshotOptions.path = filePath; const browser = await puppeteer_1.default.launch({ headless: true, defaultViewport: viewport, executablePath: process.env.CHROMIUM_PATH, args: [ "--no-sandbox", "--disable-dev-shm-usage", // <-- add this one ], }); const page = await browser.newPage(); try { // disable cache... await page.setCacheEnabled(false); await page.setDefaultNavigationTimeout(60000); await page.goto(url, { waitUntil: "networkidle0", }); const buffer = await page.screenshot(screenshotOptions); await page.close(); await browser.close(); if (!buffer) return; // res.contentType("application/pdf"); // res.send(pdfBuffer); return { name: fileName, url: fileUrl, path: filePath, buffer, mime: `image/${screenshotOptions.type}` }; } catch (e) { await page.close(); await browser.close(); throw new Error(`Unable to capture screenshot of "${url}": ${e}`); } }; exports.default = screenshot;