mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-13 11:00:50 +00:00
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: b7e51cf909
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import type { Command } from "commander";
|
|
|
|
export function hasExplicitOptions(command: Command, names: readonly string[]): boolean {
|
|
if (typeof command.getOptionValueSource !== "function") {
|
|
return false;
|
|
}
|
|
return names.some((name) => command.getOptionValueSource(name) === "cli");
|
|
}
|
|
|
|
function getOptionSource(command: Command, name: string): string | undefined {
|
|
if (typeof command.getOptionValueSource !== "function") {
|
|
return undefined;
|
|
}
|
|
return command.getOptionValueSource(name);
|
|
}
|
|
|
|
// Defensive guardrail: allow expected parent/grandparent inheritance without unbounded deep traversal.
|
|
const MAX_INHERIT_DEPTH = 2;
|
|
|
|
export function inheritOptionFromParent<T = unknown>(
|
|
command: Command | undefined,
|
|
name: string,
|
|
): T | undefined {
|
|
if (!command) {
|
|
return undefined;
|
|
}
|
|
|
|
const childSource = getOptionSource(command, name);
|
|
if (childSource && childSource !== "default") {
|
|
return undefined;
|
|
}
|
|
|
|
let depth = 0;
|
|
let ancestor = command.parent;
|
|
while (ancestor && depth < MAX_INHERIT_DEPTH) {
|
|
const source = getOptionSource(ancestor, name);
|
|
if (source && source !== "default") {
|
|
return ancestor.opts<Record<string, unknown>>()[name] as T | undefined;
|
|
}
|
|
depth += 1;
|
|
ancestor = ancestor.parent;
|
|
}
|
|
return undefined;
|
|
}
|