refactor: share cli runtime error handling

This commit is contained in:
Peter Steinberger
2026-01-19 00:52:17 +00:00
parent c532d161c4
commit 1fec41b3df
16 changed files with 288 additions and 452 deletions

View File

@@ -17,12 +17,20 @@ import { defaultRuntime } from "../runtime.js";
import { parseBooleanValue } from "../utils/boolean.js";
import type { BrowserParentOpts } from "./browser-cli-shared.js";
import { registerBrowserCookiesAndStorageCommands } from "./browser-cli-state.cookies-storage.js";
import { runCommandWithRuntime } from "./cli-utils.js";
function parseOnOff(raw: string): boolean | null {
const parsed = parseBooleanValue(raw);
return parsed === undefined ? null : parsed;
}
function runBrowserCommand(action: () => Promise<void>) {
return runCommandWithRuntime(defaultRuntime, action, (err) => {
defaultRuntime.error(danger(String(err)));
defaultRuntime.exit(1);
});
}
export function registerBrowserStateCommands(
browser: Command,
parentOpts: (cmd: Command) => BrowserParentOpts,
@@ -46,7 +54,7 @@ export function registerBrowserStateCommands(
defaultRuntime.exit(1);
return;
}
try {
await runBrowserCommand(async () => {
const result = await browserAct(
baseUrl,
{
@@ -62,10 +70,7 @@ export function registerBrowserStateCommands(
return;
}
defaultRuntime.log(`viewport set: ${width}x${height}`);
} catch (err) {
defaultRuntime.error(danger(String(err)));
defaultRuntime.exit(1);
}
});
});
set
@@ -83,7 +88,7 @@ export function registerBrowserStateCommands(
defaultRuntime.exit(1);
return;
}
try {
await runBrowserCommand(async () => {
const result = await browserSetOffline(baseUrl, {
offline,
targetId: opts.targetId?.trim() || undefined,
@@ -94,10 +99,7 @@ export function registerBrowserStateCommands(
return;
}
defaultRuntime.log(`offline: ${offline}`);
} catch (err) {
defaultRuntime.error(danger(String(err)));
defaultRuntime.exit(1);
}
});
});
set
@@ -109,7 +111,7 @@ export function registerBrowserStateCommands(
const parent = parentOpts(cmd);
const baseUrl = resolveBrowserControlUrl(parent?.url);
const profile = parent?.browserProfile;
try {
await runBrowserCommand(async () => {
const parsed = JSON.parse(String(opts.json)) as unknown;
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
throw new Error("headers json must be an object");
@@ -128,10 +130,7 @@ export function registerBrowserStateCommands(
return;
}
defaultRuntime.log("headers set");
} catch (err) {
defaultRuntime.error(danger(String(err)));
defaultRuntime.exit(1);
}
});
});
set
@@ -145,7 +144,7 @@ export function registerBrowserStateCommands(
const parent = parentOpts(cmd);
const baseUrl = resolveBrowserControlUrl(parent?.url);
const profile = parent?.browserProfile;
try {
await runBrowserCommand(async () => {
const result = await browserSetHttpCredentials(baseUrl, {
username: username?.trim() || undefined,
password,
@@ -158,10 +157,7 @@ export function registerBrowserStateCommands(
return;
}
defaultRuntime.log(opts.clear ? "credentials cleared" : "credentials set");
} catch (err) {
defaultRuntime.error(danger(String(err)));
defaultRuntime.exit(1);
}
});
});
set
@@ -177,7 +173,7 @@ export function registerBrowserStateCommands(
const parent = parentOpts(cmd);
const baseUrl = resolveBrowserControlUrl(parent?.url);
const profile = parent?.browserProfile;
try {
await runBrowserCommand(async () => {
const result = await browserSetGeolocation(baseUrl, {
latitude: Number.isFinite(latitude) ? latitude : undefined,
longitude: Number.isFinite(longitude) ? longitude : undefined,
@@ -192,10 +188,7 @@ export function registerBrowserStateCommands(
return;
}
defaultRuntime.log(opts.clear ? "geolocation cleared" : "geolocation set");
} catch (err) {
defaultRuntime.error(danger(String(err)));
defaultRuntime.exit(1);
}
});
});
set
@@ -215,7 +208,7 @@ export function registerBrowserStateCommands(
defaultRuntime.exit(1);
return;
}
try {
await runBrowserCommand(async () => {
const result = await browserSetMedia(baseUrl, {
colorScheme,
targetId: opts.targetId?.trim() || undefined,
@@ -226,10 +219,7 @@ export function registerBrowserStateCommands(
return;
}
defaultRuntime.log(`media colorScheme: ${colorScheme}`);
} catch (err) {
defaultRuntime.error(danger(String(err)));
defaultRuntime.exit(1);
}
});
});
set
@@ -241,7 +231,7 @@ export function registerBrowserStateCommands(
const parent = parentOpts(cmd);
const baseUrl = resolveBrowserControlUrl(parent?.url);
const profile = parent?.browserProfile;
try {
await runBrowserCommand(async () => {
const result = await browserSetTimezone(baseUrl, {
timezoneId,
targetId: opts.targetId?.trim() || undefined,
@@ -252,10 +242,7 @@ export function registerBrowserStateCommands(
return;
}
defaultRuntime.log(`timezone: ${timezoneId}`);
} catch (err) {
defaultRuntime.error(danger(String(err)));
defaultRuntime.exit(1);
}
});
});
set
@@ -267,7 +254,7 @@ export function registerBrowserStateCommands(
const parent = parentOpts(cmd);
const baseUrl = resolveBrowserControlUrl(parent?.url);
const profile = parent?.browserProfile;
try {
await runBrowserCommand(async () => {
const result = await browserSetLocale(baseUrl, {
locale,
targetId: opts.targetId?.trim() || undefined,
@@ -278,10 +265,7 @@ export function registerBrowserStateCommands(
return;
}
defaultRuntime.log(`locale: ${locale}`);
} catch (err) {
defaultRuntime.error(danger(String(err)));
defaultRuntime.exit(1);
}
});
});
set
@@ -293,7 +277,7 @@ export function registerBrowserStateCommands(
const parent = parentOpts(cmd);
const baseUrl = resolveBrowserControlUrl(parent?.url);
const profile = parent?.browserProfile;
try {
await runBrowserCommand(async () => {
const result = await browserSetDevice(baseUrl, {
name,
targetId: opts.targetId?.trim() || undefined,
@@ -304,9 +288,6 @@ export function registerBrowserStateCommands(
return;
}
defaultRuntime.log(`device: ${name}`);
} catch (err) {
defaultRuntime.error(danger(String(err)));
defaultRuntime.exit(1);
}
});
});
}