import type { Command } from "commander" ;
import { hasFlag } from "../argv.js" ;
const jsonModeSymbol = Symbol("openclaw.cli.jsonMode" );
type JsonMode = "output" | "parse-only" ;
type JsonModeCommand = Command & {
[jsonModeSymbol]?: JsonMode;
};
function commandDefinesJsonOption(command: Command): boolean {
return command.options.some((option) => option.long === "--json" );
}
function getDeclaredCommandJsonMode(command: Command): JsonMode | null {
for (let current: Command | null = command; current; current = current.parent ?? null ) {
const metadata = (current as JsonModeCommand)[jsonModeSymbol];
if (metadata) {
return metadata;
}
if (commandDefinesJsonOption(current)) {
return "output" ;
}
}
return null ;
}
function commandSelectedJsonFlag(command: Command, argv: string[]): boolean {
const commandWithGlobals = command as Command & {
optsWithGlobals?: () => Record<string, unknown>;
};
if (typeof commandWithGlobals.optsWithGlobals === "function" ) {
const resolved = commandWithGlobals.optsWithGlobals().json;
if (resolved === true ) {
return true ;
}
}
return hasFlag(argv, "--json" );
}
export function setCommandJsonMode(command: Command, mode: JsonMode): Command {
(command as JsonModeCommand)[jsonModeSymbol] = mode;
return command;
}
export function getCommandJsonMode(
command: Command,
argv: string[] = process.argv,
): JsonMode | null {
if (!commandSelectedJsonFlag(command, argv)) {
return null ;
}
return getDeclaredCommandJsonMode(command);
}
export function isCommandJsonOutputMode(command: Command, argv: string[] = process.argv): boolean {
return getCommandJsonMode(command, argv) === "output" ;
}
Messung V0.5 in Prozent C=100 H=99 G=99
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland