export const ACT_KINDS = [ "click", "close", "drag", "evaluate", "fill", "hover", "scrollIntoView", "press", "resize", "select", "type", "wait", ] as const; export type ActKind = (typeof ACT_KINDS)[number]; export function isActKind(value: unknown): value is ActKind { if (typeof value !== "string") { return false; } return (ACT_KINDS as readonly string[]).includes(value); } export type ClickButton = "left" | "right" | "middle"; export type ClickModifier = "Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"; const ALLOWED_CLICK_MODIFIERS = new Set([ "Alt", "Control", "ControlOrMeta", "Meta", "Shift", ]); export function parseClickButton(raw: string): ClickButton | undefined { if (raw === "left" || raw === "right" || raw === "middle") { return raw; } return undefined; } export function parseClickModifiers(raw: string[]): { modifiers?: ClickModifier[]; error?: string; } { const invalid = raw.filter((m) => !ALLOWED_CLICK_MODIFIERS.has(m as ClickModifier)); if (invalid.length) { return { error: "modifiers must be Alt|Control|ControlOrMeta|Meta|Shift" }; } return { modifiers: raw.length ? (raw as ClickModifier[]) : undefined }; }