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
JavaScript
"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"],
});