@c9up/chronos 0.1.3 → 0.1.4

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.
@@ -0,0 +1,108 @@
1
+ export type DateUnit = "second" | "minute" | "hour" | "day" | "week" | "month" | "year";
2
+ export type BoundUnit = "minute" | "hour" | "day" | "week" | "month" | "year";
3
+ export type DateInput = string | Date | DateTime;
4
+ export interface DateRange {
5
+ start: DateInput;
6
+ end: DateInput;
7
+ }
8
+ export interface RangeCompareOptions {
9
+ inclusiveStart?: boolean;
10
+ inclusiveEnd?: boolean;
11
+ }
12
+ export interface RangeRelation {
13
+ overlaps: boolean;
14
+ aContainsB: boolean;
15
+ bContainsA: boolean;
16
+ aStartInB: boolean;
17
+ aEndInB: boolean;
18
+ bStartInA: boolean;
19
+ bEndInA: boolean;
20
+ }
21
+ export interface CalendarParts {
22
+ year: number;
23
+ month: number;
24
+ day: number;
25
+ hour: number;
26
+ minute: number;
27
+ second: number;
28
+ millisecond: number;
29
+ weekday: number;
30
+ weekNumber: number;
31
+ weekYear: number;
32
+ ordinal: number;
33
+ quarter: number;
34
+ daysInMonth: number;
35
+ daysInYear: number;
36
+ isLeapYear: boolean;
37
+ }
38
+ export declare class DateTime {
39
+ #private;
40
+ constructor(input?: string | Date, zone?: string);
41
+ static from(input: DateInput): DateTime;
42
+ static now(zone?: string): DateTime;
43
+ static fromMillis(ms: number): DateTime;
44
+ static fromSeconds(seconds: number): DateTime;
45
+ static fromUnix(seconds: number): DateTime;
46
+ static fromJSDate(date: Date): DateTime;
47
+ static fromObject(obj: {
48
+ year: number;
49
+ month: number;
50
+ day: number;
51
+ hour?: number;
52
+ minute?: number;
53
+ second?: number;
54
+ ms?: number;
55
+ }): DateTime;
56
+ static fromRFC2822(input: string): DateTime;
57
+ static fromSQL(input: string): DateTime;
58
+ static fromHTTP(input: string): DateTime;
59
+ get zoneName(): string;
60
+ get offset(): number;
61
+ setZone(zone: string): DateTime;
62
+ toUTC(): DateTime;
63
+ toZonedISO(): string;
64
+ plus(amount: number, unit: DateUnit): DateTime;
65
+ minus(amount: number, unit: DateUnit): DateTime;
66
+ diff(other: DateInput, unit: DateUnit): number;
67
+ equals(other: DateInput): boolean;
68
+ isBefore(other: DateInput): boolean;
69
+ isAfter(other: DateInput): boolean;
70
+ hasSame(other: DateInput, unit: BoundUnit): boolean;
71
+ isSameDay(other: DateInput): boolean;
72
+ startOf(unit: BoundUnit): DateTime;
73
+ endOf(unit: BoundUnit): DateTime;
74
+ isWithin(range: DateRange, options?: RangeCompareOptions): boolean;
75
+ format(pattern?: string): string;
76
+ toDate(): Date;
77
+ toISO(): string;
78
+ toString(): string;
79
+ toJSON(): string;
80
+ toMillis(): number;
81
+ toSeconds(): number;
82
+ toLocaleString(locale?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
83
+ toRelative(options?: {
84
+ base?: DateInput;
85
+ locale?: Intl.LocalesArgument;
86
+ }): string;
87
+ get calendar(): CalendarParts;
88
+ get weekday(): number;
89
+ get weekNumber(): number;
90
+ get weekYear(): number;
91
+ get ordinal(): number;
92
+ get quarter(): number;
93
+ get daysInMonth(): number;
94
+ get daysInYear(): number;
95
+ get isInLeapYear(): boolean;
96
+ get year(): number;
97
+ get month(): number;
98
+ get day(): number;
99
+ get hour(): number;
100
+ get minute(): number;
101
+ get second(): number;
102
+ get millisecond(): number;
103
+ }
104
+ export declare function inRange(input: DateInput, range: DateRange, options?: RangeCompareOptions): boolean;
105
+ export declare function containsRange(outer: DateRange, inner: DateRange, options?: RangeCompareOptions): boolean;
106
+ export declare function overlapsRange(a: DateRange, b: DateRange, options?: RangeCompareOptions): boolean;
107
+ export declare function analyzeRange(a: DateRange, b: DateRange, options?: RangeCompareOptions): RangeRelation;
108
+ //# sourceMappingURL=DateTime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTime.d.ts","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,506 @@
1
+ /**
2
+ * DateTime — immutable UTC datetime value object for the Ream framework.
3
+ *
4
+ * **All operations route through the Rust `chronos-engine` via NAPI.** There
5
+ * is no TS fallback — timezone math, DST transitions, and RFC 5545 recurrence
6
+ * are too complex to maintain a correct TS mirror. If the NAPI binary is
7
+ * missing, every method throws immediately with a clear "build the engine"
8
+ * message. This is the same contract as Atlas (SQL compilation requires the
9
+ * Rust atlas-query binary).
10
+ *
11
+ * @implements Epic 36 — Chronos
12
+ */
13
+ import { nativeChronos } from "./native.js";
14
+ import { normalizeIso } from "./utils.js";
15
+ // ─── Internal helpers ────────────────────────────────────────
16
+ function toIso(value) {
17
+ if (value instanceof DateTime)
18
+ return value.toISO();
19
+ if (value instanceof Date)
20
+ return normalizeIso(value.toISOString());
21
+ return normalizeIso(new Date(value).toISOString());
22
+ }
23
+ function toMs(value) {
24
+ return new Date(toIso(value)).getTime();
25
+ }
26
+ function isCalendarUnit(unit) {
27
+ return (unit === "day" || unit === "week" || unit === "month" || unit === "year");
28
+ }
29
+ /**
30
+ * Format from a pre-composed ISO string by extracting components directly
31
+ * from the string (no `new Date()` which normalizes to UTC).
32
+ */
33
+ function formatFromIsoString(iso, pattern) {
34
+ const match = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2})/.exec(iso);
35
+ if (!match)
36
+ throw new Error(`Cannot parse ISO for format: ${iso}`);
37
+ const [, y, mo, d, h, mi, s] = match;
38
+ const tokens = {
39
+ YYYY: y,
40
+ YY: y.slice(-2),
41
+ MM: mo,
42
+ DD: d,
43
+ HH: h,
44
+ mm: mi,
45
+ ss: s,
46
+ Z: iso.slice(-6),
47
+ };
48
+ let out = "";
49
+ let i = 0;
50
+ while (i < pattern.length) {
51
+ if (pattern[i] === "[") {
52
+ i++;
53
+ while (i < pattern.length && pattern[i] !== "]") {
54
+ out += pattern[i];
55
+ i++;
56
+ }
57
+ if (i < pattern.length)
58
+ i++;
59
+ continue;
60
+ }
61
+ let matched = false;
62
+ for (const key of ["YYYY", "YY", "MM", "DD", "HH", "mm", "ss", "Z"]) {
63
+ if (pattern.startsWith(key, i)) {
64
+ out += tokens[key];
65
+ i += key.length;
66
+ matched = true;
67
+ break;
68
+ }
69
+ }
70
+ if (!matched) {
71
+ out += pattern[i];
72
+ i++;
73
+ }
74
+ }
75
+ return out;
76
+ }
77
+ function calendarPartsFromIso(iso) {
78
+ // Parse from ISO string directly — handles both UTC and zoned strings.
79
+ const isoMatch = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?/.exec(iso);
80
+ if (!isoMatch)
81
+ throw new Error(`Cannot parse ISO for calendar: ${iso}`);
82
+ const year = Number(isoMatch[1]);
83
+ const month = Number(isoMatch[2]);
84
+ const day = Number(isoMatch[3]);
85
+ const hour = Number(isoMatch[4]);
86
+ const minute = Number(isoMatch[5]);
87
+ const second = Number(isoMatch[6]);
88
+ const millisecond = isoMatch[7] != null ? Math.round(Number(`0.${isoMatch[7]}`) * 1000) : 0;
89
+ const isLeapYear = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
90
+ const daysPerMonth = [
91
+ 31,
92
+ isLeapYear ? 29 : 28,
93
+ 31,
94
+ 30,
95
+ 31,
96
+ 30,
97
+ 31,
98
+ 31,
99
+ 30,
100
+ 31,
101
+ 30,
102
+ 31,
103
+ ];
104
+ const daysInMonth = daysPerMonth[month - 1];
105
+ const daysInYear = isLeapYear ? 366 : 365;
106
+ let ordinal = day;
107
+ for (let m = 0; m < month - 1; m++)
108
+ ordinal += daysPerMonth[m];
109
+ const localDate = new Date(Date.UTC(year, month - 1, day));
110
+ const weekday = localDate.getUTCDay() || 7;
111
+ const jan4 = new Date(Date.UTC(year, 0, 4));
112
+ const jan4Day = jan4.getUTCDay() || 7;
113
+ const startOfIsoYear = new Date(jan4.getTime() - (jan4Day - 1) * 86_400_000);
114
+ const weekMs = localDate.getTime() - startOfIsoYear.getTime();
115
+ let weekNumber = Math.floor(weekMs / 604_800_000) + 1;
116
+ let weekYear = year;
117
+ const isoWeeksInYear = (y) => {
118
+ const j1 = new Date(Date.UTC(y, 0, 1)).getUTCDay();
119
+ const d31 = new Date(Date.UTC(y, 11, 31)).getUTCDay();
120
+ return j1 === 4 || d31 === 4 ? 53 : 52;
121
+ };
122
+ if (weekNumber < 1) {
123
+ weekYear--;
124
+ weekNumber = isoWeeksInYear(weekYear);
125
+ }
126
+ else if (weekNumber > isoWeeksInYear(year)) {
127
+ weekYear++;
128
+ weekNumber = 1;
129
+ }
130
+ return {
131
+ year,
132
+ month,
133
+ day,
134
+ hour,
135
+ minute,
136
+ second,
137
+ millisecond,
138
+ weekday,
139
+ weekNumber,
140
+ weekYear,
141
+ ordinal,
142
+ quarter: Math.ceil(month / 3),
143
+ daysInMonth,
144
+ daysInYear,
145
+ isLeapYear,
146
+ };
147
+ }
148
+ // ─── Range helpers (no NAPI needed — pure ms comparison) ─────
149
+ function normalizeRange(range) {
150
+ const start = toMs(range.start);
151
+ const end = toMs(range.end);
152
+ if (Number.isNaN(start) || Number.isNaN(end))
153
+ throw new Error("Invalid date range");
154
+ if (start > end)
155
+ throw new Error("Invalid date range: start must be <= end");
156
+ return { start, end };
157
+ }
158
+ function rangeContains(outer, inner, opt = {}) {
159
+ const o = normalizeRange(outer);
160
+ const i = normalizeRange(inner);
161
+ return (((opt.inclusiveStart ?? true) ? i.start >= o.start : i.start > o.start) &&
162
+ ((opt.inclusiveEnd ?? true) ? i.end <= o.end : i.end < o.end));
163
+ }
164
+ function pointInRange(point, range, opt) {
165
+ return (((opt.inclusiveStart ?? true)
166
+ ? point >= range.start
167
+ : point > range.start) &&
168
+ ((opt.inclusiveEnd ?? true) ? point <= range.end : point < range.end));
169
+ }
170
+ function rangesOverlap(a, b, opt = {}) {
171
+ const na = normalizeRange(a);
172
+ const nb = normalizeRange(b);
173
+ const inc = (opt.inclusiveStart ?? true) || (opt.inclusiveEnd ?? true);
174
+ return inc
175
+ ? Math.max(na.start, nb.start) <= Math.min(na.end, nb.end)
176
+ : Math.max(na.start, nb.start) < Math.min(na.end, nb.end);
177
+ }
178
+ // ─── DateTime class ──────────────────────────────────────────
179
+ export class DateTime {
180
+ #iso;
181
+ #zone;
182
+ constructor(input = new Date(), zone = "UTC") {
183
+ this.#iso = toIso(input);
184
+ this.#zone = zone;
185
+ }
186
+ static from(input) {
187
+ if (input instanceof DateTime)
188
+ return new DateTime(input.#iso, input.#zone);
189
+ return new DateTime(toIso(input));
190
+ }
191
+ static now(zone) {
192
+ return new DateTime(new Date(), zone ?? "UTC");
193
+ }
194
+ static fromMillis(ms) {
195
+ return new DateTime(new Date(ms));
196
+ }
197
+ static fromSeconds(seconds) {
198
+ return new DateTime(new Date(seconds * 1000));
199
+ }
200
+ static fromUnix(seconds) {
201
+ return DateTime.fromSeconds(seconds);
202
+ }
203
+ static fromJSDate(date) {
204
+ if (!Number.isFinite(date.getTime()))
205
+ throw new Error("Invalid Date");
206
+ return new DateTime(date);
207
+ }
208
+ static fromObject(obj) {
209
+ if (obj.month < 1 || obj.month > 12)
210
+ throw new Error(`Invalid month: ${obj.month}`);
211
+ if (obj.day < 1 || obj.day > 31)
212
+ throw new Error(`Invalid day: ${obj.day}`);
213
+ const d = new Date(Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour ?? 0, obj.minute ?? 0, obj.second ?? 0, obj.ms ?? 0));
214
+ if (d.getUTCMonth() !== obj.month - 1 || d.getUTCDate() !== obj.day) {
215
+ throw new Error(`Invalid date object: ${JSON.stringify(obj)}`);
216
+ }
217
+ return new DateTime(d);
218
+ }
219
+ static fromRFC2822(input) {
220
+ return new DateTime(nativeChronos().parseRfc2822(input));
221
+ }
222
+ static fromSQL(input) {
223
+ return new DateTime(nativeChronos().parseSql(input));
224
+ }
225
+ static fromHTTP(input) {
226
+ return new DateTime(nativeChronos().parseHttp(input));
227
+ }
228
+ // ─── Timezone ───────────────────────────────────────────
229
+ get zoneName() {
230
+ return this.#zone;
231
+ }
232
+ get offset() {
233
+ if (this.#zone === "UTC")
234
+ return 0;
235
+ return nativeChronos().zoneOffset(this.#iso, this.#zone);
236
+ }
237
+ setZone(zone) {
238
+ nativeChronos().validateTimezone(zone);
239
+ return new DateTime(this.#iso, zone);
240
+ }
241
+ toUTC() {
242
+ return new DateTime(this.#iso, "UTC");
243
+ }
244
+ toZonedISO() {
245
+ if (this.#zone === "UTC")
246
+ return this.#iso;
247
+ return nativeChronos().toZone(this.#iso, this.#zone).iso;
248
+ }
249
+ // ─── Arithmetic ─────────────────────────────────────────
250
+ plus(amount, unit) {
251
+ const n = nativeChronos();
252
+ const out = this.#zone !== "UTC" && isCalendarUnit(unit)
253
+ ? n.addInZone(this.#iso, amount, unit, this.#zone)
254
+ : n.add(this.#iso, amount, unit);
255
+ return new DateTime(out, this.#zone);
256
+ }
257
+ minus(amount, unit) {
258
+ return this.plus(-amount, unit);
259
+ }
260
+ diff(other, unit) {
261
+ const n = nativeChronos();
262
+ const otherIso = toIso(other);
263
+ return this.#zone !== "UTC" && (unit === "month" || unit === "year")
264
+ ? n.diffInZone(this.#iso, otherIso, unit, this.#zone)
265
+ : n.diff(this.#iso, otherIso, unit);
266
+ }
267
+ // ─── Comparison ─────────────────────────────────────────
268
+ equals(other) {
269
+ return this.#iso === toIso(other);
270
+ }
271
+ isBefore(other) {
272
+ return toMs(this) < toMs(other);
273
+ }
274
+ isAfter(other) {
275
+ return toMs(this) > toMs(other);
276
+ }
277
+ hasSame(other, unit) {
278
+ return (this.startOf(unit).toISO() === DateTime.from(other).startOf(unit).toISO());
279
+ }
280
+ isSameDay(other) {
281
+ return this.hasSame(other, "day");
282
+ }
283
+ // ─── Boundaries ─────────────────────────────────────────
284
+ startOf(unit) {
285
+ if (this.#zone !== "UTC") {
286
+ const zoned = nativeChronos().toZone(this.#iso, this.#zone).iso;
287
+ // Strip offset, compute boundary in fake-UTC, resolve back via fromLocal.
288
+ const naive = zoned.replace(/[+-]\d{2}:\d{2}$/, "Z");
289
+ const d = new Date(naive);
290
+ switch (unit) {
291
+ case "year":
292
+ d.setUTCMonth(0, 1);
293
+ d.setUTCHours(0, 0, 0, 0);
294
+ break;
295
+ case "month":
296
+ d.setUTCDate(1);
297
+ d.setUTCHours(0, 0, 0, 0);
298
+ break;
299
+ case "week": {
300
+ const wd = d.getUTCDay();
301
+ d.setUTCDate(d.getUTCDate() - (wd === 0 ? 6 : wd - 1));
302
+ d.setUTCHours(0, 0, 0, 0);
303
+ break;
304
+ }
305
+ case "day":
306
+ d.setUTCHours(0, 0, 0, 0);
307
+ break;
308
+ case "hour":
309
+ d.setUTCMinutes(0, 0, 0);
310
+ break;
311
+ case "minute":
312
+ d.setUTCSeconds(0, 0);
313
+ break;
314
+ }
315
+ return new DateTime(nativeChronos().fromLocal(normalizeIso(d.toISOString()), this.#zone), this.#zone);
316
+ }
317
+ return new DateTime(nativeChronos().startOf(this.#iso, unit), this.#zone);
318
+ }
319
+ endOf(unit) {
320
+ if (this.#zone !== "UTC") {
321
+ const zoned = nativeChronos().toZone(this.#iso, this.#zone).iso;
322
+ const naive = zoned.replace(/[+-]\d{2}:\d{2}$/, "Z");
323
+ const s = new Date(naive);
324
+ // Compute startOf first, then advance one unit - 1 second.
325
+ switch (unit) {
326
+ case "year":
327
+ s.setUTCMonth(0, 1);
328
+ s.setUTCHours(0, 0, 0, 0);
329
+ s.setUTCFullYear(s.getUTCFullYear() + 1);
330
+ break;
331
+ case "month":
332
+ s.setUTCDate(1);
333
+ s.setUTCHours(0, 0, 0, 0);
334
+ s.setUTCMonth(s.getUTCMonth() + 1);
335
+ break;
336
+ case "week": {
337
+ const wd = s.getUTCDay();
338
+ s.setUTCDate(s.getUTCDate() - (wd === 0 ? 6 : wd - 1));
339
+ s.setUTCHours(0, 0, 0, 0);
340
+ s.setUTCDate(s.getUTCDate() + 7);
341
+ break;
342
+ }
343
+ case "day":
344
+ s.setUTCHours(0, 0, 0, 0);
345
+ s.setUTCDate(s.getUTCDate() + 1);
346
+ break;
347
+ case "hour":
348
+ s.setUTCMinutes(0, 0, 0);
349
+ s.setUTCHours(s.getUTCHours() + 1);
350
+ break;
351
+ case "minute":
352
+ s.setUTCSeconds(0, 0);
353
+ s.setUTCMinutes(s.getUTCMinutes() + 1);
354
+ break;
355
+ }
356
+ s.setUTCMilliseconds(s.getUTCMilliseconds() - 1); // last millisecond, not last second
357
+ return new DateTime(nativeChronos().fromLocal(normalizeIso(s.toISOString()), this.#zone), this.#zone);
358
+ }
359
+ return new DateTime(nativeChronos().endOf(this.#iso, unit), this.#zone);
360
+ }
361
+ // ─── Range ──────────────────────────────────────────────
362
+ isWithin(range, options = {}) {
363
+ return rangeContains(range, { start: this.#iso, end: this.#iso }, options);
364
+ }
365
+ // ─── Formatting ─────────────────────────────────────────
366
+ format(pattern = "YYYY-MM-DD HH:mm:ss") {
367
+ if (this.#zone !== "UTC") {
368
+ return formatFromIsoString(nativeChronos().toZone(this.#iso, this.#zone).iso, pattern);
369
+ }
370
+ return nativeChronos().format(this.#iso, pattern);
371
+ }
372
+ toDate() {
373
+ return new Date(this.#iso);
374
+ }
375
+ toISO() {
376
+ return this.#iso;
377
+ }
378
+ toString() {
379
+ return this.#iso;
380
+ }
381
+ toJSON() {
382
+ return this.#iso;
383
+ }
384
+ toMillis() {
385
+ return new Date(this.#iso).getTime();
386
+ }
387
+ toSeconds() {
388
+ return Math.floor(this.toMillis() / 1000);
389
+ }
390
+ toLocaleString(locale, options) {
391
+ return new Intl.DateTimeFormat(locale, {
392
+ ...(this.#zone !== "UTC" ? { timeZone: this.#zone } : {}),
393
+ ...options,
394
+ }).format(this.toDate());
395
+ }
396
+ toRelative(options) {
397
+ const base = options?.base ? DateTime.from(options.base) : new DateTime();
398
+ const diffMs = this.toMillis() - base.toMillis();
399
+ const abs = Math.abs(diffMs);
400
+ let unit;
401
+ let value;
402
+ if (abs < 60_000) {
403
+ unit = "second";
404
+ value = Math.round(diffMs / 1000);
405
+ }
406
+ else if (abs < 3_600_000) {
407
+ unit = "minute";
408
+ value = Math.round(diffMs / 60_000);
409
+ }
410
+ else if (abs < 86_400_000) {
411
+ unit = "hour";
412
+ value = Math.round(diffMs / 3_600_000);
413
+ }
414
+ else if (abs < 2_592_000_000) {
415
+ unit = "day";
416
+ value = Math.round(diffMs / 86_400_000);
417
+ }
418
+ else if (abs < 31_536_000_000) {
419
+ unit = "month";
420
+ value = Math.round(diffMs / 2_592_000_000);
421
+ }
422
+ else {
423
+ unit = "year";
424
+ value = Math.round(diffMs / 31_536_000_000);
425
+ }
426
+ return new Intl.RelativeTimeFormat(options?.locale, {
427
+ numeric: "auto",
428
+ }).format(value, unit);
429
+ }
430
+ // ─── Calendar accessors ─────────────────────────────────
431
+ get calendar() {
432
+ if (this.#zone !== "UTC") {
433
+ return calendarPartsFromIso(nativeChronos().toZone(this.#iso, this.#zone).iso);
434
+ }
435
+ return nativeChronos().calendarParts(this.#iso);
436
+ }
437
+ get weekday() {
438
+ return this.calendar.weekday;
439
+ }
440
+ get weekNumber() {
441
+ return this.calendar.weekNumber;
442
+ }
443
+ get weekYear() {
444
+ return this.calendar.weekYear;
445
+ }
446
+ get ordinal() {
447
+ return this.calendar.ordinal;
448
+ }
449
+ get quarter() {
450
+ return this.calendar.quarter;
451
+ }
452
+ get daysInMonth() {
453
+ return this.calendar.daysInMonth;
454
+ }
455
+ get daysInYear() {
456
+ return this.calendar.daysInYear;
457
+ }
458
+ get isInLeapYear() {
459
+ return this.calendar.isLeapYear;
460
+ }
461
+ get year() {
462
+ return this.calendar.year;
463
+ }
464
+ get month() {
465
+ return this.calendar.month;
466
+ }
467
+ get day() {
468
+ return this.calendar.day;
469
+ }
470
+ get hour() {
471
+ return this.calendar.hour;
472
+ }
473
+ get minute() {
474
+ return this.calendar.minute;
475
+ }
476
+ get second() {
477
+ return this.calendar.second;
478
+ }
479
+ get millisecond() {
480
+ return this.calendar.millisecond;
481
+ }
482
+ }
483
+ // ─── Standalone range helpers ────────────────────────────────
484
+ export function inRange(input, range, options = {}) {
485
+ return DateTime.from(input).isWithin(range, options);
486
+ }
487
+ export function containsRange(outer, inner, options = {}) {
488
+ return rangeContains(outer, inner, options);
489
+ }
490
+ export function overlapsRange(a, b, options = {}) {
491
+ return rangesOverlap(a, b, options);
492
+ }
493
+ export function analyzeRange(a, b, options = {}) {
494
+ const na = normalizeRange(a);
495
+ const nb = normalizeRange(b);
496
+ return {
497
+ overlaps: rangesOverlap(a, b, options),
498
+ aContainsB: rangeContains(a, b, options),
499
+ bContainsA: rangeContains(b, a, options),
500
+ aStartInB: pointInRange(na.start, nb, options),
501
+ aEndInB: pointInRange(na.end, nb, options),
502
+ bStartInA: pointInRange(nb.start, na, options),
503
+ bEndInA: pointInRange(nb.end, na, options),
504
+ };
505
+ }
506
+ //# sourceMappingURL=DateTime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":"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"}