UNPKG

@burglekitt/gmt

Version:

Temporal-based date and time utilities with timezone support and polyfill integration

30 lines (29 loc) 1.97 kB
import type { DurationRelativeTo } from "../types/index.js"; /** * Resolve a `DurationRelativeTo` value for `Temporal.Duration`'s `relativeTo` option, converting * a GMT calendar-annotated PlainDate string (`"5784-06-15[u-ca=hebrew]"`, as produced by * `convertDateToCalendar`) into the `Temporal.PlainDate` it actually names before handing it to * Temporal. * * Without this, Temporal's own `relativeTo` string parsing reads GMT's native-digit shape as if * it were Temporal's ISO-digit `[u-ca=...]` convention instead (see * `context/coding-standards.md`'s E1 scoped-exception note on the two conventions), silently * resolving to the wrong date with no error — e.g. `relativeTo: "5784-06-15[u-ca=hebrew]"` * previously returned the day count for Gregorian year 5784, not the Hebrew date it names. Found * and fixed as part of E5 (issue #78); this is D1's "`duration/`'s `relativeTo` accepts the GMT * shape only" decision of record. * * Every other `relativeTo` shape (a plain ISO string, a `PlainDateTime`/`ZonedDateTime` object * or `-Like`, or any string that isn't a GMT calendar-annotated PlainDate) passes through * unchanged — GMT's calendar-string contract only covers `plain/` `PlainDate` (D1). * * Resolves to a `Temporal.PlainDateTime` (midnight, same calendar) rather than a bare * `Temporal.PlainDate` — verified equivalent at runtime (`.total`/`.round`/`.compare` all * produce the identical result either way) and `PlainDateTime` is the type Temporal's own * `relativeTo` option signature actually accepts, unlike `PlainDate`. * * Throws if the calendar-annotated string is malformed. Callers already wrap the Temporal call * consuming this in `try { ... } catch { return sentinel }` per GMT's contract, so this composes * directly into that same block rather than needing its own try/catch. */ export declare function resolveDurationRelativeTo(relativeTo: DurationRelativeTo | undefined): DurationRelativeTo | undefined;