@topgroup/diginext
Version:
A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.
65 lines (64 loc) • 2.57 kB
JavaScript
;
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;