mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-17 04:50:51 +00:00
55 lines
1.2 KiB
TypeScript
55 lines
1.2 KiB
TypeScript
export function parseTimeoutMs(raw: unknown): number | undefined {
|
|
if (raw === undefined || raw === null) {
|
|
return undefined;
|
|
}
|
|
let value = Number.NaN;
|
|
if (typeof raw === "number") {
|
|
value = raw;
|
|
} else if (typeof raw === "bigint") {
|
|
value = Number(raw);
|
|
} else if (typeof raw === "string") {
|
|
const trimmed = raw.trim();
|
|
if (!trimmed) {
|
|
return undefined;
|
|
}
|
|
value = Number.parseInt(trimmed, 10);
|
|
}
|
|
return Number.isFinite(value) ? value : undefined;
|
|
}
|
|
|
|
export function parseTimeoutMsWithFallback(
|
|
raw: unknown,
|
|
fallbackMs: number,
|
|
options: {
|
|
invalidType?: "fallback" | "error";
|
|
} = {},
|
|
): number {
|
|
if (raw === undefined || raw === null) {
|
|
return fallbackMs;
|
|
}
|
|
|
|
const value =
|
|
typeof raw === "string"
|
|
? raw.trim()
|
|
: typeof raw === "number" || typeof raw === "bigint"
|
|
? String(raw)
|
|
: null;
|
|
|
|
if (value === null) {
|
|
if (options.invalidType === "error") {
|
|
throw new Error("invalid --timeout");
|
|
}
|
|
return fallbackMs;
|
|
}
|
|
|
|
if (!value) {
|
|
return fallbackMs;
|
|
}
|
|
|
|
const parsed = Number.parseInt(value, 10);
|
|
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
throw new Error(`invalid --timeout: ${value}`);
|
|
}
|
|
return parsed;
|
|
}
|