UNPKG

chromiumly

Version:

A lightweight Typescript library that interacts with Gotenberg's different modules to convert a variety of document formats to PDF files.

141 lines 6.63 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ScreenshotUtils = void 0; const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const consumers_1 = require("node:stream/consumers"); const common_1 = require("../../common"); /** * Utility class for handling common tasks related to screenshot. */ class ScreenshotUtils { /** * Adds page properties to the FormData object based on the provided imageProperties. * * @param {FormData} data - The FormData object to which page properties will be added. * @param {ImageProperties} imageProperties - The page properties to be added to the FormData. */ static addImageProperties(data, imageProperties) { data.append('format', imageProperties.format); if (imageProperties.quality) { common_1.GotenbergUtils.assert(imageProperties.format === 'jpeg', 'Compression quality is exclusively supported for JPEG format.'); common_1.GotenbergUtils.assert(imageProperties.quality >= 0 && imageProperties.quality <= 100, 'Invalid compression quality. Please provide a value between 0 and 100.'); data.append('quality', imageProperties.quality); } if (imageProperties.omitBackground) { data.append('omitBackground', String(imageProperties.omitBackground)); } if (imageProperties.width) { data.append('width', imageProperties.width); } if (imageProperties.height) { data.append('height', imageProperties.height); } if (imageProperties.clip) { data.append('clip', String(imageProperties.clip)); } } /** * Adds files to the FormData object with a custom field name. * * @param {PathLikeOrReadStream[]} files - An array of files to be added to the FormData. * @param {FormData} data - The FormData object to which files will be added. * @param {string} fieldName - The field name to use when appending files (e.g., 'files', 'embeds'). * @returns {Promise<void>} A Promise that resolves once the files have been added. */ static async addFilesWithFieldName(files, data, fieldName) { await Promise.all(files.map(async (file, index) => { const filename = path_1.default.basename(typeof file === 'string' ? file : `file${index + 1}`); if (Buffer.isBuffer(file)) { data.append(fieldName, new Blob([file]), filename); } else if (file instanceof fs_1.ReadStream) { const content = await (0, consumers_1.blob)(file); data.append(fieldName, content, filename); } else { await fs_1.promises.access(file, fs_1.constants.R_OK); const _filename = path_1.default.basename(file.toString()); const content = await (0, fs_1.openAsBlob)(file); data.append(fieldName, content, _filename); } })); } /** * Customizes the FormData object based on the provided screenshot options. * * @param {FormData} data - The FormData object to be customized. * @param {ScreenshotOptions} options - The screenshot options to apply to the FormData. * @returns {Promise<void>} A Promise that resolves once the customization is complete. */ static async customize(data, options) { if (options.emulatedMediaType) { data.append('emulatedMediaType', options.emulatedMediaType); } if (options.emulatedMediaFeatures?.length) { data.append('emulatedMediaFeatures', JSON.stringify(options.emulatedMediaFeatures)); } if (options.properties) { ScreenshotUtils.addImageProperties(data, options.properties); } if (options.waitDelay) { data.append('waitDelay', options.waitDelay); } if (options.waitForExpression) { data.append('waitForExpression', options.waitForExpression); } if (options.waitForSelector) { data.append('waitForSelector', options.waitForSelector); } if (options.extraHttpHeaders) { data.append('extraHttpHeaders', JSON.stringify(options.extraHttpHeaders)); } if (options.failOnHttpStatusCodes) { data.append('failOnHttpStatusCodes', JSON.stringify(options.failOnHttpStatusCodes)); } if (options.failOnResourceHttpStatusCodes) { data.append('failOnResourceHttpStatusCodes', JSON.stringify(options.failOnResourceHttpStatusCodes)); } if (options.ignoreResourceHttpStatusDomains) { data.append('ignoreResourceHttpStatusDomains', JSON.stringify(options.ignoreResourceHttpStatusDomains)); } if (options.failOnResourceLoadingFailed) { data.append('failOnResourceLoadingFailed', String(options.failOnResourceLoadingFailed)); } if (options.failOnConsoleExceptions) { data.append('failOnConsoleExceptions', String(options.failOnConsoleExceptions)); } if (options.skipNetworkIdleEvent === false) { data.append('skipNetworkIdleEvent', String(options.skipNetworkIdleEvent)); } if (options.skipNetworkAlmostIdleEvent === false) { data.append('skipNetworkAlmostIdleEvent', String(options.skipNetworkAlmostIdleEvent)); } if (options.optimizeForSpeed) { data.append('optimizeForSpeed', String(options.optimizeForSpeed)); } if (options.cookies) { data.append('cookies', JSON.stringify(options.cookies)); } if (options.downloadFrom) { data.append('downloadFrom', JSON.stringify(common_1.GotenbergUtils.normalizeDownloadFrom(options.downloadFrom))); } if (options.generateDocumentOutline) { data.append('generateDocumentOutline', String(options.generateDocumentOutline)); } if (options.userPassword) { data.append('userPassword', options.userPassword); } if (options.ownerPassword) { data.append('ownerPassword', options.ownerPassword); } if (options.embeds && options.embeds.length > 0) { await ScreenshotUtils.addFilesWithFieldName(options.embeds, data, 'embeds'); } } } exports.ScreenshotUtils = ScreenshotUtils; //# sourceMappingURL=screenshot.utils.js.map