Review date-range filter boundaries

src/audit-date-filter.tsTypeScript
@@ -0,0 +1,35 @@
1+export interface AuditRecord {
2+ id: string;
3+ createdAt: Date;
4+}
5+
6+function parseDate(value: string | undefined): Date | undefined {
7+ if (value === undefined) {
8+ return undefined;
9+ }
10+
11+ const parsed = new Date(value);
12+ if (Number.isNaN(parsed.getTime())) {
13+ throw new RangeError("Invalid date");
14+ }
15+ return parsed;
16+}
17+
18+export function filterAuditRecords(
19+ records: readonly AuditRecord[],
20+ from: string | undefined,
21+ to: string | undefined,
22+): AuditRecord[] {
23+ const start = parseDate(from);
24+ const end = parseDate(to);
25+
26+ return records.filter((record) => {
27+ if (start !== undefined && record.createdAt <= start) {
28+ return false;
29+ }
30+ if (end !== undefined && record.createdAt >= end) {
31+ return false;
32+ }
33+ return true;
34+ });
35+}