39f6ae692b
Implements enhanced filtering and pagination for the `uwf thread list` command to support workflows with large numbers of threads. Changes: - Add --page, --page-size parameters for pagination (default: page 1, size 20) - Add --since, --until time filters supporting multiple formats (ISO8601, relative like "2h", "1d") - Add --workflow filter to show threads for specific workflow - Add --sort parameter (newest-first, oldest-first, alphabetical) - Add pagination metadata in JSON output (page, pageSize, totalThreads, totalPages, hasMore) - Implement parseRelativeTime() for human-friendly time expressions (1h, 30m, 2d, 1w) - Add comprehensive unit tests for filters, pagination, and time parsing - Update CLI help text with new parameters and examples Fixes #471
24 lines
800 B
TypeScript
24 lines
800 B
TypeScript
/**
|
|
* Parse time input: ISO date (YYYY-MM-DD, YYYY-MM-DDTHH:MM:SS) or relative (7d, 24h, 30m)
|
|
* Returns Unix timestamp in milliseconds.
|
|
*/
|
|
export function parseTimeInput(input: string, nowMs: number): number {
|
|
const trimmed = input.trim();
|
|
|
|
// Relative time: 7d, 24h, 30m
|
|
const relativeMatch = /^(\d+)(d|h|m)$/.exec(trimmed);
|
|
if (relativeMatch !== null) {
|
|
const value = Number.parseInt(relativeMatch[1], 10);
|
|
const unit = relativeMatch[2];
|
|
const multiplier = unit === "d" ? 86400000 : unit === "h" ? 3600000 : 60000;
|
|
return nowMs - value * multiplier;
|
|
}
|
|
|
|
// ISO date: try parsing
|
|
const parsed = Date.parse(trimmed);
|
|
if (Number.isNaN(parsed)) {
|
|
throw new Error(`invalid time format: ${trimmed} (expected ISO date or relative like '7d')`);
|
|
}
|
|
return parsed;
|
|
}
|