@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,94 @@
1
+ /**
2
+ * Duration — immutable time-span value object for the Ream framework.
3
+ *
4
+ * Represents a length of time as a bag of calendar + clock units. Closely
5
+ * mirrors Luxon's `Duration` API so developers coming from AdonisJS feel at
6
+ * home. Pure TypeScript — no Rust/NAPI dependency (durations are lightweight
7
+ * arithmetic on small integers, not worth an FFI crossing).
8
+ *
9
+ * @implements Story 36.8
10
+ */
11
+ export interface DurationObject {
12
+ years?: number;
13
+ months?: number;
14
+ weeks?: number;
15
+ days?: number;
16
+ hours?: number;
17
+ minutes?: number;
18
+ seconds?: number;
19
+ milliseconds?: number;
20
+ }
21
+ export type DurationUnit = keyof DurationObject;
22
+ export declare class Duration {
23
+ #private;
24
+ private constructor();
25
+ /** Build from a plain object of unit values. */
26
+ static fromObject(obj: DurationObject): Duration;
27
+ /** Build from a total number of milliseconds (approximates calendar units). */
28
+ static fromMillis(ms: number): Duration;
29
+ /**
30
+ * Parse an ISO 8601 duration string (`P1Y2M3DT4H5M6.789S`).
31
+ *
32
+ * Supports the full `PnYnMnDTnHnMnS` form. Fractional seconds are
33
+ * rounded to the nearest millisecond. Weeks (`PnW`) are a separate form
34
+ * that cannot be mixed with other designators per the spec.
35
+ */
36
+ static fromISO(iso: string): Duration;
37
+ get years(): number;
38
+ get months(): number;
39
+ get weeks(): number;
40
+ get days(): number;
41
+ get hours(): number;
42
+ get minutes(): number;
43
+ get seconds(): number;
44
+ get milliseconds(): number;
45
+ /** Get a specific unit. */
46
+ get(unit: DurationUnit): number;
47
+ /** Return the internal bag as a plain object. */
48
+ toObject(): Required<DurationObject>;
49
+ /** Add another duration to this one (per-unit addition). */
50
+ plus(other: Duration | DurationObject): Duration;
51
+ /** Subtract another duration from this one. */
52
+ minus(other: Duration | DurationObject): Duration;
53
+ /** Flip the sign on every unit. */
54
+ negate(): Duration;
55
+ /**
56
+ * Normalize clock units — cascade overflows upward so that e.g. 90 seconds
57
+ * becomes 1 minute 30 seconds. Calendar units (years, months) are left
58
+ * untouched because normalizing months→years requires knowing *which* year.
59
+ *
60
+ * Weeks are not cascaded into months — they stay as weeks unless the source
61
+ * explicitly had weeks. This matches Luxon's behavior.
62
+ */
63
+ normalize(): Duration;
64
+ /**
65
+ * Re-project this duration into the given units. Uses approximate
66
+ * conversions for calendar units (365.25d/year, 30d/month). The result
67
+ * is expressed only in the requested units; all others are zero.
68
+ *
69
+ * Duration.fromObject({ hours: 25 }).shiftTo('days', 'hours')
70
+ * // → { days: 1, hours: 1 }
71
+ */
72
+ shiftTo(...units: DurationUnit[]): Duration;
73
+ /**
74
+ * Express the total duration in a single unit (approximate for calendar
75
+ * units — same caveat as `shiftTo`).
76
+ */
77
+ as(unit: DurationUnit): number;
78
+ /** ISO 8601 duration string (`P1Y2M3DT4H5M6S`). */
79
+ toISO(): string;
80
+ /**
81
+ * Simple pattern format: `hh:mm:ss`, `HH:mm`, etc. Supported tokens:
82
+ * `Y` (years), `M` (months), `d` (days), `h`/`hh` (hours), `m`/`mm`
83
+ * (minutes), `s`/`ss` (seconds), `S`/`SSS` (milliseconds).
84
+ */
85
+ toFormat(pattern: string): string;
86
+ /**
87
+ * Human-readable form: "2 hours, 15 minutes". Uses English hardcoded —
88
+ * locale-aware formatting will go through Rosetta once Story 36.12 lands.
89
+ */
90
+ toHuman(): string;
91
+ toString(): string;
92
+ toJSON(): string;
93
+ }
94
+ //# sourceMappingURL=Duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Duration.d.ts","sourceRoot":"","sources":["../src/Duration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC;AA4BhD,qBAAa,QAAQ;;IAGpB,OAAO;IAeP,gDAAgD;IAChD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,QAAQ;IAIhD,+EAA+E;IAC/E,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAIvC;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;IAmCrC,IAAI,KAAK,IAAI,MAAM,CAElB;IACD,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,IAAI,KAAK,IAAI,MAAM,CAElB;IACD,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,IAAI,KAAK,IAAI,MAAM,CAElB;IACD,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,2BAA2B;IAC3B,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAI/B,iDAAiD;IACjD,QAAQ,IAAI,QAAQ,CAAC,cAAc,CAAC;IAMpC,4DAA4D;IAC5D,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,cAAc,GAAG,QAAQ;IAchD,+CAA+C;IAC/C,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,cAAc,GAAG,QAAQ;IAcjD,mCAAmC;IACnC,MAAM,IAAI,QAAQ;IAelB;;;;;;;OAOG;IACH,SAAS,IAAI,QAAQ;IAuCrB;;;;;;;OAOG;IACH,OAAO,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,QAAQ;IA2B3C;;;OAGG;IACH,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAU9B,mDAAmD;IACnD,KAAK,IAAI,MAAM;IAgBf;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAgBjC;;;OAGG;IACH,OAAO,IAAI,MAAM;IAoBjB,QAAQ,IAAI,MAAM;IAGlB,MAAM,IAAI,MAAM;CAGhB"}
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Duration — immutable time-span value object for the Ream framework.
3
+ *
4
+ * Represents a length of time as a bag of calendar + clock units. Closely
5
+ * mirrors Luxon's `Duration` API so developers coming from AdonisJS feel at
6
+ * home. Pure TypeScript — no Rust/NAPI dependency (durations are lightweight
7
+ * arithmetic on small integers, not worth an FFI crossing).
8
+ *
9
+ * @implements Story 36.8
10
+ */
11
+ const ORDERED_UNITS = [
12
+ "years",
13
+ "months",
14
+ "weeks",
15
+ "days",
16
+ "hours",
17
+ "minutes",
18
+ "seconds",
19
+ "milliseconds",
20
+ ];
21
+ /** Millisecond equivalents for clock units. Calendar units (years/months) are
22
+ * not convertible to a fixed ms count — they depend on the anchor date. When
23
+ * converting, we use an approximation (30-day month, 365-day year) and
24
+ * document it. Luxon does the same. */
25
+ const MS_PER = {
26
+ years: 365.25 * 24 * 60 * 60 * 1000,
27
+ months: 30 * 24 * 60 * 60 * 1000,
28
+ weeks: 7 * 24 * 60 * 60 * 1000,
29
+ days: 24 * 60 * 60 * 1000,
30
+ hours: 60 * 60 * 1000,
31
+ minutes: 60 * 1000,
32
+ seconds: 1000,
33
+ milliseconds: 1,
34
+ };
35
+ export class Duration {
36
+ #values;
37
+ constructor(values) {
38
+ this.#values = {
39
+ years: values.years ?? 0,
40
+ months: values.months ?? 0,
41
+ weeks: values.weeks ?? 0,
42
+ days: values.days ?? 0,
43
+ hours: values.hours ?? 0,
44
+ minutes: values.minutes ?? 0,
45
+ seconds: values.seconds ?? 0,
46
+ milliseconds: values.milliseconds ?? 0,
47
+ };
48
+ }
49
+ // ─── Factories ──────────────────────────────────────────
50
+ /** Build from a plain object of unit values. */
51
+ static fromObject(obj) {
52
+ return new Duration(obj);
53
+ }
54
+ /** Build from a total number of milliseconds (approximates calendar units). */
55
+ static fromMillis(ms) {
56
+ return new Duration({ milliseconds: ms });
57
+ }
58
+ /**
59
+ * Parse an ISO 8601 duration string (`P1Y2M3DT4H5M6.789S`).
60
+ *
61
+ * Supports the full `PnYnMnDTnHnMnS` form. Fractional seconds are
62
+ * rounded to the nearest millisecond. Weeks (`PnW`) are a separate form
63
+ * that cannot be mixed with other designators per the spec.
64
+ */
65
+ static fromISO(iso) {
66
+ const s = iso.trim();
67
+ if (!s.startsWith("P"))
68
+ throw new Error(`Invalid ISO 8601 duration: ${iso}`);
69
+ // Week form: P3W
70
+ const weekMatch = /^P(\d+(?:\.\d+)?)W$/.exec(s);
71
+ if (weekMatch) {
72
+ return new Duration({ weeks: Number.parseFloat(weekMatch[1]) });
73
+ }
74
+ const match = /^P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:([\d.]+)S)?)?$/.exec(s);
75
+ if (!match)
76
+ throw new Error(`Invalid ISO 8601 duration: ${iso}`);
77
+ const [, y, mo, d, h, mi, sec] = match;
78
+ const seconds = sec ? Math.floor(Number.parseFloat(sec)) : 0;
79
+ const milliseconds = sec
80
+ ? Math.round((Number.parseFloat(sec) - seconds) * 1000)
81
+ : 0;
82
+ return new Duration({
83
+ years: y ? Number(y) : 0,
84
+ months: mo ? Number(mo) : 0,
85
+ days: d ? Number(d) : 0,
86
+ hours: h ? Number(h) : 0,
87
+ minutes: mi ? Number(mi) : 0,
88
+ seconds,
89
+ milliseconds,
90
+ });
91
+ }
92
+ // ─── Accessors ──────────────────────────────────────────
93
+ get years() {
94
+ return this.#values.years;
95
+ }
96
+ get months() {
97
+ return this.#values.months;
98
+ }
99
+ get weeks() {
100
+ return this.#values.weeks;
101
+ }
102
+ get days() {
103
+ return this.#values.days;
104
+ }
105
+ get hours() {
106
+ return this.#values.hours;
107
+ }
108
+ get minutes() {
109
+ return this.#values.minutes;
110
+ }
111
+ get seconds() {
112
+ return this.#values.seconds;
113
+ }
114
+ get milliseconds() {
115
+ return this.#values.milliseconds;
116
+ }
117
+ /** Get a specific unit. */
118
+ get(unit) {
119
+ return this.#values[unit];
120
+ }
121
+ /** Return the internal bag as a plain object. */
122
+ toObject() {
123
+ return { ...this.#values };
124
+ }
125
+ // ─── Arithmetic ─────────────────────────────────────────
126
+ /** Add another duration to this one (per-unit addition). */
127
+ plus(other) {
128
+ const o = other instanceof Duration ? other.#values : other;
129
+ return new Duration({
130
+ years: this.#values.years + (o.years ?? 0),
131
+ months: this.#values.months + (o.months ?? 0),
132
+ weeks: this.#values.weeks + (o.weeks ?? 0),
133
+ days: this.#values.days + (o.days ?? 0),
134
+ hours: this.#values.hours + (o.hours ?? 0),
135
+ minutes: this.#values.minutes + (o.minutes ?? 0),
136
+ seconds: this.#values.seconds + (o.seconds ?? 0),
137
+ milliseconds: this.#values.milliseconds + (o.milliseconds ?? 0),
138
+ });
139
+ }
140
+ /** Subtract another duration from this one. */
141
+ minus(other) {
142
+ const o = other instanceof Duration ? other.#values : other;
143
+ return new Duration({
144
+ years: this.#values.years - (o.years ?? 0),
145
+ months: this.#values.months - (o.months ?? 0),
146
+ weeks: this.#values.weeks - (o.weeks ?? 0),
147
+ days: this.#values.days - (o.days ?? 0),
148
+ hours: this.#values.hours - (o.hours ?? 0),
149
+ minutes: this.#values.minutes - (o.minutes ?? 0),
150
+ seconds: this.#values.seconds - (o.seconds ?? 0),
151
+ milliseconds: this.#values.milliseconds - (o.milliseconds ?? 0),
152
+ });
153
+ }
154
+ /** Flip the sign on every unit. */
155
+ negate() {
156
+ return new Duration({
157
+ years: -this.#values.years,
158
+ months: -this.#values.months,
159
+ weeks: -this.#values.weeks,
160
+ days: -this.#values.days,
161
+ hours: -this.#values.hours,
162
+ minutes: -this.#values.minutes,
163
+ seconds: -this.#values.seconds,
164
+ milliseconds: -this.#values.milliseconds,
165
+ });
166
+ }
167
+ // ─── Conversion ─────────────────────────────────────────
168
+ /**
169
+ * Normalize clock units — cascade overflows upward so that e.g. 90 seconds
170
+ * becomes 1 minute 30 seconds. Calendar units (years, months) are left
171
+ * untouched because normalizing months→years requires knowing *which* year.
172
+ *
173
+ * Weeks are not cascaded into months — they stay as weeks unless the source
174
+ * explicitly had weeks. This matches Luxon's behavior.
175
+ */
176
+ normalize() {
177
+ let ms = this.#values.milliseconds;
178
+ let sec = this.#values.seconds;
179
+ let min = this.#values.minutes;
180
+ let hrs = this.#values.hours;
181
+ let days = this.#values.days;
182
+ // Use a carry function that handles negative values correctly.
183
+ // JS `%` is remainder (preserves sign), not modulo. For negative
184
+ // durations we need true modulo so the remainder is always non-negative
185
+ // relative to its parent unit, matching the mathematical convention.
186
+ const carry = (value, divisor) => {
187
+ const quot = Math.trunc(value / divisor);
188
+ const rem = value - quot * divisor;
189
+ return [quot, rem];
190
+ };
191
+ let c;
192
+ [c, ms] = carry(ms, 1000);
193
+ sec += c;
194
+ [c, sec] = carry(sec, 60);
195
+ min += c;
196
+ [c, min] = carry(min, 60);
197
+ hrs += c;
198
+ [c, hrs] = carry(hrs, 24);
199
+ days += c;
200
+ return new Duration({
201
+ years: this.#values.years,
202
+ months: this.#values.months,
203
+ weeks: this.#values.weeks,
204
+ days,
205
+ hours: hrs,
206
+ minutes: min,
207
+ seconds: sec,
208
+ milliseconds: ms,
209
+ });
210
+ }
211
+ /**
212
+ * Re-project this duration into the given units. Uses approximate
213
+ * conversions for calendar units (365.25d/year, 30d/month). The result
214
+ * is expressed only in the requested units; all others are zero.
215
+ *
216
+ * Duration.fromObject({ hours: 25 }).shiftTo('days', 'hours')
217
+ * // → { days: 1, hours: 1 }
218
+ */
219
+ shiftTo(...units) {
220
+ if (units.length === 0)
221
+ return this;
222
+ // Convert the entire duration to approximate milliseconds, then greedily
223
+ // distribute into the requested units from largest to smallest.
224
+ let totalMs = 0;
225
+ for (const unit of ORDERED_UNITS) {
226
+ totalMs += this.#values[unit] * MS_PER[unit];
227
+ }
228
+ const sorted = [...units].sort((a, b) => ORDERED_UNITS.indexOf(a) - ORDERED_UNITS.indexOf(b));
229
+ const result = {};
230
+ for (const unit of sorted) {
231
+ const value = Math.trunc(totalMs / MS_PER[unit]);
232
+ totalMs -= value * MS_PER[unit];
233
+ result[unit] = value;
234
+ }
235
+ // Any leftover ms goes into the smallest requested unit as a fractional part.
236
+ if (totalMs !== 0 && sorted.length > 0) {
237
+ const smallest = sorted[sorted.length - 1];
238
+ result[smallest] = (result[smallest] ?? 0) + totalMs / MS_PER[smallest];
239
+ }
240
+ return new Duration(result);
241
+ }
242
+ /**
243
+ * Express the total duration in a single unit (approximate for calendar
244
+ * units — same caveat as `shiftTo`).
245
+ */
246
+ as(unit) {
247
+ let totalMs = 0;
248
+ for (const u of ORDERED_UNITS) {
249
+ totalMs += this.#values[u] * MS_PER[u];
250
+ }
251
+ return totalMs / MS_PER[unit];
252
+ }
253
+ // ─── Formatting ─────────────────────────────────────────
254
+ /** ISO 8601 duration string (`P1Y2M3DT4H5M6S`). */
255
+ toISO() {
256
+ const v = this.#values;
257
+ let date = "";
258
+ if (v.years)
259
+ date += `${v.years}Y`;
260
+ if (v.months)
261
+ date += `${v.months}M`;
262
+ if (v.weeks)
263
+ date += `${v.weeks}W`;
264
+ if (v.days)
265
+ date += `${v.days}D`;
266
+ let time = "";
267
+ if (v.hours)
268
+ time += `${v.hours}H`;
269
+ if (v.minutes)
270
+ time += `${v.minutes}M`;
271
+ const totalSec = v.seconds + v.milliseconds / 1000;
272
+ if (totalSec)
273
+ time += `${totalSec}S`;
274
+ if (!date && !time)
275
+ return "PT0S";
276
+ return `P${date}${time ? `T${time}` : ""}`;
277
+ }
278
+ /**
279
+ * Simple pattern format: `hh:mm:ss`, `HH:mm`, etc. Supported tokens:
280
+ * `Y` (years), `M` (months), `d` (days), `h`/`hh` (hours), `m`/`mm`
281
+ * (minutes), `s`/`ss` (seconds), `S`/`SSS` (milliseconds).
282
+ */
283
+ toFormat(pattern) {
284
+ const v = this.normalize().#values;
285
+ return pattern
286
+ .replace(/hh/g, String(v.hours).padStart(2, "0"))
287
+ .replace(/mm/g, String(v.minutes).padStart(2, "0"))
288
+ .replace(/ss/g, String(v.seconds).padStart(2, "0"))
289
+ .replace(/SSS/g, String(v.milliseconds).padStart(3, "0"))
290
+ .replace(/h/g, String(v.hours))
291
+ .replace(/m/g, String(v.minutes))
292
+ .replace(/s/g, String(v.seconds))
293
+ .replace(/S/g, String(v.milliseconds))
294
+ .replace(/Y/g, String(v.years))
295
+ .replace(/M/g, String(v.months))
296
+ .replace(/d/g, String(v.days));
297
+ }
298
+ /**
299
+ * Human-readable form: "2 hours, 15 minutes". Uses English hardcoded —
300
+ * locale-aware formatting will go through Rosetta once Story 36.12 lands.
301
+ */
302
+ toHuman() {
303
+ const v = this.normalize().#values;
304
+ const parts = [];
305
+ if (v.years)
306
+ parts.push(`${v.years} ${v.years === 1 ? "year" : "years"}`);
307
+ if (v.months)
308
+ parts.push(`${v.months} ${v.months === 1 ? "month" : "months"}`);
309
+ if (v.weeks)
310
+ parts.push(`${v.weeks} ${v.weeks === 1 ? "week" : "weeks"}`);
311
+ if (v.days)
312
+ parts.push(`${v.days} ${v.days === 1 ? "day" : "days"}`);
313
+ if (v.hours)
314
+ parts.push(`${v.hours} ${v.hours === 1 ? "hour" : "hours"}`);
315
+ if (v.minutes)
316
+ parts.push(`${v.minutes} ${v.minutes === 1 ? "minute" : "minutes"}`);
317
+ if (v.seconds)
318
+ parts.push(`${v.seconds} ${v.seconds === 1 ? "second" : "seconds"}`);
319
+ if (v.milliseconds)
320
+ parts.push(`${v.milliseconds} ${v.milliseconds === 1 ? "millisecond" : "milliseconds"}`);
321
+ return parts.length > 0 ? parts.join(", ") : "0 seconds";
322
+ }
323
+ toString() {
324
+ return this.toISO();
325
+ }
326
+ toJSON() {
327
+ return this.toISO();
328
+ }
329
+ }
330
+ //# sourceMappingURL=Duration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Duration.js","sourceRoot":"","sources":["../src/Duration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Interval — immutable half-open `[start, end)` time range.
3
+ *
4
+ * Provides set-style operations (`contains`, `overlaps`, `union`,
5
+ * `intersection`, `splitBy`, `splitAt`) that the standalone range helpers
6
+ * in `DateTime.ts` could not express cleanly as methods.
7
+ *
8
+ * @implements Story 36.9
9
+ */
10
+ import { type DateInput, DateTime, type DateUnit } from "./DateTime.js";
11
+ import { Duration, type DurationUnit } from "./Duration.js";
12
+ export declare class Interval {
13
+ #private;
14
+ private constructor();
15
+ /** Build from two `DateInput` values. Half-open: `[start, end)`. */
16
+ static fromDateTimes(start: DateInput, end: DateInput): Interval;
17
+ /** Build from a start + duration forward. */
18
+ static after(start: DateInput, duration: Duration | {
19
+ amount: number;
20
+ unit: DateUnit;
21
+ }): Interval;
22
+ get start(): DateTime;
23
+ get end(): DateTime;
24
+ /** Length in the given unit (approximate for calendar units). */
25
+ length(unit?: DurationUnit): number;
26
+ /** Duration object between start and end. */
27
+ toDuration(): Duration;
28
+ /** Does this interval contain the given instant? Half-open: `[start, end)`. */
29
+ contains(dt: DateInput): boolean;
30
+ /** Is the given instant strictly before this interval? */
31
+ isBefore(dt: DateInput): boolean;
32
+ /** Is the given instant strictly after this interval? */
33
+ isAfter(dt: DateInput): boolean;
34
+ /** Is this interval empty (zero length)? */
35
+ isEmpty(): boolean;
36
+ /** Do the two intervals share any time? */
37
+ overlaps(other: Interval): boolean;
38
+ /** Does this interval fully enclose `other`? */
39
+ engulfs(other: Interval): boolean;
40
+ /** Does `other`'s start touch this interval's end (no overlap, no gap)? */
41
+ abutsStart(other: Interval): boolean;
42
+ /** Does `other`'s end touch this interval's start? */
43
+ abutsEnd(other: Interval): boolean;
44
+ /** The overlapping sub-interval, or `null` if disjoint. */
45
+ intersection(other: Interval): Interval | null;
46
+ /** The smallest interval that covers both, or `null` if they don't overlap or abut. */
47
+ union(other: Interval): Interval | null;
48
+ /** Split this interval into N sub-intervals of roughly equal `duration` length. */
49
+ splitBy(duration: Duration | {
50
+ amount: number;
51
+ unit: DateUnit;
52
+ }): Interval[];
53
+ /** Split at specific instants. Instants outside the interval are ignored. */
54
+ splitAt(...dts: DateInput[]): Interval[];
55
+ toString(): string;
56
+ toJSON(): {
57
+ start: string;
58
+ end: string;
59
+ };
60
+ }
61
+ //# sourceMappingURL=Interval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Interval.d.ts","sourceRoot":"","sources":["../src/Interval.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,SAAS,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAE5D,qBAAa,QAAQ;;IAIpB,OAAO;IAUP,oEAAoE;IACpE,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,QAAQ;IAIhE,6CAA6C;IAC7C,MAAM,CAAC,KAAK,CACX,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,QAAQ,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,GACrD,QAAQ;IAgBX,IAAI,KAAK,IAAI,QAAQ,CAEpB;IACD,IAAI,GAAG,IAAI,QAAQ,CAElB;IAED,iEAAiE;IACjE,MAAM,CAAC,IAAI,GAAE,YAA6B,GAAG,MAAM;IAenD,6CAA6C;IAC7C,UAAU,IAAI,QAAQ;IAMtB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO;IAKhC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO;IAIhC,yDAAyD;IACzD,OAAO,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO;IAI/B,4CAA4C;IAC5C,OAAO,IAAI,OAAO;IAMlB,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAOlC,gDAAgD;IAChD,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAOjC,2EAA2E;IAC3E,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAIpC,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAIlC,2DAA2D;IAC3D,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAU9C,uFAAuF;IACvF,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAoBvC,mFAAmF;IACnF,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG,QAAQ,EAAE;IAgC5E,6EAA6E;IAC7E,OAAO,CAAC,GAAG,GAAG,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE;IAuBxC,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;CAGxC"}