UNPKG

umay-render

Version:

Free, high-performance HTML to PDF and HTML to Image conversion SDK for both browser and Node.js

138 lines (137 loc) 4.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConversionRequestSchema = exports.ScreenshotOutputOptionsSchema = exports.PdfOutputOptionsSchema = exports.PageSetupOptionsSchema = void 0; const zod_1 = require("zod"); const LifeCycleEventSchema = zod_1.z.enum([ "load", "domcontentloaded", "networkidle0", "networkidle2", ]); exports.PageSetupOptionsSchema = zod_1.z .object({ viewport: zod_1.z .object({ width: zod_1.z.number().int().positive(), height: zod_1.z.number().int().positive(), deviceScaleFactor: zod_1.z.number().positive().optional(), isMobile: zod_1.z.boolean().optional(), hasTouch: zod_1.z.boolean().optional(), isLandscape: zod_1.z.boolean().optional(), }) .optional(), emulateMediaType: zod_1.z.enum(["screen", "print"]).optional(), waitForSelector: zod_1.z.string().optional(), waitForTimeout: zod_1.z.number().int().positive().optional().default(30000), waitUntil: zod_1.z .union([LifeCycleEventSchema, zod_1.z.array(LifeCycleEventSchema)]) .optional() .default("networkidle0"), cookies: zod_1.z .array(zod_1.z.object({ name: zod_1.z.string(), value: zod_1.z.string(), url: zod_1.z.string().url().optional(), domain: zod_1.z.string().optional(), path: zod_1.z.string().optional(), expires: zod_1.z.number().optional(), httpOnly: zod_1.z.boolean().optional(), secure: zod_1.z.boolean().optional(), sameSite: zod_1.z.enum(["Strict", "Lax", "None"]).optional(), })) .optional(), extraHTTPHeaders: zod_1.z.record(zod_1.z.string()).optional(), javascriptEnabled: zod_1.z.boolean().optional(), userAgent: zod_1.z.string().optional(), evaluateScript: zod_1.z.string().optional(), }) .strict() .optional(); exports.PdfOutputOptionsSchema = zod_1.z .object({ scale: zod_1.z.number().positive().optional(), displayHeaderFooter: zod_1.z.boolean().optional(), headerTemplate: zod_1.z.string().optional(), footerTemplate: zod_1.z.string().optional(), printBackground: zod_1.z.boolean().optional(), landscape: zod_1.z.boolean().optional(), pageRanges: zod_1.z.string().optional(), format: zod_1.z .enum([ "Letter", "Legal", "Tabloid", "Ledger", "A0", "A1", "A2", "A3", "A4", "A5", "A6", ]) .optional(), width: zod_1.z.string().or(zod_1.z.number()).optional(), height: zod_1.z.string().or(zod_1.z.number()).optional(), margin: zod_1.z .object({ top: zod_1.z.string().or(zod_1.z.number()).optional(), right: zod_1.z.string().or(zod_1.z.number()).optional(), bottom: zod_1.z.string().or(zod_1.z.number()).optional(), left: zod_1.z.string().or(zod_1.z.number()).optional(), }) .optional(), preferCSSPageSize: zod_1.z.boolean().optional(), omitBackground: zod_1.z.boolean().optional(), tagged: zod_1.z.boolean().optional(), timeout: zod_1.z.number().int().nonnegative().optional(), }) .strict() .optional(); exports.ScreenshotOutputOptionsSchema = zod_1.z .object({ quality: zod_1.z.number().int().min(0).max(100).optional(), fullPage: zod_1.z.boolean().optional(), clip: zod_1.z .object({ x: zod_1.z.number(), y: zod_1.z.number(), width: zod_1.z.number().positive(), height: zod_1.z.number().positive(), }) .optional(), omitBackground: zod_1.z.boolean().optional(), encoding: zod_1.z.enum(["base64", "binary"]).optional(), captureBeyondViewport: zod_1.z.boolean().optional(), fromSurface: zod_1.z.boolean().optional(), timeout: zod_1.z.number().int().nonnegative().optional(), }) .strict() .optional(); exports.ConversionRequestSchema = zod_1.z .object({ html: zod_1.z.string().optional(), url: zod_1.z.string().url().optional(), outputFormat: zod_1.z.enum(["pdf", "png", "jpeg", "webp"]), filename: zod_1.z.string().optional(), pageSetupOptions: exports.PageSetupOptionsSchema, pdfOptions: exports.PdfOutputOptionsSchema, screenshotOptions: exports.ScreenshotOutputOptionsSchema, }) .refine((data) => data.html || data.url, { message: "SDK Input Error: Either 'html' or 'url' must be provided", path: ["html"], }) .refine((data) => !(data.html && data.url), { message: "SDK Input Error: Provide either 'html' or 'url', not both", path: ["html"], }) .refine((data) => { if (data.outputFormat === "png" && data.screenshotOptions?.quality !== undefined) return false; return true; }, { message: "SDK Input Error: 'quality' option is not applicable for 'png' output format", path: ["screenshotOptions", "quality"], });