🏡 index : quine-global/webdriverio.git

import fs from 'node:fs'

import { getAbsoluteFilepath, assertDirectoryExists } from './utils.js'

type PDFPrintOptions = {
    orientation?: string,
    scale?: number,
    background?: boolean,
    width?: number,
    height?: number,
    top?: number,
    bottom?: number,
    left?: number,
    right?: number,
    shrinkToFit?: boolean,
    pageRanges?: object[]
}

/**
 * Command implementation of the `savePDF` command.
 */
export async function savePDF (
    this: WebdriverIO.Browser,
    filepath: string,
    options?: PDFPrintOptions
) {
    /**
     * type check
     */
    if (typeof filepath !== 'string' || !filepath.endsWith('.pdf')) {
        throw new Error('savePDF expects a filepath of type string and ".pdf" file ending')
    }

    const absoluteFilepath = getAbsoluteFilepath(filepath)
    await assertDirectoryExists(absoluteFilepath)

    const pdf = await this.printPage(options?.orientation, options?.scale, options?.background,
        options?.width, options?.height, options?.top, options?.bottom, options?.left, options?.right,
        options?.shrinkToFit, options?.pageRanges)
    const page = Buffer.from(pdf, 'base64')
    fs.writeFileSync(absoluteFilepath, page)

    return page
}