Files
clawdbot/src/cli/parse-duration.ts
2025-12-18 23:32:36 +01:00

28 lines
818 B
TypeScript

export type DurationMsParseOptions = {
defaultUnit?: "ms" | "s" | "m";
};
export function parseDurationMs(
raw: string,
opts?: DurationMsParseOptions,
): number {
const trimmed = String(raw ?? "")
.trim()
.toLowerCase();
if (!trimmed) throw new Error("invalid duration (empty)");
const m = /^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(trimmed);
if (!m) throw new Error(`invalid duration: ${raw}`);
const value = Number(m[1]);
if (!Number.isFinite(value) || value < 0) {
throw new Error(`invalid duration: ${raw}`);
}
const unit = (m[2] ?? opts?.defaultUnit ?? "ms") as "ms" | "s" | "m";
const multiplier = unit === "ms" ? 1 : unit === "s" ? 1000 : 60_000;
const ms = Math.round(value * multiplier);
if (!Number.isFinite(ms)) throw new Error(`invalid duration: ${raw}`);
return ms;
}