a tool to help your Letta AI agents navigate bluesky

Add parseTimeValue function to time utilities

Changed files
+56
utils
+56
utils/time.ts
··· 2 2 import { Temporal } from "@js-temporal/polyfill"; 3 3 4 4 /** 5 + * Parse a time string with unit suffix or raw milliseconds 6 + * @param value - Time string like "10s", "90m", "3h" or raw milliseconds 7 + * @returns Time in milliseconds 8 + * @example 9 + * parseTimeValue("10s") // → 10000 10 + * parseTimeValue("90m") // → 5400000 11 + * parseTimeValue("3h") // → 10800000 12 + * parseTimeValue("5400000") // → 5400000 (backward compat) 13 + * parseTimeValue(10000) // → 10000 (already a number) 14 + */ 15 + function parseTimeValue(value: string | number | undefined): number { 16 + if (value === undefined || value === "") { 17 + throw new Error("Time value is required"); 18 + } 19 + 20 + if (typeof value === "number") { 21 + return value; 22 + } 23 + 24 + const match = value.trim().match(/^(\d+(?:\.\d+)?)\s*(s|m|h|ms)?$/i); 25 + 26 + if (!match) { 27 + throw new Error( 28 + `Invalid time format: "${value}". Expected: "10s", "90m", "3h", or raw milliseconds`, 29 + ); 30 + } 31 + 32 + const [, numStr, unit] = match; 33 + const num = parseFloat(numStr); 34 + 35 + if (isNaN(num) || num < 0) { 36 + throw new Error(`Time value must be a positive number: "${value}"`); 37 + } 38 + 39 + switch (unit?.toLowerCase()) { 40 + case "s": 41 + return msFrom.seconds(num); 42 + case "m": 43 + return msFrom.minutes(num); 44 + case "h": 45 + return msFrom.hours(num); 46 + case "ms": 47 + case undefined: 48 + return num; 49 + default: 50 + throw new Error(`Invalid unit: "${unit}". Use s/m/h/ms`); 51 + } 52 + } 53 + 54 + /** 5 55 * Convert time units to milliseconds 6 56 */ 7 57 export const msFrom = { ··· 20 70 * @param h - number of hours 21 71 */ 22 72 hours: (hours: number): number => hours * 60 * 60 * 1000, 73 + /** 74 + * Parse a time string with unit suffix (e.g., "10s", "90m", "3h") or raw milliseconds 75 + * @param value - Time string or number 76 + * @returns Time in milliseconds 77 + */ 78 + parse: parseTimeValue, 23 79 }; 24 80 25 81 /**