CLI: add nodes canvas snapshot + duration parsing
This commit is contained in:
27
src/cli/parse-duration.ts
Normal file
27
src/cli/parse-duration.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user