core/converters/snapshot.converter.ts

core/converters/snapshot.converter.ts is a file in Project Scripts. 30 lines of code and 8 definitions.

import { flagValue, hasFlag, numberFlag } from "@govlab/argv";
import type { ParsedArgv } from "@govlab/argv";
import { SNAPSHOT_DEFAULTS } from "#configuration/configs/snapshot.config";
import type { SnapshotOptions } from "#types/snapshot.types";
import { resolve } from "node:path";

const CLICK_PAIR = 2;
const CLICK_SEPARATOR = ",";

export const readOptions = function readOptions(argv: ParsedArgv): SnapshotOptions | null {
    const address = flagValue(argv, "--url");
    const out = flagValue(argv, "--out");
    const log = flagValue(argv, "--log");
    if (address === undefined || (out === undefined && log === undefined)) {
        return null;
    }
    const click = flagValue(argv, "--click");
    const spot = click === undefined ? null : click.split(CLICK_SEPARATOR).map(Number);
    return {
        browser: flagValue(argv, "--browser") ?? null,
        clickAfterMs: numberFlag(argv, "--click-after", SNAPSHOT_DEFAULTS.clickAfterMs),
        clickAt: spot?.length === CLICK_PAIR && spot.every((value) => Number.isFinite(value)) ? spot : null,
        height: numberFlag(argv, "--height", SNAPSHOT_DEFAULTS.height),
        log: log === undefined ? null : resolve(log),
        out: out === undefined ? null : resolve(out),
        settleMs: numberFlag(argv, "--settle", SNAPSHOT_DEFAULTS.settleMs),
        software: !hasFlag(argv, "--gpu"),
        timeoutMs: numberFlag(argv, "--timeout", SNAPSHOT_DEFAULTS.timeoutMs),
        url: address,
        width: numberFlag(argv, "--width", SNAPSHOT_DEFAULTS.width),
    };
};