@vielzeug/timit 2.1.0 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -28
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/timit.cjs +1 -1
- package/dist/timit.cjs.map +1 -1
- package/dist/timit.d.ts +58 -79
- package/dist/timit.d.ts.map +1 -1
- package/dist/timit.js +374 -108
- package/dist/timit.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@vielzeug/timit) [](https://opensource.org/licenses/MIT)
|
|
6
6
|
|
|
7
|
-
`@vielzeug/timit` provides explicit, type-safe helpers for the Temporal API: local parsing, timezone conversion, DST-safe arithmetic, range checks, and human/canonical formatting.
|
|
7
|
+
`@vielzeug/timit` provides explicit, type-safe helpers for the Temporal API: local parsing, timezone conversion, DST-safe arithmetic, boundaries, range checks, comparison, and human/canonical formatting.
|
|
8
8
|
|
|
9
9
|
## Installation
|
|
10
10
|
|
|
@@ -17,48 +17,64 @@ pnpm add @vielzeug/timit
|
|
|
17
17
|
## Quick Start
|
|
18
18
|
|
|
19
19
|
```ts
|
|
20
|
-
import {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
import { Temporal } from '@js-temporal/polyfill';
|
|
21
|
+
import { formatDuration, formatHuman, formatInstant, formatZoned, parseLocal, shift, toInstant, toZoned } from '@vielzeug/timit';
|
|
22
|
+
|
|
23
|
+
const localMeeting = parseLocal('2026-03-21T10:30:00');
|
|
24
|
+
const meetingInstant = toInstant(localMeeting, { tz: 'America/New_York' });
|
|
25
|
+
const meetingNY = toZoned(meetingInstant, { tz: 'America/New_York' });
|
|
26
|
+
const reminder = shift(meetingNY, { minutes: -15 });
|
|
27
|
+
|
|
28
|
+
console.log(formatHuman(reminder, { pattern: 'short', locale: 'en-US', tz: 'America/New_York' }));
|
|
29
|
+
console.log(formatInstant(reminder));
|
|
30
|
+
console.log(formatZoned(reminder));
|
|
31
|
+
console.log(formatDuration({ hours: 1, minutes: 30 }, { locale: 'en-US', style: 'short' }));
|
|
28
32
|
```
|
|
29
33
|
|
|
30
|
-
|
|
34
|
+
Since many function names (`now`, `shift`, `clamp`, `difference`, …) are common in application code, use a namespace import to avoid collisions while still getting full tree-shaking:
|
|
31
35
|
|
|
32
36
|
```ts
|
|
33
|
-
import
|
|
34
|
-
|
|
37
|
+
import * as timit from '@vielzeug/timit';
|
|
38
|
+
|
|
39
|
+
timit.now('UTC');
|
|
40
|
+
timit.difference(start, end, { largestUnit: 'day' });
|
|
41
|
+
timit.formatHuman(meeting, { pattern: 'short', locale: 'en-US' });
|
|
35
42
|
```
|
|
36
43
|
|
|
37
44
|
## API Quick Reference
|
|
38
45
|
|
|
39
46
|
### Conversion
|
|
40
|
-
|
|
41
|
-
- `
|
|
42
|
-
- `
|
|
47
|
+
|
|
48
|
+
- `parseLocal(input)` — Parse plain local date/time string to `Temporal.PlainDateTime`
|
|
49
|
+
- `toInstant(input, options?)` — Normalize to canonical timeline value (`Temporal.Instant`)
|
|
50
|
+
- `toZoned(input, options)` — View time in a specific timezone (`Temporal.ZonedDateTime`)
|
|
51
|
+
|
|
52
|
+
Input model:
|
|
53
|
+
|
|
54
|
+
- Core functions accept Temporal values (`Temporal.Instant`, `Temporal.PlainDate`, `Temporal.PlainDateTime`, `Temporal.ZonedDateTime`)
|
|
55
|
+
- Use `parseLocal()` when starting from local strings
|
|
56
|
+
- `tz` is required whenever a local value must be interpreted on the timeline
|
|
43
57
|
|
|
44
58
|
### Arithmetic
|
|
45
|
-
|
|
46
|
-
- `
|
|
59
|
+
|
|
60
|
+
- `shift(input, duration, options)` — Add/subtract duration, DST-safe, returns `Temporal.ZonedDateTime`
|
|
61
|
+
- `difference(start, end, options?)` — Compute duration between two times; infers timezone from zoned inputs or accepts explicit `options.tz`
|
|
47
62
|
|
|
48
63
|
### Queries
|
|
49
|
-
- `now(tz?)` — Current time in timezone
|
|
50
|
-
- `within(value, start, end, options?)` — Check if time is in range (auto-normalizes bounds)
|
|
51
64
|
|
|
52
|
-
|
|
53
|
-
- `
|
|
54
|
-
- `
|
|
55
|
-
- `
|
|
65
|
+
- `now(tz)` — Current time in timezone
|
|
66
|
+
- `within(value, start, end, options?)` — Inclusive range check; auto-normalizes reversed bounds
|
|
67
|
+
- `clamp(value, start, end, options?)` — Clamp a value to range bounds; returns `Temporal.Instant`
|
|
68
|
+
- `isBefore(a, b, options?)` / `isAfter(a, b, options?)` / `isSame(a, b, options)` — Comparison helpers for timeline or calendar-unit checks
|
|
56
69
|
|
|
57
|
-
###
|
|
58
|
-
- `t` — Namespace that groups all operations
|
|
70
|
+
### Formatting
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
- `
|
|
72
|
+
- `formatHuman(input, options?)` — Localized UI string; patterns: `'short' | 'medium' | 'long' | 'date-only' | 'time-only'`
|
|
73
|
+
- `formatInstant(input, options?)` — UTC ISO-8601 string (e.g. `2026-03-21T10:15:30Z`)
|
|
74
|
+
- `formatZoned(input, options?)` — Zoned ISO-8601 string; infers tz from `ZonedDateTime`, or requires `options.tz`
|
|
75
|
+
- `formatRange(start, end, options?)` — Localized time span via `Intl.DateTimeFormat.formatRange`
|
|
76
|
+
- `formatRelative(input, options?)` — Relative text via `Intl.RelativeTimeFormat`
|
|
77
|
+
- `parseDuration(input)` / `formatDuration(input, options?)` — Duration utilities
|
|
62
78
|
|
|
63
79
|
## Why timit?
|
|
64
80
|
|
|
@@ -68,7 +84,6 @@ import { shift, formatHuman, toZoned } from '@vielzeug/timit';
|
|
|
68
84
|
✅ **Concise API**: Short, intuitive function names
|
|
69
85
|
✅ **Polyfilled**: Works in runtimes without native Temporal
|
|
70
86
|
|
|
71
|
-
|
|
72
87
|
## License
|
|
73
88
|
|
|
74
89
|
MIT © [Helmuth Saatkamp](https://github.com/helmuthdu) — part of the [Vielzeug](https://github.com/helmuthdu/vielzeug) monorepo.
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./timit.cjs`);
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./timit.cjs`);exports.clamp=e.clamp,exports.difference=e.difference,exports.endOf=e.endOf,exports.formatDuration=e.formatDuration,exports.formatHuman=e.formatHuman,exports.formatInstant=e.formatInstant,exports.formatRange=e.formatRange,exports.formatRelative=e.formatRelative,exports.formatZoned=e.formatZoned,exports.isAfter=e.isAfter,exports.isBefore=e.isBefore,exports.isSame=e.isSame,exports.now=e.now,exports.parseDuration=e.parseDuration,exports.parseLocal=e.parseLocal,exports.shift=e.shift,exports.startOf=e.startOf,exports.toInstant=e.toInstant,exports.toZoned=e.toZoned,exports.within=e.within;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { e as
|
|
1
|
+
import { clamp as e, difference as t, endOf as n, formatDuration as r, formatHuman as i, formatInstant as a, formatRange as o, formatRelative as s, formatZoned as c, isAfter as l, isBefore as u, isSame as d, now as f, parseDuration as p, parseLocal as m, shift as h, startOf as g, toInstant as _, toZoned as v, within as y } from "./timit.js";
|
|
2
|
+
export { e as clamp, t as difference, n as endOf, r as formatDuration, i as formatHuman, a as formatInstant, o as formatRange, s as formatRelative, c as formatZoned, l as isAfter, u as isBefore, d as isSame, f as now, p as parseDuration, m as parseLocal, h as shift, g as startOf, _ as toInstant, v as toZoned, y as within };
|
package/dist/timit.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
let e=require(`@js-temporal/polyfill`);var t=`
|
|
1
|
+
let e=require(`@js-temporal/polyfill`);var t=`[timit]`,n=`Invalid local date/time string. Expected an ISO 8601 date or date-time string (e.g. YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss).`,r=`This operation requires a timezone. Pass options.tz or use a ZonedDateTime input.`,i=`formatRange received ZonedDateTime inputs with different time zones. Pass options.tz explicitly.`,a=`Comparison received ZonedDateTime inputs with different time zones. Pass options.tz explicitly.`,o=`Unsupported time input type.`,s=100,c=[{scale:1,thresholdToPromote:60,unit:`second`},{scale:60,thresholdToPromote:60,unit:`minute`},{scale:3600,thresholdToPromote:24,unit:`hour`},{scale:86400,thresholdToPromote:7,unit:`day`},{scale:604800,thresholdToPromote:2629800/604800,unit:`week`},{scale:2629800,thresholdToPromote:12,unit:`month`},{scale:31557600,thresholdToPromote:1/0,unit:`year`}],l={"date-only":{dateStyle:`short`},long:{dateStyle:`full`,timeStyle:`long`},medium:{dateStyle:`medium`,timeStyle:`short`},short:{dateStyle:`short`,timeStyle:`short`},"time-only":{timeStyle:`short`}},u={day:{add:{days:1},clear:{hour:0,microsecond:0,millisecond:0,minute:0,nanosecond:0,second:0}},hour:{add:{hours:1},clear:{microsecond:0,millisecond:0,minute:0,nanosecond:0,second:0}},minute:{add:{minutes:1},clear:{microsecond:0,millisecond:0,nanosecond:0,second:0}},month:{add:{months:1},clear:{day:1,hour:0,microsecond:0,millisecond:0,minute:0,nanosecond:0,second:0}},week:{add:{weeks:1},clear:{hour:0,microsecond:0,millisecond:0,minute:0,nanosecond:0,second:0}},year:{add:{years:1},clear:{day:1,hour:0,microsecond:0,millisecond:0,minute:0,month:1,nanosecond:0,second:0}}};function d(e,t){if(!e.has(t))return;let n=e.get(t);return e.delete(t),e.set(t,n),n}function f(e,t,n){if(e.set(t,n),e.size<=s)return;let r=e.keys().next().value;e.delete(r)}var p=new Map,m=new Map,h=new Map;function g(e){throw TypeError(`${t} ${e}`)}function _(t){if(t instanceof e.Temporal.Instant)return{kind:`instant`,value:t};if(t instanceof e.Temporal.ZonedDateTime)return{kind:`zoned`,value:t};if(t instanceof e.Temporal.PlainDateTime)return{kind:`local`,value:t};if(t instanceof e.Temporal.PlainDate)return{kind:`local`,value:t.toPlainDateTime()};g(o)}function v(e,t){let n=t.tz??(e.kind===`zoned`?e.value.timeZoneId:void 0);return n||g(r),n}function y(e,t){if(t.tz)return t.tz;let n;for(let t of e){if(t.kind!==`zoned`)continue;let e=t.value.timeZoneId;if(!n){n=e;continue}n!==e&&g(a)}return n||g(r),n}function b(e,t){return e.kind===`instant`?e.value:e.kind===`zoned`?e.value.toInstant():(t.tz||g(r),e.value.toZonedDateTime(t.tz,{disambiguation:t.when}).toInstant())}function x(e,t){return e.kind===`zoned`?e.value.withTimeZone(t.tz):e.kind===`local`?e.value.toZonedDateTime(t.tz,{disambiguation:t.when}):e.value.toZonedDateTimeISO(t.tz)}function S(e,t={}){return b(_(e),t)}function ee(e,t){return t??(e.kind===`zoned`?e.value.timeZoneId:void 0)}function C(e,t,n){if(n)return n;let r=e.kind===`zoned`?e.value.timeZoneId:void 0,a=t.kind===`zoned`?t.value.timeZoneId:void 0;return r&&a&&r!==a&&g(i),r??a}function w(t,n){return e.Temporal.Instant.compare(t,n)<=0?[t,n]:[n,t]}function T(e,t){let n=(e.dayOfWeek-t+7)%7;return e.subtract({days:n})}function E(e,t,n){let r=D(x(e,{tz:n.tz,when:n.when}),t);return t===`week`&&(r=T(r,n.weekStartsOn??1)),r}function D(e,t){return e.with(u[t].clear)}function O(e,t){return e.add(u[t].add)}function k(e,t,n){return E(e,t,n).toInstant()}function A(e){return JSON.stringify(Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,String(t)]))}function j(e,t){let n=e.tz??t;if(`intl`in e&&e.intl){let t=`${String(e.locale??``)}|intl|${n??``}|${A(e.intl)}`,r=d(p,t);if(r)return r;let i=n===void 0?e.intl:{...e.intl,timeZone:n},a=new Intl.DateTimeFormat(e.locale,i);return f(p,t,a),a}let r=e.pattern??`medium`,i=`${String(e.locale??``)}|${r}|${n??``}`,a=d(p,i);if(a)return a;let o=new Intl.DateTimeFormat(e.locale,{...l[r],timeZone:n});return f(p,i,o),o}function M(e){let t=`${String(e.locale??``)}|${e.numeric??`auto`}|${e.style??`long`}`,n=d(m,t);if(n)return n;let r=new Intl.RelativeTimeFormat(e.locale,{numeric:e.numeric??`auto`,style:e.style??`long`});return f(m,t,r),r}function N(e){Number.isFinite(e)||g(`formatRelative received a non-finite time difference.`);let t=Math.round(e);for(let{scale:e,thresholdToPromote:n,unit:r}of c){let i=Math.round(t/e);if(Math.abs(i)<n)return{unit:r,value:i}}return{unit:`year`,value:Math.round(t/31557600)}}function P(t){return e.Temporal.Now.zonedDateTimeISO(t)}function F(t){try{return e.Temporal.PlainDateTime.from(t)}catch{g(n)}}function I(e,t={}){return b(_(e),t)}function L(e,t){return x(_(e),t)}function R(e,t,n={}){let r=_(e);return x(r,{tz:v(r,n),when:n.when}).add(t)}function z(e,t,n={}){let r=_(e),i=_(t),a=y([r,i],n),{largestUnit:o,roundingIncrement:s,roundingMode:c,smallestUnit:l}=n;return x(i,{tz:a,when:n.when}).since(x(r,{tz:a,when:n.when}),{largestUnit:o,roundingIncrement:s,roundingMode:c,smallestUnit:l})}function B(t,n,r,i={}){if(!i.unit){let a=S(t,i),[o,s]=w(S(n,i),S(r,i));return e.Temporal.Instant.compare(o,a)<=0&&e.Temporal.Instant.compare(a,s)<=0}let a=_(t),o=_(n),s=_(r),c={tz:y([a,o,s],i),weekStartsOn:i.weekStartsOn,when:i.when},l=k(a,i.unit,c),[u,d]=w(k(o,i.unit,c),k(s,i.unit,c));return e.Temporal.Instant.compare(u,l)<=0&&e.Temporal.Instant.compare(l,d)<=0}function V(t,n,r,i={}){if(!i.unit){let a=S(t,i),[o,s]=w(S(n,i),S(r,i));return e.Temporal.Instant.compare(a,o)<0?o:e.Temporal.Instant.compare(a,s)>0?s:a}let a=_(t),o=_(n),s=_(r),c={tz:y([a,o,s],i),weekStartsOn:i.weekStartsOn,when:i.when},l=k(a,i.unit,c),[u,d]=w(k(o,i.unit,c),k(s,i.unit,c));return e.Temporal.Instant.compare(l,u)<0?u:e.Temporal.Instant.compare(l,d)>0?d:l}function H(t,n,r){if(!r.unit)return e.Temporal.Instant.compare(S(t,r),S(n,r));let i=_(t),a=_(n),o={tz:y([i,a],r),weekStartsOn:r.weekStartsOn,when:r.when},s=k(i,r.unit,o),c=k(a,r.unit,o);return e.Temporal.Instant.compare(s,c)}function U(e,t,n={}){return H(e,t,n)<0}function W(e,t,n={}){return H(e,t,n)>0}function G(e,t,n={}){return H(e,t,n)===0}function K(e,t,n={}){let r=_(e);return E(r,t,{tz:v(r,n),weekStartsOn:n.weekStartsOn,when:n.when})}function q(e,t,n={}){return O(K(e,t,n),t).subtract({nanoseconds:1})}function J(e,t={}){let n=_(e),r=ee(n,t.tz),i=b(n,{tz:r});return j(t,r).format(new Date(i.epochMilliseconds))}function Y(e,t,n={}){let r=_(e),i=_(t),a=C(r,i,n.tz);return j(n,a).formatRange(new Date(b(r,{tz:a}).epochMilliseconds),new Date(b(i,{tz:a}).epochMilliseconds))}function X(e,t={}){return b(_(e),t).toString()}function Z(e,t={}){let n=_(e);return x(n,{tz:v(n,t),when:t.when}).toString()}function Q(t,n={}){let r=S(t),i=n.base?S(n.base):e.Temporal.Now.instant(),{unit:a,value:o}=N((r.epochMilliseconds-i.epochMilliseconds)/1e3);return M(n).format(o,a)}function $(t){try{return e.Temporal.Duration.from(t)}catch{g(`Invalid duration input. Expected ISO duration string or Temporal.DurationLike.`)}}function te(e,t={}){let n=$(e),r=`${String(t.locale??``)}|${t.style??``}`,i=d(h,r);if(i)return i.format(n);let a=Intl;if(!a.DurationFormat)return n.toString();let o=new a.DurationFormat(t.locale,{style:t.style});return f(h,r,o),o.format(n)}exports.clamp=V,exports.difference=z,exports.endOf=q,exports.formatDuration=te,exports.formatHuman=J,exports.formatInstant=X,exports.formatRange=Y,exports.formatRelative=Q,exports.formatZoned=Z,exports.isAfter=W,exports.isBefore=U,exports.isSame=G,exports.now=P,exports.parseDuration=$,exports.parseLocal=F,exports.shift=R,exports.startOf=K,exports.toInstant=I,exports.toZoned=L,exports.within=B;
|
|
2
2
|
//# sourceMappingURL=timit.cjs.map
|
package/dist/timit.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timit.cjs","names":[],"sources":["../src/timit.ts"],"sourcesContent":["import { Temporal } from '@js-temporal/polyfill';\n\nexport { Temporal };\n\nexport type DateTimeDisambiguation = 'compatible' | 'earlier' | 'later' | 'reject';\n\n/**\n * Supported input types for date/time operations.\n * - Temporal types preserve timezone and disambiguation info\n * - Date is silently converted to Instant (timezone lost)\n * - Numbers are treated as epoch milliseconds\n * - ISO strings can have offset; plain strings require `tz` option\n */\nexport type TimeInput = Date | Temporal.Instant | Temporal.PlainDateTime | Temporal.ZonedDateTime | number | string;\n\n/**\n * Time zone and disambiguation options for conversions.\n * - `tz`: Time zone ID (e.g., 'America/New_York'). Defaults to system timezone.\n * - `when`: How to resolve ambiguous local times during DST transitions.\n * 'earlier' | 'later' | 'compatible' (default) | 'reject'\n */\nexport interface TimeOptions {\n tz?: string;\n when?: DateTimeDisambiguation;\n}\n\nexport interface LocalTimeOptions {\n tz: string;\n when?: DateTimeDisambiguation;\n}\n\n/**\n * Options for computing differences between times.\n * Extends TimeOptions and adds Temporal.Duration granularity control.\n */\nexport interface DifferenceOptions extends TimeOptions {\n largestUnit?: Temporal.DateTimeUnit;\n roundingIncrement?: number;\n roundingMode?: Temporal.RoundingMode;\n smallestUnit?: Temporal.DateTimeUnit;\n}\n\n/**\n * Common formatting patterns for human-readable output.\n * - 'iso': Full ISO-8601 style (e.g., \"Sunday, March 21, 2026, 10:15:30 AM\")\n * - 'short': Compact style (e.g., \"21/03/2026, 10:15 AM\")\n * - 'long': Expanded style (e.g., \"Sunday, March 21, 2026 at 10:15:30 AM\")\n * - 'date-only': Just the date (e.g., \"21/03/2026\")\n * - 'time-only': Just the time (e.g., \"10:15 AM\")\n */\nexport type FormatPattern = 'short' | 'long' | 'date-only' | 'time-only';\n\n/**\n * Options for formatting times as human-readable strings.\n * - `pattern`: Preset format (covers 80% of common cases)\n * - `locale`: BCP 47 language tag for localization\n * - `tz`: Time zone for display (affects wall-clock time shown)\n * - `intl`: Escape hatch for advanced Intl.DateTimeFormatOptions\n */\nexport interface HumanFormatOptions {\n pattern?: FormatPattern;\n locale?: Intl.LocalesArgument;\n tz?: string;\n intl?: Intl.DateTimeFormatOptions;\n}\n\nconst DEFAULT_DISAMBIGUATION: DateTimeDisambiguation = 'compatible';\n\nfunction resolveTimeZone(tz?: string): string {\n return tz ?? Temporal.Now.timeZoneId();\n}\n\nfunction parsePlainDateTime(value: string): Temporal.PlainDateTime {\n try {\n return Temporal.PlainDateTime.from(value);\n } catch {\n return Temporal.PlainDate.from(value).toPlainDateTime();\n }\n}\n\nfunction isPlainLocalLike(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}(?:$|T)/.test(value);\n}\n\nfunction toJsDate(instant: Temporal.Instant): Date {\n return new Date(instant.epochMilliseconds);\n}\n\nfunction resolveFormatPattern(pattern?: FormatPattern): Intl.DateTimeFormatOptions {\n if (!pattern) return { dateStyle: 'medium', timeStyle: 'short' };\n\n const patterns: Record<FormatPattern, Intl.DateTimeFormatOptions> = {\n 'date-only': { dateStyle: 'short' },\n long: { dateStyle: 'full', timeStyle: 'long' },\n short: { dateStyle: 'short', timeStyle: 'short' },\n 'time-only': { timeStyle: 'short' },\n };\n\n return patterns[pattern];\n}\n\nfunction makeFormatter(options: HumanFormatOptions = {}): Intl.DateTimeFormat {\n return new Intl.DateTimeFormat(options.locale, {\n ...resolveFormatPattern(options.pattern),\n ...options.intl,\n timeZone: resolveTimeZone(options.tz),\n });\n}\n\nexport function now(tz?: string): Temporal.ZonedDateTime {\n return Temporal.Now.zonedDateTimeISO(resolveTimeZone(tz));\n}\n\nexport function parseLocal(input: string, options: LocalTimeOptions): Temporal.ZonedDateTime {\n return parsePlainDateTime(input).toZonedDateTime(options.tz, {\n disambiguation: options.when ?? DEFAULT_DISAMBIGUATION,\n });\n}\n\nexport function toInstant(input: TimeInput, options: TimeOptions = {}): Temporal.Instant {\n if (input instanceof Temporal.Instant) {\n return input;\n }\n\n if (input instanceof Temporal.ZonedDateTime) {\n return input.toInstant();\n }\n\n if (input instanceof Temporal.PlainDateTime) {\n if (!options.tz) {\n throw new TypeError('Temporal.PlainDateTime input requires options.tz.');\n }\n\n return input\n .toZonedDateTime(options.tz, {\n disambiguation: options.when ?? DEFAULT_DISAMBIGUATION,\n })\n .toInstant();\n }\n\n if (input instanceof Date) {\n return Temporal.Instant.fromEpochMilliseconds(input.getTime());\n }\n\n if (typeof input === 'number') {\n return Temporal.Instant.fromEpochMilliseconds(input);\n }\n\n if (typeof input === 'string') {\n try {\n return Temporal.Instant.from(input);\n } catch {\n if (!isPlainLocalLike(input)) {\n throw new TypeError('Invalid time string. Expected ISO instant or plain local date/time.');\n }\n\n if (!options.tz) {\n throw new TypeError('Plain local date/time string requires options.tz.');\n }\n\n return parseLocal(input, {\n tz: options.tz,\n when: options.when,\n }).toInstant();\n }\n }\n\n throw new TypeError('Unsupported time input type.');\n}\n\nexport function toZoned(input: TimeInput, options: TimeOptions = {}): Temporal.ZonedDateTime {\n if (input instanceof Temporal.ZonedDateTime) {\n if (!options.tz) {\n return input;\n }\n\n const tz = resolveTimeZone(options.tz);\n\n return input.withTimeZone(tz);\n }\n\n const tz = resolveTimeZone(options.tz);\n\n if (input instanceof Temporal.PlainDateTime) {\n if (!options.tz) {\n throw new TypeError('Temporal.PlainDateTime input requires options.tz.');\n }\n\n return input.toZonedDateTime(tz, {\n disambiguation: options.when ?? DEFAULT_DISAMBIGUATION,\n });\n }\n\n return toInstant(input, options).toZonedDateTimeISO(tz);\n}\n\nexport function shift(\n input: TimeInput,\n duration: Temporal.DurationLike,\n options: TimeOptions = {},\n): Temporal.ZonedDateTime {\n return toZoned(input, options).add(duration);\n}\n\nexport function diff(start: TimeInput, end: TimeInput, options: DifferenceOptions = {}): Temporal.Duration {\n const { tz } = options;\n const startDateTime = toZoned(start, { tz, when: options.when });\n const endDateTime = toZoned(end, { tz, when: options.when });\n\n return endDateTime.since(startDateTime, {\n largestUnit: options.largestUnit,\n roundingIncrement: options.roundingIncrement,\n roundingMode: options.roundingMode,\n smallestUnit: options.smallestUnit,\n });\n}\n\nexport function within(input: TimeInput, start: TimeInput, end: TimeInput, options: TimeOptions = {}): boolean {\n const value = toInstant(input, options).epochNanoseconds;\n const boundA = toInstant(start, options).epochNanoseconds;\n const boundB = toInstant(end, options).epochNanoseconds;\n const lower = boundA <= boundB ? boundA : boundB;\n const upper = boundA <= boundB ? boundB : boundA;\n\n return value >= lower && value <= upper;\n}\n\nexport function formatHuman(input: TimeInput, options: HumanFormatOptions = {}): string {\n const instant = toInstant(input, { tz: options.tz });\n const formatter = makeFormatter(options);\n\n return formatter.format(toJsDate(instant));\n}\n\nexport function formatISO(input: TimeInput, options: TimeOptions = {}): string {\n return toInstant(input, options).toString();\n}\n\nexport function formatRange(start: TimeInput, end: TimeInput, options: HumanFormatOptions = {}): string {\n const formatter = makeFormatter(options);\n const startDate = toJsDate(toInstant(start, { tz: options.tz }));\n const endDate = toJsDate(toInstant(end, { tz: options.tz }));\n\n const formatterWithRange = formatter as Intl.DateTimeFormat & {\n formatRange?: (startDate: Date, endDate: Date) => string;\n };\n\n if (typeof formatterWithRange.formatRange === 'function') {\n return formatterWithRange.formatRange(startDate, endDate);\n }\n\n return `${formatter.format(startDate)} - ${formatter.format(endDate)}`;\n}\n\n/**\n * Namespace object for date/time operations.\n * Provides a grouped API with explicit parsing and formatting modes.\n *\n * @example\n * ```ts\n * import { t } from '@vielzeug/timit';\n *\n * t.now('UTC')\n * t.toInstant('2026-03-21T10:15:30Z')\n * t.toZoned('2026-03-21T10:15:30Z', { tz: 'Europe/Berlin' })\n * t.parseLocal('2026-03-21T10:15:30', { tz: 'Europe/Berlin' })\n * t.shift(time, { hours: 1 })\n * t.diff(start, end)\n * t.within(time, start, end)\n * t.formatHuman(time, { pattern: 'short' })\n * t.formatISO(time)\n * t.formatRange(start, end)\n * ```\n */\nexport const t = {\n diff,\n formatHuman,\n formatISO,\n formatRange,\n now,\n parseLocal,\n shift,\n toInstant,\n toZoned,\n within,\n} as const;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"timit.cjs","names":[],"sources":["../src/timit.ts"],"sourcesContent":["import { Temporal } from '@js-temporal/polyfill';\n\nexport type DateTimeDisambiguation = 'compatible' | 'earlier' | 'later' | 'reject';\n\nexport type TimeInput = Temporal.Instant | Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime;\nexport type RelativeTimeInput = Temporal.Instant | Temporal.ZonedDateTime;\n\nexport interface TimeOptions {\n tz?: string;\n when?: DateTimeDisambiguation;\n}\n\nexport type TimeOptionsWithTz = TimeOptions & { tz: string };\n\nexport interface DifferenceOptions extends TimeOptions {\n largestUnit?: Temporal.DateTimeUnit;\n roundingIncrement?: number;\n roundingMode?: Temporal.RoundingMode;\n smallestUnit?: Temporal.DateTimeUnit;\n}\n\nexport type FormatPattern = 'short' | 'medium' | 'long' | 'date-only' | 'time-only';\n\ninterface HumanFormatBaseOptions {\n locale?: Intl.LocalesArgument;\n tz?: string;\n}\n\nexport type HumanFormatOptions =\n | (HumanFormatBaseOptions & { intl?: never; pattern?: FormatPattern })\n | (HumanFormatBaseOptions & { intl: Intl.DateTimeFormatOptions; pattern?: never });\n\nexport interface RelativeFormatOptions {\n base?: RelativeTimeInput;\n locale?: Intl.LocalesArgument;\n numeric?: Intl.RelativeTimeFormatNumeric;\n style?: Intl.RelativeTimeFormatStyle;\n}\n\nexport type BoundaryUnit = 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';\nexport type WeekStartDay = 1 | 2 | 3 | 4 | 5 | 6 | 7;\ntype NonWeekBoundaryUnit = Exclude<BoundaryUnit, 'week'>;\n\nexport interface BoundaryOptions extends TimeOptions {\n weekStartsOn?: WeekStartDay;\n}\n\ntype UnitBoundaryOptions =\n | (TimeOptions & { unit: NonWeekBoundaryUnit; weekStartsOn?: never })\n | (TimeOptions & { unit: 'week'; weekStartsOn?: WeekStartDay });\n\nexport type CompareOptions = UnitBoundaryOptions | (TimeOptions & { unit?: undefined; weekStartsOn?: never });\n\nexport type IsSameOptions = CompareOptions;\n\nexport interface DurationFormatOptions {\n locale?: Intl.LocalesArgument;\n style?: 'digital' | 'long' | 'narrow' | 'short';\n}\n\n// ─── Internal types ───────────────────────────────────────────────────────────\n\ntype ParsedTimeInput =\n | { kind: 'instant'; value: Temporal.Instant }\n | { kind: 'local'; value: Temporal.PlainDateTime }\n | { kind: 'zoned'; value: Temporal.ZonedDateTime };\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst ERROR_PREFIX = '[timit]';\nconst INVALID_LOCAL_TIME_STRING_MESSAGE =\n 'Invalid local date/time string. Expected an ISO 8601 date or date-time string (e.g. YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss).';\nconst MISSING_TIMEZONE_MESSAGE = 'This operation requires a timezone. Pass options.tz or use a ZonedDateTime input.';\nconst MISMATCHED_RANGE_ZONES_MESSAGE =\n 'formatRange received ZonedDateTime inputs with different time zones. Pass options.tz explicitly.';\nconst MISMATCHED_COMPARISON_ZONES_MESSAGE =\n 'Comparison received ZonedDateTime inputs with different time zones. Pass options.tz explicitly.';\nconst UNSUPPORTED_INPUT_MESSAGE = 'Unsupported time input type.';\nconst CACHE_MAX_SIZE = 100;\nconst RELATIVE_UNITS: ReadonlyArray<{\n scale: number;\n thresholdToPromote: number;\n unit: Intl.RelativeTimeFormatUnit;\n}> = [\n { scale: 1, thresholdToPromote: 60, unit: 'second' },\n { scale: 60, thresholdToPromote: 60, unit: 'minute' },\n { scale: 3600, thresholdToPromote: 24, unit: 'hour' },\n { scale: 86400, thresholdToPromote: 7, unit: 'day' },\n // 2629800 / 604800 ~= 4.348 week-to-month promotion threshold used below.\n { scale: 604800, thresholdToPromote: 2629800 / 604800, unit: 'week' },\n { scale: 2629800, thresholdToPromote: 12, unit: 'month' },\n { scale: 31557600, thresholdToPromote: Number.POSITIVE_INFINITY, unit: 'year' },\n];\n\nconst FORMAT_PRESETS: Record<FormatPattern, Intl.DateTimeFormatOptions> = {\n 'date-only': { dateStyle: 'short' },\n long: { dateStyle: 'full', timeStyle: 'long' },\n medium: { dateStyle: 'medium', timeStyle: 'short' },\n short: { dateStyle: 'short', timeStyle: 'short' },\n 'time-only': { timeStyle: 'short' },\n};\n\nconst BOUNDARY_CONFIG: Record<BoundaryUnit, { add: Temporal.DurationLike; clear: Temporal.ZonedDateTimeLike }> = {\n day: {\n add: { days: 1 },\n clear: { hour: 0, microsecond: 0, millisecond: 0, minute: 0, nanosecond: 0, second: 0 },\n },\n hour: {\n add: { hours: 1 },\n clear: { microsecond: 0, millisecond: 0, minute: 0, nanosecond: 0, second: 0 },\n },\n minute: {\n add: { minutes: 1 },\n clear: { microsecond: 0, millisecond: 0, nanosecond: 0, second: 0 },\n },\n month: {\n add: { months: 1 },\n clear: { day: 1, hour: 0, microsecond: 0, millisecond: 0, minute: 0, nanosecond: 0, second: 0 },\n },\n week: {\n add: { weeks: 1 },\n clear: { hour: 0, microsecond: 0, millisecond: 0, minute: 0, nanosecond: 0, second: 0 },\n },\n year: {\n add: { years: 1 },\n clear: { day: 1, hour: 0, microsecond: 0, millisecond: 0, minute: 0, month: 1, nanosecond: 0, second: 0 },\n },\n};\n\n// ─── Bounded cache ────────────────────────────────────────────────────────────\n\nfunction getCached<K, V>(cache: Map<K, V>, key: K): V | undefined {\n if (!cache.has(key)) {\n return undefined;\n }\n\n const value = cache.get(key) as V;\n\n // Refresh insertion order on hit for LRU-like behavior.\n cache.delete(key);\n cache.set(key, value);\n\n return value;\n}\n\nfunction setCached<K, V>(cache: Map<K, V>, key: K, value: V): void {\n cache.set(key, value);\n\n if (cache.size <= CACHE_MAX_SIZE) {\n return;\n }\n\n const oldestKey = cache.keys().next().value as K;\n\n cache.delete(oldestKey);\n}\n\ntype DurationFormatter = {\n format(value: Temporal.Duration): string;\n};\n\ntype DurationFormatterConstructor = new (\n locales?: Intl.LocalesArgument,\n options?: { style?: 'digital' | 'long' | 'narrow' | 'short' },\n) => DurationFormatter;\n\nconst DATE_TIME_FORMATTER_CACHE = new Map<string, Intl.DateTimeFormat>();\nconst RELATIVE_TIME_FORMATTER_CACHE = new Map<string, Intl.RelativeTimeFormat>();\nconst DURATION_FORMATTER_CACHE = new Map<string, DurationFormatter>();\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction fail(message: string): never {\n throw new TypeError(`${ERROR_PREFIX} ${message}`);\n}\n\nfunction parseInput(input: TimeInput): ParsedTimeInput {\n if (input instanceof Temporal.Instant) {\n return { kind: 'instant', value: input };\n }\n\n if (input instanceof Temporal.ZonedDateTime) {\n return { kind: 'zoned', value: input };\n }\n\n if (input instanceof Temporal.PlainDateTime) {\n return { kind: 'local', value: input };\n }\n\n if (input instanceof Temporal.PlainDate) {\n return { kind: 'local', value: input.toPlainDateTime() };\n }\n\n fail(UNSUPPORTED_INPUT_MESSAGE);\n}\n\nfunction inferTimeZone(parsed: ParsedTimeInput, options: TimeOptions): string {\n const tz = options.tz ?? (parsed.kind === 'zoned' ? parsed.value.timeZoneId : undefined);\n\n if (!tz) {\n fail(MISSING_TIMEZONE_MESSAGE);\n }\n\n return tz;\n}\n\nfunction inferSharedTimeZone(parsedValues: ParsedTimeInput[], options: TimeOptions): string {\n if (options.tz) {\n return options.tz;\n }\n\n let inferred: string | undefined;\n\n for (const parsed of parsedValues) {\n if (parsed.kind !== 'zoned') {\n continue;\n }\n\n const tz = parsed.value.timeZoneId;\n\n if (!inferred) {\n inferred = tz;\n continue;\n }\n\n if (inferred !== tz) {\n fail(MISMATCHED_COMPARISON_ZONES_MESSAGE);\n }\n }\n\n if (!inferred) {\n fail(MISSING_TIMEZONE_MESSAGE);\n }\n\n return inferred;\n}\n\nfunction toInstantFromParsed(parsed: ParsedTimeInput, options: TimeOptions): Temporal.Instant {\n if (parsed.kind === 'instant') {\n return parsed.value;\n }\n\n if (parsed.kind === 'zoned') {\n return parsed.value.toInstant();\n }\n\n if (!options.tz) {\n fail(MISSING_TIMEZONE_MESSAGE);\n }\n\n return parsed.value.toZonedDateTime(options.tz, { disambiguation: options.when }).toInstant();\n}\n\nfunction toZonedFromParsed(parsed: ParsedTimeInput, options: TimeOptionsWithTz): Temporal.ZonedDateTime {\n if (parsed.kind === 'zoned') {\n return parsed.value.withTimeZone(options.tz);\n }\n\n if (parsed.kind === 'local') {\n return parsed.value.toZonedDateTime(options.tz, { disambiguation: options.when });\n }\n\n return parsed.value.toZonedDateTimeISO(options.tz);\n}\n\nfunction resolveInstant(input: TimeInput, options: TimeOptions = {}): Temporal.Instant {\n return toInstantFromParsed(parseInput(input), options);\n}\n\nfunction resolveDisplayTimeZone(parsed: ParsedTimeInput, tz?: string): string | undefined {\n return tz ?? (parsed.kind === 'zoned' ? parsed.value.timeZoneId : undefined);\n}\n\nfunction resolveRangeDisplayTimeZone(start: ParsedTimeInput, end: ParsedTimeInput, tz?: string): string | undefined {\n if (tz) {\n return tz;\n }\n\n const startTz = start.kind === 'zoned' ? start.value.timeZoneId : undefined;\n const endTz = end.kind === 'zoned' ? end.value.timeZoneId : undefined;\n\n if (startTz && endTz && startTz !== endTz) {\n fail(MISMATCHED_RANGE_ZONES_MESSAGE);\n }\n\n return startTz ?? endTz;\n}\n\nfunction normalizeRange(start: Temporal.Instant, end: Temporal.Instant): [Temporal.Instant, Temporal.Instant] {\n return Temporal.Instant.compare(start, end) <= 0 ? [start, end] : [end, start];\n}\n\nfunction alignToWeekStart(value: Temporal.ZonedDateTime, weekStartsOn: WeekStartDay): Temporal.ZonedDateTime {\n const daysToSubtract = (value.dayOfWeek - weekStartsOn + 7) % 7;\n\n return value.subtract({ days: daysToSubtract });\n}\n\nfunction startOfParsed(\n parsed: ParsedTimeInput,\n unit: BoundaryUnit,\n options: TimeOptionsWithTz & { weekStartsOn?: WeekStartDay },\n): Temporal.ZonedDateTime {\n let result = clearBoundary(toZonedFromParsed(parsed, { tz: options.tz, when: options.when }), unit);\n\n if (unit === 'week') {\n result = alignToWeekStart(result, options.weekStartsOn ?? 1);\n }\n\n return result;\n}\n\nfunction clearBoundary(value: Temporal.ZonedDateTime, unit: BoundaryUnit): Temporal.ZonedDateTime {\n return value.with(BOUNDARY_CONFIG[unit].clear);\n}\n\nfunction addBoundaryUnit(value: Temporal.ZonedDateTime, unit: BoundaryUnit): Temporal.ZonedDateTime {\n return value.add(BOUNDARY_CONFIG[unit].add);\n}\n\nfunction floorToBoundaryInstant(\n parsed: ParsedTimeInput,\n unit: BoundaryUnit,\n options: TimeOptionsWithTz & { weekStartsOn?: WeekStartDay },\n): Temporal.Instant {\n return startOfParsed(parsed, unit, options).toInstant();\n}\n\nfunction serializeIntlOptions(options: Intl.DateTimeFormatOptions): string {\n return JSON.stringify(\n Object.entries(options)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, value]) => [key, String(value)]),\n );\n}\n\nfunction makeFormatter(options: HumanFormatOptions, displayTz?: string): Intl.DateTimeFormat {\n const tz = options.tz ?? displayTz;\n\n if ('intl' in options && options.intl) {\n const cacheKey = `${String(options.locale ?? '')}|intl|${tz ?? ''}|${serializeIntlOptions(options.intl)}`;\n const cached = getCached(DATE_TIME_FORMATTER_CACHE, cacheKey);\n\n if (cached) {\n return cached;\n }\n\n // Only override timeZone when tz is defined; spreading `timeZone: undefined`\n // would erase any timeZone the caller placed directly in options.intl.\n const intlOptions = tz !== undefined ? { ...options.intl, timeZone: tz } : options.intl;\n const formatter = new Intl.DateTimeFormat(options.locale, intlOptions);\n\n setCached(DATE_TIME_FORMATTER_CACHE, cacheKey, formatter);\n\n return formatter;\n }\n\n const pattern = options.pattern ?? 'medium';\n\n const cacheKey = `${String(options.locale ?? '')}|${pattern}|${tz ?? ''}`;\n const cached = getCached(DATE_TIME_FORMATTER_CACHE, cacheKey);\n\n if (cached) {\n return cached;\n }\n\n const formatter = new Intl.DateTimeFormat(options.locale, { ...FORMAT_PRESETS[pattern], timeZone: tz });\n\n setCached(DATE_TIME_FORMATTER_CACHE, cacheKey, formatter);\n\n return formatter;\n}\n\nfunction getRelativeFormatter(options: RelativeFormatOptions): Intl.RelativeTimeFormat {\n const cacheKey = `${String(options.locale ?? '')}|${options.numeric ?? 'auto'}|${options.style ?? 'long'}`;\n const cached = getCached(RELATIVE_TIME_FORMATTER_CACHE, cacheKey);\n\n if (cached) {\n return cached;\n }\n\n const formatter = new Intl.RelativeTimeFormat(options.locale, {\n numeric: options.numeric ?? 'auto',\n style: options.style ?? 'long',\n });\n\n setCached(RELATIVE_TIME_FORMATTER_CACHE, cacheKey, formatter);\n\n return formatter;\n}\n\nfunction toRelativeUnit(seconds: number): { unit: Intl.RelativeTimeFormatUnit; value: number } {\n if (!Number.isFinite(seconds)) fail('formatRelative received a non-finite time difference.');\n\n const roundedSeconds = Math.round(seconds);\n\n for (const { scale, thresholdToPromote, unit } of RELATIVE_UNITS) {\n const value = Math.round(roundedSeconds / scale);\n\n if (Math.abs(value) < thresholdToPromote) {\n return { unit, value };\n }\n }\n\n return { unit: 'year', value: Math.round(roundedSeconds / 31557600) };\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport function now(tz: string): Temporal.ZonedDateTime {\n return Temporal.Now.zonedDateTimeISO(tz);\n}\n\nexport function parseLocal(input: string): Temporal.PlainDateTime {\n try {\n return Temporal.PlainDateTime.from(input);\n } catch {\n fail(INVALID_LOCAL_TIME_STRING_MESSAGE);\n }\n}\n\nexport function toInstant(input: TimeInput, options: TimeOptions = {}): Temporal.Instant {\n return toInstantFromParsed(parseInput(input), options);\n}\n\nexport function toZoned(input: TimeInput, options: TimeOptionsWithTz): Temporal.ZonedDateTime {\n return toZonedFromParsed(parseInput(input), options);\n}\n\nexport function shift(\n input: TimeInput,\n duration: Temporal.DurationLike,\n options: TimeOptions = {},\n): Temporal.ZonedDateTime {\n const parsed = parseInput(input);\n const tz = inferTimeZone(parsed, options);\n\n return toZonedFromParsed(parsed, { tz, when: options.when }).add(duration);\n}\n\nexport function difference(start: TimeInput, end: TimeInput, options: DifferenceOptions = {}): Temporal.Duration {\n const parsedStart = parseInput(start);\n const parsedEnd = parseInput(end);\n const tz = inferSharedTimeZone([parsedStart, parsedEnd], options);\n const { largestUnit, roundingIncrement, roundingMode, smallestUnit } = options;\n\n return toZonedFromParsed(parsedEnd, { tz, when: options.when }).since(\n toZonedFromParsed(parsedStart, { tz, when: options.when }),\n { largestUnit, roundingIncrement, roundingMode, smallestUnit },\n );\n}\n\nexport function within(value: TimeInput, start: TimeInput, end: TimeInput, options: CompareOptions = {}): boolean {\n if (!options.unit) {\n const target = resolveInstant(value, options);\n const [lower, upper] = normalizeRange(resolveInstant(start, options), resolveInstant(end, options));\n\n return Temporal.Instant.compare(lower, target) <= 0 && Temporal.Instant.compare(target, upper) <= 0;\n }\n\n const parsedValue = parseInput(value);\n const parsedStart = parseInput(start);\n const parsedEnd = parseInput(end);\n const tz = inferSharedTimeZone([parsedValue, parsedStart, parsedEnd], options);\n const unitOptions = { tz, weekStartsOn: options.weekStartsOn, when: options.when };\n const target = floorToBoundaryInstant(parsedValue, options.unit, unitOptions);\n const [lower, upper] = normalizeRange(\n floorToBoundaryInstant(parsedStart, options.unit, unitOptions),\n floorToBoundaryInstant(parsedEnd, options.unit, unitOptions),\n );\n\n return Temporal.Instant.compare(lower, target) <= 0 && Temporal.Instant.compare(target, upper) <= 0;\n}\n\nexport function clamp(\n value: TimeInput,\n start: TimeInput,\n end: TimeInput,\n options: CompareOptions = {},\n): Temporal.Instant {\n if (!options.unit) {\n const target = resolveInstant(value, options);\n const [lower, upper] = normalizeRange(resolveInstant(start, options), resolveInstant(end, options));\n\n if (Temporal.Instant.compare(target, lower) < 0) return lower;\n\n if (Temporal.Instant.compare(target, upper) > 0) return upper;\n\n return target;\n }\n\n const parsedValue = parseInput(value);\n const parsedStart = parseInput(start);\n const parsedEnd = parseInput(end);\n const tz = inferSharedTimeZone([parsedValue, parsedStart, parsedEnd], options);\n const unitOptions = { tz, weekStartsOn: options.weekStartsOn, when: options.when };\n const target = floorToBoundaryInstant(parsedValue, options.unit, unitOptions);\n const [lower, upper] = normalizeRange(\n floorToBoundaryInstant(parsedStart, options.unit, unitOptions),\n floorToBoundaryInstant(parsedEnd, options.unit, unitOptions),\n );\n\n if (Temporal.Instant.compare(target, lower) < 0) return lower;\n\n if (Temporal.Instant.compare(target, upper) > 0) return upper;\n\n return target;\n}\n\nfunction compareByUnit(a: TimeInput, b: TimeInput, options: CompareOptions): number {\n if (!options.unit) {\n return Temporal.Instant.compare(resolveInstant(a, options), resolveInstant(b, options));\n }\n\n const parsedA = parseInput(a);\n const parsedB = parseInput(b);\n\n const tz = inferSharedTimeZone([parsedA, parsedB], options);\n const unitOptions = { tz, weekStartsOn: options.weekStartsOn, when: options.when };\n const left = floorToBoundaryInstant(parsedA, options.unit, unitOptions);\n const right = floorToBoundaryInstant(parsedB, options.unit, unitOptions);\n\n return Temporal.Instant.compare(left, right);\n}\n\nexport function isBefore(a: TimeInput, b: TimeInput, options: CompareOptions = {}): boolean {\n return compareByUnit(a, b, options) < 0;\n}\n\nexport function isAfter(a: TimeInput, b: TimeInput, options: CompareOptions = {}): boolean {\n return compareByUnit(a, b, options) > 0;\n}\n\nexport function isSame(a: TimeInput, b: TimeInput, options: IsSameOptions = {}): boolean {\n return compareByUnit(a, b, options) === 0;\n}\n\nexport function startOf(input: TimeInput, unit: BoundaryUnit, options: BoundaryOptions = {}): Temporal.ZonedDateTime {\n const parsed = parseInput(input);\n const tz = inferTimeZone(parsed, options);\n\n return startOfParsed(parsed, unit, { tz, weekStartsOn: options.weekStartsOn, when: options.when });\n}\n\nexport function endOf(input: TimeInput, unit: BoundaryUnit, options: BoundaryOptions = {}): Temporal.ZonedDateTime {\n return addBoundaryUnit(startOf(input, unit, options), unit).subtract({ nanoseconds: 1 });\n}\n\nexport function formatHuman(input: TimeInput, options: HumanFormatOptions = {}): string {\n const parsed = parseInput(input);\n const displayTz = resolveDisplayTimeZone(parsed, options.tz);\n const instant = toInstantFromParsed(parsed, { tz: displayTz });\n\n return makeFormatter(options, displayTz).format(new Date(instant.epochMilliseconds));\n}\n\nexport function formatRange(start: TimeInput, end: TimeInput, options: HumanFormatOptions = {}): string {\n const parsedStart = parseInput(start);\n const parsedEnd = parseInput(end);\n const displayTz = resolveRangeDisplayTimeZone(parsedStart, parsedEnd, options.tz);\n const formatter = makeFormatter(options, displayTz);\n\n return formatter.formatRange(\n new Date(toInstantFromParsed(parsedStart, { tz: displayTz }).epochMilliseconds),\n new Date(toInstantFromParsed(parsedEnd, { tz: displayTz }).epochMilliseconds),\n );\n}\n\nexport function formatInstant(input: TimeInput, options: TimeOptions = {}): string {\n return toInstantFromParsed(parseInput(input), options).toString();\n}\n\nexport function formatZoned(input: TimeInput, options: TimeOptions = {}): string {\n const parsed = parseInput(input);\n const tz = inferTimeZone(parsed, options);\n\n return toZonedFromParsed(parsed, { tz, when: options.when }).toString();\n}\n\nexport function formatRelative(input: RelativeTimeInput, options: RelativeFormatOptions = {}): string {\n const target = resolveInstant(input);\n const base = options.base ? resolveInstant(options.base) : Temporal.Now.instant();\n const differenceInSeconds = (target.epochMilliseconds - base.epochMilliseconds) / 1000;\n const { unit, value } = toRelativeUnit(differenceInSeconds);\n\n return getRelativeFormatter(options).format(value, unit);\n}\n\nexport function parseDuration(input: string | Temporal.DurationLike): Temporal.Duration {\n try {\n return Temporal.Duration.from(input);\n } catch {\n fail('Invalid duration input. Expected ISO duration string or Temporal.DurationLike.');\n }\n}\n\nexport function formatDuration(input: string | Temporal.DurationLike, options: DurationFormatOptions = {}): string {\n const duration = parseDuration(input);\n const cacheKey = `${String(options.locale ?? '')}|${options.style ?? ''}`;\n const cached = getCached(DURATION_FORMATTER_CACHE, cacheKey);\n\n if (cached) {\n return cached.format(duration);\n }\n\n const IntlWithDurationFormat = Intl as typeof Intl & { DurationFormat?: DurationFormatterConstructor };\n\n if (!IntlWithDurationFormat.DurationFormat) {\n return duration.toString();\n }\n\n const formatter = new IntlWithDurationFormat.DurationFormat(options.locale, { style: options.style });\n\n setCached(DURATION_FORMATTER_CACHE, cacheKey, formatter);\n\n return formatter.format(duration);\n}\n"],"mappings":"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"}
|
package/dist/timit.d.ts
CHANGED
|
@@ -1,100 +1,79 @@
|
|
|
1
1
|
import { Temporal } from '@js-temporal/polyfill';
|
|
2
|
-
export { Temporal };
|
|
3
2
|
export type DateTimeDisambiguation = 'compatible' | 'earlier' | 'later' | 'reject';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* - Temporal types preserve timezone and disambiguation info
|
|
7
|
-
* - Date is silently converted to Instant (timezone lost)
|
|
8
|
-
* - Numbers are treated as epoch milliseconds
|
|
9
|
-
* - ISO strings can have offset; plain strings require `tz` option
|
|
10
|
-
*/
|
|
11
|
-
export type TimeInput = Date | Temporal.Instant | Temporal.PlainDateTime | Temporal.ZonedDateTime | number | string;
|
|
12
|
-
/**
|
|
13
|
-
* Time zone and disambiguation options for conversions.
|
|
14
|
-
* - `tz`: Time zone ID (e.g., 'America/New_York'). Defaults to system timezone.
|
|
15
|
-
* - `when`: How to resolve ambiguous local times during DST transitions.
|
|
16
|
-
* 'earlier' | 'later' | 'compatible' (default) | 'reject'
|
|
17
|
-
*/
|
|
3
|
+
export type TimeInput = Temporal.Instant | Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime;
|
|
4
|
+
export type RelativeTimeInput = Temporal.Instant | Temporal.ZonedDateTime;
|
|
18
5
|
export interface TimeOptions {
|
|
19
6
|
tz?: string;
|
|
20
7
|
when?: DateTimeDisambiguation;
|
|
21
8
|
}
|
|
22
|
-
export
|
|
9
|
+
export type TimeOptionsWithTz = TimeOptions & {
|
|
23
10
|
tz: string;
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Options for computing differences between times.
|
|
28
|
-
* Extends TimeOptions and adds Temporal.Duration granularity control.
|
|
29
|
-
*/
|
|
11
|
+
};
|
|
30
12
|
export interface DifferenceOptions extends TimeOptions {
|
|
31
13
|
largestUnit?: Temporal.DateTimeUnit;
|
|
32
14
|
roundingIncrement?: number;
|
|
33
15
|
roundingMode?: Temporal.RoundingMode;
|
|
34
16
|
smallestUnit?: Temporal.DateTimeUnit;
|
|
35
17
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
* - 'iso': Full ISO-8601 style (e.g., "Sunday, March 21, 2026, 10:15:30 AM")
|
|
39
|
-
* - 'short': Compact style (e.g., "21/03/2026, 10:15 AM")
|
|
40
|
-
* - 'long': Expanded style (e.g., "Sunday, March 21, 2026 at 10:15:30 AM")
|
|
41
|
-
* - 'date-only': Just the date (e.g., "21/03/2026")
|
|
42
|
-
* - 'time-only': Just the time (e.g., "10:15 AM")
|
|
43
|
-
*/
|
|
44
|
-
export type FormatPattern = 'short' | 'long' | 'date-only' | 'time-only';
|
|
45
|
-
/**
|
|
46
|
-
* Options for formatting times as human-readable strings.
|
|
47
|
-
* - `pattern`: Preset format (covers 80% of common cases)
|
|
48
|
-
* - `locale`: BCP 47 language tag for localization
|
|
49
|
-
* - `tz`: Time zone for display (affects wall-clock time shown)
|
|
50
|
-
* - `intl`: Escape hatch for advanced Intl.DateTimeFormatOptions
|
|
51
|
-
*/
|
|
52
|
-
export interface HumanFormatOptions {
|
|
53
|
-
pattern?: FormatPattern;
|
|
18
|
+
export type FormatPattern = 'short' | 'medium' | 'long' | 'date-only' | 'time-only';
|
|
19
|
+
interface HumanFormatBaseOptions {
|
|
54
20
|
locale?: Intl.LocalesArgument;
|
|
55
21
|
tz?: string;
|
|
56
|
-
intl?: Intl.DateTimeFormatOptions;
|
|
57
22
|
}
|
|
58
|
-
export
|
|
59
|
-
|
|
23
|
+
export type HumanFormatOptions = (HumanFormatBaseOptions & {
|
|
24
|
+
intl?: never;
|
|
25
|
+
pattern?: FormatPattern;
|
|
26
|
+
}) | (HumanFormatBaseOptions & {
|
|
27
|
+
intl: Intl.DateTimeFormatOptions;
|
|
28
|
+
pattern?: never;
|
|
29
|
+
});
|
|
30
|
+
export interface RelativeFormatOptions {
|
|
31
|
+
base?: RelativeTimeInput;
|
|
32
|
+
locale?: Intl.LocalesArgument;
|
|
33
|
+
numeric?: Intl.RelativeTimeFormatNumeric;
|
|
34
|
+
style?: Intl.RelativeTimeFormatStyle;
|
|
35
|
+
}
|
|
36
|
+
export type BoundaryUnit = 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';
|
|
37
|
+
export type WeekStartDay = 1 | 2 | 3 | 4 | 5 | 6 | 7;
|
|
38
|
+
type NonWeekBoundaryUnit = Exclude<BoundaryUnit, 'week'>;
|
|
39
|
+
export interface BoundaryOptions extends TimeOptions {
|
|
40
|
+
weekStartsOn?: WeekStartDay;
|
|
41
|
+
}
|
|
42
|
+
type UnitBoundaryOptions = (TimeOptions & {
|
|
43
|
+
unit: NonWeekBoundaryUnit;
|
|
44
|
+
weekStartsOn?: never;
|
|
45
|
+
}) | (TimeOptions & {
|
|
46
|
+
unit: 'week';
|
|
47
|
+
weekStartsOn?: WeekStartDay;
|
|
48
|
+
});
|
|
49
|
+
export type CompareOptions = UnitBoundaryOptions | (TimeOptions & {
|
|
50
|
+
unit?: undefined;
|
|
51
|
+
weekStartsOn?: never;
|
|
52
|
+
});
|
|
53
|
+
export type IsSameOptions = CompareOptions;
|
|
54
|
+
export interface DurationFormatOptions {
|
|
55
|
+
locale?: Intl.LocalesArgument;
|
|
56
|
+
style?: 'digital' | 'long' | 'narrow' | 'short';
|
|
57
|
+
}
|
|
58
|
+
export declare function now(tz: string): Temporal.ZonedDateTime;
|
|
59
|
+
export declare function parseLocal(input: string): Temporal.PlainDateTime;
|
|
60
60
|
export declare function toInstant(input: TimeInput, options?: TimeOptions): Temporal.Instant;
|
|
61
|
-
export declare function toZoned(input: TimeInput, options
|
|
61
|
+
export declare function toZoned(input: TimeInput, options: TimeOptionsWithTz): Temporal.ZonedDateTime;
|
|
62
62
|
export declare function shift(input: TimeInput, duration: Temporal.DurationLike, options?: TimeOptions): Temporal.ZonedDateTime;
|
|
63
|
-
export declare function
|
|
64
|
-
export declare function within(
|
|
63
|
+
export declare function difference(start: TimeInput, end: TimeInput, options?: DifferenceOptions): Temporal.Duration;
|
|
64
|
+
export declare function within(value: TimeInput, start: TimeInput, end: TimeInput, options?: CompareOptions): boolean;
|
|
65
|
+
export declare function clamp(value: TimeInput, start: TimeInput, end: TimeInput, options?: CompareOptions): Temporal.Instant;
|
|
66
|
+
export declare function isBefore(a: TimeInput, b: TimeInput, options?: CompareOptions): boolean;
|
|
67
|
+
export declare function isAfter(a: TimeInput, b: TimeInput, options?: CompareOptions): boolean;
|
|
68
|
+
export declare function isSame(a: TimeInput, b: TimeInput, options?: IsSameOptions): boolean;
|
|
69
|
+
export declare function startOf(input: TimeInput, unit: BoundaryUnit, options?: BoundaryOptions): Temporal.ZonedDateTime;
|
|
70
|
+
export declare function endOf(input: TimeInput, unit: BoundaryUnit, options?: BoundaryOptions): Temporal.ZonedDateTime;
|
|
65
71
|
export declare function formatHuman(input: TimeInput, options?: HumanFormatOptions): string;
|
|
66
|
-
export declare function formatISO(input: TimeInput, options?: TimeOptions): string;
|
|
67
72
|
export declare function formatRange(start: TimeInput, end: TimeInput, options?: HumanFormatOptions): string;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
* import { t } from '@vielzeug/timit';
|
|
75
|
-
*
|
|
76
|
-
* t.now('UTC')
|
|
77
|
-
* t.toInstant('2026-03-21T10:15:30Z')
|
|
78
|
-
* t.toZoned('2026-03-21T10:15:30Z', { tz: 'Europe/Berlin' })
|
|
79
|
-
* t.parseLocal('2026-03-21T10:15:30', { tz: 'Europe/Berlin' })
|
|
80
|
-
* t.shift(time, { hours: 1 })
|
|
81
|
-
* t.diff(start, end)
|
|
82
|
-
* t.within(time, start, end)
|
|
83
|
-
* t.formatHuman(time, { pattern: 'short' })
|
|
84
|
-
* t.formatISO(time)
|
|
85
|
-
* t.formatRange(start, end)
|
|
86
|
-
* ```
|
|
87
|
-
*/
|
|
88
|
-
export declare const t: {
|
|
89
|
-
readonly diff: typeof diff;
|
|
90
|
-
readonly formatHuman: typeof formatHuman;
|
|
91
|
-
readonly formatISO: typeof formatISO;
|
|
92
|
-
readonly formatRange: typeof formatRange;
|
|
93
|
-
readonly now: typeof now;
|
|
94
|
-
readonly parseLocal: typeof parseLocal;
|
|
95
|
-
readonly shift: typeof shift;
|
|
96
|
-
readonly toInstant: typeof toInstant;
|
|
97
|
-
readonly toZoned: typeof toZoned;
|
|
98
|
-
readonly within: typeof within;
|
|
99
|
-
};
|
|
73
|
+
export declare function formatInstant(input: TimeInput, options?: TimeOptions): string;
|
|
74
|
+
export declare function formatZoned(input: TimeInput, options?: TimeOptions): string;
|
|
75
|
+
export declare function formatRelative(input: RelativeTimeInput, options?: RelativeFormatOptions): string;
|
|
76
|
+
export declare function parseDuration(input: string | Temporal.DurationLike): Temporal.Duration;
|
|
77
|
+
export declare function formatDuration(input: string | Temporal.DurationLike, options?: DurationFormatOptions): string;
|
|
78
|
+
export {};
|
|
100
79
|
//# sourceMappingURL=timit.d.ts.map
|
package/dist/timit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timit.d.ts","sourceRoot":"","sources":["../src/timit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,
|
|
1
|
+
{"version":3,"file":"timit.d.ts","sourceRoot":"","sources":["../src/timit.ts"],"names":[],"mappings":"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"}
|
package/dist/timit.js
CHANGED
|
@@ -1,132 +1,398 @@
|
|
|
1
1
|
import { Temporal as e } from "@js-temporal/polyfill";
|
|
2
2
|
//#region src/timit.ts
|
|
3
|
-
var t = "
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
var t = "[timit]", n = "Invalid local date/time string. Expected an ISO 8601 date or date-time string (e.g. YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss).", r = "This operation requires a timezone. Pass options.tz or use a ZonedDateTime input.", i = "formatRange received ZonedDateTime inputs with different time zones. Pass options.tz explicitly.", a = "Comparison received ZonedDateTime inputs with different time zones. Pass options.tz explicitly.", o = "Unsupported time input type.", s = 100, c = [
|
|
4
|
+
{
|
|
5
|
+
scale: 1,
|
|
6
|
+
thresholdToPromote: 60,
|
|
7
|
+
unit: "second"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
scale: 60,
|
|
11
|
+
thresholdToPromote: 60,
|
|
12
|
+
unit: "minute"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
scale: 3600,
|
|
16
|
+
thresholdToPromote: 24,
|
|
17
|
+
unit: "hour"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
scale: 86400,
|
|
21
|
+
thresholdToPromote: 7,
|
|
22
|
+
unit: "day"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
scale: 604800,
|
|
26
|
+
thresholdToPromote: 2629800 / 604800,
|
|
27
|
+
unit: "week"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
scale: 2629800,
|
|
31
|
+
thresholdToPromote: 12,
|
|
32
|
+
unit: "month"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
scale: 31557600,
|
|
36
|
+
thresholdToPromote: Infinity,
|
|
37
|
+
unit: "year"
|
|
12
38
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
function o(e) {
|
|
21
|
-
return e ? {
|
|
22
|
-
"date-only": { dateStyle: "short" },
|
|
23
|
-
long: {
|
|
24
|
-
dateStyle: "full",
|
|
25
|
-
timeStyle: "long"
|
|
26
|
-
},
|
|
27
|
-
short: {
|
|
28
|
-
dateStyle: "short",
|
|
29
|
-
timeStyle: "short"
|
|
30
|
-
},
|
|
31
|
-
"time-only": { timeStyle: "short" }
|
|
32
|
-
}[e] : {
|
|
39
|
+
], l = {
|
|
40
|
+
"date-only": { dateStyle: "short" },
|
|
41
|
+
long: {
|
|
42
|
+
dateStyle: "full",
|
|
43
|
+
timeStyle: "long"
|
|
44
|
+
},
|
|
45
|
+
medium: {
|
|
33
46
|
dateStyle: "medium",
|
|
34
47
|
timeStyle: "short"
|
|
35
|
-
}
|
|
48
|
+
},
|
|
49
|
+
short: {
|
|
50
|
+
dateStyle: "short",
|
|
51
|
+
timeStyle: "short"
|
|
52
|
+
},
|
|
53
|
+
"time-only": { timeStyle: "short" }
|
|
54
|
+
}, u = {
|
|
55
|
+
day: {
|
|
56
|
+
add: { days: 1 },
|
|
57
|
+
clear: {
|
|
58
|
+
hour: 0,
|
|
59
|
+
microsecond: 0,
|
|
60
|
+
millisecond: 0,
|
|
61
|
+
minute: 0,
|
|
62
|
+
nanosecond: 0,
|
|
63
|
+
second: 0
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
hour: {
|
|
67
|
+
add: { hours: 1 },
|
|
68
|
+
clear: {
|
|
69
|
+
microsecond: 0,
|
|
70
|
+
millisecond: 0,
|
|
71
|
+
minute: 0,
|
|
72
|
+
nanosecond: 0,
|
|
73
|
+
second: 0
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
minute: {
|
|
77
|
+
add: { minutes: 1 },
|
|
78
|
+
clear: {
|
|
79
|
+
microsecond: 0,
|
|
80
|
+
millisecond: 0,
|
|
81
|
+
nanosecond: 0,
|
|
82
|
+
second: 0
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
month: {
|
|
86
|
+
add: { months: 1 },
|
|
87
|
+
clear: {
|
|
88
|
+
day: 1,
|
|
89
|
+
hour: 0,
|
|
90
|
+
microsecond: 0,
|
|
91
|
+
millisecond: 0,
|
|
92
|
+
minute: 0,
|
|
93
|
+
nanosecond: 0,
|
|
94
|
+
second: 0
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
week: {
|
|
98
|
+
add: { weeks: 1 },
|
|
99
|
+
clear: {
|
|
100
|
+
hour: 0,
|
|
101
|
+
microsecond: 0,
|
|
102
|
+
millisecond: 0,
|
|
103
|
+
minute: 0,
|
|
104
|
+
nanosecond: 0,
|
|
105
|
+
second: 0
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
year: {
|
|
109
|
+
add: { years: 1 },
|
|
110
|
+
clear: {
|
|
111
|
+
day: 1,
|
|
112
|
+
hour: 0,
|
|
113
|
+
microsecond: 0,
|
|
114
|
+
millisecond: 0,
|
|
115
|
+
minute: 0,
|
|
116
|
+
month: 1,
|
|
117
|
+
nanosecond: 0,
|
|
118
|
+
second: 0
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
function d(e, t) {
|
|
123
|
+
if (!e.has(t)) return;
|
|
124
|
+
let n = e.get(t);
|
|
125
|
+
return e.delete(t), e.set(t, n), n;
|
|
36
126
|
}
|
|
37
|
-
function
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
timeZone: n(e.tz)
|
|
42
|
-
});
|
|
127
|
+
function f(e, t, n) {
|
|
128
|
+
if (e.set(t, n), e.size <= s) return;
|
|
129
|
+
let r = e.keys().next().value;
|
|
130
|
+
e.delete(r);
|
|
43
131
|
}
|
|
44
|
-
|
|
45
|
-
|
|
132
|
+
var p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
|
|
133
|
+
function g(e) {
|
|
134
|
+
throw TypeError(`${t} ${e}`);
|
|
135
|
+
}
|
|
136
|
+
function _(t) {
|
|
137
|
+
if (t instanceof e.Instant) return {
|
|
138
|
+
kind: "instant",
|
|
139
|
+
value: t
|
|
140
|
+
};
|
|
141
|
+
if (t instanceof e.ZonedDateTime) return {
|
|
142
|
+
kind: "zoned",
|
|
143
|
+
value: t
|
|
144
|
+
};
|
|
145
|
+
if (t instanceof e.PlainDateTime) return {
|
|
146
|
+
kind: "local",
|
|
147
|
+
value: t
|
|
148
|
+
};
|
|
149
|
+
if (t instanceof e.PlainDate) return {
|
|
150
|
+
kind: "local",
|
|
151
|
+
value: t.toPlainDateTime()
|
|
152
|
+
};
|
|
153
|
+
g(o);
|
|
46
154
|
}
|
|
47
|
-
function
|
|
48
|
-
|
|
155
|
+
function v(e, t) {
|
|
156
|
+
let n = t.tz ?? (e.kind === "zoned" ? e.value.timeZoneId : void 0);
|
|
157
|
+
return n || g(r), n;
|
|
49
158
|
}
|
|
50
|
-
function
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (
|
|
55
|
-
|
|
159
|
+
function y(e, t) {
|
|
160
|
+
if (t.tz) return t.tz;
|
|
161
|
+
let n;
|
|
162
|
+
for (let t of e) {
|
|
163
|
+
if (t.kind !== "zoned") continue;
|
|
164
|
+
let e = t.value.timeZoneId;
|
|
165
|
+
if (!n) {
|
|
166
|
+
n = e;
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
n !== e && g(a);
|
|
56
170
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
171
|
+
return n || g(r), n;
|
|
172
|
+
}
|
|
173
|
+
function b(e, t) {
|
|
174
|
+
return e.kind === "instant" ? e.value : e.kind === "zoned" ? e.value.toInstant() : (t.tz || g(r), e.value.toZonedDateTime(t.tz, { disambiguation: t.when }).toInstant());
|
|
175
|
+
}
|
|
176
|
+
function x(e, t) {
|
|
177
|
+
return e.kind === "zoned" ? e.value.withTimeZone(t.tz) : e.kind === "local" ? e.value.toZonedDateTime(t.tz, { disambiguation: t.when }) : e.value.toZonedDateTimeISO(t.tz);
|
|
178
|
+
}
|
|
179
|
+
function S(e, t = {}) {
|
|
180
|
+
return b(_(e), t);
|
|
181
|
+
}
|
|
182
|
+
function ee(e, t) {
|
|
183
|
+
return t ?? (e.kind === "zoned" ? e.value.timeZoneId : void 0);
|
|
184
|
+
}
|
|
185
|
+
function C(e, t, n) {
|
|
186
|
+
if (n) return n;
|
|
187
|
+
let r = e.kind === "zoned" ? e.value.timeZoneId : void 0, a = t.kind === "zoned" ? t.value.timeZoneId : void 0;
|
|
188
|
+
return r && a && r !== a && g(i), r ?? a;
|
|
189
|
+
}
|
|
190
|
+
function w(t, n) {
|
|
191
|
+
return e.Instant.compare(t, n) <= 0 ? [t, n] : [n, t];
|
|
192
|
+
}
|
|
193
|
+
function T(e, t) {
|
|
194
|
+
let n = (e.dayOfWeek - t + 7) % 7;
|
|
195
|
+
return e.subtract({ days: n });
|
|
196
|
+
}
|
|
197
|
+
function E(e, t, n) {
|
|
198
|
+
let r = D(x(e, {
|
|
199
|
+
tz: n.tz,
|
|
200
|
+
when: n.when
|
|
201
|
+
}), t);
|
|
202
|
+
return t === "week" && (r = T(r, n.weekStartsOn ?? 1)), r;
|
|
203
|
+
}
|
|
204
|
+
function D(e, t) {
|
|
205
|
+
return e.with(u[t].clear);
|
|
206
|
+
}
|
|
207
|
+
function O(e, t) {
|
|
208
|
+
return e.add(u[t].add);
|
|
209
|
+
}
|
|
210
|
+
function k(e, t, n) {
|
|
211
|
+
return E(e, t, n).toInstant();
|
|
212
|
+
}
|
|
213
|
+
function A(e) {
|
|
214
|
+
return JSON.stringify(Object.entries(e).sort(([e], [t]) => e.localeCompare(t)).map(([e, t]) => [e, String(t)]));
|
|
215
|
+
}
|
|
216
|
+
function j(e, t) {
|
|
217
|
+
let n = e.tz ?? t;
|
|
218
|
+
if ("intl" in e && e.intl) {
|
|
219
|
+
let t = `${String(e.locale ?? "")}|intl|${n ?? ""}|${A(e.intl)}`, r = d(p, t);
|
|
220
|
+
if (r) return r;
|
|
221
|
+
let i = n === void 0 ? e.intl : {
|
|
222
|
+
...e.intl,
|
|
223
|
+
timeZone: n
|
|
224
|
+
}, a = new Intl.DateTimeFormat(e.locale, i);
|
|
225
|
+
return f(p, t, a), a;
|
|
68
226
|
}
|
|
69
|
-
|
|
227
|
+
let r = e.pattern ?? "medium", i = `${String(e.locale ?? "")}|${r}|${n ?? ""}`, a = d(p, i);
|
|
228
|
+
if (a) return a;
|
|
229
|
+
let o = new Intl.DateTimeFormat(e.locale, {
|
|
230
|
+
...l[r],
|
|
231
|
+
timeZone: n
|
|
232
|
+
});
|
|
233
|
+
return f(p, i, o), o;
|
|
234
|
+
}
|
|
235
|
+
function M(e) {
|
|
236
|
+
let t = `${String(e.locale ?? "")}|${e.numeric ?? "auto"}|${e.style ?? "long"}`, n = d(m, t);
|
|
237
|
+
if (n) return n;
|
|
238
|
+
let r = new Intl.RelativeTimeFormat(e.locale, {
|
|
239
|
+
numeric: e.numeric ?? "auto",
|
|
240
|
+
style: e.style ?? "long"
|
|
241
|
+
});
|
|
242
|
+
return f(m, t, r), r;
|
|
70
243
|
}
|
|
71
|
-
function
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
244
|
+
function N(e) {
|
|
245
|
+
Number.isFinite(e) || g("formatRelative received a non-finite time difference.");
|
|
246
|
+
let t = Math.round(e);
|
|
247
|
+
for (let { scale: e, thresholdToPromote: n, unit: r } of c) {
|
|
248
|
+
let i = Math.round(t / e);
|
|
249
|
+
if (Math.abs(i) < n) return {
|
|
250
|
+
unit: r,
|
|
251
|
+
value: i
|
|
252
|
+
};
|
|
76
253
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
254
|
+
return {
|
|
255
|
+
unit: "year",
|
|
256
|
+
value: Math.round(t / 31557600)
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
function P(t) {
|
|
260
|
+
return e.Now.zonedDateTimeISO(t);
|
|
261
|
+
}
|
|
262
|
+
function F(t) {
|
|
263
|
+
try {
|
|
264
|
+
return e.PlainDateTime.from(t);
|
|
265
|
+
} catch {
|
|
266
|
+
g(n);
|
|
81
267
|
}
|
|
82
|
-
return u(r, i).toZonedDateTimeISO(a);
|
|
83
268
|
}
|
|
84
|
-
function
|
|
85
|
-
return
|
|
269
|
+
function I(e, t = {}) {
|
|
270
|
+
return b(_(e), t);
|
|
271
|
+
}
|
|
272
|
+
function L(e, t) {
|
|
273
|
+
return x(_(e), t);
|
|
86
274
|
}
|
|
87
|
-
function
|
|
88
|
-
let
|
|
89
|
-
|
|
275
|
+
function R(e, t, n = {}) {
|
|
276
|
+
let r = _(e);
|
|
277
|
+
return x(r, {
|
|
278
|
+
tz: v(r, n),
|
|
90
279
|
when: n.when
|
|
280
|
+
}).add(t);
|
|
281
|
+
}
|
|
282
|
+
function z(e, t, n = {}) {
|
|
283
|
+
let r = _(e), i = _(t), a = y([r, i], n), { largestUnit: o, roundingIncrement: s, roundingMode: c, smallestUnit: l } = n;
|
|
284
|
+
return x(i, {
|
|
285
|
+
tz: a,
|
|
286
|
+
when: n.when
|
|
287
|
+
}).since(x(r, {
|
|
288
|
+
tz: a,
|
|
289
|
+
when: n.when
|
|
290
|
+
}), {
|
|
291
|
+
largestUnit: o,
|
|
292
|
+
roundingIncrement: s,
|
|
293
|
+
roundingMode: c,
|
|
294
|
+
smallestUnit: l
|
|
91
295
|
});
|
|
92
|
-
|
|
93
|
-
|
|
296
|
+
}
|
|
297
|
+
function B(t, n, r, i = {}) {
|
|
298
|
+
if (!i.unit) {
|
|
299
|
+
let a = S(t, i), [o, s] = w(S(n, i), S(r, i));
|
|
300
|
+
return e.Instant.compare(o, a) <= 0 && e.Instant.compare(a, s) <= 0;
|
|
301
|
+
}
|
|
302
|
+
let a = _(t), o = _(n), s = _(r), c = {
|
|
303
|
+
tz: y([
|
|
304
|
+
a,
|
|
305
|
+
o,
|
|
306
|
+
s
|
|
307
|
+
], i),
|
|
308
|
+
weekStartsOn: i.weekStartsOn,
|
|
309
|
+
when: i.when
|
|
310
|
+
}, l = k(a, i.unit, c), [u, d] = w(k(o, i.unit, c), k(s, i.unit, c));
|
|
311
|
+
return e.Instant.compare(u, l) <= 0 && e.Instant.compare(l, d) <= 0;
|
|
312
|
+
}
|
|
313
|
+
function V(t, n, r, i = {}) {
|
|
314
|
+
if (!i.unit) {
|
|
315
|
+
let a = S(t, i), [o, s] = w(S(n, i), S(r, i));
|
|
316
|
+
return e.Instant.compare(a, o) < 0 ? o : e.Instant.compare(a, s) > 0 ? s : a;
|
|
317
|
+
}
|
|
318
|
+
let a = _(t), o = _(n), s = _(r), c = {
|
|
319
|
+
tz: y([
|
|
320
|
+
a,
|
|
321
|
+
o,
|
|
322
|
+
s
|
|
323
|
+
], i),
|
|
324
|
+
weekStartsOn: i.weekStartsOn,
|
|
325
|
+
when: i.when
|
|
326
|
+
}, l = k(a, i.unit, c), [u, d] = w(k(o, i.unit, c), k(s, i.unit, c));
|
|
327
|
+
return e.Instant.compare(l, u) < 0 ? u : e.Instant.compare(l, d) > 0 ? d : l;
|
|
328
|
+
}
|
|
329
|
+
function H(t, n, r) {
|
|
330
|
+
if (!r.unit) return e.Instant.compare(S(t, r), S(n, r));
|
|
331
|
+
let i = _(t), a = _(n), o = {
|
|
332
|
+
tz: y([i, a], r),
|
|
333
|
+
weekStartsOn: r.weekStartsOn,
|
|
334
|
+
when: r.when
|
|
335
|
+
}, s = k(i, r.unit, o), c = k(a, r.unit, o);
|
|
336
|
+
return e.Instant.compare(s, c);
|
|
337
|
+
}
|
|
338
|
+
function U(e, t, n = {}) {
|
|
339
|
+
return H(e, t, n) < 0;
|
|
340
|
+
}
|
|
341
|
+
function W(e, t, n = {}) {
|
|
342
|
+
return H(e, t, n) > 0;
|
|
343
|
+
}
|
|
344
|
+
function G(e, t, n = {}) {
|
|
345
|
+
return H(e, t, n) === 0;
|
|
346
|
+
}
|
|
347
|
+
function K(e, t, n = {}) {
|
|
348
|
+
let r = _(e);
|
|
349
|
+
return E(r, t, {
|
|
350
|
+
tz: v(r, n),
|
|
351
|
+
weekStartsOn: n.weekStartsOn,
|
|
94
352
|
when: n.when
|
|
95
|
-
}).since(i, {
|
|
96
|
-
largestUnit: n.largestUnit,
|
|
97
|
-
roundingIncrement: n.roundingIncrement,
|
|
98
|
-
roundingMode: n.roundingMode,
|
|
99
|
-
smallestUnit: n.smallestUnit
|
|
100
353
|
});
|
|
101
354
|
}
|
|
102
|
-
function
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return
|
|
112
|
-
}
|
|
113
|
-
function
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
355
|
+
function q(e, t, n = {}) {
|
|
356
|
+
return O(K(e, t, n), t).subtract({ nanoseconds: 1 });
|
|
357
|
+
}
|
|
358
|
+
function J(e, t = {}) {
|
|
359
|
+
let n = _(e), r = ee(n, t.tz), i = b(n, { tz: r });
|
|
360
|
+
return j(t, r).format(new Date(i.epochMilliseconds));
|
|
361
|
+
}
|
|
362
|
+
function Y(e, t, n = {}) {
|
|
363
|
+
let r = _(e), i = _(t), a = C(r, i, n.tz);
|
|
364
|
+
return j(n, a).formatRange(new Date(b(r, { tz: a }).epochMilliseconds), new Date(b(i, { tz: a }).epochMilliseconds));
|
|
365
|
+
}
|
|
366
|
+
function X(e, t = {}) {
|
|
367
|
+
return b(_(e), t).toString();
|
|
368
|
+
}
|
|
369
|
+
function Z(e, t = {}) {
|
|
370
|
+
let n = _(e);
|
|
371
|
+
return x(n, {
|
|
372
|
+
tz: v(n, t),
|
|
373
|
+
when: t.when
|
|
374
|
+
}).toString();
|
|
375
|
+
}
|
|
376
|
+
function Q(t, n = {}) {
|
|
377
|
+
let r = S(t), i = n.base ? S(n.base) : e.Now.instant(), { unit: a, value: o } = N((r.epochMilliseconds - i.epochMilliseconds) / 1e3);
|
|
378
|
+
return M(n).format(o, a);
|
|
379
|
+
}
|
|
380
|
+
function $(t) {
|
|
381
|
+
try {
|
|
382
|
+
return e.Duration.from(t);
|
|
383
|
+
} catch {
|
|
384
|
+
g("Invalid duration input. Expected ISO duration string or Temporal.DurationLike.");
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
function te(e, t = {}) {
|
|
388
|
+
let n = $(e), r = `${String(t.locale ?? "")}|${t.style ?? ""}`, i = d(h, r);
|
|
389
|
+
if (i) return i.format(n);
|
|
390
|
+
let a = Intl;
|
|
391
|
+
if (!a.DurationFormat) return n.toString();
|
|
392
|
+
let o = new a.DurationFormat(t.locale, { style: t.style });
|
|
393
|
+
return f(h, r, o), o.format(n);
|
|
394
|
+
}
|
|
129
395
|
//#endregion
|
|
130
|
-
export {
|
|
396
|
+
export { V as clamp, z as difference, q as endOf, te as formatDuration, J as formatHuman, X as formatInstant, Y as formatRange, Q as formatRelative, Z as formatZoned, W as isAfter, U as isBefore, G as isSame, P as now, $ as parseDuration, F as parseLocal, R as shift, K as startOf, I as toInstant, L as toZoned, B as within };
|
|
131
397
|
|
|
132
398
|
//# sourceMappingURL=timit.js.map
|
package/dist/timit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timit.js","names":[],"sources":["../src/timit.ts"],"sourcesContent":["import { Temporal } from '@js-temporal/polyfill';\n\nexport { Temporal };\n\nexport type DateTimeDisambiguation = 'compatible' | 'earlier' | 'later' | 'reject';\n\n/**\n * Supported input types for date/time operations.\n * - Temporal types preserve timezone and disambiguation info\n * - Date is silently converted to Instant (timezone lost)\n * - Numbers are treated as epoch milliseconds\n * - ISO strings can have offset; plain strings require `tz` option\n */\nexport type TimeInput = Date | Temporal.Instant | Temporal.PlainDateTime | Temporal.ZonedDateTime | number | string;\n\n/**\n * Time zone and disambiguation options for conversions.\n * - `tz`: Time zone ID (e.g., 'America/New_York'). Defaults to system timezone.\n * - `when`: How to resolve ambiguous local times during DST transitions.\n * 'earlier' | 'later' | 'compatible' (default) | 'reject'\n */\nexport interface TimeOptions {\n tz?: string;\n when?: DateTimeDisambiguation;\n}\n\nexport interface LocalTimeOptions {\n tz: string;\n when?: DateTimeDisambiguation;\n}\n\n/**\n * Options for computing differences between times.\n * Extends TimeOptions and adds Temporal.Duration granularity control.\n */\nexport interface DifferenceOptions extends TimeOptions {\n largestUnit?: Temporal.DateTimeUnit;\n roundingIncrement?: number;\n roundingMode?: Temporal.RoundingMode;\n smallestUnit?: Temporal.DateTimeUnit;\n}\n\n/**\n * Common formatting patterns for human-readable output.\n * - 'iso': Full ISO-8601 style (e.g., \"Sunday, March 21, 2026, 10:15:30 AM\")\n * - 'short': Compact style (e.g., \"21/03/2026, 10:15 AM\")\n * - 'long': Expanded style (e.g., \"Sunday, March 21, 2026 at 10:15:30 AM\")\n * - 'date-only': Just the date (e.g., \"21/03/2026\")\n * - 'time-only': Just the time (e.g., \"10:15 AM\")\n */\nexport type FormatPattern = 'short' | 'long' | 'date-only' | 'time-only';\n\n/**\n * Options for formatting times as human-readable strings.\n * - `pattern`: Preset format (covers 80% of common cases)\n * - `locale`: BCP 47 language tag for localization\n * - `tz`: Time zone for display (affects wall-clock time shown)\n * - `intl`: Escape hatch for advanced Intl.DateTimeFormatOptions\n */\nexport interface HumanFormatOptions {\n pattern?: FormatPattern;\n locale?: Intl.LocalesArgument;\n tz?: string;\n intl?: Intl.DateTimeFormatOptions;\n}\n\nconst DEFAULT_DISAMBIGUATION: DateTimeDisambiguation = 'compatible';\n\nfunction resolveTimeZone(tz?: string): string {\n return tz ?? Temporal.Now.timeZoneId();\n}\n\nfunction parsePlainDateTime(value: string): Temporal.PlainDateTime {\n try {\n return Temporal.PlainDateTime.from(value);\n } catch {\n return Temporal.PlainDate.from(value).toPlainDateTime();\n }\n}\n\nfunction isPlainLocalLike(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}(?:$|T)/.test(value);\n}\n\nfunction toJsDate(instant: Temporal.Instant): Date {\n return new Date(instant.epochMilliseconds);\n}\n\nfunction resolveFormatPattern(pattern?: FormatPattern): Intl.DateTimeFormatOptions {\n if (!pattern) return { dateStyle: 'medium', timeStyle: 'short' };\n\n const patterns: Record<FormatPattern, Intl.DateTimeFormatOptions> = {\n 'date-only': { dateStyle: 'short' },\n long: { dateStyle: 'full', timeStyle: 'long' },\n short: { dateStyle: 'short', timeStyle: 'short' },\n 'time-only': { timeStyle: 'short' },\n };\n\n return patterns[pattern];\n}\n\nfunction makeFormatter(options: HumanFormatOptions = {}): Intl.DateTimeFormat {\n return new Intl.DateTimeFormat(options.locale, {\n ...resolveFormatPattern(options.pattern),\n ...options.intl,\n timeZone: resolveTimeZone(options.tz),\n });\n}\n\nexport function now(tz?: string): Temporal.ZonedDateTime {\n return Temporal.Now.zonedDateTimeISO(resolveTimeZone(tz));\n}\n\nexport function parseLocal(input: string, options: LocalTimeOptions): Temporal.ZonedDateTime {\n return parsePlainDateTime(input).toZonedDateTime(options.tz, {\n disambiguation: options.when ?? DEFAULT_DISAMBIGUATION,\n });\n}\n\nexport function toInstant(input: TimeInput, options: TimeOptions = {}): Temporal.Instant {\n if (input instanceof Temporal.Instant) {\n return input;\n }\n\n if (input instanceof Temporal.ZonedDateTime) {\n return input.toInstant();\n }\n\n if (input instanceof Temporal.PlainDateTime) {\n if (!options.tz) {\n throw new TypeError('Temporal.PlainDateTime input requires options.tz.');\n }\n\n return input\n .toZonedDateTime(options.tz, {\n disambiguation: options.when ?? DEFAULT_DISAMBIGUATION,\n })\n .toInstant();\n }\n\n if (input instanceof Date) {\n return Temporal.Instant.fromEpochMilliseconds(input.getTime());\n }\n\n if (typeof input === 'number') {\n return Temporal.Instant.fromEpochMilliseconds(input);\n }\n\n if (typeof input === 'string') {\n try {\n return Temporal.Instant.from(input);\n } catch {\n if (!isPlainLocalLike(input)) {\n throw new TypeError('Invalid time string. Expected ISO instant or plain local date/time.');\n }\n\n if (!options.tz) {\n throw new TypeError('Plain local date/time string requires options.tz.');\n }\n\n return parseLocal(input, {\n tz: options.tz,\n when: options.when,\n }).toInstant();\n }\n }\n\n throw new TypeError('Unsupported time input type.');\n}\n\nexport function toZoned(input: TimeInput, options: TimeOptions = {}): Temporal.ZonedDateTime {\n if (input instanceof Temporal.ZonedDateTime) {\n if (!options.tz) {\n return input;\n }\n\n const tz = resolveTimeZone(options.tz);\n\n return input.withTimeZone(tz);\n }\n\n const tz = resolveTimeZone(options.tz);\n\n if (input instanceof Temporal.PlainDateTime) {\n if (!options.tz) {\n throw new TypeError('Temporal.PlainDateTime input requires options.tz.');\n }\n\n return input.toZonedDateTime(tz, {\n disambiguation: options.when ?? DEFAULT_DISAMBIGUATION,\n });\n }\n\n return toInstant(input, options).toZonedDateTimeISO(tz);\n}\n\nexport function shift(\n input: TimeInput,\n duration: Temporal.DurationLike,\n options: TimeOptions = {},\n): Temporal.ZonedDateTime {\n return toZoned(input, options).add(duration);\n}\n\nexport function diff(start: TimeInput, end: TimeInput, options: DifferenceOptions = {}): Temporal.Duration {\n const { tz } = options;\n const startDateTime = toZoned(start, { tz, when: options.when });\n const endDateTime = toZoned(end, { tz, when: options.when });\n\n return endDateTime.since(startDateTime, {\n largestUnit: options.largestUnit,\n roundingIncrement: options.roundingIncrement,\n roundingMode: options.roundingMode,\n smallestUnit: options.smallestUnit,\n });\n}\n\nexport function within(input: TimeInput, start: TimeInput, end: TimeInput, options: TimeOptions = {}): boolean {\n const value = toInstant(input, options).epochNanoseconds;\n const boundA = toInstant(start, options).epochNanoseconds;\n const boundB = toInstant(end, options).epochNanoseconds;\n const lower = boundA <= boundB ? boundA : boundB;\n const upper = boundA <= boundB ? boundB : boundA;\n\n return value >= lower && value <= upper;\n}\n\nexport function formatHuman(input: TimeInput, options: HumanFormatOptions = {}): string {\n const instant = toInstant(input, { tz: options.tz });\n const formatter = makeFormatter(options);\n\n return formatter.format(toJsDate(instant));\n}\n\nexport function formatISO(input: TimeInput, options: TimeOptions = {}): string {\n return toInstant(input, options).toString();\n}\n\nexport function formatRange(start: TimeInput, end: TimeInput, options: HumanFormatOptions = {}): string {\n const formatter = makeFormatter(options);\n const startDate = toJsDate(toInstant(start, { tz: options.tz }));\n const endDate = toJsDate(toInstant(end, { tz: options.tz }));\n\n const formatterWithRange = formatter as Intl.DateTimeFormat & {\n formatRange?: (startDate: Date, endDate: Date) => string;\n };\n\n if (typeof formatterWithRange.formatRange === 'function') {\n return formatterWithRange.formatRange(startDate, endDate);\n }\n\n return `${formatter.format(startDate)} - ${formatter.format(endDate)}`;\n}\n\n/**\n * Namespace object for date/time operations.\n * Provides a grouped API with explicit parsing and formatting modes.\n *\n * @example\n * ```ts\n * import { t } from '@vielzeug/timit';\n *\n * t.now('UTC')\n * t.toInstant('2026-03-21T10:15:30Z')\n * t.toZoned('2026-03-21T10:15:30Z', { tz: 'Europe/Berlin' })\n * t.parseLocal('2026-03-21T10:15:30', { tz: 'Europe/Berlin' })\n * t.shift(time, { hours: 1 })\n * t.diff(start, end)\n * t.within(time, start, end)\n * t.formatHuman(time, { pattern: 'short' })\n * t.formatISO(time)\n * t.formatRange(start, end)\n * ```\n */\nexport const t = {\n diff,\n formatHuman,\n formatISO,\n formatRange,\n now,\n parseLocal,\n shift,\n toInstant,\n toZoned,\n within,\n} as const;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"timit.js","names":[],"sources":["../src/timit.ts"],"sourcesContent":["import { Temporal } from '@js-temporal/polyfill';\n\nexport type DateTimeDisambiguation = 'compatible' | 'earlier' | 'later' | 'reject';\n\nexport type TimeInput = Temporal.Instant | Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime;\nexport type RelativeTimeInput = Temporal.Instant | Temporal.ZonedDateTime;\n\nexport interface TimeOptions {\n tz?: string;\n when?: DateTimeDisambiguation;\n}\n\nexport type TimeOptionsWithTz = TimeOptions & { tz: string };\n\nexport interface DifferenceOptions extends TimeOptions {\n largestUnit?: Temporal.DateTimeUnit;\n roundingIncrement?: number;\n roundingMode?: Temporal.RoundingMode;\n smallestUnit?: Temporal.DateTimeUnit;\n}\n\nexport type FormatPattern = 'short' | 'medium' | 'long' | 'date-only' | 'time-only';\n\ninterface HumanFormatBaseOptions {\n locale?: Intl.LocalesArgument;\n tz?: string;\n}\n\nexport type HumanFormatOptions =\n | (HumanFormatBaseOptions & { intl?: never; pattern?: FormatPattern })\n | (HumanFormatBaseOptions & { intl: Intl.DateTimeFormatOptions; pattern?: never });\n\nexport interface RelativeFormatOptions {\n base?: RelativeTimeInput;\n locale?: Intl.LocalesArgument;\n numeric?: Intl.RelativeTimeFormatNumeric;\n style?: Intl.RelativeTimeFormatStyle;\n}\n\nexport type BoundaryUnit = 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';\nexport type WeekStartDay = 1 | 2 | 3 | 4 | 5 | 6 | 7;\ntype NonWeekBoundaryUnit = Exclude<BoundaryUnit, 'week'>;\n\nexport interface BoundaryOptions extends TimeOptions {\n weekStartsOn?: WeekStartDay;\n}\n\ntype UnitBoundaryOptions =\n | (TimeOptions & { unit: NonWeekBoundaryUnit; weekStartsOn?: never })\n | (TimeOptions & { unit: 'week'; weekStartsOn?: WeekStartDay });\n\nexport type CompareOptions = UnitBoundaryOptions | (TimeOptions & { unit?: undefined; weekStartsOn?: never });\n\nexport type IsSameOptions = CompareOptions;\n\nexport interface DurationFormatOptions {\n locale?: Intl.LocalesArgument;\n style?: 'digital' | 'long' | 'narrow' | 'short';\n}\n\n// ─── Internal types ───────────────────────────────────────────────────────────\n\ntype ParsedTimeInput =\n | { kind: 'instant'; value: Temporal.Instant }\n | { kind: 'local'; value: Temporal.PlainDateTime }\n | { kind: 'zoned'; value: Temporal.ZonedDateTime };\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst ERROR_PREFIX = '[timit]';\nconst INVALID_LOCAL_TIME_STRING_MESSAGE =\n 'Invalid local date/time string. Expected an ISO 8601 date or date-time string (e.g. YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss).';\nconst MISSING_TIMEZONE_MESSAGE = 'This operation requires a timezone. Pass options.tz or use a ZonedDateTime input.';\nconst MISMATCHED_RANGE_ZONES_MESSAGE =\n 'formatRange received ZonedDateTime inputs with different time zones. Pass options.tz explicitly.';\nconst MISMATCHED_COMPARISON_ZONES_MESSAGE =\n 'Comparison received ZonedDateTime inputs with different time zones. Pass options.tz explicitly.';\nconst UNSUPPORTED_INPUT_MESSAGE = 'Unsupported time input type.';\nconst CACHE_MAX_SIZE = 100;\nconst RELATIVE_UNITS: ReadonlyArray<{\n scale: number;\n thresholdToPromote: number;\n unit: Intl.RelativeTimeFormatUnit;\n}> = [\n { scale: 1, thresholdToPromote: 60, unit: 'second' },\n { scale: 60, thresholdToPromote: 60, unit: 'minute' },\n { scale: 3600, thresholdToPromote: 24, unit: 'hour' },\n { scale: 86400, thresholdToPromote: 7, unit: 'day' },\n // 2629800 / 604800 ~= 4.348 week-to-month promotion threshold used below.\n { scale: 604800, thresholdToPromote: 2629800 / 604800, unit: 'week' },\n { scale: 2629800, thresholdToPromote: 12, unit: 'month' },\n { scale: 31557600, thresholdToPromote: Number.POSITIVE_INFINITY, unit: 'year' },\n];\n\nconst FORMAT_PRESETS: Record<FormatPattern, Intl.DateTimeFormatOptions> = {\n 'date-only': { dateStyle: 'short' },\n long: { dateStyle: 'full', timeStyle: 'long' },\n medium: { dateStyle: 'medium', timeStyle: 'short' },\n short: { dateStyle: 'short', timeStyle: 'short' },\n 'time-only': { timeStyle: 'short' },\n};\n\nconst BOUNDARY_CONFIG: Record<BoundaryUnit, { add: Temporal.DurationLike; clear: Temporal.ZonedDateTimeLike }> = {\n day: {\n add: { days: 1 },\n clear: { hour: 0, microsecond: 0, millisecond: 0, minute: 0, nanosecond: 0, second: 0 },\n },\n hour: {\n add: { hours: 1 },\n clear: { microsecond: 0, millisecond: 0, minute: 0, nanosecond: 0, second: 0 },\n },\n minute: {\n add: { minutes: 1 },\n clear: { microsecond: 0, millisecond: 0, nanosecond: 0, second: 0 },\n },\n month: {\n add: { months: 1 },\n clear: { day: 1, hour: 0, microsecond: 0, millisecond: 0, minute: 0, nanosecond: 0, second: 0 },\n },\n week: {\n add: { weeks: 1 },\n clear: { hour: 0, microsecond: 0, millisecond: 0, minute: 0, nanosecond: 0, second: 0 },\n },\n year: {\n add: { years: 1 },\n clear: { day: 1, hour: 0, microsecond: 0, millisecond: 0, minute: 0, month: 1, nanosecond: 0, second: 0 },\n },\n};\n\n// ─── Bounded cache ────────────────────────────────────────────────────────────\n\nfunction getCached<K, V>(cache: Map<K, V>, key: K): V | undefined {\n if (!cache.has(key)) {\n return undefined;\n }\n\n const value = cache.get(key) as V;\n\n // Refresh insertion order on hit for LRU-like behavior.\n cache.delete(key);\n cache.set(key, value);\n\n return value;\n}\n\nfunction setCached<K, V>(cache: Map<K, V>, key: K, value: V): void {\n cache.set(key, value);\n\n if (cache.size <= CACHE_MAX_SIZE) {\n return;\n }\n\n const oldestKey = cache.keys().next().value as K;\n\n cache.delete(oldestKey);\n}\n\ntype DurationFormatter = {\n format(value: Temporal.Duration): string;\n};\n\ntype DurationFormatterConstructor = new (\n locales?: Intl.LocalesArgument,\n options?: { style?: 'digital' | 'long' | 'narrow' | 'short' },\n) => DurationFormatter;\n\nconst DATE_TIME_FORMATTER_CACHE = new Map<string, Intl.DateTimeFormat>();\nconst RELATIVE_TIME_FORMATTER_CACHE = new Map<string, Intl.RelativeTimeFormat>();\nconst DURATION_FORMATTER_CACHE = new Map<string, DurationFormatter>();\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction fail(message: string): never {\n throw new TypeError(`${ERROR_PREFIX} ${message}`);\n}\n\nfunction parseInput(input: TimeInput): ParsedTimeInput {\n if (input instanceof Temporal.Instant) {\n return { kind: 'instant', value: input };\n }\n\n if (input instanceof Temporal.ZonedDateTime) {\n return { kind: 'zoned', value: input };\n }\n\n if (input instanceof Temporal.PlainDateTime) {\n return { kind: 'local', value: input };\n }\n\n if (input instanceof Temporal.PlainDate) {\n return { kind: 'local', value: input.toPlainDateTime() };\n }\n\n fail(UNSUPPORTED_INPUT_MESSAGE);\n}\n\nfunction inferTimeZone(parsed: ParsedTimeInput, options: TimeOptions): string {\n const tz = options.tz ?? (parsed.kind === 'zoned' ? parsed.value.timeZoneId : undefined);\n\n if (!tz) {\n fail(MISSING_TIMEZONE_MESSAGE);\n }\n\n return tz;\n}\n\nfunction inferSharedTimeZone(parsedValues: ParsedTimeInput[], options: TimeOptions): string {\n if (options.tz) {\n return options.tz;\n }\n\n let inferred: string | undefined;\n\n for (const parsed of parsedValues) {\n if (parsed.kind !== 'zoned') {\n continue;\n }\n\n const tz = parsed.value.timeZoneId;\n\n if (!inferred) {\n inferred = tz;\n continue;\n }\n\n if (inferred !== tz) {\n fail(MISMATCHED_COMPARISON_ZONES_MESSAGE);\n }\n }\n\n if (!inferred) {\n fail(MISSING_TIMEZONE_MESSAGE);\n }\n\n return inferred;\n}\n\nfunction toInstantFromParsed(parsed: ParsedTimeInput, options: TimeOptions): Temporal.Instant {\n if (parsed.kind === 'instant') {\n return parsed.value;\n }\n\n if (parsed.kind === 'zoned') {\n return parsed.value.toInstant();\n }\n\n if (!options.tz) {\n fail(MISSING_TIMEZONE_MESSAGE);\n }\n\n return parsed.value.toZonedDateTime(options.tz, { disambiguation: options.when }).toInstant();\n}\n\nfunction toZonedFromParsed(parsed: ParsedTimeInput, options: TimeOptionsWithTz): Temporal.ZonedDateTime {\n if (parsed.kind === 'zoned') {\n return parsed.value.withTimeZone(options.tz);\n }\n\n if (parsed.kind === 'local') {\n return parsed.value.toZonedDateTime(options.tz, { disambiguation: options.when });\n }\n\n return parsed.value.toZonedDateTimeISO(options.tz);\n}\n\nfunction resolveInstant(input: TimeInput, options: TimeOptions = {}): Temporal.Instant {\n return toInstantFromParsed(parseInput(input), options);\n}\n\nfunction resolveDisplayTimeZone(parsed: ParsedTimeInput, tz?: string): string | undefined {\n return tz ?? (parsed.kind === 'zoned' ? parsed.value.timeZoneId : undefined);\n}\n\nfunction resolveRangeDisplayTimeZone(start: ParsedTimeInput, end: ParsedTimeInput, tz?: string): string | undefined {\n if (tz) {\n return tz;\n }\n\n const startTz = start.kind === 'zoned' ? start.value.timeZoneId : undefined;\n const endTz = end.kind === 'zoned' ? end.value.timeZoneId : undefined;\n\n if (startTz && endTz && startTz !== endTz) {\n fail(MISMATCHED_RANGE_ZONES_MESSAGE);\n }\n\n return startTz ?? endTz;\n}\n\nfunction normalizeRange(start: Temporal.Instant, end: Temporal.Instant): [Temporal.Instant, Temporal.Instant] {\n return Temporal.Instant.compare(start, end) <= 0 ? [start, end] : [end, start];\n}\n\nfunction alignToWeekStart(value: Temporal.ZonedDateTime, weekStartsOn: WeekStartDay): Temporal.ZonedDateTime {\n const daysToSubtract = (value.dayOfWeek - weekStartsOn + 7) % 7;\n\n return value.subtract({ days: daysToSubtract });\n}\n\nfunction startOfParsed(\n parsed: ParsedTimeInput,\n unit: BoundaryUnit,\n options: TimeOptionsWithTz & { weekStartsOn?: WeekStartDay },\n): Temporal.ZonedDateTime {\n let result = clearBoundary(toZonedFromParsed(parsed, { tz: options.tz, when: options.when }), unit);\n\n if (unit === 'week') {\n result = alignToWeekStart(result, options.weekStartsOn ?? 1);\n }\n\n return result;\n}\n\nfunction clearBoundary(value: Temporal.ZonedDateTime, unit: BoundaryUnit): Temporal.ZonedDateTime {\n return value.with(BOUNDARY_CONFIG[unit].clear);\n}\n\nfunction addBoundaryUnit(value: Temporal.ZonedDateTime, unit: BoundaryUnit): Temporal.ZonedDateTime {\n return value.add(BOUNDARY_CONFIG[unit].add);\n}\n\nfunction floorToBoundaryInstant(\n parsed: ParsedTimeInput,\n unit: BoundaryUnit,\n options: TimeOptionsWithTz & { weekStartsOn?: WeekStartDay },\n): Temporal.Instant {\n return startOfParsed(parsed, unit, options).toInstant();\n}\n\nfunction serializeIntlOptions(options: Intl.DateTimeFormatOptions): string {\n return JSON.stringify(\n Object.entries(options)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, value]) => [key, String(value)]),\n );\n}\n\nfunction makeFormatter(options: HumanFormatOptions, displayTz?: string): Intl.DateTimeFormat {\n const tz = options.tz ?? displayTz;\n\n if ('intl' in options && options.intl) {\n const cacheKey = `${String(options.locale ?? '')}|intl|${tz ?? ''}|${serializeIntlOptions(options.intl)}`;\n const cached = getCached(DATE_TIME_FORMATTER_CACHE, cacheKey);\n\n if (cached) {\n return cached;\n }\n\n // Only override timeZone when tz is defined; spreading `timeZone: undefined`\n // would erase any timeZone the caller placed directly in options.intl.\n const intlOptions = tz !== undefined ? { ...options.intl, timeZone: tz } : options.intl;\n const formatter = new Intl.DateTimeFormat(options.locale, intlOptions);\n\n setCached(DATE_TIME_FORMATTER_CACHE, cacheKey, formatter);\n\n return formatter;\n }\n\n const pattern = options.pattern ?? 'medium';\n\n const cacheKey = `${String(options.locale ?? '')}|${pattern}|${tz ?? ''}`;\n const cached = getCached(DATE_TIME_FORMATTER_CACHE, cacheKey);\n\n if (cached) {\n return cached;\n }\n\n const formatter = new Intl.DateTimeFormat(options.locale, { ...FORMAT_PRESETS[pattern], timeZone: tz });\n\n setCached(DATE_TIME_FORMATTER_CACHE, cacheKey, formatter);\n\n return formatter;\n}\n\nfunction getRelativeFormatter(options: RelativeFormatOptions): Intl.RelativeTimeFormat {\n const cacheKey = `${String(options.locale ?? '')}|${options.numeric ?? 'auto'}|${options.style ?? 'long'}`;\n const cached = getCached(RELATIVE_TIME_FORMATTER_CACHE, cacheKey);\n\n if (cached) {\n return cached;\n }\n\n const formatter = new Intl.RelativeTimeFormat(options.locale, {\n numeric: options.numeric ?? 'auto',\n style: options.style ?? 'long',\n });\n\n setCached(RELATIVE_TIME_FORMATTER_CACHE, cacheKey, formatter);\n\n return formatter;\n}\n\nfunction toRelativeUnit(seconds: number): { unit: Intl.RelativeTimeFormatUnit; value: number } {\n if (!Number.isFinite(seconds)) fail('formatRelative received a non-finite time difference.');\n\n const roundedSeconds = Math.round(seconds);\n\n for (const { scale, thresholdToPromote, unit } of RELATIVE_UNITS) {\n const value = Math.round(roundedSeconds / scale);\n\n if (Math.abs(value) < thresholdToPromote) {\n return { unit, value };\n }\n }\n\n return { unit: 'year', value: Math.round(roundedSeconds / 31557600) };\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport function now(tz: string): Temporal.ZonedDateTime {\n return Temporal.Now.zonedDateTimeISO(tz);\n}\n\nexport function parseLocal(input: string): Temporal.PlainDateTime {\n try {\n return Temporal.PlainDateTime.from(input);\n } catch {\n fail(INVALID_LOCAL_TIME_STRING_MESSAGE);\n }\n}\n\nexport function toInstant(input: TimeInput, options: TimeOptions = {}): Temporal.Instant {\n return toInstantFromParsed(parseInput(input), options);\n}\n\nexport function toZoned(input: TimeInput, options: TimeOptionsWithTz): Temporal.ZonedDateTime {\n return toZonedFromParsed(parseInput(input), options);\n}\n\nexport function shift(\n input: TimeInput,\n duration: Temporal.DurationLike,\n options: TimeOptions = {},\n): Temporal.ZonedDateTime {\n const parsed = parseInput(input);\n const tz = inferTimeZone(parsed, options);\n\n return toZonedFromParsed(parsed, { tz, when: options.when }).add(duration);\n}\n\nexport function difference(start: TimeInput, end: TimeInput, options: DifferenceOptions = {}): Temporal.Duration {\n const parsedStart = parseInput(start);\n const parsedEnd = parseInput(end);\n const tz = inferSharedTimeZone([parsedStart, parsedEnd], options);\n const { largestUnit, roundingIncrement, roundingMode, smallestUnit } = options;\n\n return toZonedFromParsed(parsedEnd, { tz, when: options.when }).since(\n toZonedFromParsed(parsedStart, { tz, when: options.when }),\n { largestUnit, roundingIncrement, roundingMode, smallestUnit },\n );\n}\n\nexport function within(value: TimeInput, start: TimeInput, end: TimeInput, options: CompareOptions = {}): boolean {\n if (!options.unit) {\n const target = resolveInstant(value, options);\n const [lower, upper] = normalizeRange(resolveInstant(start, options), resolveInstant(end, options));\n\n return Temporal.Instant.compare(lower, target) <= 0 && Temporal.Instant.compare(target, upper) <= 0;\n }\n\n const parsedValue = parseInput(value);\n const parsedStart = parseInput(start);\n const parsedEnd = parseInput(end);\n const tz = inferSharedTimeZone([parsedValue, parsedStart, parsedEnd], options);\n const unitOptions = { tz, weekStartsOn: options.weekStartsOn, when: options.when };\n const target = floorToBoundaryInstant(parsedValue, options.unit, unitOptions);\n const [lower, upper] = normalizeRange(\n floorToBoundaryInstant(parsedStart, options.unit, unitOptions),\n floorToBoundaryInstant(parsedEnd, options.unit, unitOptions),\n );\n\n return Temporal.Instant.compare(lower, target) <= 0 && Temporal.Instant.compare(target, upper) <= 0;\n}\n\nexport function clamp(\n value: TimeInput,\n start: TimeInput,\n end: TimeInput,\n options: CompareOptions = {},\n): Temporal.Instant {\n if (!options.unit) {\n const target = resolveInstant(value, options);\n const [lower, upper] = normalizeRange(resolveInstant(start, options), resolveInstant(end, options));\n\n if (Temporal.Instant.compare(target, lower) < 0) return lower;\n\n if (Temporal.Instant.compare(target, upper) > 0) return upper;\n\n return target;\n }\n\n const parsedValue = parseInput(value);\n const parsedStart = parseInput(start);\n const parsedEnd = parseInput(end);\n const tz = inferSharedTimeZone([parsedValue, parsedStart, parsedEnd], options);\n const unitOptions = { tz, weekStartsOn: options.weekStartsOn, when: options.when };\n const target = floorToBoundaryInstant(parsedValue, options.unit, unitOptions);\n const [lower, upper] = normalizeRange(\n floorToBoundaryInstant(parsedStart, options.unit, unitOptions),\n floorToBoundaryInstant(parsedEnd, options.unit, unitOptions),\n );\n\n if (Temporal.Instant.compare(target, lower) < 0) return lower;\n\n if (Temporal.Instant.compare(target, upper) > 0) return upper;\n\n return target;\n}\n\nfunction compareByUnit(a: TimeInput, b: TimeInput, options: CompareOptions): number {\n if (!options.unit) {\n return Temporal.Instant.compare(resolveInstant(a, options), resolveInstant(b, options));\n }\n\n const parsedA = parseInput(a);\n const parsedB = parseInput(b);\n\n const tz = inferSharedTimeZone([parsedA, parsedB], options);\n const unitOptions = { tz, weekStartsOn: options.weekStartsOn, when: options.when };\n const left = floorToBoundaryInstant(parsedA, options.unit, unitOptions);\n const right = floorToBoundaryInstant(parsedB, options.unit, unitOptions);\n\n return Temporal.Instant.compare(left, right);\n}\n\nexport function isBefore(a: TimeInput, b: TimeInput, options: CompareOptions = {}): boolean {\n return compareByUnit(a, b, options) < 0;\n}\n\nexport function isAfter(a: TimeInput, b: TimeInput, options: CompareOptions = {}): boolean {\n return compareByUnit(a, b, options) > 0;\n}\n\nexport function isSame(a: TimeInput, b: TimeInput, options: IsSameOptions = {}): boolean {\n return compareByUnit(a, b, options) === 0;\n}\n\nexport function startOf(input: TimeInput, unit: BoundaryUnit, options: BoundaryOptions = {}): Temporal.ZonedDateTime {\n const parsed = parseInput(input);\n const tz = inferTimeZone(parsed, options);\n\n return startOfParsed(parsed, unit, { tz, weekStartsOn: options.weekStartsOn, when: options.when });\n}\n\nexport function endOf(input: TimeInput, unit: BoundaryUnit, options: BoundaryOptions = {}): Temporal.ZonedDateTime {\n return addBoundaryUnit(startOf(input, unit, options), unit).subtract({ nanoseconds: 1 });\n}\n\nexport function formatHuman(input: TimeInput, options: HumanFormatOptions = {}): string {\n const parsed = parseInput(input);\n const displayTz = resolveDisplayTimeZone(parsed, options.tz);\n const instant = toInstantFromParsed(parsed, { tz: displayTz });\n\n return makeFormatter(options, displayTz).format(new Date(instant.epochMilliseconds));\n}\n\nexport function formatRange(start: TimeInput, end: TimeInput, options: HumanFormatOptions = {}): string {\n const parsedStart = parseInput(start);\n const parsedEnd = parseInput(end);\n const displayTz = resolveRangeDisplayTimeZone(parsedStart, parsedEnd, options.tz);\n const formatter = makeFormatter(options, displayTz);\n\n return formatter.formatRange(\n new Date(toInstantFromParsed(parsedStart, { tz: displayTz }).epochMilliseconds),\n new Date(toInstantFromParsed(parsedEnd, { tz: displayTz }).epochMilliseconds),\n );\n}\n\nexport function formatInstant(input: TimeInput, options: TimeOptions = {}): string {\n return toInstantFromParsed(parseInput(input), options).toString();\n}\n\nexport function formatZoned(input: TimeInput, options: TimeOptions = {}): string {\n const parsed = parseInput(input);\n const tz = inferTimeZone(parsed, options);\n\n return toZonedFromParsed(parsed, { tz, when: options.when }).toString();\n}\n\nexport function formatRelative(input: RelativeTimeInput, options: RelativeFormatOptions = {}): string {\n const target = resolveInstant(input);\n const base = options.base ? resolveInstant(options.base) : Temporal.Now.instant();\n const differenceInSeconds = (target.epochMilliseconds - base.epochMilliseconds) / 1000;\n const { unit, value } = toRelativeUnit(differenceInSeconds);\n\n return getRelativeFormatter(options).format(value, unit);\n}\n\nexport function parseDuration(input: string | Temporal.DurationLike): Temporal.Duration {\n try {\n return Temporal.Duration.from(input);\n } catch {\n fail('Invalid duration input. Expected ISO duration string or Temporal.DurationLike.');\n }\n}\n\nexport function formatDuration(input: string | Temporal.DurationLike, options: DurationFormatOptions = {}): string {\n const duration = parseDuration(input);\n const cacheKey = `${String(options.locale ?? '')}|${options.style ?? ''}`;\n const cached = getCached(DURATION_FORMATTER_CACHE, cacheKey);\n\n if (cached) {\n return cached.format(duration);\n }\n\n const IntlWithDurationFormat = Intl as typeof Intl & { DurationFormat?: DurationFormatterConstructor };\n\n if (!IntlWithDurationFormat.DurationFormat) {\n return duration.toString();\n }\n\n const formatter = new IntlWithDurationFormat.DurationFormat(options.locale, { style: options.style });\n\n setCached(DURATION_FORMATTER_CACHE, cacheKey, formatter);\n\n return formatter.format(duration);\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vielzeug/timit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
"registry": "https://registry.npmjs.org/"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@types/node": "^25.
|
|
34
|
-
"typescript": "~6.0.
|
|
35
|
-
"vite": "^8.0.
|
|
36
|
-
"vitest": "^4.1.
|
|
33
|
+
"@types/node": "^25.8.0",
|
|
34
|
+
"typescript": "~6.0.3",
|
|
35
|
+
"vite": "^8.0.13",
|
|
36
|
+
"vitest": "^4.1.6"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@js-temporal/polyfill": "^0.5.1"
|