/** * Test support for Browser CLI command registration and runtime capture. */ import { Command } from "commander"; import { createCliRuntimeCapture } from "../../test-support.js"; import type { CliRuntimeCapture } from "../../test-support.js"; import type { BrowserParentOpts } from "./browser-cli-shared.js"; /** Creates a minimal Browser command program for CLI unit tests. */ export function createBrowserProgram(params?: { withGatewayUrl?: boolean }): { program: Command; browser: Command; parentOpts: (cmd: Command) => BrowserParentOpts; } { const program = new Command(); const browser = program .command("browser") .option("--browser-profile ", "Browser profile") .option("--json", "Output JSON", false); if (params?.withGatewayUrl) { browser.option("--url ", "Gateway WebSocket URL"); } const parentOpts = (cmd: Command): BrowserParentOpts => { for (let current: Command | null | undefined = cmd; current; current = current.parent) { if (current.name() === "browser") { return current.opts() as BrowserParentOpts; } } return cmd.parent?.opts?.() as BrowserParentOpts; }; return { program, browser, parentOpts }; } const browserCliRuntimeState: { capture?: CliRuntimeCapture } = {}; /** Returns the shared captured CLI runtime for Browser tests. */ export function getBrowserCliRuntimeCapture(): CliRuntimeCapture { browserCliRuntimeState.capture ??= createCliRuntimeCapture(); return browserCliRuntimeState.capture; } /** Returns the default runtime from the Browser CLI capture. */ export function getBrowserCliRuntime() { return getBrowserCliRuntimeCapture().defaultRuntime; }