@c9up/chronos 0.1.9 → 0.1.11

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 CHANGED
@@ -1,8 +1,8 @@
1
1
  # @c9up/chronos
2
2
 
3
- > Advanced date/time and recurrence engine for the Ream ecosystem (TypeScript + Rust N-API).
3
+ Dates, durations, intervals and recurrence rules for Node.js a small immutable API over a Rust N-API core.
4
4
 
5
- Part of **[Ream](https://github.com/C9up/ream)** a Rust-powered, AdonisJS-compatible Node.js framework. Independent, publishable package.
5
+ Part of **[Ream](https://github.com/C9up/ream)**, and usable on its own: chronos depends on nothing else in the ecosystem.
6
6
 
7
7
  ## Installation
8
8
 
@@ -10,18 +10,154 @@ Part of **[Ream](https://github.com/C9up/ream)** — a Rust-powered, AdonisJS-co
10
10
  pnpm add @c9up/chronos
11
11
  ```
12
12
 
13
- ## Usage
13
+ The Rust binary is required — there is no JavaScript fallback.
14
+
15
+ ## DateTime
16
+
17
+ Immutable. Every method that would change an instant returns a new one, and the
18
+ zone travels with it.
19
+
20
+ ```ts
21
+ import { DateTime, at } from '@c9up/chronos'
22
+
23
+ const d = DateTime.from('2026-06-05T14:30:00Z')
24
+
25
+ d.plus(1, 'month').toISO() // 2026-07-05T14:30:00.000Z
26
+ d.setZone('Europe/Zurich')
27
+ .toZonedISO() // 2026-06-05T16:30:00+02:00
28
+ d.format('DD/MM/YYYY HH:mm') // 05/06/2026 14:30
29
+ d.startOf('month').toISO() // 2026-06-01T00:00:00.000Z
30
+ d.diff('2026-01-01', 'day') // 155.604 (a minus b, fractional)
31
+ ```
32
+
33
+ `at()` is the same thing, shorter: `at('2026-06-05')`.
34
+
35
+ Built from whatever you have:
36
+ `from` · `now` · `fromMillis` · `fromSeconds` · `fromUnix` · `fromJSDate` ·
37
+ `fromObject` · `fromRFC2822` · `fromSQL` · `fromHTTP`.
38
+
39
+ Read out as `toISO` · `toZonedISO` · `toDate` · `toMillis` · `toSeconds` ·
40
+ `format` · `toLocaleString` · `toRelative`, compared with `equals` · `isBefore` ·
41
+ `isAfter` · `isSameDay` · `hasSame` · `isWithin`, and moved with `plus` ·
42
+ `minus` · `startOf` · `endOf` · `setZone` · `toUTC`.
43
+
44
+ ### A date that does not exist is refused
45
+
46
+ ```ts
47
+ DateTime.from('2026-02-30')
48
+ // Invalid date '2026-02-30': February 2026 has 28 days, so there is no day 30.
49
+ ```
50
+
51
+ `new Date('2026-02-30')` answers March 2nd. Those overflow semantics are right
52
+ for arithmetic and wrong for reading input, where the same slide turns a typo
53
+ into a fact. Only the *written* date is checked, so an offset that legitimately
54
+ moves the UTC day still works:
55
+
56
+ ```ts
57
+ DateTime.from('2026-08-10T23:00:00-05:00').toISO() // 2026-08-11T04:00:00.000Z
58
+ ```
59
+
60
+ Arithmetic still slides, because there the slide is the point — and it clamps
61
+ to the month rather than overflowing past it:
62
+
63
+ ```ts
64
+ DateTime.from('2026-01-31').plus(1, 'month').toISO() // 2026-02-28T00:00:00.000Z
65
+ ```
66
+
67
+ ### Calendar parts
68
+
69
+ ```ts
70
+ DateTime.from('2026-06-05').calendar
71
+ // { year: 2026, month: 6, day: 5, weekday: 5, weekNumber: 23, weekYear: 2026,
72
+ // ordinal: 156, quarter: 2, daysInMonth: 30, daysInYear: 365,
73
+ // isLeapYear: false, ... }
74
+ ```
75
+
76
+ Each is also a getter: `d.quarter`, `d.weekNumber`, `d.daysInMonth`, and so on.
77
+
78
+ ## Duration
79
+
80
+ ```ts
81
+ import { Duration } from '@c9up/chronos'
82
+
83
+ Duration.fromObject({ hours: 2, minutes: 30 }).toHuman() // 2 hours, 30 minutes
84
+ Duration.fromISO('PT90M').as('hours') // 1.5
85
+ Duration.fromObject({ minutes: 90 }).normalize().toObject()
86
+ // { years: 0, months: 0, weeks: 0, days: 0, hours: 1, minutes: 30, ... }
87
+ ```
88
+
89
+ `plus` · `minus` · `negate` · `normalize` · `shiftTo` · `as` · `get`, out as
90
+ `toISO` · `toFormat` · `toHuman` · `toObject`.
91
+
92
+ ## Interval
93
+
94
+ A half-open span, `start` included and `end` excluded.
95
+
96
+ ```ts
97
+ import { Interval, DateTime } from '@c9up/chronos'
98
+
99
+ const june = Interval.fromDateTimes(
100
+ DateTime.from('2026-06-01'),
101
+ DateTime.from('2026-07-01'),
102
+ )
103
+
104
+ june.length('days') // 30
105
+ june.contains(DateTime.from('2026-06-15')) // true
106
+ june.splitBy({ amount: 1, unit: 'week' }) // 5 intervals
107
+ ```
108
+
109
+ Set operations: `overlaps` · `engulfs` · `intersection` · `union` ·
110
+ `abutsStart` · `abutsEnd` · `splitBy` · `splitAt`.
111
+
112
+ Units are accepted singular or plural, and an unknown one is refused rather
113
+ than quietly measured in milliseconds.
114
+
115
+ ## Recurrence (RFC 5545)
116
+
117
+ ```ts
118
+ import { expandRRule, toRRuleString } from '@c9up/chronos'
119
+
120
+ expandRRule('2026-06-01T09:00:00Z', { freq: 'WEEKLY', byDay: ['MO', 'WE'], count: 4 })
121
+ // 2026-06-01T09:00:00.000Z, 2026-06-03T09:00:00.000Z,
122
+ // 2026-06-08T09:00:00.000Z, 2026-06-10T09:00:00.000Z
123
+
124
+ toRRuleString({ freq: 'MONTHLY', byMonthDay: [1, 15] })
125
+ // FREQ=MONTHLY;BYMONTHDAY=1,15
126
+ ```
127
+
128
+ A rule takes `freq` · `interval` · `wkst` · `byDay` · `byMonthDay` · `byMonth` ·
129
+ `byWeekNo` · `byYearDay` · `bySetPos` · `byHour` · `byMinute` · `bySecond`, and
130
+ ends on `count` or `until`.
131
+
132
+ ## Ranges
133
+
134
+ For the cases where a plain `{ start, end }` pair is enough:
135
+
136
+ ```ts
137
+ import { inRange, containsRange, overlapsRange, analyzeRange } from '@c9up/chronos'
138
+ ```
139
+
140
+ `analyzeRange` names the relation between two ranges rather than reducing it to
141
+ a boolean.
142
+
143
+ ## With Atlas
144
+
145
+ `@c9up/chronos/atlas` carries the adapter that hydrates a column into a
146
+ `DateTime` and prepares one for the database.
14
147
 
15
148
  ```ts
16
- import { at } from '@c9up/chronos'
149
+ import { Column } from '@c9up/atlas'
150
+ import { dateTimeAtlasAdapter } from '@c9up/chronos/atlas'
17
151
 
18
- const d = at('2026-06-05') // parse / construct a Chronos instant
152
+ class Order {
153
+ @Column({ adapter: dateTimeAtlasAdapter }) declare placedAt: DateTime
154
+ }
19
155
  ```
20
156
 
21
157
  ## Entry points
22
158
 
23
- - `@c9up/chronos` — main API
24
- - `@c9up/chronos/atlas` — Atlas integration adapter
159
+ - `@c9up/chronos` — `DateTime`, `Duration`, `Interval`, recurrence, ranges, the `Chronos` facade
160
+ - `@c9up/chronos/atlas` — the Atlas column adapter
25
161
 
26
162
  ## License
27
163
 
@@ -1 +1 @@
1
- {"version":3,"file":"DateTime.d.ts","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DateTime.d.ts","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":"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"}
package/dist/DateTime.js CHANGED
@@ -13,11 +13,83 @@
13
13
  import { nativeChronos } from "./native.js";
14
14
  import { normalizeIso } from "./utils.js";
15
15
  // ─── Internal helpers ────────────────────────────────────────
16
+ const MONTH_NAMES = [
17
+ "January",
18
+ "February",
19
+ "March",
20
+ "April",
21
+ "May",
22
+ "June",
23
+ "July",
24
+ "August",
25
+ "September",
26
+ "October",
27
+ "November",
28
+ "December",
29
+ ];
30
+ function isLeapYearOf(year) {
31
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
32
+ }
33
+ function daysPerMonthOf(year) {
34
+ return [
35
+ 31,
36
+ isLeapYearOf(year) ? 29 : 28,
37
+ 31,
38
+ 30,
39
+ 31,
40
+ 30,
41
+ 31,
42
+ 31,
43
+ 30,
44
+ 31,
45
+ 30,
46
+ 31,
47
+ ];
48
+ }
49
+ function daysInMonthOf(year, month) {
50
+ return daysPerMonthOf(year)[month - 1];
51
+ }
52
+ /**
53
+ * Refuse a calendar date that does not exist, instead of sliding to the next
54
+ * one that does.
55
+ *
56
+ * `new Date('2026-02-30')` answers 2026-03-02: the overflow semantics are right
57
+ * for arithmetic — adding a month to January 31st has to land somewhere — and
58
+ * wrong for reading input, where the same slide turns a typo into a fact. The
59
+ * inconsistency was the dangerous part: '2026-13-45' threw while '2026-02-30'
60
+ * came back as a date, so a caller wrapping this in try/catch had covered the
61
+ * loud half and left the half that writes something false to the database.
62
+ *
63
+ * `fromObject` has always refused the same input; this is that check on the
64
+ * door that was missing it. Only the written date is examined, never the
65
+ * instant it resolves to, so an offset that legitimately moves the UTC day
66
+ * ('2026-08-10T23:00:00-05:00' → the 11th) is untouched.
67
+ */
68
+ const CALENDAR_DATE = /^(\d{4})-(\d{2})-(\d{2})(?=$|[T ])/;
69
+ function assertCalendarDateExists(raw) {
70
+ const match = CALENDAR_DATE.exec(raw);
71
+ // Anything else — RFC 2822, a bare year, a basic-format string — is left to
72
+ // `Date`, which already refuses what it cannot read.
73
+ if (!match)
74
+ return;
75
+ const year = Number(match[1]);
76
+ const month = Number(match[2]);
77
+ const day = Number(match[3]);
78
+ if (month < 1 || month > 12) {
79
+ throw new Error(`Invalid date '${raw}': there is no month ${month}.`);
80
+ }
81
+ const lastDay = daysInMonthOf(year, month);
82
+ if (day < 1 || day > lastDay) {
83
+ throw new Error(`Invalid date '${raw}': ${MONTH_NAMES[month - 1]} ${year} has ${lastDay} days, so there is no day ${day}.`);
84
+ }
85
+ }
16
86
  function toIso(value) {
17
87
  if (value instanceof DateTime)
18
88
  return value.toISO();
19
89
  if (value instanceof Date)
20
90
  return normalizeIso(value.toISOString());
91
+ if (typeof value === "string")
92
+ assertCalendarDateExists(value);
21
93
  return normalizeIso(new Date(value).toISOString());
22
94
  }
23
95
  function toMs(value) {
@@ -86,21 +158,8 @@ function calendarPartsFromIso(iso) {
86
158
  const minute = Number(isoMatch[5]);
87
159
  const second = Number(isoMatch[6]);
88
160
  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
- ];
161
+ const isLeapYear = isLeapYearOf(year);
162
+ const daysPerMonth = daysPerMonthOf(year);
104
163
  const daysInMonth = daysPerMonth[month - 1];
105
164
  const daysInYear = isLeapYear ? 366 : 365;
106
165
  let ordinal = day;
@@ -1 +1 @@
1
- {"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ export declare class Interval {
28
28
  get start(): DateTime;
29
29
  get end(): DateTime;
30
30
  /** Length in the given unit (approximate for calendar units). */
31
- length(unit?: DurationUnit): number;
31
+ length(unit?: DurationUnit | DateUnit): number;
32
32
  /** Duration object between start and end. */
33
33
  toDuration(): Duration;
34
34
  /** Does this interval contain the given instant? Half-open: `[start, end)`. */
@@ -1 +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;;;;;OAKG;IACH,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"}
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;AAsC5D,qBAAa,QAAQ;;IAIpB;;;;;OAKG;IACH,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,YAAY,GAAG,QAAyB,GAAG,MAAM;IAK9D,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;IAuB5E,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"}
package/dist/Interval.js CHANGED
@@ -9,6 +9,38 @@
9
9
  */
10
10
  import { DateTime } from "./DateTime.js";
11
11
  import { Duration } from "./Duration.js";
12
+ /**
13
+ * Milliseconds in one unit, refusing a unit it does not know.
14
+ *
15
+ * Singular and plural both resolve, as they do upstream in Luxon: the rest of
16
+ * chronos spells units in the singular (`plus(1, "day")`) while durations
17
+ * spell them in the plural (`{ days: 1 }`), and a reader moving between the
18
+ * two should not have to remember which door they are at.
19
+ *
20
+ * The table used to answer `1` for anything it did not recognise, so
21
+ * `length("day")` returned 345600000 — milliseconds, presented as days — and
22
+ * `splitBy` turned an unknown unit into a one-millisecond step, which on a
23
+ * four-day interval is 345 million sub-intervals. Both were silent. An unknown
24
+ * unit is a mistake in the calling code and says so now.
25
+ */
26
+ const MS_PER_UNIT = {
27
+ year: 365.25 * 86400000,
28
+ month: 30 * 86400000,
29
+ week: 7 * 86400000,
30
+ day: 86400000,
31
+ hour: 3600000,
32
+ minute: 60000,
33
+ second: 1000,
34
+ millisecond: 1,
35
+ };
36
+ function msPerUnit(unit, caller) {
37
+ // Plural is the durations spelling; singular is the DateTime one.
38
+ const ms = MS_PER_UNIT[unit.endsWith("s") ? unit.slice(0, -1) : unit];
39
+ if (ms === undefined) {
40
+ throw new Error(`${caller}: '${unit}' is not a unit. Use one of ${Object.keys(MS_PER_UNIT).join(", ")} (plural accepted).`);
41
+ }
42
+ return ms;
43
+ }
12
44
  export class Interval {
13
45
  #start;
14
46
  #end;
@@ -51,17 +83,7 @@ export class Interval {
51
83
  /** Length in the given unit (approximate for calendar units). */
52
84
  length(unit = "milliseconds") {
53
85
  const ms = this.#end.toMillis() - this.#start.toMillis();
54
- const MS_PER = {
55
- years: 365.25 * 86400000,
56
- months: 30 * 86400000,
57
- weeks: 7 * 86400000,
58
- days: 86400000,
59
- hours: 3600000,
60
- minutes: 60000,
61
- seconds: 1000,
62
- milliseconds: 1,
63
- };
64
- return ms / (MS_PER[unit] ?? 1);
86
+ return ms / msPerUnit(unit, "Interval.length");
65
87
  }
66
88
  /** Duration object between start and end. */
67
89
  toDuration() {
@@ -124,17 +146,8 @@ export class Interval {
124
146
  // ─── Split ──────────────────────────────────────────────
125
147
  /** Split this interval into N sub-intervals of roughly equal `duration` length. */
126
148
  splitBy(duration) {
127
- const unitMs = {
128
- year: 365.25 * 86400000,
129
- month: 30 * 86400000,
130
- week: 7 * 86400000,
131
- day: 86400000,
132
- hour: 3600000,
133
- minute: 60000,
134
- second: 1000,
135
- };
136
149
  const stepMs = "amount" in duration
137
- ? duration.amount * (unitMs[duration.unit] ?? 1)
150
+ ? duration.amount * msPerUnit(duration.unit, "Interval.splitBy")
138
151
  : duration.as("milliseconds");
139
152
  if (stepMs <= 0)
140
153
  throw new Error("splitBy duration must be positive");
@@ -1 +1 @@
1
- {"version":3,"file":"Interval.js","sourceRoot":"","sources":["../src/Interval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Interval.js","sourceRoot":"","sources":["../src/Interval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export interface CalendarPartsNapi {
2
+ year: number;
3
+ month: number;
4
+ day: number;
5
+ hour: number;
6
+ minute: number;
7
+ second: number;
8
+ millisecond: number;
9
+ weekday: number;
10
+ weekNumber: number;
11
+ weekYear: number;
12
+ ordinal: number;
13
+ quarter: number;
14
+ daysInMonth: number;
15
+ daysInYear: number;
16
+ isLeapYear: boolean;
17
+ }
18
+ export interface ZonedOutputNapi {
19
+ iso: string;
20
+ offsetMinutes: number;
21
+ zoneName: string;
22
+ }
23
+ export declare function add(iso: string, amount: number, unit: string): string;
24
+ export declare function diff(aIso: string, bIso: string, unit: string): number;
25
+ export declare function startOf(iso: string, unit: string): string;
26
+ export declare function endOf(iso: string, unit: string): string;
27
+ export declare function format(iso: string, pattern: string): string;
28
+ export declare function calendarParts(iso: string): CalendarPartsNapi;
29
+ export declare function validateTimezone(zone: string): string;
30
+ export declare function toZone(utcIso: string, zone: string): ZonedOutputNapi;
31
+ export declare function addInZone(utcIso: string, amount: number, unit: string, zone: string): string;
32
+ export declare function startOfInZone(utcIso: string, unit: string, zone: string): string;
33
+ export declare function endOfInZone(utcIso: string, unit: string, zone: string): string;
34
+ export declare function diffInZone(aUtc: string, bUtc: string, unit: string, zone: string): number;
35
+ export declare function zoneOffset(utcIso: string, zone: string): number;
36
+ export declare function fromLocal(naiveIso: string, zone: string): string;
37
+ export declare function parseRfc2822(input: string): string;
38
+ export declare function parseSql(input: string): string;
39
+ export declare function parseHttp(input: string): string;
40
+ export declare function rruleExpand(startIso: string, rrule: string, limit: number): Array<string>;
41
+ //# sourceMappingURL=generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/native/generated.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;AAE/E,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;AAE/E,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;AAEnE,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;AAEjE,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;AAErE,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAC;AAEtE,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;AAE/D,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;AAE9E,MAAM,CAAC,OAAO,UAAU,SAAS,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACV,MAAM,CAAC;AAEV,MAAM,CAAC,OAAO,UAAU,aAAa,CACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACV,MAAM,CAAC;AAEV,MAAM,CAAC,OAAO,UAAU,WAAW,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACV,MAAM,CAAC;AAEV,MAAM,CAAC,OAAO,UAAU,UAAU,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACV,MAAM,CAAC;AAEV,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;AAEzE,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;AAE1E,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;AAE5D,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;AAEzD,MAAM,CAAC,OAAO,UAAU,WAAW,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACX,KAAK,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ // GENERATED FROM THE RUST — do not edit.
2
+ //
3
+ // Produced by scripts/generate-napi-types.mjs from napi-derive's type-def
4
+ // output. Editing this file by hand puts it back where it started: a
5
+ // description that can disagree with the code it describes.
6
+ export {};
7
+ //# sourceMappingURL=generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/native/generated.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,0EAA0E;AAC1E,qEAAqE;AACrE,4DAA4D"}
package/dist/native.d.ts CHANGED
@@ -5,45 +5,16 @@
5
5
  * immediately. Chronos operations (timezone, DST, RFC 5545) are too complex
6
6
  * for a pure-TS fallback.
7
7
  */
8
- export interface NativeChronos {
9
- add(iso: string, amount: number, unit: string): string;
10
- diff(aIso: string, bIso: string, unit: string): number;
11
- startOf(iso: string, unit: string): string;
12
- endOf(iso: string, unit: string): string;
13
- format(iso: string, pattern: string): string;
14
- validateTimezone(zone: string): string;
15
- toZone(utcIso: string, zone: string): {
16
- iso: string;
17
- offsetMinutes: number;
18
- zoneName: string;
19
- };
20
- addInZone(utcIso: string, amount: number, unit: string, zone: string): string;
21
- startOfInZone(utcIso: string, unit: string, zone: string): string;
22
- endOfInZone(utcIso: string, unit: string, zone: string): string;
23
- diffInZone(aUtc: string, bUtc: string, unit: string, zone: string): number;
24
- zoneOffset(utcIso: string, zone: string): number;
25
- fromLocal(naiveIso: string, zone: string): string;
26
- parseRfc2822(input: string): string;
27
- parseSql(input: string): string;
28
- parseHttp(input: string): string;
29
- rruleExpand(startIso: string, rrule: string, limit: number): string[];
30
- calendarParts(iso: string): {
31
- year: number;
32
- month: number;
33
- day: number;
34
- hour: number;
35
- minute: number;
36
- second: number;
37
- millisecond: number;
38
- weekday: number;
39
- weekNumber: number;
40
- weekYear: number;
41
- ordinal: number;
42
- quarter: number;
43
- daysInMonth: number;
44
- daysInYear: number;
45
- isLeapYear: boolean;
46
- };
47
- }
8
+ /**
9
+ * The engine's surface, as the Rust declares it.
10
+ *
11
+ * Derived from `./native/generated.js` — written by `pnpm build:napi-types`
12
+ * from napi-derive's own `type-def` output — rather than restated here, where
13
+ * nothing would notice a `pub fn` gaining a parameter or changing its return.
14
+ *
15
+ * The WASM build is held to the same shape below, so the two engines cannot
16
+ * quietly diverge either: the browser glue has to export what the Rust does.
17
+ */
18
+ export type NativeChronos = typeof import("./native/generated.js");
48
19
  export declare function nativeChronos(): NativeChronos;
49
20
  //# sourceMappingURL=native.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACvD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,MAAM,CACL,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACV;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9E,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAClE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAChE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3E,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACjD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAClD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtE,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACpB,CAAC;CACF;AAuED,wBAAgB,aAAa,IAAI,aAAa,CAW7C"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,uBAAuB,CAAC,CAAC;AAuEnE,wBAAgB,aAAa,IAAI,aAAa,CAW7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0CH,IAAI,MAAiC,CAAC;AACtC,IAAI,SAAkB,CAAC;AAEvB,MAAM,MAAM,GACX,OAAO,UAAU,CAAC,OAAO,KAAK,WAAW;IACzC,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC;AAEvD,IAAI,MAAM,EAAE,CAAC;IACZ,IAAI,CAAC;QACJ,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAExD,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAE3D,MAAM,WAAW,GAA2B;YAC3C,WAAW,EAAE,eAAe;YAC5B,aAAa,EAAE,iBAAiB;YAChC,YAAY,EAAE,YAAY;YAC1B,cAAc,EAAE,cAAc;YAC9B,WAAW,EAAE,gBAAgB;SAC7B,CAAC;QAEF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC,CAAC;QACnE,CAAC;IACF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,SAAS,GAAG,CAAC,CAAC;IACf,CAAC;AACF,CAAC;KAAM,CAAC;IACP,IAAI,CAAC;QACJ,wEAAwE;QACxE,qEAAqE;QACrE,oEAAoE;QACpE,yEAAyE;QACzE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,GAAG;YACR,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;YAC/D,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACnD,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;YAChD,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;YAC5C,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;YACnD,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YACxD,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;YAC9C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CACtC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;YAClD,aAAa,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAClC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;YACvC,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;YACtE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5C,UAAU,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC;YACtD,SAAS,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;YACxD,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAC1C,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAC5C,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CACpC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;YACvC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;SAChD,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,SAAS,GAAG,CAAC,CAAC;IACf,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACd,4EAA4E;YAC3E,kBAAkB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI;YACjD,aAAa,SAAS,IAAI,kBAAkB,IAAI;YAChD,wDAAwD;YACxD,yDAAyD,CAC1D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c9up/chronos",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "Chronos — advanced date/time and recurrence engine (TypeScript + Rust N-API)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -44,7 +44,8 @@
44
44
  "scripts": {
45
45
  "build": "tsc -p tsconfig.build.json",
46
46
  "build:rust": "cargo build --release",
47
- "build:napi": "cargo build --release && node scripts/copy-napi.mjs",
47
+ "build:napi": "cargo build --release && pnpm build:napi-types && node scripts/copy-napi.mjs",
48
+ "build:napi-types": "node scripts/build-napi-types.mjs",
48
49
  "test": "vitest run",
49
50
  "test:rust": "cargo test",
50
51
  "test:napi": "node scripts/verify-napi.mjs",
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Regenerate `src/native/generated.ts` from the Rust.
4
+ *
5
+ * Node rather than a shell script because this runs inside `build:napi`, and
6
+ * that runs on the Windows prebuild runner too: a bash `mktemp` there hands
7
+ * cargo a `/tmp/...` path the native proc-macro cannot write to, so the
8
+ * type-def file comes back empty and the build fails for no visible reason.
9
+ *
10
+ * One crate at a time on purpose: napi-derive APPENDS to `TYPE_DEF_TMP_PATH`
11
+ * while cargo compiles, and a parallel build interleaves the writes —
12
+ * definitions go missing, silently, and the generated file comes out short.
13
+ */
14
+
15
+ import { execFileSync } from 'node:child_process'
16
+ import { createRequire } from 'node:module'
17
+ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
18
+ import { tmpdir } from 'node:os'
19
+ import { dirname, join } from 'node:path'
20
+ import { fileURLToPath } from 'node:url'
21
+
22
+ const CRATES = ['chronos-engine-napi']
23
+
24
+ const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..')
25
+ const output = join('src', 'native', 'generated.ts')
26
+ const scratch = mkdtempSync(join(tmpdir(), 'napi-types-'))
27
+
28
+ try {
29
+ const lines = []
30
+ for (const crate of CRATES) {
31
+ const perCrate = join(scratch, `${crate}.jsonl`)
32
+ writeFileSync(perCrate, '')
33
+ execFileSync('cargo', ['build', '-p', crate], {
34
+ cwd: packageRoot,
35
+ env: { ...process.env, TYPE_DEF_TMP_PATH: perCrate },
36
+ stdio: ['ignore', 'ignore', 'inherit'],
37
+ })
38
+ const emitted = readFileSync(perCrate, 'utf8').split('\n').filter(Boolean)
39
+ if (emitted.length === 0) {
40
+ throw new Error(
41
+ `[napi-types] ${crate} emitted nothing — is napi-derive's "type-def" feature on?`,
42
+ )
43
+ }
44
+ lines.push(...emitted)
45
+ }
46
+
47
+ const combined = join(scratch, 'combined.jsonl')
48
+ writeFileSync(combined, `${lines.join('\n')}\n`)
49
+
50
+ execFileSync(
51
+ process.execPath,
52
+ [join('scripts', 'generate-napi-types.mjs'), combined, output],
53
+ { cwd: packageRoot, stdio: 'inherit' },
54
+ )
55
+
56
+ // Formatted here rather than excluded from the linter: the file is checked
57
+ // in, so it should read like the rest of the tree — and formatting it at
58
+ // generation means it never shows up as a diff someone has to fix by hand.
59
+ // Resolved through the package entry rather than `node_modules/.bin`, whose
60
+ // shim is a shell script the Windows runner cannot execute directly.
61
+ const biome = createRequire(import.meta.url).resolve('@biomejs/biome/bin/biome')
62
+ execFileSync(process.execPath, [biome, 'format', '--write', output], {
63
+ cwd: packageRoot,
64
+ stdio: ['ignore', 'ignore', 'inherit'],
65
+ })
66
+ } finally {
67
+ rmSync(scratch, { recursive: true, force: true })
68
+ }
@@ -0,0 +1,153 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Generate the TypeScript surface of the native module FROM the Rust.
4
+ *
5
+ * `napi-derive`'s `type-def` feature emits one JSON line per exported item
6
+ * while cargo compiles. Those lines are the source of truth: they are derived
7
+ * from the `#[napi]` items themselves, so a signature cannot drift from the
8
+ * Rust without this file changing.
9
+ *
10
+ * Hand-written interfaces are what this replaces, and they do drift — nothing
11
+ * on the TypeScript side notices when a `pub fn` gains a parameter or stops
12
+ * being `async`.
13
+ *
14
+ * One thing napi-rs cannot infer: the shape of a `JsFunction` callback. It
15
+ * emits `(...args: any[]) => any`. Any such parameter is refined below, by
16
+ * name, and the script fails if a refinement no longer matches anything — so
17
+ * the table cannot rot either.
18
+ *
19
+ * TYPE_DEF_TMP_PATH=<file> cargo build -p <crate>
20
+ * node scripts/generate-napi-types.mjs <file> <out.d.ts>
21
+ */
22
+
23
+ import { readFileSync, writeFileSync } from 'node:fs'
24
+
25
+ /**
26
+ * Callback signatures napi-rs erases to `any`, restored here.
27
+ *
28
+ * Keyed by `<owner>.<method>`; the value replaces the whole parameter. Every
29
+ * entry must match, or the script fails: a stale refinement is how a hand
30
+ * annotation quietly stops describing the Rust.
31
+ *
32
+ * Empty while this crate exposes no `JsFunction` parameter — add an entry the
33
+ * day one appears, rather than letting an `any` through.
34
+ */
35
+ const CALLBACK_REFINEMENTS = {}
36
+
37
+ const [input, output] = process.argv.slice(2)
38
+ if (!input || !output) {
39
+ console.error('usage: generate-napi-types.mjs <type-def file> <out.d.ts>')
40
+ process.exit(2)
41
+ }
42
+
43
+ const entries = readFileSync(input, 'utf8')
44
+ .split('\n')
45
+ .map((l) => l.trim())
46
+ .filter(Boolean)
47
+ .map((l) => JSON.parse(l))
48
+
49
+ const used = new Set()
50
+
51
+ /** Apply the refinements that belong to `owner`, tracking which ones matched. */
52
+ function refine(owner, body) {
53
+ let out = body
54
+ for (const [key, { from, to }] of Object.entries(CALLBACK_REFINEMENTS)) {
55
+ const [entryOwner] = key.split('.')
56
+ if (entryOwner !== owner) continue
57
+ if (out.includes(from)) {
58
+ out = out.replace(from, to)
59
+ used.add(key)
60
+ }
61
+ }
62
+ return out
63
+ }
64
+
65
+ /**
66
+ * JSDoc as emitted by napi-derive, indented to sit above its member.
67
+ *
68
+ * `*` followed by `/` inside the text closes the comment early — a Rust doc
69
+ * example holding a cron expression (`0 *​/5 * * *`) is enough to do it, and
70
+ * the generated file then fails to parse. Escaped rather than stripped, so the
71
+ * example still reads correctly.
72
+ */
73
+ function docBlock(doc, indent = '') {
74
+ if (!doc) return ''
75
+ // Escape every `*/` EXCEPT the one that closes the block. A Rust doc example
76
+ // holding a cron expression (`0 */5 * * *`) closes the comment early
77
+ // otherwise, and the generated file stops parsing — but escaping the closer
78
+ // too breaks it just as thoroughly, whether the block spans one line or many.
79
+ const closer = doc.lastIndexOf('*/')
80
+ const escaped =
81
+ closer === -1
82
+ ? doc
83
+ : doc.slice(0, closer).replaceAll('*/', '*\\/') + doc.slice(closer)
84
+ return (
85
+ escaped
86
+ .split('\n')
87
+ .filter((l) => l.length > 0)
88
+ .map((l) => `${indent}${l}`)
89
+ .join('\n') + '\n'
90
+ )
91
+ }
92
+
93
+ const interfaces = entries.filter((e) => e.kind === 'interface')
94
+ const structs = entries.filter((e) => e.kind === 'struct')
95
+ const impls = new Map(entries.filter((e) => e.kind === 'impl').map((e) => [e.name, e]))
96
+ const fns = entries.filter((e) => e.kind === 'fn')
97
+
98
+ const out = [
99
+ '// GENERATED FROM THE RUST — do not edit.',
100
+ '//',
101
+ "// Produced by scripts/generate-napi-types.mjs from napi-derive's type-def",
102
+ '// output. Editing this file by hand puts it back where it started: a',
103
+ '// description that can disagree with the code it describes.',
104
+ '',
105
+ ]
106
+
107
+ for (const iface of interfaces) {
108
+ out.push(docBlock(iface.js_doc))
109
+ out.push(`export interface ${iface.name} {`)
110
+ for (const line of iface.def.split('\n')) {
111
+ out.push(line ? ` ${line.trim()}` : '')
112
+ }
113
+ out.push('}', '')
114
+ }
115
+
116
+ for (const struct of structs) {
117
+ const impl = impls.get(struct.name)
118
+ out.push(docBlock(struct.js_doc))
119
+ out.push(`export declare class ${struct.name} {`)
120
+ if (impl) {
121
+ for (const line of refine(struct.name, impl.def).split('\n')) {
122
+ out.push(line ? ` ${line.trim()}` : '')
123
+ }
124
+ }
125
+ out.push('}', '')
126
+ }
127
+
128
+ for (const fn of fns) {
129
+ out.push(docBlock(fn.js_doc))
130
+ // napi-derive emits the whole declaration for a function, unlike a struct
131
+ // where `def` holds only the members.
132
+ const declaration = fn.def.trim()
133
+ out.push(
134
+ declaration.startsWith('export declare function')
135
+ ? `${declaration};`
136
+ : `export declare function ${fn.name}${declaration};`,
137
+ '',
138
+ )
139
+ }
140
+
141
+ const stale = Object.keys(CALLBACK_REFINEMENTS).filter((k) => !used.has(k))
142
+ if (stale.length > 0) {
143
+ console.error(
144
+ `[napi-types] refinement(s) that matched nothing: ${stale.join(', ')}\n` +
145
+ '[napi-types] the Rust changed under them — update or remove the entry.',
146
+ )
147
+ process.exit(1)
148
+ }
149
+
150
+ writeFileSync(output, out.join('\n'))
151
+ console.log(
152
+ `[napi-types] ${output} — ${interfaces.length} interface(s), ${structs.length} class(es), ${fns.length} function(s)`,
153
+ )
package/src/DateTime.ts CHANGED
@@ -67,9 +67,87 @@ export interface CalendarParts {
67
67
 
68
68
  // ─── Internal helpers ────────────────────────────────────────
69
69
 
70
+ const MONTH_NAMES = [
71
+ "January",
72
+ "February",
73
+ "March",
74
+ "April",
75
+ "May",
76
+ "June",
77
+ "July",
78
+ "August",
79
+ "September",
80
+ "October",
81
+ "November",
82
+ "December",
83
+ ];
84
+
85
+ function isLeapYearOf(year: number): boolean {
86
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
87
+ }
88
+
89
+ function daysPerMonthOf(year: number): number[] {
90
+ return [
91
+ 31,
92
+ isLeapYearOf(year) ? 29 : 28,
93
+ 31,
94
+ 30,
95
+ 31,
96
+ 30,
97
+ 31,
98
+ 31,
99
+ 30,
100
+ 31,
101
+ 30,
102
+ 31,
103
+ ];
104
+ }
105
+
106
+ function daysInMonthOf(year: number, month: number): number {
107
+ return daysPerMonthOf(year)[month - 1];
108
+ }
109
+
110
+ /**
111
+ * Refuse a calendar date that does not exist, instead of sliding to the next
112
+ * one that does.
113
+ *
114
+ * `new Date('2026-02-30')` answers 2026-03-02: the overflow semantics are right
115
+ * for arithmetic — adding a month to January 31st has to land somewhere — and
116
+ * wrong for reading input, where the same slide turns a typo into a fact. The
117
+ * inconsistency was the dangerous part: '2026-13-45' threw while '2026-02-30'
118
+ * came back as a date, so a caller wrapping this in try/catch had covered the
119
+ * loud half and left the half that writes something false to the database.
120
+ *
121
+ * `fromObject` has always refused the same input; this is that check on the
122
+ * door that was missing it. Only the written date is examined, never the
123
+ * instant it resolves to, so an offset that legitimately moves the UTC day
124
+ * ('2026-08-10T23:00:00-05:00' → the 11th) is untouched.
125
+ */
126
+ const CALENDAR_DATE = /^(\d{4})-(\d{2})-(\d{2})(?=$|[T ])/;
127
+
128
+ function assertCalendarDateExists(raw: string): void {
129
+ const match = CALENDAR_DATE.exec(raw);
130
+ // Anything else — RFC 2822, a bare year, a basic-format string — is left to
131
+ // `Date`, which already refuses what it cannot read.
132
+ if (!match) return;
133
+ const year = Number(match[1]);
134
+ const month = Number(match[2]);
135
+ const day = Number(match[3]);
136
+ if (month < 1 || month > 12) {
137
+ throw new Error(`Invalid date '${raw}': there is no month ${month}.`);
138
+ }
139
+ const lastDay = daysInMonthOf(year, month);
140
+ if (day < 1 || day > lastDay) {
141
+ throw new Error(
142
+ `Invalid date '${raw}': ${MONTH_NAMES[month - 1]} ${year} has ${lastDay} days, so there is no day ${day}.`,
143
+ );
144
+ }
145
+ }
146
+
70
147
  function toIso(value: DateInput): string {
71
148
  if (value instanceof DateTime) return value.toISO();
72
149
  if (value instanceof Date) return normalizeIso(value.toISOString());
150
+ if (typeof value === "string") assertCalendarDateExists(value);
73
151
  return normalizeIso(new Date(value).toISOString());
74
152
  }
75
153
 
@@ -143,21 +221,8 @@ function calendarPartsFromIso(iso: string): CalendarParts {
143
221
  const second = Number(isoMatch[6]);
144
222
  const millisecond =
145
223
  isoMatch[7] != null ? Math.round(Number(`0.${isoMatch[7]}`) * 1000) : 0;
146
- const isLeapYear = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
147
- const daysPerMonth = [
148
- 31,
149
- isLeapYear ? 29 : 28,
150
- 31,
151
- 30,
152
- 31,
153
- 30,
154
- 31,
155
- 31,
156
- 30,
157
- 31,
158
- 30,
159
- 31,
160
- ];
224
+ const isLeapYear = isLeapYearOf(year);
225
+ const daysPerMonth = daysPerMonthOf(year);
161
226
  const daysInMonth = daysPerMonth[month - 1];
162
227
  const daysInYear = isLeapYear ? 366 : 365;
163
228
  let ordinal = day;
package/src/Interval.ts CHANGED
@@ -10,6 +10,42 @@
10
10
  import { type DateInput, DateTime, type DateUnit } from "./DateTime.js";
11
11
  import { Duration, type DurationUnit } from "./Duration.js";
12
12
 
13
+ /**
14
+ * Milliseconds in one unit, refusing a unit it does not know.
15
+ *
16
+ * Singular and plural both resolve, as they do upstream in Luxon: the rest of
17
+ * chronos spells units in the singular (`plus(1, "day")`) while durations
18
+ * spell them in the plural (`{ days: 1 }`), and a reader moving between the
19
+ * two should not have to remember which door they are at.
20
+ *
21
+ * The table used to answer `1` for anything it did not recognise, so
22
+ * `length("day")` returned 345600000 — milliseconds, presented as days — and
23
+ * `splitBy` turned an unknown unit into a one-millisecond step, which on a
24
+ * four-day interval is 345 million sub-intervals. Both were silent. An unknown
25
+ * unit is a mistake in the calling code and says so now.
26
+ */
27
+ const MS_PER_UNIT: Record<string, number> = {
28
+ year: 365.25 * 86400000,
29
+ month: 30 * 86400000,
30
+ week: 7 * 86400000,
31
+ day: 86400000,
32
+ hour: 3600000,
33
+ minute: 60000,
34
+ second: 1000,
35
+ millisecond: 1,
36
+ };
37
+
38
+ function msPerUnit(unit: string, caller: string): number {
39
+ // Plural is the durations spelling; singular is the DateTime one.
40
+ const ms = MS_PER_UNIT[unit.endsWith("s") ? unit.slice(0, -1) : unit];
41
+ if (ms === undefined) {
42
+ throw new Error(
43
+ `${caller}: '${unit}' is not a unit. Use one of ${Object.keys(MS_PER_UNIT).join(", ")} (plural accepted).`,
44
+ );
45
+ }
46
+ return ms;
47
+ }
48
+
13
49
  export class Interval {
14
50
  readonly #start: DateTime;
15
51
  readonly #end: DateTime;
@@ -63,19 +99,9 @@ export class Interval {
63
99
  }
64
100
 
65
101
  /** Length in the given unit (approximate for calendar units). */
66
- length(unit: DurationUnit = "milliseconds"): number {
102
+ length(unit: DurationUnit | DateUnit = "milliseconds"): number {
67
103
  const ms = this.#end.toMillis() - this.#start.toMillis();
68
- const MS_PER: Record<string, number> = {
69
- years: 365.25 * 86400000,
70
- months: 30 * 86400000,
71
- weeks: 7 * 86400000,
72
- days: 86400000,
73
- hours: 3600000,
74
- minutes: 60000,
75
- seconds: 1000,
76
- milliseconds: 1,
77
- };
78
- return ms / (MS_PER[unit] ?? 1);
104
+ return ms / msPerUnit(unit, "Interval.length");
79
105
  }
80
106
 
81
107
  /** Duration object between start and end. */
@@ -168,18 +194,9 @@ export class Interval {
168
194
 
169
195
  /** Split this interval into N sub-intervals of roughly equal `duration` length. */
170
196
  splitBy(duration: Duration | { amount: number; unit: DateUnit }): Interval[] {
171
- const unitMs: Record<string, number> = {
172
- year: 365.25 * 86400000,
173
- month: 30 * 86400000,
174
- week: 7 * 86400000,
175
- day: 86400000,
176
- hour: 3600000,
177
- minute: 60000,
178
- second: 1000,
179
- };
180
197
  const stepMs =
181
198
  "amount" in duration
182
- ? duration.amount * (unitMs[duration.unit] ?? 1)
199
+ ? duration.amount * msPerUnit(duration.unit, "Interval.splitBy")
183
200
  : duration.as("milliseconds");
184
201
  if (stepMs <= 0) throw new Error("splitBy duration must be positive");
185
202
 
@@ -0,0 +1,87 @@
1
+ // GENERATED FROM THE RUST — do not edit.
2
+ //
3
+ // Produced by scripts/generate-napi-types.mjs from napi-derive's type-def
4
+ // output. Editing this file by hand puts it back where it started: a
5
+ // description that can disagree with the code it describes.
6
+
7
+ export interface CalendarPartsNapi {
8
+ year: number;
9
+ month: number;
10
+ day: number;
11
+ hour: number;
12
+ minute: number;
13
+ second: number;
14
+ millisecond: number;
15
+ weekday: number;
16
+ weekNumber: number;
17
+ weekYear: number;
18
+ ordinal: number;
19
+ quarter: number;
20
+ daysInMonth: number;
21
+ daysInYear: number;
22
+ isLeapYear: boolean;
23
+ }
24
+
25
+ export interface ZonedOutputNapi {
26
+ iso: string;
27
+ offsetMinutes: number;
28
+ zoneName: string;
29
+ }
30
+
31
+ export declare function add(iso: string, amount: number, unit: string): string;
32
+
33
+ export declare function diff(aIso: string, bIso: string, unit: string): number;
34
+
35
+ export declare function startOf(iso: string, unit: string): string;
36
+
37
+ export declare function endOf(iso: string, unit: string): string;
38
+
39
+ export declare function format(iso: string, pattern: string): string;
40
+
41
+ export declare function calendarParts(iso: string): CalendarPartsNapi;
42
+
43
+ export declare function validateTimezone(zone: string): string;
44
+
45
+ export declare function toZone(utcIso: string, zone: string): ZonedOutputNapi;
46
+
47
+ export declare function addInZone(
48
+ utcIso: string,
49
+ amount: number,
50
+ unit: string,
51
+ zone: string,
52
+ ): string;
53
+
54
+ export declare function startOfInZone(
55
+ utcIso: string,
56
+ unit: string,
57
+ zone: string,
58
+ ): string;
59
+
60
+ export declare function endOfInZone(
61
+ utcIso: string,
62
+ unit: string,
63
+ zone: string,
64
+ ): string;
65
+
66
+ export declare function diffInZone(
67
+ aUtc: string,
68
+ bUtc: string,
69
+ unit: string,
70
+ zone: string,
71
+ ): number;
72
+
73
+ export declare function zoneOffset(utcIso: string, zone: string): number;
74
+
75
+ export declare function fromLocal(naiveIso: string, zone: string): string;
76
+
77
+ export declare function parseRfc2822(input: string): string;
78
+
79
+ export declare function parseSql(input: string): string;
80
+
81
+ export declare function parseHttp(input: string): string;
82
+
83
+ export declare function rruleExpand(
84
+ startIso: string,
85
+ rrule: string,
86
+ limit: number,
87
+ ): Array<string>;
package/src/native.ts CHANGED
@@ -6,45 +6,17 @@
6
6
  * for a pure-TS fallback.
7
7
  */
8
8
 
9
- export interface NativeChronos {
10
- add(iso: string, amount: number, unit: string): string;
11
- diff(aIso: string, bIso: string, unit: string): number;
12
- startOf(iso: string, unit: string): string;
13
- endOf(iso: string, unit: string): string;
14
- format(iso: string, pattern: string): string;
15
- validateTimezone(zone: string): string;
16
- toZone(
17
- utcIso: string,
18
- zone: string,
19
- ): { iso: string; offsetMinutes: number; zoneName: string };
20
- addInZone(utcIso: string, amount: number, unit: string, zone: string): string;
21
- startOfInZone(utcIso: string, unit: string, zone: string): string;
22
- endOfInZone(utcIso: string, unit: string, zone: string): string;
23
- diffInZone(aUtc: string, bUtc: string, unit: string, zone: string): number;
24
- zoneOffset(utcIso: string, zone: string): number;
25
- fromLocal(naiveIso: string, zone: string): string;
26
- parseRfc2822(input: string): string;
27
- parseSql(input: string): string;
28
- parseHttp(input: string): string;
29
- rruleExpand(startIso: string, rrule: string, limit: number): string[];
30
- calendarParts(iso: string): {
31
- year: number;
32
- month: number;
33
- day: number;
34
- hour: number;
35
- minute: number;
36
- second: number;
37
- millisecond: number;
38
- weekday: number;
39
- weekNumber: number;
40
- weekYear: number;
41
- ordinal: number;
42
- quarter: number;
43
- daysInMonth: number;
44
- daysInYear: number;
45
- isLeapYear: boolean;
46
- };
47
- }
9
+ /**
10
+ * The engine's surface, as the Rust declares it.
11
+ *
12
+ * Derived from `./native/generated.js` — written by `pnpm build:napi-types`
13
+ * from napi-derive's own `type-def` output — rather than restated here, where
14
+ * nothing would notice a `pub fn` gaining a parameter or changing its return.
15
+ *
16
+ * The WASM build is held to the same shape below, so the two engines cannot
17
+ * quietly diverge either: the browser glue has to export what the Rust does.
18
+ */
19
+ export type NativeChronos = typeof import("./native/generated.js");
48
20
 
49
21
  let native: NativeChronos | undefined;
50
22
  let loadError: unknown;